arrest 0.0.53 → 0.0.54

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/lib/arrest.rb CHANGED
@@ -7,6 +7,7 @@ require "arrest/attributes/belongs_to"
7
7
  require "arrest/attributes/has_attributes"
8
8
  require "arrest/attributes/attribute"
9
9
  require "arrest/attributes/nested_attribute"
10
+ require "arrest/attributes/nested_collection"
10
11
  require "arrest/attributes/belongs_to_attribute"
11
12
  require "arrest/attributes/has_many_attribute"
12
13
  require "arrest/attributes/has_many_sub_resource_attribute"
@@ -10,6 +10,11 @@ module Arrest
10
10
 
11
11
  def from_hash(parent, value)
12
12
  return if value == nil
13
+
14
+ if @clazz.respond_to?(:convert)
15
+ return @clazz.convert(value)
16
+ end
17
+
13
18
  converter = CONVERTER[@clazz]
14
19
  if converter == nil
15
20
  puts "No converter for: #{@clazz.name}"
@@ -18,8 +23,14 @@ module Arrest
18
23
  converter.convert value
19
24
  end
20
25
 
26
+
21
27
  def to_hash value
22
28
  return nil unless value != nil
29
+
30
+ if @clazz.respond_to?(:mk_json)
31
+ return @clazz.mk_json(value)
32
+ end
33
+
23
34
  converter = CONVERTER[@clazz]
24
35
  if converter == nil
25
36
  puts "No converter for: #{@clazz.name}"
@@ -4,27 +4,6 @@ end
4
4
 
5
5
  module Arrest
6
6
 
7
- class NestedCollection < Attribute
8
- def initialize name, read_only, clazz
9
- super name, read_only, clazz
10
- end
11
-
12
- def from_hash(parent, value)
13
- return nil unless value != nil
14
- raise "Expected an array but got #{value.class.name}" unless value.is_a?(Array)
15
- value.map do |v|
16
- @clazz.new(parent, v)
17
- end
18
- end
19
-
20
- def to_hash value
21
- return nil unless value != nil
22
- raise "Expected an array but got #{value.class.name}" unless value.is_a?(Array)
23
- value.map(&:to_hash)
24
- end
25
-
26
- end
27
-
28
7
  CONVERTER = {}
29
8
 
30
9
  def add_converter key, converter
@@ -53,7 +32,7 @@ module Arrest
53
32
  end
54
33
  end
55
34
  end
56
-
35
+
57
36
  class IdentConv < Converter
58
37
  def self.convert value
59
38
  value
@@ -76,7 +55,6 @@ module Arrest
76
55
  target Array
77
56
  end
78
57
 
79
-
80
58
  class TimeConv < Converter
81
59
  target Time
82
60
 
@@ -148,8 +148,11 @@ module Arrest
148
148
  end
149
149
  else
150
150
  send :define_method, "#{attribute.name}=" do |v|
151
- Arrest::debug "setter #{self.class.name} #{attribute.name} = #{v}"
152
- self.attribute_values[attribute.name] = v
151
+ converted_v = convert(attribute, v)
152
+ Arrest::debug "setter #{self.class.name} #{attribute.name} = #{converted_v}"
153
+ self.attribute_values[attribute.name] = converted_v
154
+ #Arrest::debug "setter #{self.class.name} #{attribute.name} = #{v}"
155
+ #self.attribute_values[attribute.name] = v
153
156
  end
154
157
  end
155
158
 
@@ -174,7 +177,7 @@ module Arrest
174
177
 
175
178
  def nested_array name, clazz, options = {}
176
179
  read_only = !!options[:read_only]
177
- add_attribute NestedCollection.new(name, read_only, clazz)
180
+ add_attribute Arrest::NestedCollection.new(name, read_only, clazz)
178
181
  end
179
182
  end
180
183
 
@@ -182,5 +185,22 @@ module Arrest
182
185
  @stubbed
183
186
  end
184
187
 
