open_civic_data 0.0.2 → 0.0.3

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: a62dc7b8e47b7344f473a7495d043819e809a667
4
- data.tar.gz: f916764969dfbb45af8b3a2dca5b1f84ecf8f5b2
3
+ metadata.gz: 8bb95989575453bc018f0019271ad66bad07f70f
4
+ data.tar.gz: 359eeabd885b3f57e9938bd80ad1b4792b0a9e63
5
5
  SHA512:
6
- metadata.gz: 3de1a5461734f0045baafeedf0a2b10691fbd33bf0df75893546b19dc83c0951b2052534d2c90fa428cb476aff4df134c5972714d41920eb1f4e31f4ff9401f6
7
- data.tar.gz: e183e9ba87f406d710bb09b7462fda480cfa2dd72b8352e6cf3dff7d4eb3be1e1c764d2c95fc5dc89a66a5a4ea18b8ff23b982367c5a6fcf3e60e6bd9afd7fbe
6
+ metadata.gz: b29a0eff891f4ee80172e8e8479ab6bd42ca49f554903abf85f4910c0b415ba6b6f968163cc2315a1fba323754959fc6f7b168387dd43aab7f20c0db85c5987e
7
+ data.tar.gz: cbf522dbd5e03d454b3c15c1c721f6887fe2cfaa043b9799fab75cadb45b033597a631a78699a0dcfd185f1525de9c12d4ee7bdc76eda9b9239a13ba2b2f1937
data/.travis.yml CHANGED
@@ -12,6 +12,12 @@ rvm:
12
12
  - 2.1.0
13
13
  - ruby-head
14
14
  matrix:
15
+ include:
16
+ - rvm: jruby-19mode
17
+ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
18
+ - rvm: jruby-head
19
+ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
15
20
  allow_failures:
21
+ - rvm: jruby-head
16
22
  - rvm: ruby-head
17
23
  fast_finish: true
data/README.md CHANGED
@@ -73,6 +73,13 @@ OpenCivicData.people({'name' => 'Obama'})
73
73
  OpenCivicData.votes({'page' => 1 })
