ixtlan-babel 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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