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.
- checksums.yaml +4 -4
- data/Gemfile +4 -1
- data/MIT-LICENSE +1 -1
- data/README.md +3 -14
- data/Rakefile +27 -0
- data/lib/ixtlan-babel.rb +0 -21
- data/lib/ixtlan-babel.rb~ +1 -0
- data/lib/ixtlan/babel/common_filters.rb +21 -0
- data/lib/ixtlan/babel/common_filters.rb~ +14 -0
- data/lib/ixtlan/babel/factory.rb +36 -56
- data/lib/ixtlan/babel/factory.rb~ +39 -59
- data/lib/ixtlan/babel/hash_filter.rb +125 -44
- data/lib/ixtlan/babel/hash_filter.rb~ +149 -40
- data/lib/ixtlan/babel/model_filter.rb~ +114 -52
- data/lib/ixtlan/babel/model_serializer.rb +103 -0
- data/lib/ixtlan/babel/model_serializer.rb~ +104 -0
- data/spec/hash_filter_spec.rb +71 -102
- data/spec/model_serializer_spec.rb +159 -0
- data/spec/model_serializer_spec.rb~ +158 -0
- data/spec/spec_helper.rb +5 -3
- data/spec/spec_helper.rb~ +8 -0
- metadata +53 -72
- data/lib/ixtlan/babel/abstract_filter.rb +0 -46
- data/lib/ixtlan/babel/context.rb +0 -67
- data/lib/ixtlan/babel/dm_validation_errors_serializer.rb +0 -8
- data/lib/ixtlan/babel/filter_config.rb +0 -74
- data/lib/ixtlan/babel/model_filter.rb +0 -79
- data/lib/ixtlan/babel/params_filter.rb +0 -149
- data/lib/ixtlan/babel/serializer.rb +0 -186
- data/spec/model_filter_spec.rb +0 -131
- data/spec/model_filter_with_dsl_spec.rb +0 -173
- data/spec/model_filter_with_methods_spec.rb +0 -151
- data/spec/params_filter_dsl_spec.rb +0 -134
- data/spec/params_filter_spec.rb +0 -113
@@ -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
|
data/spec/params_filter_spec.rb
DELETED
@@ -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
|