govkit-ca 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +4 -0
  3. data/README.md +1 -1
  4. data/govkit-ca.gemspec +4 -2
  5. data/lib/gov_kit-ca/postal_code/strategy/cbc_ca.rb +1 -1
  6. data/lib/gov_kit-ca/postal_code/strategy/conservative_ca.rb +3 -4
  7. data/lib/gov_kit-ca/postal_code/strategy/elections_ca.rb +4 -6
  8. data/lib/gov_kit-ca/postal_code/strategy/liberal_ca.rb +0 -1
  9. data/lib/gov_kit-ca/postal_code/strategy/parl_gc_ca.rb +5 -1
  10. data/lib/gov_kit-ca/postal_code.rb +19 -7
  11. data/lib/gov_kit-ca/represent.rb +108 -0
  12. data/lib/gov_kit-ca/version.rb +1 -1
  13. data/lib/gov_kit-ca.rb +2 -1
  14. data/spec/cbc_ca_spec.rb +14 -25
  15. data/spec/conservative_ca_spec.rb +1 -10
  16. data/spec/digital-copyright_ca_spec.rb +0 -9
  17. data/spec/elections_ca_spec.rb +0 -9
  18. data/spec/greenparty_ca_spec.rb +0 -9
  19. data/spec/liberal_ca_spec.rb +1 -10
  20. data/spec/ndp_ca_spec.rb +0 -9
  21. data/spec/parl_gc_ca_spec.rb +8 -0
  22. data/spec/postal_code_spec.rb +69 -87
  23. data/spec/represent_spec.rb +279 -0
  24. data/spec/spec_helper.rb +1 -4
  25. data/spec/strategy_set_spec.rb +55 -2
  26. data/tasks/tasks.rb +0 -28
  27. metadata +47 -133
  28. data/spec/fixtures/cbc_ca/A1A1A1.response +0 -11
  29. data/spec/fixtures/cbc_ca/G0C2Y0.response +0 -11
  30. data/spec/fixtures/cbc_ca/H0H0H0.response +0 -11
  31. data/spec/fixtures/cbc_ca/K0A1K0.response +0 -11
  32. data/spec/fixtures/cbc_ca/T5S2B9.response +0 -11
  33. data/spec/fixtures/cbc_ca/X1B1B1.response +0 -11
  34. data/spec/fixtures/conservative_ca/A1A1A1.response +0 -452
  35. data/spec/fixtures/conservative_ca/G0C2Y0.response +0 -452
  36. data/spec/fixtures/conservative_ca/H0H0H0.response +0 -452
  37. data/spec/fixtures/conservative_ca/K0A1K0.response +0 -455
  38. data/spec/fixtures/conservative_ca/T5S2B9.response +0 -453
  39. data/spec/fixtures/conservative_ca/X1B1B1.response +0 -452
  40. data/spec/fixtures/digital-copyright_ca/A1A1A1.response +0 -227
  41. data/spec/fixtures/digital-copyright_ca/G0C2Y0.response +0 -229
  42. data/spec/fixtures/digital-copyright_ca/H0H0H0.response +0 -243
  43. data/spec/fixtures/digital-copyright_ca/K0A1K0.response +0 -230
  44. data/spec/fixtures/digital-copyright_ca/T5S2B9.response +0 -233
  45. data/spec/fixtures/digital-copyright_ca/X1B1B1.response +0 -243
  46. data/spec/fixtures/elections_ca/A1A1A1.response +0 -10
  47. data/spec/fixtures/elections_ca/G0C2Y0.response +0 -11
  48. data/spec/fixtures/elections_ca/H0H0H0.response +0 -10
  49. data/spec/fixtures/elections_ca/K0A1K0.response +0 -10
  50. data/spec/fixtures/elections_ca/T5S2B9.response +0 -10
  51. data/spec/fixtures/elections_ca/X1B1B1.response +0 -10
  52. data/spec/fixtures/greenparty_ca/A1A1A1.response +0 -13
  53. data/spec/fixtures/greenparty_ca/G0C2Y0.response +0 -13
  54. data/spec/fixtures/greenparty_ca/H0H0H0.response +0 -13
  55. data/spec/fixtures/greenparty_ca/K0A1K0.response +0 -13
  56. data/spec/fixtures/greenparty_ca/T5S2B9.response +0 -13
  57. data/spec/fixtures/greenparty_ca/X1B1B1.response +0 -13
  58. data/spec/fixtures/liberal_ca/A1A1A1.response +0 -702
  59. data/spec/fixtures/liberal_ca/G0C2Y0.response +0 -570
  60. data/spec/fixtures/liberal_ca/H0H0H0.response +0 -649
  61. data/spec/fixtures/liberal_ca/K0A1K0.response +0 -650
  62. data/spec/fixtures/liberal_ca/T5S2B9.response +0 -570
  63. data/spec/fixtures/liberal_ca/X1B1B1.response +0 -649
  64. data/spec/fixtures/ndp_ca/A1A1A1.response +0 -610
  65. data/spec/fixtures/ndp_ca/G0C2Y0.response +0 -610
  66. data/spec/fixtures/ndp_ca/H0H0H0.response +0 -593
  67. data/spec/fixtures/ndp_ca/K0A1K0.response +0 -641
  68. data/spec/fixtures/ndp_ca/T5S2B9.response +0 -605
  69. data/spec/fixtures/ndp_ca/X1B1B1.response +0 -593
