Module: HasManyWithSet::Accessors

Defined in:
lib/has-many-with-set/accessors.rb

Class Method Summary collapse

Class Method Details

.build_getter_method(instance_var_name, loader_method_name) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/has-many-with-set/accessors.rb', line 17

def self.build_getter_method(instance_var_name, loader_method_name)
  Proc.new do
    unless instance_variable_defined?(instance_var_name)
      values = send(loader_method_name.to_sym)
      instance_variable_set(instance_var_name, values)
    end

    instance_variable_get(instance_var_name)
  end
end

.build_loader_method(child_table_name, set_table_name) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/has-many-with-set/accessors.rb', line 3

def self.build_loader_method(child_table_name, set_table_name)
  set_table_id = "#{ set_table_name.singularize }_id".to_sym
  set_table_name_singular = set_table_name.singularize.to_sym

  Proc.new do
    values = []

    values = send(set_table_name_singular).send(child_table_name).to_a unless
      send(set_table_id).nil?

    values
  end
end

.build_parent_loader_method(parent_table_name, child_table_name, set_table_name, set_items_table_name) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/has-many-with-set/accessors.rb', line 46

def self.build_parent_loader_method(parent_table_name, child_table_name, set_table_name, set_items_table_name)
  find_query = Queries.build_find_parents_query(parent_table_name, child_table_name, set_table_name, set_items_table_name)

  parent_klass = Object.const_get(parent_table_name.classify)

  Proc.new {
    values = []
    values = parent_klass.find_by_sql([ find_query, self ]).to_a
    values
  }
end

.build_setter_method(instance_var_name) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/has-many-with-set/accessors.rb', line 28

def self.build_setter_method(instance_var_name)
  Proc.new do |elements|
    elements = [] if elements.nil?

    unless elements.is_a? Array
      if elements.respond_to?(:is_a)
        elements = elements.to_a
      else
        elements = [ elements ]
      end
    end

    elements = elements.flatten.uniq

    instance_variable_set(instance_var_name, elements)
  end
end