Module: DataMapper::Is::Schemaless::InstanceMethods
- Defined in:
- lib/dm-is-schemaless/is/schemaless.rb
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_symbol, *args) ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/dm-is-schemaless/is/schemaless.rb', line 82
def method_missing(method_symbol, *args)
method_name = method_symbol.to_s
if %w(? =).include?(method_name[-1,1])
method = method_name[0..-2]
operator = method_name[-1,1]
if operator == '='
set_value(method, args.first)
elsif operator == '?'
!body[method].blank?
end
else
body[method_name]
end
end
|
Instance Method Details
#initialize(args = {}) ⇒ Object
77
78
79
80
|
# File 'lib/dm-is-schemaless/is/schemaless.rb', line 77
def initialize(args = {})
super({})
self.body = args
end
|
#set_value(method, val) ⇒ Object
97
98
99
100
101
102
103
|
# File 'lib/dm-is-schemaless/is/schemaless.rb', line 97
def set_value(method, val)
if val.blank?
body.delete(method)
else
body[method] = val
end
end
|
#update_indexes ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'lib/dm-is-schemaless/is/schemaless.rb', line 105
def update_indexes
self.class.indexes.each do |field, index|
field = field.to_s
assoc = if send(index.assoc_name).blank?
self.send(:"#{index.assoc_name}=", index.model.new)
else
self.send(index.assoc_name)
end
if body.key?(field)
assoc[field] = body[field]
elsif assoc && assoc.destroy
self.send(:"#{index.assoc_name}=", nil)
end
end
end
|