drawbridge 0.2.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.
- data/.gitignore +17 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +52 -0
- data/Rakefile +10 -0
- data/drawbridge.gemspec +27 -0
- data/lib/drawbridge.rb +13 -0
- data/lib/drawbridge/adapter.rb +35 -0
- data/lib/drawbridge/config.rb +48 -0
- data/lib/drawbridge/debug.rb +18 -0
- data/lib/drawbridge/mapper.rb +214 -0
- data/lib/drawbridge/refinement_scrubber.rb +26 -0
- data/lib/drawbridge/request.rb +92 -0
- data/lib/drawbridge/result.rb +146 -0
- data/lib/drawbridge/transformer.rb +190 -0
- data/lib/drawbridge/version.rb +3 -0
- data/spec/debug_spec.rb +23 -0
- data/spec/helper.rb +18 -0
- data/spec/refinement_scrubber_spec.rb +68 -0
- data/spec/request_spec.rb +84 -0
- data/spec/result_spec.rb +388 -0
- data/spec/transformer_spec.rb +249 -0
- metadata +175 -0
@@ -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
|