open311 0.1.2 → 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.
- data/.autotest +1 -0
- data/.travis.yml +6 -0
- data/.yardopts +1 -1
- data/Gemfile +4 -6
- data/{LICENSE.mkd → LICENSE.md} +0 -0
- data/{README.mkd → README.md} +24 -18
- data/Rakefile +3 -1
- data/lib/faraday/response/raise_error.rb +31 -0
- data/lib/open311.rb +18 -39
- data/lib/open311/client/connection.rb +9 -8
- data/lib/open311/client/request.rb +5 -5
- data/lib/open311/error.rb +28 -0
- data/lib/open311/version.rb +1 -1
- data/open311.gemspec +29 -30
- data/spec/faraday/response_spec.rb +33 -0
- data/spec/helper.rb +3 -7
- data/spec/open311_spec.rb +26 -9
- metadata +20 -16
- data/lib/faraday/multipart.rb +0 -29
- data/lib/faraday/raise_error.rb +0 -40
data/.autotest
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'autotest/bundler'
|
data/.travis.yml
ADDED
data/.yardopts
CHANGED
data/Gemfile
CHANGED
@@ -1,10 +1,6 @@
|
|
1
|
-
source
|
2
|
-
|
3
|
-
# Specify the gem's dependencies in open311.gemspec
|
4
|
-
gemspec
|
1
|
+
source 'http://rubygems.org'
|
5
2
|
|
6
3
|
group :development do
|
7
|
-
|
8
4
|
platform :mri_18 do
|
9
5
|
gem 'ruby-debug'
|
10
6
|
end
|
@@ -12,5 +8,7 @@ group :development do
|
|
12
8
|
platform :mri_19 do
|
13
9
|
gem 'ruby-debug19'
|
14
10
|
end
|
15
|
-
|
16
11
|
end
|
12
|
+
|
13
|
+
# Specify the gem's dependencies in open311.gemspec
|
14
|
+
gemspec
|
data/{LICENSE.mkd → LICENSE.md}
RENAMED
File without changes
|
data/{README.mkd → README.md}
RENAMED
@@ -4,53 +4,57 @@ A Ruby wrapper for the Open311 API v2.
|
|
4
4
|
|
5
5
|
Does your project or organization use this gem?
|
6
6
|
------------------------------------------
|
7
|
-
Add it to the [apps](
|
7
|
+
Add it to the [apps](https://github.com/codeforamerica/open311/wiki/apps) wiki!
|
8
8
|
|
9
9
|
Installation
|
10
10
|
------------
|
11
|
-
|
11
|
+
gem install open311
|
12
12
|
|
13
13
|
Documentation
|
14
14
|
-------------
|
15
|
-
|
15
|
+
[http://rdoc.info/gems/open311](http://rdoc.info/gems/open311)
|
16
|
+
|
17
|
+
Continuous Integration
|
18
|
+
----------------------
|
19
|
+
[](http://travis-ci.org/codeforamerica/open311)
|
16
20
|
|
17
21
|
Usage Examples
|
18
22
|
--------------
|
19
23
|
require 'open311'
|
20
|
-
|
24
|
+
|
21
25
|
# Certain methods require an API key
|
22
26
|
Open311.configure do |config|
|
23
27
|
config.endpoint = 'https://open311.sfgov.org/dev/v2/'
|
24
28
|
config.api_key = 'yourkeyforpostrequests'
|
25
29
|
config.jurisdiction = 'sfgov.org'
|
26
30
|
end
|
27
|
-
|
31
|
+
|
28
32
|
# Provide a list of acceptable 311 service request types and their associated service codes
|
29
33
|
Open311.service_list
|
30
|
-
|
34
|
+
|
31
35
|
# If meta data is available, provide attributes and definition for the service code
|
32
36
|
Open311.service_definition('033')
|
33
|
-
|
37
|
+
|
34
38
|
# Grab service requests, limited to 90 days or 1000 entries
|
35
39
|
Open311.service_requests
|
36
|
-
|
40
|
+
|
37
41
|
# Grab a service request, requires ID
|
38
42
|
Open311.get_service_request('12345')
|
39
|
-
|
43
|
+
|
40
44
|
# Post a service request, requires an api key
|
41
45
|
Open311.post_service_request
|
42
|
-
|
46
|
+
|
43
47
|
# Get a service_request_id using a token after a post_service_request
|
44
48
|
Open311.request_id('12345')
|
45
|
-
|
49
|
+
|
46
50
|
# Get service requests with certain parameters (service_code, start_date, end_date, status)
|
47
51
|
Open311.service_requests("status" => "opened")
|
48
|
-
Open311.service_requests({"status" => "opened", "service_code"=>"broken-streetlight-report", "start_date" => "2010-03-12T03:19:52Z", "end_date" => "2010-03-14T03:19:52Z"})
|
49
|
-
|
52
|
+
Open311.service_requests({"status" => "opened", "service_code"=>"broken-streetlight-report", "start_date" => "2010-03-12T03:19:52Z", "end_date" => "2010-03-14T03:19:52Z"})
|
53
|
+
|
50
54
|
# Use Time.now
|
51
55
|
require 'time'
|
52
56
|
Open311.service_requests({"start_date" => (Time.now - 86400).xmlschema, "end_date" => Time.now.xmlschema}) // last 24 hours
|
53
|
-
|
57
|
+
|
54
58
|
# Get multiple service requests by ids, comma separated
|
55
59
|
Open311.service_requests({"service_request_id" => "101000119824,101000119823"})
|
56
60
|
|
@@ -67,15 +71,15 @@ Here are some ways *you* can contribute:
|
|
67
71
|
* by writing specifications
|
68
72
|
* by writing code (**no patch is too small**: fix typos, add comments, clean up inconsistent whitespace)
|
69
73
|
* by refactoring code
|
70
|
-
* by resolving [issues](
|
74
|
+
* by resolving [issues](https://github.com/codeforamerica/open311/issues)
|
71
75
|
* by reviewing patches
|
72
76
|
|
73
77
|
Submitting an Issue
|
74
78
|
-------------------
|
75
|
-
We use the [GitHub issue tracker](
|
79
|
+
We use the [GitHub issue tracker](https://github.com/codeforamerica/open311/issues) to track bugs and
|
76
80
|
features. Before submitting a bug report or feature request, check to make sure it hasn't already
|
77
81
|
been submitted. You can indicate support for an existing issuse by voting it up. When submitting a
|
78
|
-
bug report, please include a [Gist](
|
82
|
+
bug report, please include a [Gist](https://gist.github.com/) that includes a stack trace and any
|
79
83
|
details that may be necessary to reproduce the bug, including your gem version, Ruby version, and
|
80
84
|
operating system. Ideally, a bug report should include a pull request with failing specs.
|
81
85
|
|
@@ -94,4 +98,6 @@ Submitting a Pull Request
|
|
94
98
|
Copyright
|
95
99
|
---------
|
96
100
|
Copyright (c) 2010 Code for America Laboratories
|
97
|
-
See [LICENSE](https://github.com/
|
101
|
+
See [LICENSE](https://github.com/codeforamerica/open311/blob/master/LICENSE.md) for details.
|
102
|
+
|
103
|
+
[](http://stats.codeforamerica.org/projects/open311)
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
1
3
|
require 'bundler'
|
2
4
|
Bundler::GemHelper.install_tasks
|
3
5
|
|
@@ -10,7 +12,7 @@ task :default => :spec
|
|
10
12
|
namespace :doc do
|
11
13
|
require 'yard'
|
12
14
|
YARD::Rake::YardocTask.new do |task|
|
13
|
-
task.files = ['LICENSE.
|
15
|
+
task.files = ['LICENSE.md', 'lib/**/*.rb']
|
14
16
|
task.options = [
|
15
17
|
'--no-private',
|
16
18
|
'--protected',
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
module Faraday
|
5
|
+
class Response::RaiseError < Response::Middleware
|
6
|
+
def on_complete(response)
|
7
|
+
case response[:status].to_i
|
8
|
+
when 400
|
9
|
+
raise Open311::BadRequest, error_message(response)
|
10
|
+
when 401
|
11
|
+
raise Open311::Unauthorized, error_message(response)
|
12
|
+
when 403
|
13
|
+
raise Open311::Forbidden, error_message(response)
|
14
|
+
when 404
|
15
|
+
raise Open311::NotFound, error_message(response)
|
16
|
+
when 406
|
17
|
+
raise Open311::NotAcceptable, error_message(response)
|
18
|
+
when 500
|
19
|
+
raise Open311::InternalServerError, error_message(response)
|
20
|
+
when 502
|
21
|
+
raise Open311::BadGateway, error_message(response)
|
22
|
+
when 503
|
23
|
+
raise Open311::ServiceUnavailable, error_message(response)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def error_message(response)
|
28
|
+
"#{response[:method].to_s.upcase} #{response[:url].to_s}: #{response[:response_headers]['status']}#{(': ' + response[:body]['error']) if response[:body] && response[:body]['error']}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/open311.rb
CHANGED
@@ -1,46 +1,25 @@
|
|
1
1
|
require 'open311/configuration'
|
2
2
|
require 'open311/client'
|
3
|
+
require 'open311/error'
|
3
4
|
|
4
5
|
module Open311
|
5
6
|
extend Configuration
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
class << self
|
8
|
+
# Alias for Open311::Client.new
|
9
|
+
#
|
10
|
+
# @return [Open311::Client]
|
11
|
+
def new(options={})
|
12
|
+
Open311::Client.new(options)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Delegate to Open311::Client
|
16
|
+
def method_missing(method, *args, &block)
|
17
|
+
return super unless new.respond_to?(method)
|
18
|
+
new.send(method, *args, &block)
|
19
|
+
end
|
20
|
+
|
21
|
+
def respond_to?(method, include_private=false)
|
22
|
+
new.respond_to?(method, include_private) || super(method, include_private)
|
23
|
+
end
|
18
24
|
end
|
19
|
-
|
20
|
-
# Custom error class for rescuing from all Open311 errors
|
21
|
-
class Error < StandardError; end
|
22
|
-
|
23
|
-
# Raised when Open311 returns a 400 HTTP status code
|
24
|
-
class BadRequest < Error; end
|
25
|
-
|
26
|
-
# Raised when Open311 returns a 401 HTTP status code
|
27
|
-
class Unauthorized < Error; end
|
28
|
-
|
29
|
-
# Raised when Open311 returns a 403 HTTP status code
|
30
|
-
class Forbidden < Error; end
|
31
|
-
|
32
|
-
# Raised when Open311 returns a 404 HTTP status code
|
33
|
-
class NotFound < Error; end
|
34
|
-
|
35
|
-
# Raised when Open311 returns a 406 HTTP status code
|
36
|
-
class NotAcceptable < Error; end
|
37
|
-
|
38
|
-
# Raised when Open311 returns a 500 HTTP status code
|
39
|
-
class InternalServerError < Error; end
|
40
|
-
|
41
|
-
# Raised when Open311 returns a 502 HTTP status code
|
42
|
-
class BadGateway < Error; end
|
43
|
-
|
44
|
-
# Raised when Open311 returns a 503 HTTP status code
|
45
|
-
class ServiceUnavailable < Error; end
|
46
25
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'faraday_middleware'
|
2
|
-
require 'faraday/
|
3
|
-
require 'faraday/raise_error'
|
2
|
+
require 'faraday/response/raise_error'
|
4
3
|
|
5
4
|
module Open311
|
6
5
|
class Client
|
@@ -16,17 +15,19 @@ module Open311
|
|
16
15
|
:url => endpoint
|
17
16
|
}
|
18
17
|
|
19
|
-
Faraday
|
18
|
+
Faraday.new(options) do |connection|
|
20
19
|
connection.use Faraday::Request::Multipart
|
21
|
-
connection.adapter(adapter)
|
22
|
-
connection.use Faraday::Response::RaiseError
|
23
20
|
unless raw
|
21
|
+
connection.use Faraday::Response::Mashify
|
24
22
|
case format.to_s.downcase
|
25
|
-
when 'json'
|
26
|
-
|
23
|
+
when 'json'
|
24
|
+
connection.use Faraday::Response::ParseJson
|
25
|
+
when 'xml'
|
26
|
+
connection.use Faraday::Response::ParseXml
|
27
27
|
end
|
28
|
-
connection.use Faraday::Response::Mashify
|
29
28
|
end
|
29
|
+
connection.use Faraday::Response::RaiseError
|
30
|
+
connection.adapter(adapter)
|
30
31
|
end
|
31
32
|
end
|
32
33
|
end
|
@@ -22,11 +22,11 @@ module Open311
|
|
22
22
|
def request(method, path, options, raw)
|
23
23
|
response = connection(raw).send(method) do |request|
|
24
24
|
case method
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
when :get, :delete
|
26
|
+
request.url(formatted_path(path), options)
|
27
|
+
when :post, :put
|
28
|
+
request.path = formatted_path(path)
|
29
|
+
request.body = options unless options.empty?
|
30
30
|
end
|
31
31
|
end
|
32
32
|
raw ? response : response.body
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Open311
|
2
|
+
# Custom error class for rescuing from all Open311 errors
|
3
|
+
class Error < StandardError; end
|
4
|
+
|
5
|
+
# Raised when Open311 returns a 400 HTTP status code
|
6
|
+
class BadRequest < Error; end
|
7
|
+
|
8
|
+
# Raised when Open311 returns a 401 HTTP status code
|
9
|
+
class Unauthorized < Error; end
|
10
|
+
|
11
|
+
# Raised when Open311 returns a 403 HTTP status code
|
12
|
+
class Forbidden < Error; end
|
13
|
+
|
14
|
+
# Raised when Open311 returns a 404 HTTP status code
|
15
|
+
class NotFound < Error; end
|
16
|
+
|
17
|
+
# Raised when Open311 returns a 406 HTTP status code
|
18
|
+
class NotAcceptable < Error; end
|
19
|
+
|
20
|
+
# Raised when Open311 returns a 500 HTTP status code
|
21
|
+
class InternalServerError < Error; end
|
22
|
+
|
23
|
+
# Raised when Open311 returns a 502 HTTP status code
|
24
|
+
class BadGateway < Error; end
|
25
|
+
|
26
|
+
# Raised when Open311 returns a 503 HTTP status code
|
27
|
+
class ServiceUnavailable < Error; end
|
28
|
+
end
|
data/lib/open311/version.rb
CHANGED
data/open311.gemspec
CHANGED
@@ -1,36 +1,35 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
require File.expand_path('../lib/open311/version', __FILE__)
|
3
3
|
|
4
|
-
Gem::Specification.new do |
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.add_development_dependency 'json_pure', '~> 1.5'
|
6
|
+
gem.add_development_dependency 'maruku', '~> 0.6'
|
7
|
+
gem.add_development_dependency 'nokogiri', '~> 1.4'
|
8
|
+
gem.add_development_dependency 'rake', '~> 0.9'
|
9
|
+
gem.add_development_dependency 'rspec', '~> 2.6'
|
10
|
+
gem.add_development_dependency 'simplecov', '~> 0.4'
|
11
|
+
gem.add_development_dependency 'webmock', '~> 1.5'
|
12
|
+
gem.add_development_dependency 'yard', '~> 0.7'
|
13
|
+
gem.add_development_dependency 'ZenTest', '~> 4.5'
|
14
|
+
gem.add_runtime_dependency 'hashie', '~> 1.0.0'
|
15
|
+
gem.add_runtime_dependency 'faraday', '~> 0.6.0'
|
16
|
+
gem.add_runtime_dependency 'faraday_middleware', '~> 0.6.0'
|
17
|
+
gem.add_runtime_dependency 'multi_json', '~> 1.0.0'
|
18
|
+
gem.add_runtime_dependency 'multi_xml', '~> 0.2.0'
|
19
|
+
gem.authors = ["Dan Melton", "Erik Michaels-Ober"]
|
20
|
+
gem.description = %q{A Ruby wrapper for the Open311 API v2.}
|
21
|
+
gem.post_install_message =<<eos
|
22
22
|
Using this gem in your project or organization? Add it to the apps wiki!
|
23
|
-
https://github.com/
|
23
|
+
https://github.com/codeforamerica/open311/wiki/apps
|
24
24
|
eos
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
s.version = Open311::VERSION
|
25
|
+
gem.email = ['dan@codeforamerica.org', 'erik@codeforamerica.org']
|
26
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
27
|
+
gem.files = `git ls-files`.split("\n")
|
28
|
+
gem.homepage = 'https://github.com/codeforamerica/open311'
|
29
|
+
gem.name = 'open311'
|
30
|
+
gem.require_paths = ['lib']
|
31
|
+
gem.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
|
32
|
+
gem.summary = gem.description
|
33
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
34
|
+
gem.version = Open311::VERSION
|
36
35
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Faraday::Response do
|
4
|
+
{
|
5
|
+
400 => Open311::BadRequest,
|
6
|
+
401 => Open311::Unauthorized,
|
7
|
+
403 => Open311::Forbidden,
|
8
|
+
404 => Open311::NotFound,
|
9
|
+
406 => Open311::NotAcceptable,
|
10
|
+
500 => Open311::InternalServerError,
|
11
|
+
502 => Open311::BadGateway,
|
12
|
+
503 => Open311::ServiceUnavailable,
|
13
|
+
}.each do |status, exception|
|
14
|
+
context "when HTTP status is #{status}" do
|
15
|
+
|
16
|
+
before do
|
17
|
+
Open311.configure do |config|
|
18
|
+
config.endpoint = 'http://api.dc.org/open311/v2_dev/'
|
19
|
+
config.jurisdiction = 'dc.gov'
|
20
|
+
end
|
21
|
+
stub_request(:get, 'http://api.dc.org/open311/v2_dev/services.xml').
|
22
|
+
with(:query => {:jurisdiction_id => 'dc.gov'}).
|
23
|
+
to_return(:status => status)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should raise #{exception.name} error" do
|
27
|
+
lambda do
|
28
|
+
Open311.service_list
|
29
|
+
end.should raise_error(exception)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/spec/helper.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
|
+
$:.unshift File.expand_path('..', __FILE__)
|
2
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
1
3
|
require 'simplecov'
|
2
|
-
SimpleCov.start
|
3
|
-
add_group 'Open311', 'lib/open311'
|
4
|
-
add_group 'Faraday', 'lib/faraday'
|
5
|
-
end
|
4
|
+
SimpleCov.start
|
6
5
|
require 'open311'
|
7
6
|
require 'rspec'
|
8
7
|
require 'webmock/rspec'
|
9
|
-
RSpec.configure do |config|
|
10
|
-
config.include WebMock::API
|
11
|
-
end
|
12
8
|
|
13
9
|
def fixture_path
|
14
10
|
File.expand_path("../fixtures", __FILE__)
|
data/spec/open311_spec.rb
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
+
describe Open311 do
|
4
|
+
after do
|
5
|
+
Open311.reset
|
6
|
+
end
|
7
|
+
|
8
|
+
describe ".respond_to?" do
|
9
|
+
it "should return true if method exists" do
|
10
|
+
Open311.respond_to?(:new, true).should be_true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ".new" do
|
15
|
+
it "should be a Open311::Client" do
|
16
|
+
Open311.new.should be_a Open311::Client
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
3
21
|
describe Open311, ".service_list" do
|
4
22
|
before do
|
5
23
|
Open311.configure do |config|
|
@@ -108,7 +126,12 @@ describe Open311, ".post_service_request" do
|
|
108
126
|
config.api_key = 'xyz'
|
109
127
|
end
|
110
128
|
|
111
|
-
|
129
|
+
stub_request(:post, 'blasius.ws:3003/open311/requests.xml').
|
130
|
+
to_return(:body => fixture('post_service_request.xml'), :headers => {'Content-Type' => 'text/xml; charset=utf-8'})
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should return the correct results" do
|
134
|
+
service_request_params = {
|
112
135
|
:service_code => '001',
|
113
136
|
:address_string => '1234 5th street',
|
114
137
|
:email => 'smit222@sfgov.edu',
|
@@ -118,17 +141,11 @@ describe Open311, ".post_service_request" do
|
|
118
141
|
:last_name => 'smith',
|
119
142
|
:phone => '111111111',
|
120
143
|
:description => 'A large sinkhole is destroying the street',
|
121
|
-
:media_url => 'http://
|
144
|
+
:media_url => 'http://farm5.static.flickr.com/4057/4660699337_9aa4541ce1_o.jpg',
|
122
145
|
:lat => '38.888486',
|
123
146
|
:long => '-77.020179',
|
124
147
|
}
|
125
|
-
|
126
|
-
with(:body => {:jurisdiction_id => 'dc.gov', :api_key => 'xyz'}.merge(@service_request_params)).
|
127
|
-
to_return(:body => fixture('post_service_request.xml'), :headers => {'Content-Type' => 'text/xml; charset=utf-8'})
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should return the correct results" do
|
131
|
-
service_request_response = Open311.post_service_request(@service_request_params)
|
148
|
+
service_request_response = Open311.post_service_request(service_request_params)
|
132
149
|
service_request_response.service_request_id.should == '293944'
|
133
150
|
end
|
134
151
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: open311
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Dan Melton
|
@@ -11,11 +11,11 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-
|
14
|
+
date: 2011-06-23 00:00:00 -07:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
|
-
name:
|
18
|
+
name: json_pure
|
19
19
|
prerelease: false
|
20
20
|
requirement: &id001 !ruby/object:Gem::Requirement
|
21
21
|
none: false
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
requirements:
|
56
56
|
- - ~>
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: "0.
|
58
|
+
version: "0.9"
|
59
59
|
type: :development
|
60
60
|
version_requirements: *id004
|
61
61
|
- !ruby/object:Gem::Dependency
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: "2.
|
69
|
+
version: "2.6"
|
70
70
|
type: :development
|
71
71
|
version_requirements: *id005
|
72
72
|
- !ruby/object:Gem::Dependency
|
@@ -99,7 +99,7 @@ dependencies:
|
|
99
99
|
requirements:
|
100
100
|
- - ~>
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: "0.
|
102
|
+
version: "0.7"
|
103
103
|
type: :development
|
104
104
|
version_requirements: *id008
|
105
105
|
- !ruby/object:Gem::Dependency
|
@@ -132,7 +132,7 @@ dependencies:
|
|
132
132
|
requirements:
|
133
133
|
- - ~>
|
134
134
|
- !ruby/object:Gem::Version
|
135
|
-
version: 0.
|
135
|
+
version: 0.6.0
|
136
136
|
type: :runtime
|
137
137
|
version_requirements: *id011
|
138
138
|
- !ruby/object:Gem::Dependency
|
@@ -143,7 +143,7 @@ dependencies:
|
|
143
143
|
requirements:
|
144
144
|
- - ~>
|
145
145
|
- !ruby/object:Gem::Version
|
146
|
-
version: 0.
|
146
|
+
version: 0.6.0
|
147
147
|
type: :runtime
|
148
148
|
version_requirements: *id012
|
149
149
|
- !ruby/object:Gem::Dependency
|
@@ -154,7 +154,7 @@ dependencies:
|
|
154
154
|
requirements:
|
155
155
|
- - ~>
|
156
156
|
- !ruby/object:Gem::Version
|
157
|
-
version: 0.0
|
157
|
+
version: 1.0.0
|
158
158
|
type: :runtime
|
159
159
|
version_requirements: *id013
|
160
160
|
- !ruby/object:Gem::Dependency
|
@@ -179,24 +179,27 @@ extensions: []
|
|
179
179
|
extra_rdoc_files: []
|
180
180
|
|
181
181
|
files:
|
182
|
+
- .autotest
|
182
183
|
- .gemtest
|
183
184
|
- .gitignore
|
184
185
|
- .rspec
|
186
|
+
- .travis.yml
|
185
187
|
- .yardopts
|
186
188
|
- Gemfile
|
187
|
-
- LICENSE.
|
188
|
-
- README.
|
189
|
+
- LICENSE.md
|
190
|
+
- README.md
|
189
191
|
- Rakefile
|
190
|
-
- lib/faraday/
|
191
|
-
- lib/faraday/raise_error.rb
|
192
|
+
- lib/faraday/response/raise_error.rb
|
192
193
|
- lib/open311.rb
|
193
194
|
- lib/open311/client.rb
|
194
195
|
- lib/open311/client/connection.rb
|
195
196
|
- lib/open311/client/request.rb
|
196
197
|
- lib/open311/client/service.rb
|
197
198
|
- lib/open311/configuration.rb
|
199
|
+
- lib/open311/error.rb
|
198
200
|
- lib/open311/version.rb
|
199
201
|
- open311.gemspec
|
202
|
+
- spec/faraday/response_spec.rb
|
200
203
|
- spec/fixtures/403.xml
|
201
204
|
- spec/fixtures/get_service_request.xml
|
202
205
|
- spec/fixtures/post_service_request.xml
|
@@ -207,12 +210,12 @@ files:
|
|
207
210
|
- spec/helper.rb
|
208
211
|
- spec/open311_spec.rb
|
209
212
|
has_rdoc: true
|
210
|
-
homepage:
|
213
|
+
homepage: https://github.com/codeforamerica/open311
|
211
214
|
licenses: []
|
212
215
|
|
213
216
|
post_install_message: |
|
214
217
|
Using this gem in your project or organization? Add it to the apps wiki!
|
215
|
-
https://github.com/
|
218
|
+
https://github.com/codeforamerica/open311/wiki/apps
|
216
219
|
|
217
220
|
rdoc_options: []
|
218
221
|
|
@@ -233,11 +236,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
233
236
|
requirements: []
|
234
237
|
|
235
238
|
rubyforge_project:
|
236
|
-
rubygems_version: 1.
|
239
|
+
rubygems_version: 1.5.3
|
237
240
|
signing_key:
|
238
241
|
specification_version: 3
|
239
242
|
summary: A Ruby wrapper for the Open311 API v2.
|
240
243
|
test_files:
|
244
|
+
- spec/faraday/response_spec.rb
|
241
245
|
- spec/fixtures/403.xml
|
242
246
|
- spec/fixtures/get_service_request.xml
|
243
247
|
- spec/fixtures/post_service_request.xml
|
data/lib/faraday/multipart.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
|
3
|
-
# @api private
|
4
|
-
module Faraday
|
5
|
-
class Request::Multipart < Faraday::Middleware
|
6
|
-
def call(env)
|
7
|
-
if env[:body].is_a?(Hash)
|
8
|
-
env[:body].each do |key, value|
|
9
|
-
if value.is_a?(File)
|
10
|
-
env[:body][key] = Faraday::UploadIO.new(value, mime_type(value), value.path)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
@app.call(env)
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def mime_type(file)
|
21
|
-
case file.path
|
22
|
-
when /\.jpe?g/i then 'image/jpeg'
|
23
|
-
when /\.gif$/i then 'image/gif'
|
24
|
-
when /\.png$/i then 'image/png'
|
25
|
-
else 'application/octet-stream'
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
data/lib/faraday/raise_error.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
|
3
|
-
# @api private
|
4
|
-
module Faraday
|
5
|
-
class Response::RaiseError < Response::Middleware
|
6
|
-
def self.register_on_complete(env)
|
7
|
-
env[:response].on_complete do |response|
|
8
|
-
case response[:status].to_i
|
9
|
-
when 400
|
10
|
-
raise Open311::BadRequest, error_message(response)
|
11
|
-
when 401
|
12
|
-
raise Open311::Unauthorized, error_message(response)
|
13
|
-
when 403
|
14
|
-
raise Open311::Forbidden, error_message(response)
|
15
|
-
when 404
|
16
|
-
raise Open311::NotFound, error_message(response)
|
17
|
-
when 406
|
18
|
-
raise Open311::NotAcceptable, error_message(response)
|
19
|
-
when 500
|
20
|
-
raise Open311::InternalServerError, error_message(response)
|
21
|
-
when 502
|
22
|
-
raise Open311::BadGateway, error_message(response)
|
23
|
-
when 503
|
24
|
-
raise Open311::ServiceUnavailable, error_message(response)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def initialize(app)
|
30
|
-
super
|
31
|
-
@parser = nil
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def self.error_message(response)
|
37
|
-
"#{response[:method].to_s.upcase} #{response[:url].to_s}: #{response[:response_headers]['status']}#{(': ' + response[:body]['error']) if response[:body] && response[:body]['error']}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|