ares-ext 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock
CHANGED
@@ -17,12 +17,12 @@ module ActiveResourceExtensions
|
|
17
17
|
schema[name.to_s]
|
18
18
|
end
|
19
19
|
|
20
|
-
protected
|
21
|
-
|
22
20
|
def schema
|
23
21
|
@schema ||= remote_schema
|
24
22
|
end
|
25
23
|
|
24
|
+
protected
|
25
|
+
|
26
26
|
def schema= new_schema
|
27
27
|
@schema = new_schema
|
28
28
|
end
|
@@ -34,6 +34,35 @@ module ActiveResourceExtensions
|
|
34
34
|
end
|
35
35
|
|
36
36
|
module InstanceMethods
|
37
|
+
|
38
|
+
# Update attributes of record before saving the record
|
39
|
+
#
|
40
|
+
# @param attributes [Hash] Hash of record's attributes.
|
41
|
+
#
|
42
|
+
# @return [Boolean] Result of save.
|
43
|
+
def update_attributes( attributes )
|
44
|
+
attributes.each_pair do |attribute_name, value|
|
45
|
+
raise ArgumentError, "#{attribute_name.inspect} is not declared in schema." unless self.class.is_attribute?( attribute_name )
|
46
|
+
@attributes[attribute_name.to_s] = value
|
47
|
+
end
|
48
|
+
save
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
# Automatically add attributes that are referenced in the schema but are not passed as parameters.
|
53
|
+
#
|
54
|
+
# @param attributes [Hash] Hash of record's attributes.
|
55
|
+
#
|
56
|
+
# @return [Object] self.
|
57
|
+
def load attributes
|
58
|
+
super attributes
|
59
|
+
for attribute_name in self.class.schema.keys
|
60
|
+
@attributes[attribute_name.to_s] = nil unless @attributes.has_key?(attribute_name.to_s)
|
61
|
+
end
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
65
|
+
# @todo Declare method instead of always relying on method_missing.
|
37
66
|
def method_missing name, *args, &block
|
38
67
|
if self.class.is_attribute? name
|
39
68
|
value = attributes[name.to_s]
|
@@ -89,6 +89,34 @@ describe ActiveResourceExtensions::ResourceWithSchema do
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
+
describe '.initialize' do
|
93
|
+
|
94
|
+
before do
|
95
|
+
@schema = {
|
96
|
+
'name' => 'String',
|
97
|
+
'age' => 'Integer',
|
98
|
+
'created_at' => 'Time',
|
99
|
+
'birth_date' => 'Date',
|
100
|
+
'is_musician' => 'Boolean',
|
101
|
+
'height' => 'Float',
|
102
|
+
'unknown_1' => 'Company',
|
103
|
+
'unknown_2' => '',
|
104
|
+
'company_id' => 'ObjectId'
|
105
|
+
}
|
106
|
+
Person.send( :schema=, @schema )
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should load schema automatically" do
|
110
|
+
Person.send :schema=, nil
|
111
|
+
Person.should_receive( :remote_schema ).and_return @schema
|
112
|
+
Person.new.respond_to?( :age ).should be_true
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should add missing attributes" do
|
116
|
+
Person.new.respond_to?( :age ).should be_true
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
92
120
|
describe '.method_missing' do
|
93
121
|
|
94
122
|
before do
|
@@ -179,4 +207,50 @@ describe ActiveResourceExtensions::ResourceWithSchema do
|
|
179
207
|
|
180
208
|
end
|
181
209
|
|
210
|
+
describe '#update_attributes' do
|
211
|
+
|
212
|
+
before do
|
213
|
+
@schema = {
|
214
|
+
'name' => 'String',
|
215
|
+
'age' => 'Integer',
|
216
|
+
'created_at' => 'Time',
|
217
|
+
'birth_date' => 'Date',
|
218
|
+
'is_musician' => 'Boolean',
|
219
|
+
'height' => 'Float',
|
220
|
+
'unknown_1' => 'Company',
|
221
|
+
'unknown_2' => '',
|
222
|
+
'company_id' => 'ObjectId'
|
223
|
+
}
|
224
|
+
Person.send( :schema=, @schema )
|
225
|
+
|
226
|
+
@person = Person.new :name => 'John'
|
227
|
+
end
|
228
|
+
|
229
|
+
it "should reject attributes unknown to schema" do
|
230
|
+
lambda do
|
231
|
+
@person.update_attributes :foobar => 3
|
232
|
+
end.should raise_error ArgumentError
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should return result of #save" do
|
236
|
+
@person.should_receive( :save ).and_return true
|
237
|
+
@person.update_attributes({}).should be_true
|
238
|
+
|
239
|
+
@person.should_receive( :save ).and_return false
|
240
|
+
@person.update_attributes({}).should be_false
|
241
|
+
end
|
242
|
+
|
243
|
+
it "should update attributes" do
|
244
|
+
@person.should_receive( :save ).and_return true
|
245
|
+
@person.update_attributes :name => 'Robert'
|
246
|
+
@person.name.should == 'Robert'
|
247
|
+
end
|
248
|
+
|
249
|
+
it "should leave other attributes untouched" do
|
250
|
+
@person.should_receive( :save ).and_return true
|
251
|
+
@person.update_attributes :age => 19
|
252
|
+
@person.name.should == 'John'
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
182
256
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ares-ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Benoit Dinocourt
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-06-
|
18
|
+
date: 2012-06-25 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|