ixtlan-babel 0.1.2 → 0.2.0
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/Gemfile.lock +9 -5
- data/README.md +5 -1
- data/lib/ixtlan/babel/abstract_filter.rb +26 -0
- data/lib/ixtlan/babel/abstract_filter.rb~ +111 -0
- data/lib/ixtlan/babel/config.rb~ +142 -0
- data/lib/ixtlan/babel/context.rb +43 -0
- data/lib/ixtlan/babel/context.rb~ +43 -0
- data/lib/ixtlan/babel/deserializer.rb +21 -19
- data/lib/ixtlan/babel/factory.rb +27 -12
- data/lib/ixtlan/babel/filter_config.rb +52 -0
- data/lib/ixtlan/babel/filter_config.rb~ +111 -0
- data/lib/ixtlan/babel/hash_filter.rb +17 -123
- data/lib/ixtlan/babel/hash_filter.rb- +170 -0
- data/lib/ixtlan/babel/hash_filter.rb~ +111 -0
- data/lib/ixtlan/babel/hash_only_filter.rb~ +142 -0
- data/lib/ixtlan/babel/model_filter.rb +53 -0
- data/lib/ixtlan/babel/model_filter.rb~ +170 -0
- data/lib/ixtlan/babel/no_timestamp_serializer.rb +3 -7
- data/lib/ixtlan/babel/serializer.rb +44 -20
- data/spec/hash_filter_spec.rb +99 -0
- data/spec/{filter_spec.rb → hash_filter_spec.rb~} +0 -0
- data/spec/model_filter_spec.rb +163 -0
- data/spec/model_filter_spec.rb~ +99 -0
- data/spec/model_filter_with_methods.spec.rb~ +167 -0
- data/spec/model_filter_with_methods_spec.rb +184 -0
- data/spec/model_filter_with_methods_spec.rb~ +170 -0
- metadata +82 -81
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'virtus'
|
3
|
+
|
4
|
+
class Address
|
5
|
+
include Virtus
|
6
|
+
|
7
|
+
attribute :street, String
|
8
|
+
attribute :zipcode, String
|
9
|
+
end
|
10
|
+
class Area
|
11
|
+
include Virtus
|
12
|
+
|
13
|
+
attribute :code, String
|
14
|
+
attribute :iso, String
|
15
|
+
end
|
16
|
+
class PhoneNumber
|
17
|
+
include Virtus
|
18
|
+
|
19
|
+
attribute :prefix, Integer
|
20
|
+
attribute :number, String
|
21
|
+
attribute :area, Area
|
22
|
+
end
|
23
|
+
class Person
|
24
|
+
include Virtus
|
25
|
+
|
26
|
+
attribute :id, String
|
27
|
+
attribute :name, String
|
28
|
+
attribute :address, Address
|
29
|
+
attribute :phone_numbers, Array[PhoneNumber]
|
30
|
+
end
|
31
|
+
|
32
|
+
describe Ixtlan::Babel::ModelFilter do
|
33
|
+
let( :person ) do
|
34
|
+
Person.new(
|
35
|
+
:id => 987,
|
36
|
+
:name => 'me and the corner',
|
37
|
+
:address => Address.new( :street => 'Foo 12', :zipcode => '12345' ),
|
38
|
+
:phone_numbers => [PhoneNumber.new(
|
39
|
+
:prefix => 12,
|
40
|
+
:number => '123',
|
41
|
+
:area => Area.new( :code => '001', :iso => 'us' )
|
42
|
+
)]
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
let(:serializer) { Ixtlan::Babel::Serializer.new( person ) }
|
47
|
+
let(:deserializer) { Ixtlan::Babel::Deserializer.new( Person ) }
|
48
|
+
|
49
|
+
it 'should serialize and deserialize without root' do
|
50
|
+
json = serializer.to_json
|
51
|
+
result = deserializer.from_json(json)
|
52
|
+
attributes = result.attributes.delete_if { |k,v| v.nil? }
|
53
|
+
attributes.must_equal Hash[:id => person['id'], :name => person['name']]
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should serialize and deserialize with root' do
|
57
|
+
json = serializer.to_json :root => :my
|
58
|
+
result = deserializer.from_json(json, :root => :my)
|
59
|
+
attributes = result.attributes.delete_if { |k,v| v.nil? }
|
60
|
+
attributes.must_equal Hash[:id => person['id'], :name => person['name']]
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should serialize and deserialize a hash with include list' do
|
64
|
+
json = serializer.to_json(:include => ['address', 'phone_numbers'])
|
65
|
+
result = deserializer.from_json(json, :include => ['address', 'phone_numbers'])
|
66
|
+
result.object_id.wont_equal person.object_id
|
67
|
+
result.address.attributes.must_equal person.address.attributes
|
68
|
+
result.phone_numbers[0].area.must_be_nil
|
69
|
+
person.phone_numbers[0].area = nil
|
70
|
+
result.phone_numbers[0].attributes.must_equal person.phone_numbers[0].attributes
|
71
|
+
result.name.must_equal person.name
|
72
|
+
result.id.must_equal person.id
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'shouldserialize and deserialize with except' do
|
76
|
+
json = serializer.to_json(:except => ['id'])
|
77
|
+
result = deserializer.from_json(json, :except => ['id'])
|
78
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :phone_numbers=>nil, :id => nil]
|
79
|
+
result = deserializer.from_json(json)
|
80
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :phone_numbers=>nil, :id => nil]
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should serialize and deserialize with only' do
|
84
|
+
json = serializer.to_json(:only => ['name'])
|
85
|
+
result = deserializer.from_json(json, :only => ['name'])
|
86
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :phone_numbers=>nil, :id => nil]
|
87
|
+
result = deserializer.from_json(json)
|
88
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :phone_numbers=>nil, :id => nil]
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'should serialize and deserialize with nested only' do
|
92
|
+
json = serializer.to_json(:include => { 'address' => {:only => ['street']}})
|
93
|
+
result = deserializer.from_json(json, :include => { 'address' => {:only => ['street']}})
|
94
|
+
|
95
|
+
result.phone_numbers.must_be_nil
|
96
|
+
result.phone_numbers = nil
|
97
|
+
person.phone_numbers = nil
|
98
|
+
|
99
|
+
result.address.zipcode.must_be_nil
|
100
|
+
result.address.zipcode = nil
|
101
|
+
person.address.zipcode = nil
|
102
|
+
|
103
|
+
result.name.must_equal person.name
|
104
|
+
result.id.must_equal person.id
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should serialize and deserialize with nested only (array includes)' do
|
108
|
+
json = serializer.to_json(:include => { 'address' => {:only => ['street']}})
|
109
|
+
result = deserializer.from_json(json, :include => ['address'])
|
110
|
+
|
111
|
+
result.phone_numbers.must_be_nil
|
112
|
+
result.phone_numbers = nil
|
113
|
+
person.phone_numbers = nil
|
114
|
+
|
115
|
+
result.address.zipcode.must_be_nil
|
116
|
+
result.address.zipcode = nil
|
117
|
+
person.address.zipcode = nil
|
118
|
+
|
119
|
+
result.name.must_equal person.name
|
120
|
+
result.id.must_equal person.id
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should serialize and deserialize with nested except' do
|
124
|
+
json = serializer.to_json(:include => { 'address' => {:except => ['zipcode']}})
|
125
|
+
result = deserializer.from_json(json, :include => { 'address' => {:except => ['zipcode']}})
|
126
|
+
|
127
|
+
result.phone_numbers.must_be_nil
|
128
|
+
result.phone_numbers = nil
|
129
|
+
person.phone_numbers = nil
|
130
|
+
|
131
|
+
result.address.zipcode.must_be_nil
|
132
|
+
result.address.zipcode = nil
|
133
|
+
person.address.zipcode = nil
|
134
|
+
|
135
|
+
result.name.must_equal person.name
|
136
|
+
result.id.must_equal person.id
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'should serialize and deserialize with nested except (array includes)' do
|
140
|
+
json = serializer.to_json(:include => { 'address' => {:except => ['zipcode']}})
|
141
|
+
result = deserializer.from_json(json, :include => ['address'])
|
142
|
+
|
143
|
+
result.phone_numbers.must_be_nil
|
144
|
+
result.phone_numbers = nil
|
145
|
+
person.phone_numbers = nil
|
146
|
+
|
147
|
+
result.address.zipcode.must_be_nil
|
148
|
+
result.address.zipcode = nil
|
149
|
+
person.address.zipcode = nil
|
150
|
+
|
151
|
+
result.name.must_equal person.name
|
152
|
+
result.id.must_equal person.id
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should serialize and deserialize with nested include' do
|
156
|
+
json = serializer.to_json(:include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}})
|
157
|
+
result = deserializer.from_json(json, :include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}})
|
158
|
+
|
159
|
+
result.object_id.wont_equal person.object_id
|
160
|
+
result.address.attributes.must_equal person.address.attributes
|
161
|
+
result.phone_numbers[0].area.attributes.must_equal person.phone_numbers[0].area.attributes
|
162
|
+
result.phone_numbers[0].prefix.must_equal person.phone_numbers[0].prefix
|
163
|
+
result.phone_numbers[0].number.must_equal person.phone_numbers[0].number
|
164
|
+
result.name.must_equal person.name
|
165
|
+
result.id.must_equal person.id
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'virtus'
|
3
|
+
|
4
|
+
class Address2
|
5
|
+
include Virtus
|
6
|
+
|
7
|
+
attribute :street, String
|
8
|
+
attribute :zipcode, String
|
9
|
+
end
|
10
|
+
class Area2
|
11
|
+
include Virtus
|
12
|
+
|
13
|
+
attribute :code, String
|
14
|
+
attribute :iso, String
|
15
|
+
end
|
16
|
+
class PhoneNumber2
|
17
|
+
include Virtus
|
18
|
+
|
19
|
+
attribute :prefix, Integer
|
20
|
+
attribute :number, String
|
21
|
+
attribute :area, Area2
|
22
|
+
end
|
23
|
+
class Person2
|
24
|
+
include Virtus
|
25
|
+
|
26
|
+
attribute :id, String
|
27
|
+
attribute :name, String
|
28
|
+
attribute :address, Address2
|
29
|
+
|
30
|
+
attr_accessor :phone_numbers, :age, :children_names
|
31
|
+
|
32
|
+
def phone_numbers
|
33
|
+
@phone_numbers ||= [PhoneNumber2.new(
|
34
|
+
:prefix => 12,
|
35
|
+
:number => '123',
|
36
|
+
:area => Area2.new( :code => '001', :iso => 'us' ) )]
|
37
|
+
end
|
38
|
+
|
39
|
+
def age
|
40
|
+
@age ||= 123
|
41
|
+
end
|
42
|
+
|
43
|
+
def children_names
|
44
|
+
@children_names ||= ['anna', 'jack', 'rama', 'mia']
|
45
|
+
end
|
46
|
+
|
47
|
+
def children_ages
|
48
|
+
@children_ages ||= [12, 3, 6, 9]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe Ixtlan::Babel::ModelFilter.to_s + ':with_methods' do
|
53
|
+
let( :person ) do
|
54
|
+
Person2.new( :id => 987,
|
55
|
+
:name => 'me and the corner',
|
56
|
+
:address => Address2.new( :street => 'Foo 12', :zipcode => '12345' ) )
|
57
|
+
end
|
58
|
+
|
59
|
+
let(:serializer) { Ixtlan::Babel::Serializer.new( person ) }
|
60
|
+
let(:deserializer) { Ixtlan::Babel::Deserializer.new( Person2 ) }
|
61
|
+
|
62
|
+
it 'should serialize and deserialize with methods' do
|
63
|
+
json = serializer.to_json(:include => [:age, :children_names, :children_ages])
|
64
|
+
data = JSON.parse(json)
|
65
|
+
data['age'].must_equal 123
|
66
|
+
data['children_names'].must_equal ['anna', 'jack', 'rama', 'mia']
|
67
|
+
data['children_ages'].must_equal [12, 3, 6, 9]
|
68
|
+
result = deserializer.from_json(json)
|
69
|
+
attributes = result.attributes.delete_if { |k,v| v.nil? }
|
70
|
+
attributes.must_equal Hash[:id => person['id'], :name => person['name']]
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should serialize and deserialize without root' do
|
74
|
+
json = serializer.to_json
|
75
|
+
result = deserializer.from_json(json)
|
76
|
+
attributes = result.attributes.delete_if { |k,v| v.nil? }
|
77
|
+
attributes.must_equal Hash[:id => person['id'], :name => person['name']]
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should serialize and deserialize with root' do
|
81
|
+
json = serializer.to_json :root => 'my'
|
82
|
+
result = deserializer.from_json(json, :root => 'my')
|
83
|
+
attributes = result.attributes.delete_if { |k,v| v.nil? }
|
84
|
+
attributes.must_equal Hash[:id => person['id'], :name => person['name']]
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should serialize and deserialize a hash with include list' do
|
88
|
+
json = serializer.to_json(:include => ['address', 'phone_numbers'])
|
89
|
+
data = JSON.parse(json)
|
90
|
+
data['phone_numbers'][0]['prefix'].must_equal 12
|
91
|
+
data['phone_numbers'][0]['number'].must_equal '123'
|
92
|
+
result = deserializer.from_json(json, :include => ['address', 'phone_numbers'])
|
93
|
+
result.object_id.wont_equal person.object_id
|
94
|
+
result.address.attributes.must_equal person.address.attributes
|
95
|
+
result.phone_numbers[0].area.must_be_nil
|
96
|
+
person.phone_numbers[0].area = nil
|
97
|
+
result.phone_numbers[0].prefix.must_equal person.phone_numbers[0].prefix
|
98
|
+
result.phone_numbers[0].number.must_equal person.phone_numbers[0].number
|
99
|
+
result.name.must_equal person.name
|
100
|
+
result.id.must_equal person.id
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'shouldserialize and deserialize with except' do
|
104
|
+
json = serializer.to_json(:except => ['id'])
|
105
|
+
result = deserializer.from_json(json, :except => ['id'])
|
106
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :id => nil]
|
107
|
+
result = deserializer.from_json(json)
|
108
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :id => nil]
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should serialize and deserialize with only' do
|
112
|
+
json = serializer.to_json(:only => ['name'])
|
113
|
+
result = deserializer.from_json(json, :only => ['name'])
|
114
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :id => nil]
|
115
|
+
result = deserializer.from_json(json)
|
116
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :id => nil]
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should serialize and deserialize with nested only' do
|
120
|
+
json = serializer.to_json(:include => { 'address' => {:only => ['street']}})
|
121
|
+
result = deserializer.from_json(json, :include => { 'address' => {:only => ['street']}})
|
122
|
+
|
123
|
+
json['phone_numbers'].must_be_nil
|
124
|
+
json['address']['zipcode'].must_be_nil
|
125
|
+
|
126
|
+
result.address.zipcode.must_be_nil
|
127
|
+
|
128
|
+
result.name.must_equal person.name
|
129
|
+
result.id.must_equal person.id
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'should serialize and deserialize with nested only (array includes)' do
|
133
|
+
json = serializer.to_json(:include => { 'address' => {:only => ['street']}})
|
134
|
+
result = deserializer.from_json(json, :include => ['address'])
|
135
|
+
|
136
|
+
json['phone_numbers'].must_be_nil
|
137
|
+
json['address']['zipcode'].must_be_nil
|
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 except' do
|
146
|
+
json = serializer.to_json(:include => { 'address' => {:except => ['zipcode']}})
|
147
|
+
result = deserializer.from_json(json, :include => { 'address' => {:except => ['zipcode']}})
|
148
|
+
|
149
|
+
json['phone_numbers'].must_be_nil
|
150
|
+
json['address']['zipcode'].must_be_nil
|
151
|
+
|
152
|
+
result.address.zipcode.must_be_nil
|
153
|
+
|
154
|
+
result.name.must_equal person.name
|
155
|
+
result.id.must_equal person.id
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'should serialize and deserialize with nested except (array includes)' do
|
159
|
+
json = serializer.to_json(:include => { 'address' => {:except => ['zipcode']}})
|
160
|
+
result = deserializer.from_json(json, :include => ['address'])
|
161
|
+
|
162
|
+
json['phone_numbers'].must_be_nil
|
163
|
+
json['address']['zipcode'].must_be_nil
|
164
|
+
|
165
|
+
result.address.zipcode.must_be_nil
|
166
|
+
|
167
|
+
result.name.must_equal person.name
|
168
|
+
result.id.must_equal person.id
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'should serialize and deserialize with nested include' do
|
172
|
+
json = serializer.to_json(:include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}})
|
173
|
+
result = deserializer.from_json(json, :include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}})
|
174
|
+
|
175
|
+
result.object_id.wont_equal person.object_id
|
176
|
+
result.address.attributes.must_equal person.address.attributes
|
177
|
+
result.phone_numbers[0].area.code.must_equal person.phone_numbers[0].area.code
|
178
|
+
result.phone_numbers[0].area.iso.must_equal person.phone_numbers[0].area.iso
|
179
|
+
result.phone_numbers[0].prefix.must_equal person.phone_numbers[0].prefix
|
180
|
+
result.phone_numbers[0].number.must_equal person.phone_numbers[0].number
|
181
|
+
result.name.must_equal person.name
|
182
|
+
result.id.must_equal person.id
|
183
|
+
end
|
184
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'virtus'
|
3
|
+
|
4
|
+
class Address
|
5
|
+
include Virtus
|
6
|
+
|
7
|
+
attribute :street, String
|
8
|
+
attribute :zipcode, String
|
9
|
+
end
|
10
|
+
class Area
|
11
|
+
include Virtus
|
12
|
+
|
13
|
+
attribute :code, String
|
14
|
+
attribute :iso, String
|
15
|
+
end
|
16
|
+
class PhoneNumber
|
17
|
+
include Virtus
|
18
|
+
|
19
|
+
attribute :prefix, Integer
|
20
|
+
attribute :number, String
|
21
|
+
attribute :area, Area
|
22
|
+
end
|
23
|
+
class Person
|
24
|
+
include Virtus
|
25
|
+
|
26
|
+
attribute :id, String
|
27
|
+
attribute :name, String
|
28
|
+
attribute :address, Address
|
29
|
+
|
30
|
+
def phone_numbers
|
31
|
+
[PhoneNumber.new(
|
32
|
+
:prefix => 12,
|
33
|
+
:number => '123',
|
34
|
+
:area => Area.new( :code => '001', :iso => 'us' )]
|
35
|
+
end
|
36
|
+
|
37
|
+
def age
|
38
|
+
123
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe Ixtlan::Babel::ModelFilter + ':with_methods' do
|
43
|
+
let( :person ) do
|
44
|
+
Person.new( :id => 987,
|
45
|
+
:name => 'me and the corner',
|
46
|
+
:address => Address.new( :street => 'Foo 12', :zipcode => '12345' ) )
|
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
|
+
attributes = result.attributes.delete_if { |k,v| v.nil? }
|
56
|
+
attributes.must_equal Hash[:id => person['id'], :name => person['name']]
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should serialize and deserialize with root' do
|
60
|
+
json = serializer.to_json :root => :my
|
61
|
+
result = deserializer.from_json(json, :root => :my)
|
62
|
+
attributes = result.attributes.delete_if { |k,v| v.nil? }
|
63
|
+
attributes.must_equal Hash[:id => person['id'], :name => person['name']]
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should serialize and deserialize a hash with include list' do
|
67
|
+
json = serializer.to_json(:include => ['address', 'phone_numbers'])
|
68
|
+
result = deserializer.from_json(json, :include => ['address', 'phone_numbers'])
|
69
|
+
result.object_id.wont_equal person.object_id
|
70
|
+
result.address.attributes.must_equal person.address.attributes
|
71
|
+
result.phone_numbers[0].area.must_be_nil
|
72
|
+
person.phone_numbers[0].area = nil
|
73
|
+
result.phone_numbers[0].attributes.must_equal person.phone_numbers[0].attributes
|
74
|
+
result.name.must_equal person.name
|
75
|
+
result.id.must_equal person.id
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'shouldserialize and deserialize with except' do
|
79
|
+
json = serializer.to_json(:except => ['id'])
|
80
|
+
result = deserializer.from_json(json, :except => ['id'])
|
81
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :phone_numbers=>nil, :id => nil]
|
82
|
+
result = deserializer.from_json(json)
|
83
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :phone_numbers=>nil, :id => nil]
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should serialize and deserialize with only' do
|
87
|
+
json = serializer.to_json(:only => ['name'])
|
88
|
+
result = deserializer.from_json(json, :only => ['name'])
|
89
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :phone_numbers=>nil, :id => nil]
|
90
|
+
result = deserializer.from_json(json)
|
91
|
+
result.attributes.must_equal Hash[:name => person['name'], :address=>nil, :phone_numbers=>nil, :id => nil]
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should serialize and deserialize with nested only' do
|
95
|
+
json = serializer.to_json(:include => { 'address' => {:only => ['street']}})
|
96
|
+
result = deserializer.from_json(json, :include => { 'address' => {:only => ['street']}})
|
97
|
+
|
98
|
+
result.phone_numbers.must_be_nil
|
99
|
+
result.phone_numbers = nil
|
100
|
+
person.phone_numbers = nil
|
101
|
+
|
102
|
+
result.address.zipcode.must_be_nil
|
103
|
+
result.address.zipcode = nil
|
104
|
+
person.address.zipcode = nil
|
105
|
+
|
106
|
+
result.name.must_equal person.name
|
107
|
+
result.id.must_equal person.id
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should serialize and deserialize with nested only (array includes)' do
|
111
|
+
json = serializer.to_json(:include => { 'address' => {:only => ['street']}})
|
112
|
+
result = deserializer.from_json(json, :include => ['address'])
|
113
|
+
|
114
|
+
result.phone_numbers.must_be_nil
|
115
|
+
result.phone_numbers = nil
|
116
|
+
person.phone_numbers = nil
|
117
|
+
|
118
|
+
result.address.zipcode.must_be_nil
|
119
|
+
result.address.zipcode = nil
|
120
|
+
person.address.zipcode = nil
|
121
|
+
|
122
|
+
result.name.must_equal person.name
|
123
|
+
result.id.must_equal person.id
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'should serialize and deserialize with nested except' do
|
127
|
+
json = serializer.to_json(:include => { 'address' => {:except => ['zipcode']}})
|
128
|
+
result = deserializer.from_json(json, :include => { 'address' => {:except => ['zipcode']}})
|
129
|
+
|
130
|
+
result.phone_numbers.must_be_nil
|
131
|
+
result.phone_numbers = nil
|
132
|
+
person.phone_numbers = nil
|
133
|
+
|
134
|
+
result.address.zipcode.must_be_nil
|
135
|
+
result.address.zipcode = nil
|
136
|
+
person.address.zipcode = nil
|
137
|
+
|
138
|
+
result.name.must_equal person.name
|
139
|
+
result.id.must_equal person.id
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'should serialize and deserialize with nested except (array includes)' do
|
143
|
+
json = serializer.to_json(:include => { 'address' => {:except => ['zipcode']}})
|
144
|
+
result = deserializer.from_json(json, :include => ['address'])
|
145
|
+
|
146
|
+
result.phone_numbers.must_be_nil
|
147
|
+
result.phone_numbers = nil
|
148
|
+
person.phone_numbers = nil
|
149
|
+
|
150
|
+
result.address.zipcode.must_be_nil
|
151
|
+
result.address.zipcode = nil
|
152
|
+
person.address.zipcode = nil
|
153
|
+
|
154
|
+
result.name.must_equal person.name
|
155
|
+
result.id.must_equal person.id
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'should serialize and deserialize with nested include' do
|
159
|
+
json = serializer.to_json(:include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}})
|
160
|
+
result = deserializer.from_json(json, :include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}})
|
161
|
+
|
162
|
+
result.object_id.wont_equal person.object_id
|
163
|
+
result.address.attributes.must_equal person.address.attributes
|
164
|
+
result.phone_numbers[0].area.attributes.must_equal person.phone_numbers[0].area.attributes
|
165
|
+
result.phone_numbers[0].prefix.must_equal person.phone_numbers[0].prefix
|
166
|
+
result.phone_numbers[0].number.must_equal person.phone_numbers[0].number
|
167
|
+
result.name.must_equal person.name
|
168
|
+
result.id.must_equal person.id
|
169
|
+
end
|
170
|
+
end
|