open_parliament 0.1.0 → 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.
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