Class: CongressV3::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/congress_v3/request.rb

Constant Summary collapse

BASE_URI =
'https://congress.api.sunlightfoundation.com'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(route, params) ⇒ Request

Returns a new instance of Request.



11
12
13
14
15
16
17
18
19
# File 'lib/congress_v3/request.rb', line 11

def initialize(route, params)
  if !CongressV3::Config.api_key || CongressV3::Config.api_key.empty?
    raise Exception.new("API Key MUST be set!")
  end

  defaults = { page: 1, apikey: CongressV3::Config.api_key, per_page: 50 }
  @route = route
  @params = defaults.merge(params)
end

Instance Attribute Details

#paramsObject

Returns the value of attribute params.



9
10
11
# File 'lib/congress_v3/request.rb', line 9

def params
  @params
end

#routeObject

Returns the value of attribute route.



9
10
11
# File 'lib/congress_v3/request.rb', line 9

def route
  @route
end

Class Method Details

.bill_search(params) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/congress_v3/request.rb', line 41

def self.bill_search(params)
  response = new("/bills/search", params).request

  response.results.map! do |bill|
    CongressV3::Bill.new(bill)
  end

  response
end

.bill_text(uri) ⇒ Object



61
62
63
64
# File 'lib/congress_v3/request.rb', line 61

def self.bill_text(uri)
  html = Nokogiri::HTML(open(uri, allow_redirections: :all))
  html.css('body pre').text
end

.bill_votes(bill_id, params = {}) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/congress_v3/request.rb', line 66

def self.bill_votes(bill_id, params={})
  params[:bill_id] = bill_id
  params[:fields] = "voter_ids,chamber,vote_type,required,result,voted_at"
  response = new('/votes', params).request

  response
end

.bills(params) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/congress_v3/request.rb', line 31

def self.bills(params)
  response = new("/bills", params).request

  response.results.map! do |bill|
    CongressV3::Bill.new(bill)
  end

  response
end

.legislator_votes(legislator_id, params = {}) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/congress_v3/request.rb', line 74

def self.legislator_votes(legislator_id, params={})
  request = new('/votes', params)
  uri = URI(BASE_URI + '/votes')
  uri.query = URI.encode_www_form(request.params) + '&voter_ids.' + legislator_id
  response = request.parse_response_body(uri)

  response.results.map! do |vote|
    CongressV3::Vote.new(vote)
  end

  response
end

.legislators(params = {}) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/congress_v3/request.rb', line 21

def self.legislators(params={})
  response = new("/legislators", params).request

  response.results.map! do |legislator|
    CongressV3::Legislator.new(legislator)
  end

  response
end

.votes(params) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/congress_v3/request.rb', line 51

def self.votes(params)
  response = new('/votes', params).request

  response.results.map! do |vote|
    CongressV3::Vote.new(vote)
  end

  response
end

Instance Method Details

#parse_response_body(uri) ⇒ Object



93
94
95
96
97
# File 'lib/congress_v3/request.rb', line 93

def parse_response_body(uri)
  response_body = Net::HTTP.get(uri)
  json_response = JSON.parse(response_body)
  CongressV3::Response.new(json_response)
end

#requestObject



87
88
89
90
91
# File 'lib/congress_v3/request.rb', line 87

def request
  uri = URI(BASE_URI + route)
  uri.query = URI.encode_www_form(params)
  parse_response_body(uri)
end