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.
- 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
|