ixtlan-babel 0.5.0 → 0.7.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.
@@ -1,134 +0,0 @@
1
- require 'spec_helper'
2
- require 'ixtlan/babel/params_filter'
3
-
4
- class A; end
5
- class AFilter < Ixtlan::Babel::ParamsFilter
6
-
7
- end
8
-
9
- class Hash
10
- def attributes
11
- self
12
- end
13
- def method_missing(method)
14
- self[method.to_s]
15
- end
16
- end
17
-
18
- describe Ixtlan::Babel::ParamsFilter do
19
- let(:data) do
20
- {
21
- 'id' => 987,
22
- 'name' => 'me and the corner',
23
- 'address' => { 'street' => 'Foo 12', 'zipcode' => '12345' },
24
- 'list' => [1,2,3,4],
25
- 'phone_numbers' => {
26
- 'prefix' => 12,
27
- 'number' => '123',
28
- 'area' => { 'code' => '001', 'iso' => 'us'}
29
- }
30
- }
31
- end
32
-
33
- let(:factory) { Ixtlan::Babel::Factory.new }
34
- let(:filter) { factory.new_filter( A ) }
35
- let(:deserializer) { Ixtlan::Babel::Deserializer.new(Hash) }
36
-
37
- it 'should filter a hash' do
38
- AFilter.add_context( :plain )
39
- result = filter.use( :plain ).filter_it( data )
40
- result.params.must_equal Hash[]
41
- result.size.must_equal 1
42
- end
43
-
44
- it 'should filter a hash with keep' do
45
- class AFilter
46
- add_context( :keep ) do
47
- keep :id
48
- end
49
- end
50
- result = filter.use( :keep ).filter_it( data )
51
- result.params.must_equal Hash[]
52
- result.id.must_equal data['id']
53
- result.size.must_equal 2
54
- end
55
-
56
- it 'should filter a hash with root' do
57
- class AFilter
58
- add_context( :root ) do
59
- root 'my'
60
- only :id, :name
61
- end
62
- end
63
- result = filter.use( :root ).filter_it( 'my' => data )
64
- result.params.must_equal Hash[ 'id' => data['id'], 'name' => data['name'] ]
65
- result.size.must_equal 1
66
- end
67
-
68
- it 'should filter a nested object' do
69
- class AFilter
70
- add_context( :nested ) do
71
- only( :id, :name,
72
- :address => only( :street, :zipcode),
73
- :phone_numbers => only( :prefix, :number ) )
74
- end
75
- end
76
- result = filter.use( :nested ).filter_it( data )
77
-
78
- data['phone_numbers'].delete('area')
79
- data.delete('list')
80
- result.params.must_equal Hash[data]
81
- result.size.must_equal 1
82
- end
83
-
84
- it 'should filter a hash with only' do
85
- class AFilter
86
- add_context( :only ) do
87
- only :name
88
- end
89
- end
90
- result = filter.use( :only ).filter_it( data )
91
- result.params.must_equal Hash['name' => data['name']]
92
- result.size.must_equal 1
93
- end
94
-
95
- it 'should filter a hash with only and keep' do
96
- class AFilter
97
- add_context( :only_and_keep ) do
98
- keep :id
99
- only :name
100
- end
101
- end
102
- result = filter.use( :only_and_keep ).filter_it( data )
103
- result.params.must_equal Hash['name' => data['name']]
104
- result.id.must_equal data['id']
105
- result.size.must_equal 2
106
- end
107
-
108
- it 'should filter a hash with nested only' do
109
- class AFilter
110
- add_context( :filtered_nested ) do
111
- only :id, :name, :list, :address => only( :street )
112
- end
113
- end
114
- result = filter.use( :filtered_nested ).filter_it( data )
115
- data.delete('phone_numbers')
116
- data['address'].delete('zipcode')
117
- result.params.must_equal Hash[data]
118
- result.size.must_equal 1
119
- end
120
-
121
- it 'should filter a hash with deep nested include' do
122
- class AFilter
123
- add_context( :deep_nested ) do
124
- only( :id, :name, :list,
125
- :address => only( :street, :zipcode),
126
- :phone_numbers => only( :prefix, :number,
127
- :area => only( :code, :iso ) ) )
128
- end
129
- end
130
- result = filter.use( :deep_nested ).filter_it( data )
131
- result.params.must_equal Hash[data]
132
- result.size.must_equal 1
133
- end
134
- end
@@ -1,113 +0,0 @@
1
- require 'spec_helper'
2
- require 'ixtlan/babel/params_filter'
3
-
4
- class A; end
5
- class AFilter < Ixtlan::Babel::ParamsFilter
6
-
7
- end
8
-
9
- class Hash
10
- def attributes
11
- self
12
- end
13
- def method_missing(method)
14
- self[method.to_s]
15
- end
16
- end
17
-
18
- describe Ixtlan::Babel::ParamsFilter do
19
- let(:data) do
20
- {
21
- 'id' => 987,
22
- 'name' => 'me and the corner',
23
- 'address' => { 'street' => 'Foo 12', 'zipcode' => '12345' },
24
- 'phone_numbers' => {
25
- 'prefix' => 12,
26
- 'number' => '123',
27
- 'area' => { 'code' => '001', 'iso' => 'us'}
28
- }
29
- }
30
- end
31
-
32
- let(:factory) { Ixtlan::Babel::Factory.new }
33
- let(:filter) { factory.new_filter( A ) }
34
- let(:deserializer) { Ixtlan::Babel::Deserializer.new(Hash) }
35
-
36
- it 'should filter a hash' do
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
- end
41
-
42
- it 'should filter a hash with keep' do
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
47
- end
48
-
49
- it 'should filter a hash with root' do
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
54
-
55
- it 'should filter a hash with include list' do
56
- result = filter.use( :include => ['address',
57
- 'phone_numbers'] ).filter_it( data )
58
-
59
- data['phone_numbers'].delete('area')
60
- result.params.must_equal Hash[data]
61
- result.size.must_equal 1
62
- end
63
-
64
- it 'should filter a hash with except' do
65
- result = filter.use( :except => ['id'] ).filter_it( data )
66
- result.params.must_equal Hash['name' => data['name']]
67
- result.size.must_equal 1
68
- end
69
-
70
- it 'should filter a hash with except and keep' do
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']
74
- end
75
-
76
- it 'should filter a hash with only' do
77
- result = filter.use( :only => ['name'] ).filter_it( data )
78
- result.params.must_equal Hash['name' => data['name']]
79
- result.size.must_equal 1
80
- end
81
-
82
- it 'should filter a hash with only and keep' do
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
87
- end
88
-
89
- it 'should filter a hash with nested only' do
90
- result = filter.use( :include => { 'address' =>
91
- {:only => ['street']}} ).filter_it( data )
92
- data.delete('phone_numbers')
93
- data['address'].delete('zipcode')
94
- result.params.must_equal Hash[data]
95
- result.size.must_equal 1
96
- end
97
-
98
- it 'should filter a hash with nested except' do
99
- result = filter.use( :include => { 'address' =>
100
- {:except => ['zipcode']}} ).filter_it( data )
101
- data.delete('phone_numbers')
102
- data['address'].delete('zipcode')
103
- result.params.must_equal Hash[data]
104
- result.size.must_equal 1
105
- end
106
-
107
- it 'should filter a hash with nested include' do
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
112
- end
113
- end