@@ -0,0 +1,279 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe GovKit::CA::Represent do
4
+ describe '#boundary_sets' do
5
+ let :api do
6
+ GovKit::CA::Represent.new
7
+ end
8
+
9
+ it 'should return boundary sets' do
10
+ response = api.boundary_sets
11
+ response.should be_a(Hash)
12
+ response.should have_key('objects')
13
+ response.should have_key('meta')
14
+ end
15
+
16
+ it 'should return a boundary set' do
17
+ response = api.boundary_sets(:boundary_set => 'federal-electoral-districts')
18
+ response.should be_a(Hash)
19
+ response.should have_key('related')
20
+ end
21
+
22
+ it 'should raise an error if the boundary set does not exist' do
23
+ expect{api.boundary_sets(:boundary_set => 'foo')}.to raise_error(GovKit::CA::ResourceNotFound, "404 http://represent.opennorth.ca/boundary-sets/foo/?")
24
+ end
25
+
26
+ it 'should raise an error if the limit is invalid' do
27
+ expect{api.boundary_sets(:limit => -1)}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/boundary-sets/?limit=-1 Invalid limit '-1' provided. Please provide a positive integer >= 0.")
28
+ end
29
+
30
+ it 'should raise an error if the offset is invalid' do
31
+ expect{api.boundary_sets(:offset => -1)}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/boundary-sets/?offset=-1 Invalid offset '-1' provided. Please provide a positive integer >= 0.")
32
+ end
33
+ end
34
+
35
+ describe '#representative_sets' do
36
+ let :api do
37
+ GovKit::CA::Represent.new
38
+ end
39
+
40
+ it 'should return representative sets' do
41
+ response = api.representative_sets
42
+ response.should be_a(Hash)
43
+ response.should have_key('objects')
44
+ response.should have_key('meta')
45
+ end
46
+
47
+ it 'should return a representative set' do
48
+ response = api.representative_sets(:representative_set => 'house-of-commons')
49
+ response.should be_a(Hash)
50
+ response.should have_key('related')
51
+ end
52
+
53
+ it 'should raise an error if the representative set does not exist' do
54
+ expect{api.representative_sets(:representative_set => 'foo')}.to raise_error(GovKit::CA::ResourceNotFound, "404 http://represent.opennorth.ca/representative-sets/foo/?")
55
+ end
56
+
57
+ it 'should raise an error if the limit is invalid' do
58
+ expect{api.representative_sets(:limit => -1)}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/representative-sets/?limit=-1 Invalid limit '-1' provided. Please provide a positive integer >= 0.")
59
+ end
60
+
61
+ it 'should raise an error if the offset is invalid' do
62
+ expect{api.representative_sets(:offset => -1)}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/representative-sets/?offset=-1 Invalid offset '-1' provided. Please provide a positive integer >= 0.")
63
+ end
64
+ end
65
+
66
+ describe '#postcodes' do
67
+ let :api do
68
+ GovKit::CA::Represent.new
69
+ end
70
+
71
+ it 'should query by postal code' do
72
+ response = api.postcodes('A1A1A1')
73
+ response.should be_a(Hash)
74
+ response.should have_key('code')
75
+ end
76
+
77
+ it 'should accept an array of boundary sets' do
78
+ response = api.postcodes('A1A1A1', :sets => ['federal-electoral-districts', 'census-subdivisions'])
79
+ response.should be_a(Hash)
80
+ response['boundaries_centroid'].should have(2).items
81
+ end
82
+
83
+ it 'should accept a comma-separated list of boundary sets' do
84
+ response = api.postcodes('A1A1A1', :sets => 'federal-electoral-districts,census-subdivisions')
85
+ response.should be_a(Hash)
86
+ response['boundaries_centroid'].should have(2).items
87
+ end
88
+
89
+ it 'should raise an error if the postal code does not exist' do
90
+ expect{api.postcodes('foo')}.to raise_error(GovKit::CA::ResourceNotFound, "404 http://represent.opennorth.ca/postcodes/foo/?")
91
+ end
92
+ end
93
+
94
+ describe '#boundaries' do
95
+ let :api do
96
+ GovKit::CA::Represent.new
97
+ end
98
+
99
+ it 'should return boundaries' do
100
+ response = api.boundaries
101
+ response.should be_a(Hash)
102
+ response.should have_key('objects')
103
+ response.should have_key('meta')
104
+ response['meta']['next'].should_not be_nil
105
+ end
106
+
107
+ it 'should return boundaries from a boundary set' do
108
+ response = api.boundaries(:boundary_set => 'st-johns-wards')
109
+ response.should be_a(Hash)
110
+ response.should have_key('objects')
111
+ response.should have_key('meta')
112
+ response['objects'].should have(5).items
113
+ end
114
+
115
+ it 'should return a boundary from a boundary set' do
116
+ response = api.boundaries(:boundary_set => 'st-johns-wards', :boundary => 'ward-1')
117
+ response.should be_a(Hash)
118
+ response.should have_key('related')
119
+ end
120
+
121
+ it 'should return the representatives of a boundary from a boundary set' do
122
+ response = api.boundaries(:boundary_set => 'st-johns-wards', :boundary => 'ward-1', :representatives => true)
123
+ response.should be_a(Hash)
124
+ response.should have_key('objects')
125
+ response.should have_key('meta')
126
+ response['meta']['next'].should be_nil
127
+ end
128
+
129
+ it 'should return boundaries from many boundary sets as an array' do
130
+ response = api.boundaries(:sets => ['st-johns-wards','caledon-wards'])
131
+ response.should be_a(Hash)
132
+ response.should have_key('objects')
133
+ response.should have_key('meta')
134
+ response['objects'].should have(10).items
135
+ end
136
+
137
+ it 'should return boundaries from many boundary sets as a comma-separated list' do
138
+ response = api.boundaries(:sets => 'st-johns-wards,caledon-wards')
139
+ response.should be_a(Hash)
140
+ response.should have_key('objects')
141
+ response.should have_key('meta')
142
+ response['objects'].should have(10).items
143
+ end
144
+
145
+ it 'should accept a point as an array' do
146
+ response = api.boundaries(:contains => ['47.5699', '-52.6954'])
147
+ response.should be_a(Hash)
148
+ response.should have_key('objects')
149
+ response.should have_key('meta')
150
+ response['meta']['next'].should be_nil
151
+ end
152
+
153
+ it 'should accept a point as a comma-separated list' do
154
+ response = api.boundaries(:contains => '47.5699,-52.6954')
155
+ response.should be_a(Hash)
156
+ response.should have_key('objects')
157
+ response.should have_key('meta')
158
+ response['meta']['next'].should be_nil
159
+ end
160
+
161
+ it 'should raise an error if the point is invalid' do
162
+ expect{api.boundaries(:contains => '0,0,0')}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/boundaries/?contains=0,0,0 Invalid lat/lon values")
163
+ end
164
+
165
+ it 'should raise an error if the boundary set does not exist' do
166
+ expect{api.boundaries(:boundary_set => 'foo')}.to raise_error(GovKit::CA::ResourceNotFound, "404 http://represent.opennorth.ca/boundaries/foo/?")
167
+ end
168
+
169
+ context 'when retrieving a boundary' do
170
+ it 'should raise an error if the boundary set does not exist' do
171
+ expect{api.boundaries(:boundary_set => 'foo', :boundary => 'ward-1')}.to raise_error(GovKit::CA::ResourceNotFound, "404 http://represent.opennorth.ca/boundaries/foo/ward-1/?")
172
+ end
173
+
174
+ it 'should raise an error if the boundary does not exist' do
175
+ expect{api.boundaries(:boundary_set => 'st-johns-wards', :boundary => 'foo')}.to raise_error(GovKit::CA::ResourceNotFound, "404 http://represent.opennorth.ca/boundaries/st-johns-wards/foo/?")
176
+ end
177
+
178
+ it 'should raise an error if the boundary set is not given' do
179
+ expect{api.boundaries(:boundary => 'ward-1')}.to raise_error(ArgumentError, ':boundary_set must be set if :boundary is set')
180
+ end
181
+ end
182
+
183
+ context 'when retrieving the representatives of a boundary' do
184
+ it 'should not raise an error if the boundary set does not exist' do
185
+ expect{api.boundaries(:boundary_set => 'foo', :boundary => 'ward-1', :representatives => true)}.to_not raise_error
186
+ end
187
+
188
+ it 'should not raise an error if the boundary does not exist' do
189
+ expect{api.boundaries(:boundary_set => 'st-johns-wards', :boundary => 'foo', :representatives => true)}.to_not raise_error
190
+ end
191
+
192
+ it 'should raise an error if the boundary set is not given' do
193
+ expect{api.boundaries(:representatives => true)}.to raise_error(ArgumentError, ':boundary_set and :boundary must be set if :representatives is true')
194
+ end
195
+
196
+ it 'should raise an error if the boundary is not given' do
197
+ expect{api.boundaries(:boundary_set => 'st-johns-wards', :representatives => true)}.to raise_error(ArgumentError, ':boundary_set and :boundary must be set if :representatives is true')
198
+ end
199
+ end
200
+
201
+ it 'should raise an error if the limit is invalid' do
202
+ expect{api.boundaries(:limit => -1)}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/boundaries/?limit=-1 Invalid limit '-1' provided. Please provide a positive integer >= 0.")
203
+ end
204
+
205
+ it 'should raise an error if the offset is invalid' do
206
+ expect{api.boundaries(:offset => -1)}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/boundaries/?offset=-1 Invalid offset '-1' provided. Please provide a positive integer >= 0.")
207
+ end
208
+ end
209
+
210
+ describe '#representatives' do
211
+ let :api do
212
+ GovKit::CA::Represent.new
213
+ end
214
+
215
+ it 'should return representatives' do
216
+ response = api.representatives
217
+ response.should be_a(Hash)
218
+ response.should have_key('objects')
219
+ response.should have_key('meta')
220
+ response['meta']['next'].should_not be_nil
221
+ end
222
+
223
+ it 'should return representatives from a representative set' do
224
+ response = api.representatives(:representative_set => 'st-johns-city-council')
225
+ response.should be_a(Hash)
226
+ response.should have_key('objects')
227
+ response.should have_key('meta')
228
+ response['meta']['next'].should be_nil
229
+ end
230
+
231
+ it 'should accept a point as an array' do
232
+ response = api.representatives(:point => ['47.5699', '-52.6954'])
233
+ response.should be_a(Hash)
234
+ response.should have_key('objects')
235
+ response.should have_key('meta')
236
+ response['meta']['next'].should be_nil
237
+ end
238
+
239
+ it 'should accept a point as a comma-separated list' do
240
+ response = api.representatives(:point => '47.5699,-52.6954')
241
+ response.should be_a(Hash)
242
+ response.should have_key('objects')
243
+ response.should have_key('meta')
244
+ response['meta']['next'].should be_nil
245
+ end
246
+
247
+ it 'should accept an array of districts' do
248
+ response = api.representatives(:districts => ['federal-electoral-districts/10007', 'census-subdivisions/1001519'])
249
+ response.should be_a(Hash)
250
+ response.should have_key('objects')
251
+ response.should have_key('meta')
252
+ response['meta']['next'].should be_nil
253
+ end
254
+
255
+ it 'should accept a comma-separated list of districts' do
256
+ response = api.representatives(:districts => 'federal-electoral-districts/10007,census-subdivisions/1001519')
257
+ response.should be_a(Hash)
258
+ response.should have_key('objects')
259
+ response.should have_key('meta')
260
+ response['meta']['next'].should be_nil
261
+ end
262
+
263
+ it 'should raise an error if the point is invalid' do
264
+ expect{api.representatives(:point => '0,0,0')}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/representatives/?point=0,0,0 Invalid lat/lon values")
265
+ end
266
+
267
+ it 'should not raise an error if the representative set does not exist' do
268
+ expect{api.representatives(:representative_set => 'foo')}.to_not raise_error
269
+ end
270
+
271
+ it 'should raise an error if the limit is invalid' do
272
+ expect{api.representatives(:limit => -1)}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/representatives/?limit=-1 Invalid limit '-1' provided. Please provide a positive integer >= 0.")
273
+ end
274
+
275
+ it 'should raise an error if the offset is invalid' do
276
+ expect{api.representatives(:offset => -1)}.to raise_error(GovKit::CA::InvalidRequest, "400 http://represent.opennorth.ca/representatives/?offset=-1 Invalid offset '-1' provided. Please provide a positive integer >= 0.")
277
+ end
278
+ end
279
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,11 +4,8 @@ require 'coveralls'
4
4
  Coveralls.wear!
