ixtlan-babel 0.3.2 → 0.3.3

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.
@@ -47,7 +47,7 @@ module Ixtlan
47
47
  end
48
48
 
49
49
  def include?( key )
50
- @include.include? key
50
+ @include.include?( key ) || @methods.include?( key )
51
51
  end
52
52
 
53
53
  def array?
@@ -60,4 +60,4 @@ module Ixtlan
60
60
 
61
61
  end
62
62
  end
63
- end
63
+ end
@@ -18,6 +18,7 @@
18
18
  # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
19
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  #
21
+ require 'multi_json'
21
22
  module Ixtlan
22
23
  module Babel
23
24
  class Deserializer
@@ -74,7 +75,7 @@ module Ixtlan
74
75
  end
75
76
 
76
77
  def from_json(json, options = nil)
77
- data = JSON.parse(json)
78
+ data = MultiJson.load(json)
78
79
  from_hash(data, options)
79
80
  end
80
81
 
@@ -84,4 +85,4 @@ module Ixtlan
84
85
  end
85
86
  end
86
87
  end
87
- end
88
+ end
@@ -18,6 +18,7 @@
18
18
  # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
19
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  #
21
+ require 'multi_json'
21
22
  require 'ixtlan/babel/hash_filter'
22
23
  require 'ixtlan/babel/model_filter'
23
24
  require 'ixtlan/babel/filter_config'
@@ -156,4 +157,4 @@ module Ixtlan
156
157
  end
157
158
  end
158
159
  end
159
- end
160
+ end
@@ -85,10 +85,11 @@ describe Ixtlan::Babel::ModelFilter do
85
85
  json = serializer.to_json(:except => ['id'])
86
86
  result = deserializer.from_json(json, :except => ['id'])
87
87
 
88
- expected = Hash[:name => person['name'], :address=>nil, :phone_numbers=>[], :id => nil]
88
+ expected = Hash[:name => person['name'], :address=>nil, :phone_numbers=>[], :id => nil, :children_names => []]
89
89
 
90
90
  # travis sees empty array and locally it is nil :(
91
91
  result.phone_numbers ||= []
92
+ result.children_names ||= []
92
93
 
93
94
  result.attributes.keys.dup.each do |k|
94
95
  result.attributes[ k ].must_equal expected[ k ]
@@ -98,6 +99,7 @@ describe Ixtlan::Babel::ModelFilter do
98
99
 
99
100
  # travis sees empty array and locally it is nil :(
100
101
  result.phone_numbers ||= []
102
+ result.children_names ||= []
101
103
 
102
104
  result.attributes.keys.dup.each do |k|
103
105
  result.attributes[ k ].must_equal expected[ k ]
@@ -110,8 +112,9 @@ describe Ixtlan::Babel::ModelFilter do
110
112
 
111
113
  # travis sees empty array and locally it is nil :(
112
114
  result.phone_numbers ||= []
115
+ result.children_names ||= []
113
116
 
114
- expected = Hash[:name => person['name'], :address=>nil, :phone_numbers=>[], :id => nil]
117
+ expected = Hash[:name => person['name'], :address=>nil, :phone_numbers=>[], :id => nil, :children_names => []]
115
118
  result.attributes.keys.dup.each do |k|
116
119
  result.attributes[ k ].must_equal expected[ k ]
117
120
  end
@@ -120,6 +123,8 @@ describe Ixtlan::Babel::ModelFilter do
120
123
 
121
124
  # travis sees empty array and locally it is nil :(
122
125
  result.phone_numbers ||= []
126
+ result.children_names ||= []
127
+
123
128
  result.attributes.keys.dup.each do |k|
124
129
  result.attributes[ k ].must_equal expected[ k ]
125
130
  end
@@ -61,7 +61,7 @@ describe Ixtlan::Babel::ModelFilter.to_s + ':with_methods' do
61
61
 
62
62
  it 'should serialize and deserialize with methods' do
63
63
  json = serializer.to_json(:include => [:age, :children_names, :children_ages])
64
- data = JSON.parse(json)
64
+ data = MultiJson.load(json)
65
65
  data['age'].must_equal 123
66
66
  data['children_names'].must_equal ['anna', 'jack', 'rama', 'mia']
67
67
  data['children_ages'].must_equal [12, 3, 6, 9]
@@ -86,7 +86,7 @@ describe Ixtlan::Babel::ModelFilter.to_s + ':with_methods' do
86
86
 
87
87
  it 'should serialize and deserialize a hash with include list' do
88
88
  json = serializer.to_json(:include => ['address', 'phone_numbers'])
89
- data = JSON.parse(json)
89
+ data = MultiJson.load(json)
90
90
  data['phone_numbers'][0]['prefix'].must_equal 12
