Sha256: 6a5d6a7adb6dff97c37d98a4079ddebd707becb53d08cc2683723a2eca1d17e8

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

require 'net/http'
require 'json'
require 'nokogiri'
require 'open-uri'

class CongressV3::Request
  BASE_URI = 'https://congress.api.sunlightfoundation.com'
  attr_accessor :route, :params

  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 }
    @route = route
    @params = defaults.merge(params)
  end

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

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

    response
  end

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

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

    response
  end

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

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

    response
  end

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

  def request
    uri = URI(BASE_URI + route)
    uri.query = URI.encode_www_form(params)
    response = Net::HTTP.get(uri)
    CongressV3::Response.new(JSON.parse(response))
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
congress_v3-0.1.1 lib/congress_v3/request.rb
congress_v3-0.1.0 lib/congress_v3/request.rb