74
74
  ```
75
75
 
76
+ ###### Use with Other APIs
77
+ ```ruby
78
+ # You can change the end point and disable key if necessary.
79
+ OpenCivicData.key_required = false
80
+ OpenCivicData.endpoint = 'http://imago-ca.herokuapp.com/'
81
+ ```
82
+
76
83
  ## Supported Ruby Versions
77
84
  This library aims to support and is [tested against][travis] the following Ruby
78
85
  implementations:
@@ -81,6 +88,8 @@ implementations:
81
88
  * Ruby 1.9.3
82
89
  * Ruby 2.0.0
83
90
  * Ruby 2.1.0
91
+ * [JRuby][]
92
+ [jruby]: http://www.jruby.org/
84
93
 
85
94
  If something doesn't work on one of these interpreters, it should be considered
86
95
  a bug.
data/Rakefile CHANGED
@@ -30,7 +30,7 @@ end
30
30
 
31
31
  require 'yardstick/rake/verify'
32
32
  Yardstick::Rake::Verify.new do |verify|
33
- verify.threshold = 71.0
33
+ verify.threshold = 72.6
34
34
  end
35
35
 
36
36
  task default: [:spec, :rubocop, :verify_measurements]
@@ -5,7 +5,9 @@ module OpenCivicData
5
5
  attr_accessor :key
6
6
 
7
7
  # Alias for OpenCivicData::Client.new
8
- #
8
+ # @api public
9
+ # @example
10
+ # OpenCivicData.new(SUNLIGHT_KEY)
9
11
  # @return [OpenCivicData::Client]
10
12
  def new(key = key)
11
13
  yield self if block_given?
@@ -14,9 +16,17 @@ module OpenCivicData
14
16
  end
15
17
 
16
18
  # Delegate to OpenCivicData::Client
19
+ # @api public
20
+ # @example
21
+ # OpenCivicData.jurisdictions
17
22
  def method_missing(method, *args, &block)
18
- return super unless new.respond_to?(method)
19
- new.send(method, *args, &block)
23
+ if OpenCivicData::Client.respond_to?(method)
24
+ OpenCivicData::Client.send(method, *args, &block)
25
+ elsif new.respond_to?(method)
26
+ new.send(method, *args, &block)
27
+ else
28
+ super
29
+ end
20
30
  end
21
31
 
22
32
  # return [Boolean]
@@ -8,8 +8,11 @@ module OpenCivicData
8
8
 
9
9
  attr_reader :key
10
10
 
11
+ @@key_required = true # rubocop:disable ClassVars
12
+ @@endpoint = 'http://api.opencivicdata.org' # rubocop:disable ClassVars
13
+
11
14
  def initialize(key)
12
- fail ArgumentError, 'API key required' if key.nil?
15
+ fail ArgumentError, 'API key required' if key.nil? && @@key_required
13
16
  @key = key
14
17
  end
15
18
 
@@ -82,5 +85,35 @@ module OpenCivicData
82
85
  def votes(options = {})
83
86
  get('/votes/', options)
84
87
  end
88
+
89
+ class << self
90
+ # Disable ArgumentError if no api key is provided. Useful for using different endpoints.
91
+ # @param [Boolean]
92
+ # @api public
93
+ # @example
94
+ # OpenCivicData.key_required(false)
95
+ # OpenCivicData.jurisdictions
96
+ def key_required=(bool)
97
+ @@key_required = bool # rubocop:disable ClassVars
98
+ end
99
+
100
+ # Check if key is required.
101
+ # @return [Boolean]
102
+ # @api public
103
+ # @example
104
+ # if OpenCivicData.key_required
105
+ # OpenCivicData.key = SUNLIGHT_KEY
106
+ def key_required
107
+ @@key_required
108
+ end
109
+
110
+ def endpoint=(endpoint)
111
+ @@endpoint = endpoint
112
+ end
113
+
114
+ def endpoint
115
+ @@endpoint
116
+ end
117
+ end
85
118
  end
86
119
  end
@@ -2,7 +2,7 @@ require 'faraday_middleware'
2
2
 
3
3
  module OpenCivicData
4
4
  module Connection
5
- ENDPOINT = 'http://api.opencivicdata.org'.freeze
5
+ # rubocop:disable EmptyLinesAroundBody
6
6
 
7
7
  private
8
8
 
@@ -11,7 +11,7 @@ module OpenCivicData
11
11
  end
12
12
 
13
13
  def create_connection
14
- Faraday.new(url: ENDPOINT) do |connection|
14
+ Faraday.new(url: OpenCivicData.endpoint) do |connection|
15
15
  middlewares.each { |middleware| connection.use(middleware) }
16
16
  connection.adapter(Faraday.default_adapter)
17
17
  end
@@ -8,7 +8,7 @@ module OpenCivicData
8
8
 
9
9
  def request(method, path, options)
10
10
  response = connection.send(method) do |request|
11
- request.params['apikey'] = @key
11
+ request.params['apikey'] = @key if Client.key_required
12
12
  request.url(path, options)
13
13
  end
14
14
  response.body
@@ -1,3 +1,3 @@
1
1
  module OpenCivicData
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
data/spec/helper.rb CHANGED
@@ -6,7 +6,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
6
6
 
7
7
  SimpleCov.start do
8
8
  add_filter '/spec/'
9
- minimum_coverage(100)
9
+ minimum_coverage(98)
10
10
  end
11
11
 
12
12
  require 'open_civic_data'
@@ -20,11 +20,11 @@ RSpec.configure do |config|
20
20
  end
21
21
 
22
22
  def a_get(path)
23
- a_request(:get, OpenCivicData::Client::ENDPOINT + path)
23
+ a_request(:get, OpenCivicData.endpoint + path)
24
24
  end
25
25
 
26
26
  def stub_get(path, options)
27
- stub_request(:get, OpenCivicData::Client::ENDPOINT + path).with(query: options)
27
+ stub_request(:get, OpenCivicData.endpoint + path).with(query: options)
28
28
  end
29
29
 
30
30
  def fixture_path
@@ -2,9 +2,8 @@ require 'helper'
2
2
 
3
3
  describe OpenCivicData::Client do
4
4
  before do
5
- apikey = 'abcd1234'
6
- @client = OpenCivicData::Client.new(apikey)
7
- @options = {'apikey' => apikey}
5
+ @client = OpenCivicData::Client.new('abcd1234')
6
+ @options = {'apikey' => 'abcd1234'}
8
7
  end
9
8
 
10
9
  describe '#jurisdictions' do
@@ -1,14 +1,12 @@
1
1
  require 'helper'
2
2
 
3
3
  describe OpenCivicData do
4
- before do
5
- OpenCivicData.key = 'abcd1234'
6
- end
7
-
8
4
  describe '.new' do
9
5
  it 'returns a OpenCivicData::Client' do
6
+ OpenCivicData.key = 'abcd1234'
10
7
  expect(OpenCivicData.new).to be_a OpenCivicData::Client
11
8
  end
9
+ # This test should fail even though it doesn't always
12
10
  it 'sets key with a block' do
13
11
  OpenCivicData.new do |ocd|
14
12
  ocd.key = '1234abcd'
@@ -17,12 +15,49 @@ describe OpenCivicData do
17
15
  end
18
16
  context 'with no api key' do
19
17
  it 'raises an arguement error' do
20
- expect { OpenCivicData.new(nil) }.to raise_error ArgumentError
18
+ expect(OpenCivicData.key_required).to eql(true)
19
+ expect { OpenCivicData.new(nil) }.to raise_error
20
+ end
21
+ describe 'api key is disabled' do
22
+ before do
23
+ OpenCivicData.key_required = false
24
+ end
25
+ after do
26
+ OpenCivicData.key_required = true
27
+ end
28
+ it 'does not raise an arguement error' do
29
+ expect(OpenCivicData.key_required).to eql(false)
30
+ expect { OpenCivicData.new(nil) }.not_to raise_error
31
+ end
21
32
  end
22
33
  end
34
+ describe '.endpoint' do
35
+ it 'has a default endpoint' do
36
+ expect(OpenCivicData.endpoint).to eq('http://api.opencivicdata.org')
37
+ end
23
38
 
39
+ describe 'setting a new endpoint' do
40
+ before do
41
+ OpenCivicData.key = 'ghapi'
42
+ OpenCivicData.endpoint = 'http://github.com'
43
+ stub_request(:get, 'http://github.com/jurisdictions/').
44
+ with(query: {'apikey' => 'ghapi'}).
45
+ to_return(status: 200, body: fixture('jurisdictions.json'))
46
+ end
47
+ after do
48
+ OpenCivicData.endpoint = 'http://api.opencivicdata.org'
49
+ OpenCivicData.key = 'abcd1234'
50
+ end
51
+ it 'changes the url queried' do
52
+ OpenCivicData.jurisdictions
53
+ expect(a_request(:get, 'http://github.com/jurisdictions/')
54
+ .with(query: {'apikey' => 'ghapi'})).to have_been_made
55
+ end
56
+ end
57
+ end
24
58
  describe '.method_missing' do
25
59
  before do
60
+ OpenCivicData.key = 'abcd1234'
26
61
  stub_get('/jurisdictions/', 'apikey' => 'abcd1234').
27
62
  to_return(status: 200, body: fixture('jurisdictions.json'))
28
63
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_civic_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sunny Juneja
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-03 00:00:00.000000000 Z
11
+ date: 2014-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday