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