5
5
 
6
6
  require 'rspec'
7
- require 'fakeweb'
8
7
  require File.dirname(__FILE__) + '/../lib/gov_kit-ca'
9
8
 
10
- FakeWeb.allow_net_connect = true
11
-
12
9
  module Helpers
13
10
  def fixture_path(*args)
14
11
  File.join(File.dirname(__FILE__), 'fixtures', *args)
@@ -17,5 +14,5 @@ end
17
14
 
18
15
  RSpec.configure do |config|
19
16
  config.include Helpers
20
- config.filter_run_excluding broken: true
17
+ config.filter_run_excluding :broken => true
21
18
  end
@@ -1,5 +1,58 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- module GovKit::CA::PostalCode::StrategySet
4
- # @todo
3
+ describe GovKit::CA::PostalCode::StrategySet do
4
+ let :strategy do
5
+ Class.new
6
+ end
7
+
8
+ describe '#strategies' do
9
+ it 'should return the strategies' do
10
+ GovKit::CA::PostalCode::StrategySet.strategies[0..4].should == [
11
+ GovKit::CA::PostalCode::Strategy::ElectionsCa,
12
+ GovKit::CA::PostalCode::Strategy::NDPCa,
13
+ # GovKit::CA::PostalCode::Strategy::LiberalCa,
14
+ GovKit::CA::PostalCode::Strategy::GreenPartyCa,
15
+ GovKit::CA::PostalCode::Strategy::CBCCa,
16
+ GovKit::CA::PostalCode::Strategy::ConservativeCa,
17
+ ]
18
+ end
19
+ end
20
+
21
+ describe '#register' do
22
+ it 'should append a strategy' do
23
+ GovKit::CA::PostalCode::StrategySet.register(strategy)
24
+ GovKit::CA::PostalCode::StrategySet.strategies.last.should == strategy
25
+ end
26
+ end
27
+
28
+ describe '#run' do
29
+ it 'should run the strategies' do
30
+ GovKit::CA::PostalCode::StrategySet.run('A1A1A1').should == [10007]
31
+ end
32
+ end
33
+
34
+ context 'with empty strategy set' do
35
+ before :each do
36
+ GovKit::CA::PostalCode::StrategySet.strategies.clear
37
+ end
38
+
39
+ describe '#strategies' do
40
+ it 'should return the strategies' do
41
+ GovKit::CA::PostalCode::StrategySet.strategies.should == []
42
+ end
43
+ end
44
+
45
+ describe '#register' do
46
+ it 'should add a strategy' do
47
+ GovKit::CA::PostalCode::StrategySet.register(strategy)
48
+ GovKit::CA::PostalCode::StrategySet.strategies.should == [strategy]
49
+ end
50
+ end
51
+
52
+ describe '#run' do
53
+ it 'should raise an error' do
54
+ expect{GovKit::CA::PostalCode::StrategySet.run('A1A1A1')}.to raise_error(GovKit::CA::ResourceNotFound)
55
+ end
56
+ end
57
+ end
5
58
  end
