drawbridge 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,249 @@
1
+ require 'helper'
2
+
3
+ describe Drawbridge::Transformer do
4
+ include Drawbridge::Transformer
5
+ describe "#order" do
6
+ let(:sort_order) { [{"searchonly"=>"1"},
7
+ {"isapartment"=>"0"},
8
+ {"isyakutat"=>"0"},
9
+ {"pri_diamond"=>"1"},
10
+ {"sortorder"=>"1"}] }
11
+
12
+ it "should build order => Ns attribute" do
13
+ test_order = 'Ns=searchonly|1||isapartment|0||isyakutat|0||pri_diamond|1||sortorder|1'
14
+
15
+ send(:order, sort_order).must_equal test_order
16
+ end
17
+
18
+ it "should be empty" do
19
+ send(:order, []).must_be_nil
20
+ end
21
+ end
22
+
23
+ describe "#geo_filter" do
24
+ let(:geo) do
25
+ {
26
+ :lat => 59.5469,
27
+ :lng => -139.7272,
28
+ :radius => 48.28032,
29
+ :field => 'geocode'
30
+ }
31
+ end
32
+
33
+ it "should build geo_filter => Nf attribute" do
34
+ test_geo = 'Nf=geocode|GCLT 59.5469,-139.7272 77.69979239422567'
35
+
36
+ send(:geo_filter, geo).must_equal test_geo
37
+ end
38
+
39
+ it "should be nil" do
40
+ send(:geo_filter, {}).must_be_nil
41
+ end
42
+ end
43
+
44
+ describe "range_filter" do
45
+
46
+ let(:range) do
47
+ [
48
+ {
49
+ :field => 'latitude',
50
+ :values => ['30.123', '34.456'],
51
+ :operator => 'BTWN'
52
+ },
53
+ {
54
+ :field => 'longitude',
55
+ :values => ['-85.0000', '-80.0000'],
56
+ :operator => 'BTWN'
57
+ }
58
+ ]
59
+ end
60
+ it "should description" do
61
+ filter = 'Nf=latitude|BTWN+30.123+34.456|longitude|BTWN+-85.0000+-80.0000'
62
+
63
+ send(:range_filter, range).must_equal filter
64
+ end
65
+
66
+ it "should be nil" do
67
+ send(:range_filter, []).must_be_nil
68
+ end
69
+ end
70
+
71
+ describe "#root_navigtion" do
72
+ let(:test_refinement) { 'N=5875+5922+5966' }
73
+
74
+ it "should build root navigation => N attribute" do
75
+ refinements = ["5875", "5922", "5966"]
76
+
77
+ send(:root_navigtion, refinements).must_equal test_refinement
78
+ end
79
+
80
+ it "should build root navigation => N attribute without converting" do
81
+ refinements = %W[5875 5922 5966]
82
+
83
+ send(:root_navigtion, refinements).must_equal test_refinement
84
+ end
85
+
86
+ it "should be set to default 0" do
87
+ send(:root_navigtion, []).must_equal 'N=0'
88
+ end
89
+ end
90
+
91
+ describe "#expand_refinements" do
92
+ let(:refinements) { ["5875", "5922", "5966"] }
93
+
94
+ it "should build expanded refinements => Ne attribute" do
95
+ test_refinement = 'Ne=5875+5922+5966'
96
+
97
+ send(:expand_refinements, refinements).must_equal test_refinement
98
+ end
99
+
100
+ it "should be set to default 0" do
101
+ send(:expand_refinements, []).must_be_nil
102
+ end
103
+ end
104
+
105
+ describe "#where" do
106
+
107
+ it "should build where => Ntt/Ntk attribute" do
108
+ params = {'showapartments' => 1, 'showcollege' => 0}
109
+ test_where = 'Ntk=showapartments|showcollege&Ntt=1|0'
110
+
111
+ send(:where, params).must_equal test_where
112
+ end
113
+
114
+ it "should be empty" do
115
+ send(:where, {}).must_be_nil
116
+ end
117
+ end
118
+
119
+ describe "#offset" do
120
+ let(:params) { 20 }
121
+
122
+ it "should build offset => No attribute" do
123
+ send(:offset, params).must_equal 'No=20'
124
+ end
125
+
126
+ it "should be empty" do
127
+ send(:offset, nil).must_be_nil
128
+ end
129
+ end
130
+
131
+ describe "#aggregate_offset" do
132
+ let(:params) { 16 }
133
+
134
+ it "should build offset => Nao attribute" do
135
+ send(:aggregate_offset, params).must_equal 'Nao=16'
136
+ end
137
+
138
+ it "should be empty" do
139
+ send(:aggregate_offset, nil).must_be_nil
140
+ end
141
+ end
142
+
143
+ describe "#limit" do
144
+ let(:params) { 20 }
145
+
146
+ it "should build limit => M attribute" do
147
+ send(:limit, params).must_equal 'M=recs_per_page:20'
148
+ end
149
+
150
+ it "should be empty" do
151
+ send(:limit, {}).must_be_nil
152
+ end
153
+ end
154
+
155
+ describe "#transform" do
156
+
157
+ it "should throw NoMethodError" do
158
+ lambda{transform({ :does_not_exist => {} })}.must_raise(NoMethodError)
159
+ end
160
+
161
+ it "should call private method" do
162
+ params = {:where => {'showapartments' => 1, 'showcollege' => 0}}
163
+ test_where = 'Ntk=showapartments|showcollege&Ntt=1|0'
164
+
165
+ transform(params).must_equal test_where
166
+ end
167
+
168
+ describe "#clean_adapter_keys" do
169
+ let(:params) do
170
+ {:offset => 6, :aggregate_offset => 12, :rollup => ''}
171
+ end
172
+
173
+ it "should have offset key only" do
174
+ transform(params).must_equal 'No=6'
175
+ end
176
+
177
+ it "should have aggregate_offset key only" do
178
+ args = transform(params.merge(:rollup => 'listingid'))
179
+ args.must_equal 'Nao=12&Nu=listingid'
180
+ end
181
+
182
+ it "should be empty" do
183
+ transform(nil).must_be_empty
184
+ end
185
+
186
+ end
187
+
188
+ end
189
+
190
+ describe "#record_filters" do
191
+ let(:params) { ['NOT(132831)', 'listingid:123'] }
192
+
193
+ it "should build record_filters => Nr attribute" do
194
+ test_filter = 'Nr=NOT(132831)&Nr=listingid:123'
195
+
196
+ send(:record_filters, params).must_equal test_filter
197
+ end
198
+
199
+ it "should be empty" do
200
+ send(:record_filters, []).must_be_nil
201
+ end
202
+ end
203
+
204
+ describe "#select" do
205
+ it "should be empty" do
206
+ send(:select, []).must_be_nil
207
+ end
208
+
209
+ it "should build field list to be returned by bridge => F" do
210
+ fields = %W[listingid propertyname]
211
+ test_fields = 'F=listingid:1|propertyname:1'
212
+
213
+ send(:select, fields).must_equal test_fields
214
+ end
215
+
216
+ it "should not include nil or empty fields" do
217
+ fields = ['listingid', 'propertyname', nil, '', nil]
218
+ test_fields = 'F=listingid:1|propertyname:1'
219
+
220
+ send(:select, fields).must_equal test_fields
221
+
222
+ end
223
+ end
224
+
225
+ describe "#rollup" do
226
+ it "should be nil" do
227
+ send(:rollup, nil).must_be_nil
228
+ end
229
+
230
+ it "should build rollup query - Nu" do
231
+ send(:rollup, 'listingid').must_equal 'Nu=listingid'
232
+ end
233
+ end
234
+
235
+ describe "#match_mode" do
236
+ it "defaults to nil" do
237
+ send(:match_mode, nil).must_be_nil
238
+ end
239
+
240
+ it "builds match_mode query with single arg - Ntx" do
241
+ send(:match_mode, ['matchany']).must_equal 'Ntx=mode matchany'
242
+ end
243
+
244
+ it "builds match_mode query with multiple args - Ntx" do
245
+ send(:match_mode, ['matchany', 'matchboolean']).must_equal 'Ntx=mode matchany|mode matchboolean'
246
+ end
247
+ end
248
+
249
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: drawbridge
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael Hoitomt
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: turn
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.3
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.8.3
30
+ - !ruby/object:Gem::Dependency
31
+ name: mocha
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.13.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.13.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: curb
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.8.4
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.8.4
78
+ - !ruby/object:Gem::Dependency
79
+ name: oj
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 2.0.14
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 2.0.14
94
+ - !ruby/object:Gem::Dependency
95
+ name: activesupport
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: 3.2.9
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 3.2.9
110
+ description: Papi's Wife
111
+ email:
112
+ - mhoitomt@primedia.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - .gitignore
118
+ - Gemfile
119
+ - LICENSE.txt
120
+ - README.md
121
+ - Rakefile
122
+ - drawbridge.gemspec
123
+ - lib/drawbridge.rb
124
+ - lib/drawbridge/adapter.rb
125
+ - lib/drawbridge/config.rb
126
+ - lib/drawbridge/debug.rb
127
+ - lib/drawbridge/mapper.rb
128
+ - lib/drawbridge/refinement_scrubber.rb
129
+ - lib/drawbridge/request.rb
130
+ - lib/drawbridge/result.rb
131
+ - lib/drawbridge/transformer.rb
132
+ - lib/drawbridge/version.rb
133
+ - spec/debug_spec.rb
134
+ - spec/helper.rb
135
+ - spec/refinement_scrubber_spec.rb
136
+ - spec/request_spec.rb
137
+ - spec/result_spec.rb
138
+ - spec/transformer_spec.rb
139
+ homepage: ''
140
+ licenses: []
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ segments:
152
+ - 0
153
+ hash: -1272018444324970235
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ segments:
161
+ - 0
162
+ hash: -1272018444324970235
163
+ requirements: []
164
+ rubyforge_project:
165
+ rubygems_version: 1.8.23
166
+ signing_key:
167
+ specification_version: 3
168
+ summary: Papi's Replacement
169
+ test_files:
170
+ - spec/debug_spec.rb
171
+ - spec/helper.rb
172
+ - spec/refinement_scrubber_spec.rb
173
+ - spec/request_spec.rb
174
+ - spec/result_spec.rb
175
+ - spec/transformer_spec.rb