ixtlan-babel 0.5.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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