data/tasks/tasks.rb CHANGED
@@ -42,31 +42,3 @@ task :trim_postal_codes, :file do |t,args|
42
42
 
43
43
  puts postal_codes.sort
44
44
  end
45
-
46
- desc "Generate RSpec fixtures"
47
- task :generate_rspec_fixtures do |t,args|
48
- require 'fileutils'
49
-
50
- { 'CBCCa' => 'cbc_ca',
51
- 'ConservativeCa' => 'conservative_ca',
52
- 'DigitalCopyrightCa' => 'digital-copyright_ca',
53
- 'ElectionsCa' => 'elections_ca',
54
- 'GreenPartyCa' => 'greenparty_ca',
55
- 'LiberalCa' => 'liberal_ca',
56
- 'NDPCa' => 'ndp_ca',
57
- }.each do |const,path|
58
- require "gov_kit-ca/postal_code/strategy/#{path}"
59
- FileUtils.mkdir_p File.expand_path("../../spec/fixtures/#{path}", __FILE__)
60
-
61
- %w(A1A1A1 G0C2Y0 T5S2B9 K0A1K0 H0H0H0 X1B1B1).each do |postal_code|
62
- File.open(File.expand_path("../../spec/fixtures/#{path}/#{postal_code}.response", __FILE__), 'w') do |f|
63
- response = GovKit::CA::PostalCode::Strategy.const_get(const).new(postal_code).send(:response)
64
- f.write "HTTP/#{response.http_version} #{response.code} #{response.message}\n"
65
- response.headers.each_capitalized do |name,value|
66
- f.write "#{name}: #{value}\n"
67
- end
68
- f.write "\n#{response.body}"
69
- end
70
- end
71
- end
72
- end