Module: ArDocStore::Storage::ClassMethods

Defined in:
lib/ar_doc_store/storage.rb

Instance Method Summary collapse

Instance Method Details

#add_ransacker(key, predicate = nil) ⇒ Object

:nodoc:



24
25
26
27
28
29
30
31
32
33
# File 'lib/ar_doc_store/storage.rb', line 24

def add_ransacker(key, predicate = nil)
  return unless respond_to?(:ransacker)
  ransacker key do |parent|
    sql = "(#{parent.table[json_column].name}->>'#{key}')"
    if predicate.present?
      sql = "#{sql}::#{predicate}"
    end
    Arel.sql(sql)
  end
end

#json_attribute(name, *args) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/ar_doc_store/storage.rb', line 14

def json_attribute(name, *args)
  type = args.shift if args.first.is_a?(Symbol)
  options = args.extract_options!
  type ||= options.delete(:as) || :string
  class_name = ArDocStore.mappings[type] || "ArDocStore::Attributes::#{type.to_s.classify}"
  raise "Invalid attribute type: #{class_name}" unless const_defined?(class_name)
  json_attributes[name] = class_name.constantize.build self, name, options
end