open_parliament 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c3aedb0b5ca2f066d7af2cd90f96b18ad392f8a
4
- data.tar.gz: 5a6994212e32c030b8dd19102c5252af1ae783e8
3
+ metadata.gz: c98dbb25ff004ba689bba2aed053e95565c0647a
4
+ data.tar.gz: a7b70eae9faa073fa005bcfa99d34f04cb11d4b0
5
5
  SHA512:
6
- metadata.gz: e4c10bbf28368847002d4fb8a2ce1099a69adcfbdcca977e03d173d8e2cee78b4751d1eb71a863269f2161b59513010142d165f4b83700a1d06a5fc0c61016f4
7
- data.tar.gz: 0c32439aea2fb125d566c7d9d9d4525c03b888f9bba841d4c1104ba466ed0e365682a405ee19440ae808818d6134078963fdb91b05fe83b007855aad970ade5a
6
+ metadata.gz: 88b8228dab66079d676d531875a9e03b66a7547e22f8ac965df8199b36c37c7cbe94f2872c59bd65ecd55cbf92daab8c91d10e713e5711f357eb59c88934a353
7
+ data.tar.gz: 6303b731f2603d16c5437b49ce60c2225c4e24983a75fac9e60b7848b0822cc32cbad0f615c8924ba78ef63cef88b60ce23c1884220c1a669fdcf63c9bbfdca3
@@ -14,37 +14,27 @@ module OpenParliament
14
14
  API_URL = 'http://api.openparliament.ca'
15
15
 
16
16
  def self.bills(params = {})
17
- url = "/bills/"
18
- json = RequestService.make_request(url: url, method: :get, params: params)
19
- bills = json["objects"]
20
- bills.map { |bill_json| Bill.new(bill_json) }
17
+ bills_service = RequestService.new(Bill)
18
+ bills_service.get(params)
21
19
  end
22
20
 
23
21
  def self.committees(params = {})
24
- url = "/committees/"
25
- json = RequestService.make_request(url: url, method: :get, params: params)
26
- committees = json["objects"]
27
- committees.map { |committee_json| Committee.new(committee_json) }
22
+ committees_service = RequestService.new(Committee)
23
+ committees_service.get(params)
28
24
  end
29
25
 
30
26
  def self.debates(params = {})
31
- url = "/debates/"
32
- json = RequestService.make_request(url: url, method: :get, params: params)
33
- debates = json["objects"]
34
- debates.map { |debate_json| Debate.new(debate_json) }
27
+ debates_service = RequestService.new(Debate)
28
+ debates_service.get(params)
35
29
  end
36
30
 
37
31
  def self.votes(params = {})
38
- url = "/votes/"
39
- json = RequestService.make_request(url: url, method: :get, params: params)
40
- votes = json["objects"]
41
- votes.map { |vote_json| Vote.new(vote_json) }
32
+ votes_service = RequestService.new(Vote)
33
+ votes_service.get(params)
42
34
  end
43
35
 
44
36
  def self.politicians(params = {})
45
- url = "/politicians/"
46
- json = RequestService.make_request(url: url, method: :get, params: params)
47
- politicians = json["objects"]
48
- politicians.map { |politician_json| Politician.new(politician_json) }
37
+ politicians_service = RequestService.new(Politician)
38
+ politicians_service.get(params)
49
39
  end
50
40
  end
@@ -1,4 +1,23 @@
1
1
  module OpenParliament
2
2
  class Bill < OpenStruct
3
+
4
+ def self.resource_url
5
+ "/bills/"
6
+ end
7
+
8
+ def self.valid_filters
9
+ [
10
+ :introduced,
11
+ :law,
12
+ :legisinfo_id,
13
+ :number,
14
+ :private_member_bill,
15
+ :session,
16
+ :sponsor_politician,
17
+ :sponsor_politician_membership,
18
+ :status_code,
19
+ ]
20
+ end
21
+
3
22
  end
4
23
  end
@@ -1,4 +1,12 @@
1
1
  module OpenParliament
2
2
  class Committee < OpenStruct
3
+
4
+ def self.resource_url
5
+ "/committees/"
6
+ end
7
+
8
+ def self.valid_filters
9
+ [:session]
10
+ end
3
11
  end
4
12
  end
@@ -1,4 +1,17 @@
1
1
  module OpenParliament
2
2
  class Debate < OpenStruct
3
+
4
+ def self.resource_url
5
+ "/debates/"
6
+ end
7
+
8
+ def self.valid_filters
9
+ [
10
+ :date,
11
+ :number,
12
+ :session,
13
+ ]
14
+ end
15
+
3
16
  end
4
17
  end
@@ -1,4 +1,18 @@
1
1
  module OpenParliament
2
2
  class Politician < OpenStruct
3
+
4
+ def self.resource_url
5
+ "/politicians/"
6
+ end
7
+
8
+ def self.valid_filters
9
+ [
10
+ :family_name,
11
+ :given_name,
12
+ :include,
13
+ :name,
14
+ ]
15
+ end
16
+
3
17
  end
4
18
  end
@@ -1,33 +1,47 @@
1
1
  module OpenParliament
2
- module RequestService
2
+ class RequestService
3
3
 
4
4
  VALID_PARAMS = [:limit, :offset]
5
5
 
6
- def self.make_request(url:, method:, params: {})
7
- full_url = "#{OpenParliament::API_URL}#{url}"
6
+ def initialize(klass)
7
+ @klass = klass
8
+ end
9
+
10
+ def get(params = {})
11
+ json = make_request(url: @klass.resource_url, method: :get, params: params)
12
+ objects = json["objects"]
13
+ objects.map { |object_json| @klass.new(object_json) }
14
+ end
8
15
 
16
+
17
+ private
18
+
19
+ def make_request(url:, method:, params: {})
20
+ @params = params
21
+
22
+ full_url = "#{OpenParliament::API_URL}#{url}"
9
23
  resp = RestClient::Request.execute(method: method,
10
24
  url: full_url,
11
25
  timeout: 10,
12
- headers: build_headers(params),
26
+ headers: build_headers,
13
27
  )
14
28
  JSON.parse(resp)
15
29
  end
16
30
 
17
- def self.build_headers(params)
31
+ def build_headers
18
32
  {
19
33
  "API-Version" => "v1",
20
34
  accept: :json,
21
- params: build_params(params),
35
+ params: build_params,
22
36
  }
23
37
  end
24
38
 
25
- def self.build_params(params)
26
- allowed_params = params.select { |k| VALID_PARAMS.include?(k) }
27
- default_params.merge(allowed_params)
39
+ def build_params
40
+ filtered_params = @params.select { |k| (VALID_PARAMS + @klass.valid_filters).include?(k) }
41
+ default_params.merge(filtered_params)
28
42
  end
29
43
 
30
- def self.default_params
44
+ def default_params
31
45
  {
32
46
  limit: 20,
33
47
  offset: 0,
@@ -1,4 +1,22 @@
1
1
  module OpenParliament
2
2
  class Vote < OpenStruct
3
+
4
+ def self.resource_url
5
+ "/votes/"
6
+ end
7
+
8
+ def self.valid_filters
9
+ [
10
+ :bill,
11
+ :date,
12
+ :nay_total,
13
+ :number,
14
+ :paired_total,
15
+ :result,
16
+ :session,
17
+ :yea_total,
18
+ ]
19
+ end
20
+
3
21
  end
4
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_parliament
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dylan Runkel