22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/contentful_model/associations/belongs_to_many.rb', line 22
def belongs_to_many(association_names, opts = {})
default_options = {
class_name: association_names.to_s.singularize.classify,
inverse_of: self.to_s.underscore.to_sym
}
options = default_options.merge(opts)
if self.respond_to?(association_names)
self.send(association_names)
else
define_method "#{association_names}" do
parents = instance_variable_get(:"@#{association_names}")
if parents.nil?
parent_objects = options[:class_name].constantize.send(:all).send(:load)
parents = parent_objects.select do |parent_object|
if parent_object.respond_to?(:"#{options[:inverse_of].to_s.pluralize}")
collection_of_children_on_parent = parent_object.send(:"#{options[:inverse_of].to_s.pluralize}")
if collection_of_children_on_parent.nil?
next
else
collection_of_children_on_parent.collect(&:id).include?(id)
end
else
child_on_parent = parent_object.send(:"#{options[:inverse_of]}")
if child_on_parent.nil?
next
else
child_on_parent.send(:id) == id
end
end
end
instance_variable_set(:"@#{association_names}",parents)
end
parents
end
end
end
|