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.
data/lib/ixtlan/babel/context.rb
CHANGED
@@ -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 =
|
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
|
data/spec/model_filter_spec.rb
CHANGED
@@ -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 =
|
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 =
|
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.
|
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-
|
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
|
data/spec/#model_filter_spec.rb#
DELETED
@@ -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
|