91
91
  data['phone_numbers'][0]['number'].must_equal '123'
92
92
  result = deserializer.from_json(json, :include => ['address', 'phone_numbers'])
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: ixtlan-babel
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.2
5
+ version: 0.3.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Christian Meier
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-19 00:00:00.000000000 Z
12
+ date: 2013-02-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -75,6 +75,22 @@ dependencies:
75
75
  none: false
76
76
  prerelease: false
77
77
  type: :development
78
+ - !ruby/object:Gem::Dependency
79
+ name: multi_json
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '1.6'
85
+ none: false
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.6'
91
+ none: false
92
+ prerelease: false
93
+ type: :development
78
94
  - !ruby/object:Gem::Dependency
79
95
  name: json
80
96
  version_requirements: !ruby/object:Gem::Requirement
@@ -127,7 +143,6 @@ files:
127
143
  - spec/hash_filter_spec.rb~
128
144
  - spec/spec_helper.rb
129
145
  - spec/model_filter_with_methods_spec.rb
130
- - spec/#model_filter_spec.rb#
131
146
  - spec/params_filter_spec.rb~
132
147
  - MIT-LICENSE
133
148
  - README.md
@@ -1,211 +0,0 @@
1
- require 'spec_helper'
2
- require 'virtus'
3
- require 'ixtlan/babel/deserializer'
4
-
5
- class Address
6
- include Virtus
7
-
8
- attribute :street, String
9
- attribute :zipcode, String
10
- end
11
- class Area
12
- include Virtus
13
-
14
- attribute :code, String
15
- attribute :iso, String
16
- end
17
- class PhoneNumber
18
- include Virtus
19
-
20
- attribute :prefix, Integer
21
- attribute :number, String
22
- attribute :area, Area
23
- end
24
- class Person
25
- include Virtus
26
-
27
- attribute :id, String
28
- attribute :name, String
29
- attribute :address, Address
30
- attribute :phone_numbers, Array[PhoneNumber]
31
- attribute :children_names, Array[Symbol]
32
- end
33
-
34
- describe Ixtlan::Babel::ModelFilter do
35
- let( :person ) do
36
- Person.new(
37
- :id => 987,
38
- :name => 'me and the corner',
39
- :address => Address.new( :street => 'Foo 12', :zipcode => '12345' ),
40
- :phone_numbers => [PhoneNumber.new(
41
- :prefix => 12,
42
- :number => '123',
43
- :area => Area.new( :code => '001', :iso => 'us' )
44
- )],
45
- # # :children_names => [:adi, :aromal, :shreedev]
46
- # # )
47
- # # end
48
-
49
- # # let(:serializer) { Ixtlan::Babel::Serializer.new( person ) }
50
- # # let(:deserializer) { Ixtlan::Babel::Deserializer.new( Person ) }
51
-
52
- # # it 'should serialize and deserialize without root' do
53
- # # json = serializer.to_json
54
- # # result = deserializer.from_json(json)
55
-
56
- # # # travis produces [] and locally there is a nil - filter empty as well :(
57
-
58
- attributes = result.attributes.delete_if { |k,v| v.nil? || v.empty? }
59
-
60
- attributes.must_equal Hash[:id => person['id'], :name => person['name']]
61
- end
62
-
63
- it 'should serialize and deserialize with root' do
64
- json = serializer.to_json :root => 'my'
65
- result = deserializer.from_json(json, :root => 'my')
66
-
67
- # travis produces [] and locally there is a nil - filter empty as well :(
68
- attributes = result.attributes.delete_if { |k,v| v.nil? || v.empty? }
69
-
70
- attributes.must_equal Hash[:id => person['id'], :name => person['name']]
71
- end
72
-
73
- it 'should serialize and deserialize a hash with include list' do
74
- json = serializer.to_json(:include => ['address', 'phone_numbers'])
75
- result = deserializer.from_json(json, :include => ['address', 'phone_numbers'])
76
- result.object_id.wont_equal person.object_id
77
- result.address.attributes.must_equal person.address.attributes
78
- result.phone_numbers[0].area.must_be_nil
79
- person.phone_numbers[0].area = nil
80
- result.phone_numbers[0].attributes.must_equal person.phone_numbers[0].attributes
81
- result.name.must_equal person.name
82
- result.id.must_equal person.id
83
- end
84
-
85
- it 'should serialize and deserialize with except' do
86
- json = serializer.to_json(:except => ['id'])
87
- result = deserializer.from_json(json, :except => ['id'])
88
-
89
- expected = Hash[:name => person['name'], :address=>nil, :phone_numbers=>[], :id => nil]
90
-
91
- # travis sees empty array and locally it is nil :(
92
- result.phone_numbers ||= []
93
-
94
- result.attributes.keys.dup.each do |k|
95
- result.attributes[ k ].must_equal expected[ k ]
96
- end
97
-
98
- result = deserializer.from_json(json)
99
-
100
- # travis sees empty array and locally it is nil :(
101
- result.phone_numbers ||= []
102
-
103
- result.attributes.keys.dup.each do |k|
104
- result.attributes[ k ].must_equal expected[ k ]
105
- end
106
- end
107
-
108
- it 'should serialize and deserialize with only' do
109
- json = serializer.to_json(:only => ['name'])
110
- result = deserializer.from_json(json, :only => ['name'])
111
-
112
- # travis sees empty array and locally it is nil :(
113
- result.phone_numbers ||= []
114
-
115
- expected = Hash[:name => person['name'], :address=>nil, :phone_numbers=>[], :id => nil]
116
- result.attributes.keys.dup.each do |k|
117
- result.attributes[ k ].must_equal expected[ k ]
118
- end
119
-
120
- result = deserializer.from_json(json)
121
-
122
- # travis sees empty array and locally it is nil :(
123
- result.phone_numbers ||= []
124
- result.attributes.keys.dup.each do |k|
125
- result.attributes[ k ].must_equal expected[ k ]
126
- end
127
- end
128
-
129
- it 'should serialize and deserialize with nested only' do
130
- json = serializer.to_json(:include => { 'address' => {:only => ['street']}})
131
- result = deserializer.from_json(json, :include => { 'address' => {:only => ['street']}})
132
-
133
- json['phone_numbers'].must_be_nil
134
- json['address']['zipcode'].must_be_nil
135
-
136
- # travis produces [] and locally there is a nil :(
137
- (result.phone_numbers || []).must_equal []
138
-
139
- result.address.zipcode.must_be_nil
140
-
141
- result.name.must_equal person.name
142
- result.id.must_equal person.id
143
- end
144
-
145
- it 'should serialize and deserialize with nested only (array includes)' do
146
- json = serializer.to_json(:include => { 'address' => {:only => ['street']}})
147
- result = deserializer.from_json(json, :include => ['address'])
148
-
149
- json['phone_numbers'].must_be_nil
150
- json['address']['zipcode'].must_be_nil
151
-
152
- # travis produces [] and locally there is a nil :(
153
- (result.phone_numbers || []).must_equal []
154
-
155
- result.address.zipcode.must_be_nil
156
-
157
- result.name.must_equal person.name
158
- result.id.must_equal person.id
159
- end
160
-
161
- it 'should serialize and deserialize with nested except' do
162
- json = serializer.to_json(:include => { 'address' => {:except => ['zipcode']}})
163
- result = deserializer.from_json(json, :include => { 'address' => {:except => ['zipcode']}})
164
-
165
- json['phone_numbers'].must_be_nil
166
- json['address']['zipcode'].must_be_nil
167
-
168
- # travis produces [] and locally there is a nil :(
169
- (result.phone_numbers || []).must_equal []
170
-
171
- result.address.zipcode.must_be_nil
172
-
173
- result.name.must_equal person.name
174
- result.id.must_equal person.id
175
- end
176
-
177
- it 'should serialize and deserialize with nested except (array includes)' do
178
- json = serializer.to_json(:include => { 'address' => {:except => ['zipcode']}})
179
- result = deserializer.from_json(json, :include => ['address'])
180
-
181
- json['phone_numbers'].must_be_nil
182
- json['address']['zipcode'].must_be_nil
183
-
184
- # travis produces [] and locally there is a nil :(
185
- (result.phone_numbers || []).must_equal []
186
-
187
- result.address.zipcode.must_be_nil
188
-
189
- result.name.must_equal person.name
190
- result.id.must_equal person.id
191
- end
192
-
193
- it 'should serialize and deserialize with nested include' do
194
- json = serializer.to_json(:include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}})
195
- result = deserializer.from_json(json, :include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}})
196
-
197
- result.object_id.wont_equal person.object_id
198
- result.address.attributes.must_equal person.address.attributes
199
- result.phone_numbers[0].area.attributes.must_equal person.phone_numbers[0].area.attributes
200
- result.phone_numbers[0].prefix.must_equal person.phone_numbers[0].prefix
201
- result.phone_numbers[0].number.must_equal person.phone_numbers[0].number
202
- result.name.must_equal person.name
203
- result.id.must_equal person.id
204
- end
205
-
206
- it 'should convert elements from arrays wth custom serializer' do
207
- serializer.add_custom_serializers( "Symbol" => Proc.new {|v| v.to_s.capitalize } )
208
- data = serializer.to_hash(:include => [ :children_names ])
209
- data[ "children_names"].must_equal( ["Adi", "Aromal", "Shreedev"] )
210
- end
211
- end