Module: LeanMotion::Model
- Defined in:
- lib/lean_motion/model.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary
collapse
- RESERVED_KEYS =
[:objectId, :createdAt, :updatedAt]
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/lean_motion/model.rb', line 17
def method_missing(method, *args, &block)
method = method.to_sym
setter = false
if setter?(method)
setter = true
method = method.split("=")[0].to_sym
end
if RESERVED_KEYS.include?(method) && setter
return self.AVObject.send("#{method}=", args)
elsif fields.include?(method) && setter
return setField(method, args.first)
elsif RESERVED_KEYS.include?(method)
return self.AVObject.send(method)
elsif fields.include? method
return getField(method)
elsif self.AVObject.respond_to?("#{method}=")
return self.AVObject.send("#{method}=", *args, &block)
elsif self.AVObject.respond_to?(method)
return self.AVObject.send(method, *args, &block)
else
super
end
end
|
Instance Attribute Details
#AVObject ⇒ Object
Returns the value of attribute AVObject.
3
4
5
|
# File 'lib/lean_motion/model.rb', line 3
def AVObject
@AVObject
end
|
#errors ⇒ Object
Returns the value of attribute errors.
3
4
5
|
# File 'lib/lean_motion/model.rb', line 3
def errors
@errors
end
|
Class Method Details
.included(base) ⇒ Object
317
318
319
|
# File 'lib/lean_motion/model.rb', line 317
def self.included(base)
base.extend(ClassMethods)
end
|
Instance Method Details
#after_delete ⇒ Object
169
|
# File 'lib/lean_motion/model.rb', line 169
def after_delete; end
|
#after_save ⇒ Object
142
|
# File 'lib/lean_motion/model.rb', line 142
def after_save; end
|
#attributes ⇒ Hash
Returns all of the attributes of the Model
94
95
96
97
98
99
100
|
# File 'lib/lean_motion/model.rb', line 94
def attributes
attributes = {}
fields.each do |f|
attributes[f] = getField(f)
end
@attributes = attributes
end
|
#attributes=(attrs) ⇒ Hash
Note:
will throw an error if a key is invalid
Sets the attributes of the Model
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/lean_motion/model.rb', line 107
def attributes=(attrs)
attrs.each do |k, v|
if v.respond_to?(:each) && !v.is_a?(AVObject)
self.attributes = v
elsif self.respond_to? "#{k}="
self.send("#{k}=", v)
else
setField(k, v) unless k.nil?
end
end
end
|
#before_delete ⇒ Object
168
|
# File 'lib/lean_motion/model.rb', line 168
def before_delete; end
|
#before_save ⇒ Object
141
|
# File 'lib/lean_motion/model.rb', line 141
def before_save; end
|
#delete ⇒ Object
160
161
162
163
164
165
166
167
|
# File 'lib/lean_motion/model.rb', line 160
def delete
deleted = false
unless before_delete == false
deleted = @AVObject.delete
end
after_delete if deleted
deleted
end
|
#errorForField(field) ⇒ Object
195
196
197
|
# File 'lib/lean_motion/model.rb', line 195
def errorForField(field)
@errors[field] || false
end
|
#fields ⇒ Object
69
70
71
|
# File 'lib/lean_motion/model.rb', line 69
def fields
self.class.send(:get_fields)
end
|
#getField(field) ⇒ Object
74
75
76
77
78
79
|
# File 'lib/lean_motion/model.rb', line 74
def getField(field)
field = field.to_sym
return @AVObject.send(field) if RESERVED_KEYS.include?(field)
return @AVObject[field] if fields.include? field
raise "AVCloud Exception: Invalid field name #{field} for object #{self.class.to_s}"
end
|
#getter?(method) ⇒ Boolean
45
46
47
|
# File 'lib/lean_motion/model.rb', line 45
def getter?(method)
!setter?(method)
end
|
#initialize(av = nil) ⇒ Object
7
8
9
10
11
12
13
14
15
|
# File 'lib/lean_motion/model.rb', line 7
def initialize(av=nil)
if av
self.AVObject = av
else
self.AVObject = AVObject.objectWithClassName(self.class.to_s)
end
self
end
|
#invalid? ⇒ Boolean
207
208
209
|
# File 'lib/lean_motion/model.rb', line 207
def invalid?
!self.valid?
end
|
#is_valid? ⇒ Bool
Checks to see if the current Model has errors
154
155
156
157
158
|
# File 'lib/lean_motion/model.rb', line 154
def is_valid?
self.validate
return false if @errors && @errors.length > 0
true
end
|
#presenceValidationMessages ⇒ Object
177
178
179
|
# File 'lib/lean_motion/model.rb', line 177
def presenceValidationMessages
self.class.send(:get_presence_validation_messages)
end
|
#presenceValidations ⇒ Object
173
174
175
|
# File 'lib/lean_motion/model.rb', line 173
def presenceValidations
self.class.send(:get_presence_validations)
end
|
#reset_errors ⇒ Object
211
212
213
|
# File 'lib/lean_motion/model.rb', line 211
def reset_errors
@errors = nil
end
|
#respond_to?(method) ⇒ Bool
Override of ruby’s respond_to?
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/lean_motion/model.rb', line 57
def respond_to?(method)
if setter?(method)
method = method.to_s.split("=")[0]
end
method = method.to_sym unless method.is_a? Symbol
return true if fields.include?(method)
super
end
|
#save ⇒ Bool
Note:
calls before/after_save hooks
Note:
before_save MUST return true, or save will not be called on AVObject
Note:
does not save if validations fail
Save the current state of the Model to Parse
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
# File 'lib/lean_motion/model.rb', line 126
def save
saved = false
unless before_save == false
self.validate
if @errors && @errors.length > 0
saved = false
else
saved = @AVObject.save
end
after_save if saved
end
saved
end
|
#setField(field, value) ⇒ Object
81
82
83
84
85
86
87
88
89
|
# File 'lib/lean_motion/model.rb', line 81
def setField(field, value)
if RESERVED_KEYS.include?(field) || fields.include?(field.to_sym)
return @AVObject.removeObjectForKey(field.to_s) if value.nil?
return @AVObject.send("#{field}=", value) if RESERVED_KEYS.include?(field)
return @AVObject[field] = value
else
raise "AVCloud Exception: Invalid field name #{field} for object #{self.class.to_s}"
end
end
|
#setter?(method) ⇒ Boolean
49
50
51
|
# File 'lib/lean_motion/model.rb', line 49
def setter?(method)
method.to_s.include?("=")
end
|
#valid? ⇒ Boolean
203
204
205
|
# File 'lib/lean_motion/model.rb', line 203
def valid?
self.errors.nil? || self.errors.length == 0
end
|
#validate ⇒ Object
144
145
146
147
148
149
|
# File 'lib/lean_motion/model.rb', line 144
def validate
reset_errors
self.attributes.each do |field, value|
validateField field, value
end
end
|
#validateField(field, value) ⇒ Object
183
184
185
186
187
188
189
190
191
192
193
|
# File 'lib/lean_motion/model.rb', line 183
def validateField(field, value)
@errors ||= {}
if presenceValidations.include?(field) && (value.nil? || value == "")
messages = presenceValidationMessages
if messages.include?(field)
@errors[field] = messages[field]
else
@errors[field] = "#{field} can't be blank"
end
end
end
|