class Marsdawn::Storage::ActiveRecord
Public Class Methods
new(config, opts={})
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 9 def initialize config, opts={} unless Module.const_defined?('ActiveRecord') raise "Gem 'active_record' should be installed to use ActiveRecord storage for MarsDawn." unless require 'active_record' end #require 'marsdawn/storage/active_record/marsdawn' @opts = { key: '-', lang: 'en', version: '0.0.1' }.merge(opts) end
Public Instance Methods
clean_up()
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 44 def clean_up @stack = {} end
finalize()
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 26 def finalize MarsdawnDocs.transaction do MarsdawnDocs.where(selector).each do |page| MarsdawnDocs.delete_all(selector(uri: page.uri)) unless @stack.key?(page.uri) end @stack.each do |uri, data| rec = MarsdawnDocs.where(selector(uri: uri)) if rec.size > 0 rec.first.update_attributes! data: compress(data) else MarsdawnDocs.create selector(uri: uri, data: compress(data)) end end end rescue => e raise e end
get(uri)
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 60 def get uri data = get_data(uri) Marsdawn::Util.hash_symbolize_keys_deep(data) unless data.nil? end
get_document_info()
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 56 def get_document_info Marsdawn::Util.hash_symbolize_keys(get_data('doc_info')) end
prepare()
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 21 def prepare #Marsdawn.create_unless_exists @stack = {} end
set(uri, content, front_matter, sysinfo)
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 52 def set uri, content, front_matter, sysinfo @stack[uri] = {content: content, front_matter: front_matter, sysinfo: sysinfo} end
set_document_info(doc_info)
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 48 def set_document_info doc_info @stack['doc_info'] = doc_info end
Private Instance Methods
compress(data)
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 66 def compress data Zlib::Deflate.deflate(JSON.generate(data)) end
decompress(data)
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 70 def decompress data JSON.parse(Zlib::Inflate.inflate(data)) end
get_data(uri)
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 74 def get_data uri page = MarsdawnDocs.where(selector(uri: uri)).first decompress(page.data) unless page.nil? end
selector(additional={})
click to toggle source
# File lib/marsdawn/storage/active_record.rb, line 79 def selector additional={} {key: @opts[:key], lang: @opts[:lang], version: @opts[:version]}.merge(additional) end