Module: LogicPro::ActiveRecordTypes

Included in:
Types
Defined in:
lib/logic_pro/active_record_types.rb

Instance Method Summary collapse

Instance Method Details

#define_types(classes) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/logic_pro/active_record_types.rb', line 3

def define_types(classes)
  classes.each do |active_record_class_name|
    active_record_class = "::#{active_record_class_name}".constantize
    type_class_name = active_record_class.to_s.gsub('::', '_')

    record_constructor = Constructor(active_record_class) do |entity|
      if entity.blank? || entity.class.name == active_record_class.name
        entity
      else
        raise "Invalid collection type #{collection.class} for #{active_record_class.name}"
      end
    end

    collection_constructor = Constructor(active_record_class.none.class) do |collection|
      if collection.respond_to?(:model) && collection.model.name == active_record_class.name
        collection
      else
        raise "Invalid collection type #{collection.class} for #{active_record_class.name}"
      end
    end

    const_set(type_class_name, record_constructor.meta(class_name: active_record_class.name))

    const_set("#{type_class_name}Collection", collection_constructor.meta(class_name: active_record_class.none.class))
  end
end