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:



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/ar_doc_store/storage.rb', line 26

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



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

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