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