ixtlan-babel 0.3.5 → 0.4.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.
@@ -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