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.
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
|