ixtlan-babel 0.3.5 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,7 +11,7 @@ class Area2
11
11
  include Virtus
12
12
 
13
13
  attribute :code, String
14
- attribute :iso, String
14
+ attribute :iso, String
15
15
  end
16
16
  class PhoneNumber2
17
17
  include Virtus
@@ -30,12 +30,12 @@ class Person2
30
30
  attr_accessor :phone_numbers, :age, :children_names
31
31
 
32
32
  def phone_numbers
33
- @phone_numbers ||= [PhoneNumber2.new(
34
- :prefix => 12,
33
+ @phone_numbers ||= [PhoneNumber2.new(
34
+ :prefix => 12,
35
35
  :number => '123',
36
36
  :area => Area2.new( :code => '001', :iso => 'us' ) )]
37
37
  end
38
-
38
+
39
39
  def age
40
40
  @age ||= 123
41
41
  end
@@ -53,132 +53,99 @@ describe Ixtlan::Babel::ModelFilter.to_s + ':with_methods' do
53
53
  let( :person ) do
54
54
  Person2.new( :id => 987,
55
55
  :name => 'me and the corner',
56
- :address => Address2.new( :street => 'Foo 12', :zipcode => '12345' ) )
56
+ :address => Address2.new( :street => 'Foo 12',
57
+ :zipcode => '12345' ) )
57
58
  end
58
59
 
59
60
  let(:serializer) { Ixtlan::Babel::Serializer.new( person ) }
60
- let(:deserializer) { Ixtlan::Babel::Deserializer.new( Person2 ) }
61
61
 
62
62
  it 'should serialize and deserialize with methods' do
63
- json = serializer.to_json(:include => [:age, :children_names, :children_ages])
64
- data = MultiJson.load(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']]
63
+ json = serializer.to_json( :include =>
64
+ [:age, :children_names, :children_ages])
65
+ result = MultiJson.load(json)
66
+ result.must_equal Hash[ "id"=>"987",
67
+ "name"=>"me and the corner",
68
+ "age"=>123,
69
+ "children_names"=> [ "anna",
70
+ "jack",
71
+ "rama",
72
+ "mia" ],
73
+ "children_ages"=>[ 12, 3, 6, 9 ] ]
71
74
  end
72
75
 
73
76
  it 'should serialize and deserialize without root' do
74
77
  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
+ result = MultiJson.load(json)
79
+ result.must_equal Hash[ "id"=>"987", "name"=>"me and the corner" ]
78
80
  end
79
81
 
80
82
  it 'should serialize and deserialize with root' do
81
83
  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
84
+ result = MultiJson.load(json)[ 'my' ]
85
+ result.must_equal Hash[ "id"=>"987", "name"=>"me and the corner" ]
86
+ end
86
87
 
87
88
  it 'should serialize and deserialize a hash with include list' do
88
- json = serializer.to_json(:include => ['address', 'phone_numbers'])
89
- data = MultiJson.load(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
89
+ json = serializer.to_json(:include => ['address', 'phone_numbers'])
90
+ result = MultiJson.load(json)
91
+ result.must_equal Hash[ "id"=>"987", "name"=>"me and the corner" ,
92
+ "address"=> {
93
+ "street"=>"Foo 12",
94
+ "zipcode"=>"12345"
95
+ },
96
+ "phone_numbers"=> [ { "prefix"=>12,
97
+ "number"=>"123" } ] ]
101
98
  end
102
99
 
103
100
  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]
101
+ json = serializer.to_json(:except => ['id'])
102
+ result = MultiJson.load(json)
103
+ result.must_equal Hash[ "name"=>"me and the corner" ]
109
104
  end
110
105
 
111
106
  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]
107
+ json = serializer.to_json(:only => ['name'])
108
+ result = MultiJson.load(json)
109
+ result.must_equal Hash[ "name"=>"me and the corner" ]
117
110
  end
118
111
 
119
112
  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
113
+ json = serializer.to_json(:include => { 'address' => {
114
+ :only => ['street'] } } )
115
+ result = MultiJson.load(json)
116
+ result.must_equal Hash[ "id"=>"987", "name"=>"me and the corner" ,
117
+ "address"=> {
118
+ "street"=>"Foo 12"
119
+ } ]
143
120
  end
144
121
 
145
122
  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
123
+ json = serializer.to_json(:include => {
124
+ 'address' => {:except => ['zipcode'] } } )
125
+ result = MultiJson.load(json)
126
+ result.must_equal Hash[ "id"=>"987", "name"=>"me and the corner" ,
127
+ "address"=> {
128
+ "street"=>"Foo 12"
129
+ } ]
169
130
  end
170
131
 
171
132
  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
133
+ json = serializer.to_json(:include => {
134
+ 'address' => {},
135
+ 'phone_numbers' => { :include => ['area'] }
136
+ } )
137
+ result = MultiJson.load(json)
138
+ result.must_equal Hash[ "id"=>"987", "name"=>"me and the corner" ,
139
+ "address"=> {
140
+ "street"=>"Foo 12",
141
+ "zipcode"=>"12345"
142
+ },
143
+ "phone_numbers"=> [ { "prefix"=>12,
144
+ "number"=>"123",
145
+ "area"=> {
146
+ "code"=>"001",
147
+ "iso"=>"us"
148
+ }
149
+ } ] ]
183
150
  end
184
151
  end
@@ -21,8 +21,8 @@ describe Ixtlan::Babel::ParamsFilter do
21
21
  'id' => 987,
22
22
  'name' => 'me and the corner',
23
23
  'address' => { 'street' => 'Foo 12', 'zipcode' => '12345' },
24
- 'phone_numbers' => {
25
- 'prefix' => 12,
24
+ 'phone_numbers' => {
25
+ 'prefix' => 12,
26
26
  'number' => '123',
27
27
  'area' => { 'code' => '001', 'iso' => 'us'}
28
28
  }
@@ -34,74 +34,80 @@ describe Ixtlan::Babel::ParamsFilter do
34
34
  let(:deserializer) { Ixtlan::Babel::Deserializer.new(Hash) }
35
35
 
36
36
  it 'should filter a hash' do
37
- json = filter.filter_it( data )
38
- json[0].must_equal Hash[ 'id' => data['id'], 'name' => data['name'] ]
39
- json[1].must_equal Hash[]
37
+ result = filter.filter_it( data )
38
+ result.params.must_equal Hash[ 'id' => data['id'], 'name' => data['name'] ]
39
+ result.size.must_equal 1
40
40
  end
41
41
 
42
42
  it 'should filter a hash with keep' do
43
- json = filter.use( :keep => ['id'] ).filter_it( data )
44
- json[0].must_equal Hash[ 'name' => data['name'] ]
45
- json[1].must_equal Hash[ 'id' => data['id'] ]
43
+ result = filter.use( :keep => ['id'] ).filter_it( data )
44
+ result.params.must_equal Hash[ 'name' => data['name'] ]
45
+ result[ 'id' ].must_equal data['id']
46
+ result.size.must_equal 2
46
47
  end
47
48
 
48
49
  it 'should filter a hash with root' do
49
- json = filter.use( :root => 'my' ).filter_it( 'my' => data )
50
- json[0].must_equal Hash[ 'id' => data['id'], 'name' => data['name'] ]
51
- json[1].must_equal Hash[]
52
- end
50
+ result = filter.use( :root => 'my' ).filter_it( 'my' => data )
51
+ result.params.must_equal Hash[ 'id' => data['id'], 'name' => data['name'] ]
52
+ result.size.must_equal 1
53
+ end
53
54
 
54
55
  it 'should filter a hash with include list' do
55
- json = filter.use( :include => ['address', 'phone_numbers'] ).filter_it( data )
56
+ result = filter.use( :include => ['address',
57
+ 'phone_numbers'] ).filter_it( data )
56
58
 
57
59
  data['phone_numbers'].delete('area')
58
- json[0].must_equal Hash[data]
59
- json[1].must_equal Hash[]
60
+ result.params.must_equal Hash[data]
61
+ result.size.must_equal 1
60
62
  end
61
63
 
62
64
  it 'should filter a hash with except' do
63
- json = filter.use( :except => ['id'] ).filter_it( data )
64
- json[0].must_equal Hash['name' => data['name']]
65
- json[1].must_equal Hash[]
65
+ result = filter.use( :except => ['id'] ).filter_it( data )
66
+ result.params.must_equal Hash['name' => data['name']]
67
+ result.size.must_equal 1
66
68
  end
67
69
 
68
70
  it 'should filter a hash with except and keep' do
69
- json = filter.use( :except => ['id'], :keep => ['id'] ).filter_it( data )
70
- json[0].must_equal Hash['name' => data['name']]
71
- json[1].must_equal Hash['id' => data['id']]
71
+ result = filter.use( :except => ['id'], :keep => ['id'] ).filter_it( data )
72
+ result.params.must_equal Hash['name' => data['name']]
73
+ result['id'].must_equal data['id']
72
74
  end
73
75
 
74
76
  it 'should filter a hash with only' do
75
- json = filter.use( :only => ['name'] ).filter_it( data )
76
- json[0].must_equal Hash['name' => data['name']]
77
- json[1].must_equal Hash[]
77
+ result = filter.use( :only => ['name'] ).filter_it( data )
78
+ result.params.must_equal Hash['name' => data['name']]
79
+ result.size.must_equal 1
78
80
  end
79
81
 
80
82
  it 'should filter a hash with only and keep' do
81
- json = filter.use( :only => ['name'], :keep => ['id'] ).filter_it( data )
82
- json[0].must_equal Hash['name' => data['name']]
83
- json[1].must_equal Hash['id' => data['id']]
83
+ result = filter.use( :only => ['name'], :keep => ['id'] ).filter_it( data )
84
+ result.params.must_equal Hash['name' => data['name']]
85
+ result[ 'id' ].must_equal data['id']
86
+ result.size.must_equal 2
84
87
  end
85
88
 
86
89
  it 'should filter a hash with nested only' do
87
- json = filter.use( :include => { 'address' => {:only => ['street']}} ).filter_it( data )
90
+ result = filter.use( :include => { 'address' =>
91
+ {:only => ['street']}} ).filter_it( data )
88
92
  data.delete('phone_numbers')
89
93
  data['address'].delete('zipcode')
90
- json[0].must_equal Hash[data]
91
- json[1].must_equal Hash[]
94
+ result.params.must_equal Hash[data]
95
+ result.size.must_equal 1
92
96
  end
93
97
 
94
98
  it 'should filter a hash with nested except' do
95
- json = filter.use( :include => { 'address' => {:except => ['zipcode']}} ).filter_it( data )
99
+ result = filter.use( :include => { 'address' =>
100
+ {:except => ['zipcode']}} ).filter_it( data )
96
101
  data.delete('phone_numbers')
97
102
  data['address'].delete('zipcode')
98
- json[0].must_equal Hash[data]
99
- json[1].must_equal Hash[]
103
+ result.params.must_equal Hash[data]
104
+ result.size.must_equal 1
100
105
  end
101
106
 
102
107
  it 'should filter a hash with nested include' do
103
- json = filter.use( :include => { 'address' => {}, 'phone_numbers' => { :include => ['area']}} ).filter_it( data )
104
- json[0].must_equal Hash[data]
105
- json[1].must_equal Hash[]
108
+ result = filter.use( :include => { 'address' => {}, 'phone_numbers' =>
109
+ { :include => ['area']}} ).filter_it( data )
110
+ result.params.must_equal Hash[data]
111
+ result.size.must_equal 1
106
112
  end
107
113
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ixtlan-babel
3
3
  version: !ruby/object:Gem::Version
4
+ version: 0.4.0
4
5
  prerelease:
5
- version: 0.3.5
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-04-24 00:00:00.000000000 Z
12
+ date: 2013-07-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -17,29 +17,13 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 10.0.0
20
+ version: '10.0'
21
21
  none: false
22
22
  requirement: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 10.0.0
27
- none: false
28
- prerelease: false
29
- type: :development
30
- - !ruby/object:Gem::Dependency
31
- name: copyright-header
32
- version_requirements: !ruby/object:Gem::Requirement
33
- requirements:
34
- - - "~>"
35
- - !ruby/object:Gem::Version
36
- version: 1.0.7
37
- none: false
38
- requirement: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - "~>"
41
- - !ruby/object:Gem::Version
42
- version: 1.0.7
26
+ version: '10.0'
43
27
  none: false
44
28
  prerelease: false
45
29
  type: :development
@@ -49,13 +33,13 @@ dependencies:
49
33
  requirements:
50
34
  - - "~>"
51
35
  - !ruby/object:Gem::Version
52
- version: '4.3'
36
+ version: '4.0'
53
37
  none: false
54
38
  requirement: !ruby/object:Gem::Requirement
55
39
  requirements:
56
40
  - - "~>"
57
41
  - !ruby/object:Gem::Version
58
- version: '4.3'
42
+ version: '4.0'
59
43
  none: false
60
44
  prerelease: false
61
45
  type: :development
@@ -65,13 +49,13 @@ dependencies:
65
49
  requirements:
66
50
  - - "~>"
67
51
  - !ruby/object:Gem::Version
68
- version: 0.5.0
52
+ version: '0.5'
69
53
  none: false
70
54
  requirement: !ruby/object:Gem::Requirement
71
55
  requirements:
72
56
  - - "~>"
73
57
  - !ruby/object:Gem::Version
74
- version: 0.5.0
58
+ version: '0.5'
75
59
  none: false
76
60
  prerelease: false
77
61
  type: :development
@@ -115,39 +99,36 @@ extensions: []
115
99
  extra_rdoc_files: []
116
100
  files:
117
101
  - lib/ixtlan-babel.rb
118
- - lib/ixtlan/babel/deserializer.rb
102
+ - lib/ixtlan/babel/dm_validation_errors_serializer.rb~
103
+ - lib/ixtlan/babel/context.rb~
104
+ - lib/ixtlan/babel/filter_config.rb~
105
+ - lib/ixtlan/babel/context.rb
106
+ - lib/ixtlan/babel/hash_only_filter.rb~
119
107
  - lib/ixtlan/babel/hash_filter.rb
108
+ - lib/ixtlan/babel/abstract_filter.rb~
120
109
  - lib/ixtlan/babel/serializer.rb~
110
+ - lib/ixtlan/babel/serializer.rb
111
+ - lib/ixtlan/babel/factory.rb~
112
+ - lib/ixtlan/babel/config.rb~
121
113
  - lib/ixtlan/babel/params_filter.rb
122
- - lib/ixtlan/babel/abstract_filter.rb
123
- - lib/ixtlan/babel/no_timestamp_serializer.rb
124
- - lib/ixtlan/babel/filter_config.rb
125
- - lib/ixtlan/babel/params_filter.rb~
126
- - lib/ixtlan/babel/context.rb
127
114
  - lib/ixtlan/babel/factory.rb
128
115
  - lib/ixtlan/babel/model_filter.rb~
116
+ - lib/ixtlan/babel/model_filter.rb
117
+ - lib/ixtlan/babel/params_filter.rb~
118
+ - lib/ixtlan/babel/filter_config.rb
119
+ - lib/ixtlan/babel/abstract_filter.rb
129
120
  - lib/ixtlan/babel/dm_validation_errors_serializer.rb
130
121
  - lib/ixtlan/babel/hash_filter.rb~
131
- - lib/ixtlan/babel/filter_config.rb~
132
- - lib/ixtlan/babel/hash_only_filter.rb~
133
- - lib/ixtlan/babel/factory.rb~
134
- - lib/ixtlan/babel/dm_validation_errors_serializer.rb~
135
- - lib/ixtlan/babel/context.rb~
136
- - lib/ixtlan/babel/model_filter.rb
137
- - lib/ixtlan/babel/hash_filter.rb-
138
- - lib/ixtlan/babel/abstract_filter.rb~
139
- - lib/ixtlan/babel/config.rb~
140
- - lib/ixtlan/babel/serializer.rb
141
- - spec/model_filter_with_methods.spec.rb~
142
- - spec/model_filter_spec.rb~
143
122
  - spec/model_filter_spec.rb
144
- - spec/model_filter_with_methods_spec.rb~
145
123
  - spec/params_filter_spec.rb
146
- - spec/hash_filter_spec.rb
124
+ - spec/model_filter_with_methods_spec.rb
147
125
  - spec/hash_filter_spec.rb~
148
126
  - spec/spec_helper.rb
149
- - spec/model_filter_with_methods_spec.rb
127
+ - spec/model_filter_with_methods.spec.rb~
150
128
  - spec/params_filter_spec.rb~
129
+ - spec/hash_filter_spec.rb
130
+ - spec/model_filter_with_methods_spec.rb~
131
+ - spec/model_filter_spec.rb~
151
132
  - MIT-LICENSE
152
133
  - README.md
153
134
  - Gemfile
@@ -181,5 +162,5 @@ summary: babel offers a filter for hashes and with that comes json/yaml/xml de/s
181
162
  test_files:
182
163
  - spec/model_filter_spec.rb
183
164
  - spec/params_filter_spec.rb
184
- - spec/hash_filter_spec.rb
185
165
  - spec/model_filter_with_methods_spec.rb
166
+ - spec/hash_filter_spec.rb