188
+ private
189
+ # attribute setter checks for proper conversion of v into attribute type
190
+ def convert(attribute, v)
191
+ clazz = attribute.clazz
192
+ # either as it is already the correct (||nested_array) type
193
+ if v == nil || v.is_a?(clazz) || (attribute.is_a?(Arrest::NestedCollection) && v.is_a?(Array))
194
+ converted_v = v
195
+ elsif clazz.respond_to?(:convert) # or its clazz implements a convert method
196
+ converted_v = clazz.convert(v)
197
+ elsif CONVERTER[clazz] # or a converter has been registered in arrest
198
+ converted_v = CONVERTER[clazz].convert(v)
199
+ else # otherwise raise
200
+ raise ArgumentError, "Setting of attribute with type >#{clazz}< with value type >#{v.class}< failed."
201
+ end
202
+ converted_v
203
+ end
204
+
185
205
  end
186
- end
206
+ end
@@ -0,0 +1,22 @@
1
+ module Arrest
2
+
3
+ class NestedCollection < Attribute
4
+ def initialize name, read_only, clazz
5
+ super name, read_only, clazz
6
+ end
7
+
8
+ def from_hash(parent, value)
9
+ return nil unless value != nil
10
+ raise "Expected an array but got #{value.class.name}" unless value.is_a?(Array)
11
+ value.map do |v|
12
+ @clazz.new(parent, v)
13
+ end
14
+ end
15
+
16
+ def to_hash value
17
+ return nil unless value != nil
18
+ raise "Expected an array but got #{value.class.name}" unless value.is_a?(Array)
19
+ value.map(&:to_hash)
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module Arrest
2
- VERSION = "0.0.53"
2
+ VERSION = "0.0.54"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arrest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.53
4
+ version: 0.0.54
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-21 00:00:00.000000000Z
12
+ date: 2012-05-31 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &12566020 !ruby/object:Gem::Requirement
16
+ requirement: &16399200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *12566020
24
+ version_requirements: *16399200
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: faraday
27
- requirement: &12564860 !ruby/object:Gem::Requirement
27
+ requirement: &16398660 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.7.5
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *12564860
35
+ version_requirements: *16398660
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activemodel
38
- requirement: &12525060 !ruby/object:Gem::Requirement
38
+ requirement: &16398100 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *12525060
46
+ version_requirements: *16398100
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &12524260 !ruby/object:Gem::Requirement
49
+ requirement: &16397580 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.0.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *12524260
57
+ version_requirements: *16397580
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &12523360 !ruby/object:Gem::Requirement
60
+ requirement: &16397140 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *12523360
68
+ version_requirements: *16397140
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdoc
71
- requirement: &12521560 !ruby/object:Gem::Requirement
71
+ requirement: &16396640 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *12521560
79
+ version_requirements: *16396640
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &12519220 !ruby/object:Gem::Requirement
82
+ requirement: &16393140 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '2'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *12519220
90
+ version_requirements: *16393140
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rr
93
- requirement: &12495320 !ruby/object:Gem::Requirement
93
+ requirement: &16392620 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *12495320
101
+ version_requirements: *16392620
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: simplecov
104
- requirement: &12494260 !ruby/object:Gem::Requirement
104
+ requirement: &16391800 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *12494260
112
+ version_requirements: *16391800
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rack
115
- requirement: &12492320 !ruby/object:Gem::Requirement
115
+ requirement: &16390520 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *12492320
123
+ version_requirements: *16390520
124
124
  description: Consume a rest API in a AR like fashion
125
125
  email:
126
126
  - axel.tetzlaff@fortytools.com
@@ -144,6 +144,7 @@ files:
144
144
  - lib/arrest/attributes/has_many_attribute.rb
145
145
  - lib/arrest/attributes/has_many_sub_resource_attribute.rb
146
146
  - lib/arrest/attributes/nested_attribute.rb
147
+ - lib/arrest/attributes/nested_collection.rb
147
148
  - lib/arrest/attributes/polymorphic_attribute.rb
148
149
  - lib/arrest/class_utils.rb
149
150
  - lib/arrest/exceptions.rb