open311 0.0.1 → 0.1.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/.gitignore +1 -0
- data/Gemfile.lock +36 -27
- data/README.mkd +19 -4
- data/Rakefile +1 -13
- data/lib/faraday/raise_error.rb +0 -1
- data/lib/open311.rb +1 -0
- data/lib/open311/client/connection.rb +11 -6
- data/lib/open311/client/request.rb +1 -1
- data/lib/open311/client/service.rb +71 -2
- data/lib/open311/configuration.rb +1 -1
- data/lib/open311/service_request.rb +17 -0
- data/lib/open311/version.rb +1 -1
- data/open311.gemspec +7 -6
- data/spec/fixtures/403.xml +4 -0
- data/spec/fixtures/get_service_request.xml +23 -0
- data/spec/fixtures/post_service_request.xml +10 -0
- data/spec/fixtures/request_id_from_token.xml +7 -0
- data/spec/fixtures/service_definition.xml +23 -0
- data/spec/fixtures/service_requests.xml +41 -0
- data/spec/open311_spec.rb +145 -9
- data/spec/spec_helper.rb +7 -0
- metadata +67 -58
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
open311 (0.0
|
5
|
-
faraday (~> 0.5.
|
6
|
-
faraday_middleware (~> 0.
|
4
|
+
open311 (0.1.0)
|
5
|
+
faraday (~> 0.5.3)
|
6
|
+
faraday_middleware (~> 0.3.0)
|
7
7
|
hashie (~> 0.4.0)
|
8
8
|
multi_json (~> 0.0.5)
|
9
9
|
multi_xml (~> 0.2.0)
|
@@ -15,52 +15,61 @@ GEM
|
|
15
15
|
addressable (2.2.2)
|
16
16
|
crack (0.1.8)
|
17
17
|
diff-lcs (1.1.2)
|
18
|
-
faraday (0.5.
|
18
|
+
faraday (0.5.3)
|
19
19
|
addressable (~> 2.2.2)
|
20
20
|
multipart-post (~> 1.0.1)
|
21
21
|
rack (>= 1.1.0, < 2)
|
22
|
-
faraday_middleware (0.
|
23
|
-
faraday (~> 0.5.
|
22
|
+
faraday_middleware (0.3.0)
|
23
|
+
faraday (~> 0.5.3)
|
24
24
|
hashie (0.4.0)
|
25
|
-
|
25
|
+
json (1.4.6)
|
26
|
+
json (1.4.6-java)
|
27
|
+
maruku (0.6.0)
|
28
|
+
syntax (>= 1.0.0)
|
26
29
|
multi_json (0.0.5)
|
27
30
|
multi_xml (0.2.0)
|
28
31
|
multipart-post (1.0.1)
|
32
|
+
nokogiri (1.4.4)
|
33
|
+
nokogiri (1.4.4-java)
|
34
|
+
weakling (>= 0.0.3)
|
29
35
|
rack (1.2.1)
|
30
36
|
rake (0.8.7)
|
31
|
-
|
32
|
-
|
33
|
-
rspec-
|
34
|
-
rspec-
|
35
|
-
|
36
|
-
rspec-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
rspec (2.1.0)
|
38
|
+
rspec-core (~> 2.1.0)
|
39
|
+
rspec-expectations (~> 2.1.0)
|
40
|
+
rspec-mocks (~> 2.1.0)
|
41
|
+
rspec-core (2.1.0)
|
42
|
+
rspec-expectations (2.1.0)
|
43
|
+
diff-lcs (~> 1.1.2)
|
44
|
+
rspec-mocks (2.1.0)
|
45
|
+
simplecov (0.3.7)
|
46
|
+
simplecov-html (>= 0.3.7)
|
47
|
+
simplecov-html (0.3.9)
|
48
|
+
syntax (1.0.0)
|
49
|
+
weakling (0.0.4-java)
|
50
|
+
webmock (1.6.1)
|
43
51
|
addressable (>= 2.2.2)
|
44
52
|
crack (>= 0.1.7)
|
45
|
-
|
46
|
-
yard (0.6.1)
|
53
|
+
yard (0.6.2)
|
47
54
|
|
48
55
|
PLATFORMS
|
56
|
+
java
|
49
57
|
ruby
|
50
58
|
|
51
59
|
DEPENDENCIES
|
52
60
|
ZenTest (~> 4.4)
|
53
61
|
bundler (~> 1.0)
|
54
|
-
faraday (~> 0.5.
|
55
|
-
faraday_middleware (~> 0.
|
62
|
+
faraday (~> 0.5.3)
|
63
|
+
faraday_middleware (~> 0.3.0)
|
56
64
|
hashie (~> 0.4.0)
|
57
|
-
|
65
|
+
json (~> 1.4)
|
66
|
+
maruku (~> 0.6)
|
58
67
|
multi_json (~> 0.0.5)
|
59
68
|
multi_xml (~> 0.2.0)
|
69
|
+
nokogiri (~> 1.4)
|
60
70
|
open311!
|
61
71
|
rake (~> 0.8)
|
62
|
-
|
63
|
-
|
72
|
+
rspec (~> 2.1)
|
73
|
+
simplecov (~> 0.3)
|
64
74
|
webmock (~> 1.5)
|
65
|
-
yajl-ruby (~> 0.7)
|
66
75
|
yard (~> 0.6)
|
data/README.mkd
CHANGED
@@ -12,7 +12,7 @@ Installation
|
|
12
12
|
|
13
13
|
Documentation
|
14
14
|
-------------
|
15
|
-
<http://rdoc.info/
|
15
|
+
<http://rdoc.info/github/cfalabs/open311/master/frames>
|
16
16
|
|
17
17
|
Usage Examples
|
18
18
|
--------------
|
@@ -20,13 +20,28 @@ Usage Examples
|
|
20
20
|
|
21
21
|
# Certain methods require an API key
|
22
22
|
Open311.configure do |config|
|
23
|
-
config.endpoint = 'https://open311.sfgov.org/'
|
24
|
-
config.
|
23
|
+
config.endpoint = 'https://open311.sfgov.org/dev/v2/'
|
24
|
+
config.api_key = 'yourkeyforpostrequests'
|
25
25
|
config.jurisdiction = 'sfgov.org'
|
26
26
|
end
|
27
27
|
|
28
28
|
# Provide a list of acceptable 311 service request types and their associated service codes
|
29
29
|
Open311.service_list
|
30
|
+
|
31
|
+
# If meta data is available, provide attributes and definition for the service code
|
32
|
+
Open311.service_definition('033')
|
33
|
+
|
34
|
+
# Grab service requests, limited to 90 days or 1000 entries
|
35
|
+
Open311.service_requests
|
36
|
+
|
37
|
+
# Grab a service request, requires ID
|
38
|
+
Open311.get_service_request('12345')
|
39
|
+
|
40
|
+
# Post a service request, requires an api key
|
41
|
+
Open311.post_service_request
|
42
|
+
|
43
|
+
# Get a service_request_id using a token after a post_service_request
|
44
|
+
Open311.request_id('12345')
|
30
45
|
|
31
46
|
Contributing
|
32
47
|
------------
|
@@ -61,7 +76,7 @@ Submitting a Pull Request
|
|
61
76
|
4. Add documentation for your feature or bug fix.
|
62
77
|
5. Run <tt>bundle exec rake doc:yard</tt>. If your changes are not 100% documented, go back to step 4.
|
63
78
|
6. Add specs for your feature or bug fix.
|
64
|
-
7. Run <tt>bundle exec rake spec
|
79
|
+
7. Run <tt>bundle exec rake spec</tt>. If your changes are not 100% covered, go back to step 6.
|
65
80
|
8. Commit and push your changes.
|
66
81
|
9. Submit a pull request. Please do not include changes to the gemspec, version, or history file. (If you want to create your own version for some reason, please do so in a separate commit.)
|
67
82
|
|
data/Rakefile
CHANGED
@@ -4,19 +4,7 @@ Bundler::GemHelper.install_tasks
|
|
4
4
|
require 'rspec/core/rake_task'
|
5
5
|
RSpec::Core::RakeTask.new(:spec)
|
6
6
|
|
7
|
-
|
8
|
-
desc "Run all examples using rcov"
|
9
|
-
RSpec::Core::RakeTask.new(:rcov => :cleanup_rcov_files) do |task|
|
10
|
-
task.rcov = true
|
11
|
-
task.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features,specs" --text-report --sort coverage]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
task :cleanup_rcov_files do
|
16
|
-
rm_rf 'coverage'
|
17
|
-
end
|
18
|
-
|
19
|
-
task :default => ["spec:rcov"]
|
7
|
+
task :default => :spec
|
20
8
|
|
21
9
|
namespace :doc do
|
22
10
|
require 'yard'
|
data/lib/faraday/raise_error.rb
CHANGED
data/lib/open311.rb
CHANGED
@@ -15,12 +15,17 @@ module Open311
|
|
15
15
|
:url => endpoint
|
16
16
|
}
|
17
17
|
|
18
|
-
Faraday::Connection.new(options) do |
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
Faraday::Connection.new(options) do |connection|
|
19
|
+
connection.use Faraday::Request::Multipart
|
20
|
+
connection.adapter(adapter)
|
21
|
+
connection.use Faraday::Response::RaiseError
|
22
|
+
unless raw
|
23
|
+
case format.to_s.downcase
|
24
|
+
when 'json' then connection.use Faraday::Response::ParseJson
|
25
|
+
when 'xml' then connection.use Faraday::Response::ParseXml
|
26
|
+
end
|
27
|
+
connection.use Faraday::Response::Mashify
|
28
|
+
end
|
24
29
|
end
|
25
30
|
end
|
26
31
|
end
|
@@ -3,7 +3,6 @@ module Open311
|
|
3
3
|
module Service
|
4
4
|
# Provide a list of acceptable 311 service request types and their associated service codes
|
5
5
|
#
|
6
|
-
# @todo Overload the method to allow fetching of the authenticated user's screen name from configurati
|
7
6
|
# @format :xml
|
8
7
|
# @key false
|
9
8
|
# @param options [Hash] A customizable set of options.
|
@@ -13,9 +12,79 @@ module Open311
|
|
13
12
|
# Open311.service_list
|
14
13
|
def service_list(options={})
|
15
14
|
options.merge!(:jurisdiction_id => jurisdiction)
|
16
|
-
response = get('
|
15
|
+
response = get('services', options)
|
17
16
|
format.to_s.downcase == 'xml' ? response['services']['service'] : response
|
18
17
|
end
|
18
|
+
|
19
|
+
# @format :xml
|
20
|
+
# @key false
|
21
|
+
# @param id String the service code
|
22
|
+
# @param options [Hash] A customizable set of options.
|
23
|
+
# @return Hash
|
24
|
+
# @see http://wiki.open311.org/GeoReport_v2#GET_Service_Definition
|
25
|
+
# @example define attributes associated with a service code, i.e. 033
|
26
|
+
# Open311.service_definition
|
27
|
+
def service_definition(id, options={})
|
28
|
+
options.merge!(:jurisdiction_id => jurisdiction)
|
29
|
+
response = get("services/#{id}", options)
|
30
|
+
format.to_s.downcase == 'xml' ? response['service_definition'] : response
|
31
|
+
end
|
32
|
+
|
33
|
+
# @format :xml
|
34
|
+
# @key false
|
35
|
+
# @param options [Hash] A customizable set of options.
|
36
|
+
# @return [Array]
|
37
|
+
# @see http://wiki.open311.org/GeoReport_v2#GET_Service_Requests
|
38
|
+
# Open311.service_requests
|
39
|
+
def service_requests(options={})
|
40
|
+
options.merge!(:jurisdiction_id => jurisdiction)
|
41
|
+
response = get("requests", options)
|
42
|
+
if format.to_s.downcase == 'xml'
|
43
|
+
response.service_requests.request.map do |request|
|
44
|
+
ServiceRequest.new(request)
|
45
|
+
end
|
46
|
+
else
|
47
|
+
response
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# @format :xml
|
52
|
+
# @key true
|
53
|
+
# @param options [Hash] A customizable set of options.
|
54
|
+
# @return Hash
|
55
|
+
# @see http://wiki.open311.org/GeoReport_v2#POST_Service_Request
|
56
|
+
# Open311.post_service_request
|
57
|
+
def post_service_request(options={})
|
58
|
+
options.merge!(:jurisdiction_id => jurisdiction, :api_key => api_key)
|
59
|
+
response = post("requests", options)
|
60
|
+
format.to_s.downcase == 'xml' ? response['service_requests']['request'] : response
|
61
|
+
end
|
62
|
+
|
63
|
+
# @format :xml
|
64
|
+
# @key false
|
65
|
+
# @param id String of the service request id
|
66
|
+
# @param options [Hash] A customizable set of options.
|
67
|
+
# @return Hash
|
68
|
+
# @see http://wiki.open311.org/GeoReport_v2#GET_Service_Requests
|
69
|
+
# Open311.get_service_request
|
70
|
+
def get_service_request(id, options={})
|
71
|
+
options.merge!(:jurisdiction_id => jurisdiction)
|
72
|
+
response = get("requests/#{id}", options)
|
73
|
+
format.to_s.downcase == 'xml' ? ServiceRequest.new(response.service_requests.request.first) : response
|
74
|
+
end
|
75
|
+
|
76
|
+
# @format :xml
|
77
|
+
# @key false
|
78
|
+
# @param token_id A token included in the response to .service_response request
|
79
|
+
# @param options [Hash] A customizable set of options.
|
80
|
+
# @return Array
|
81
|
+
# @see http://wiki.open311.org/GeoReport_v2#GET_request_id_from_a_token
|
82
|
+
# Open311.request_id
|
83
|
+
def request_id(token_id, options = {})
|
84
|
+
options.merge!(:jurisdiction_id => jurisdiction)
|
85
|
+
response = get("tokens/#{token_id}", options)
|
86
|
+
format.to_s.downcase == 'xml' ? ServiceRequest.new(response.service_requests.request) : response
|
87
|
+
end
|
19
88
|
end
|
20
89
|
end
|
21
90
|
end
|
@@ -9,7 +9,7 @@ module Open311
|
|
9
9
|
DEFAULT_ADAPTER = Faraday.default_adapter.freeze
|
10
10
|
DEFAULT_API_KEY = nil.freeze
|
11
11
|
DEFAULT_ENDPOINT = nil.freeze
|
12
|
-
DEFAULT_FORMAT = :
|
12
|
+
DEFAULT_FORMAT = :xml.freeze
|
13
13
|
DEFAULT_JURISDICTION = nil.freeze
|
14
14
|
DEFAULT_PROXY = nil.freeze
|
15
15
|
DEFAULT_USER_AGENT = "Open311 Ruby Gem #{Open311::VERSION}".freeze
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Open311
|
2
|
+
class ServiceRequest
|
3
|
+
attr_reader :token, :id
|
4
|
+
|
5
|
+
def initialize(hash)
|
6
|
+
@hash = hash
|
7
|
+
@id = hash.service_request_id.to_i
|
8
|
+
@token = hash.token.to_i
|
9
|
+
end
|
10
|
+
|
11
|
+
# Delegate to the hash
|
12
|
+
def self.method_missing(method, *args, &block)
|
13
|
+
return super unless @hash.has_key?(method)
|
14
|
+
@hash[method]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/open311/version.rb
CHANGED
data/open311.gemspec
CHANGED
@@ -3,17 +3,18 @@ require File.expand_path("../lib/open311/version", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.add_development_dependency("bundler", "~> 1.0")
|
6
|
-
s.add_development_dependency("
|
6
|
+
s.add_development_dependency("json", "~> 1.4")
|
7
|
+
s.add_development_dependency("maruku", "~> 0.6")
|
8
|
+
s.add_development_dependency("nokogiri", "~> 1.4")
|
7
9
|
s.add_development_dependency("rake", "~> 0.8")
|
8
|
-
s.add_development_dependency("
|
9
|
-
s.add_development_dependency("
|
10
|
+
s.add_development_dependency("rspec", "~> 2.1")
|
11
|
+
s.add_development_dependency("simplecov", "~> 0.3")
|
10
12
|
s.add_development_dependency("webmock", "~> 1.5")
|
11
|
-
s.add_development_dependency("yajl-ruby", "~> 0.7")
|
12
13
|
s.add_development_dependency("yard", "~> 0.6")
|
13
14
|
s.add_development_dependency("ZenTest", "~> 4.4")
|
14
15
|
s.add_runtime_dependency("hashie", "~> 0.4.0")
|
15
|
-
s.add_runtime_dependency("faraday", "~> 0.5.
|
16
|
-
s.add_runtime_dependency("faraday_middleware", "~> 0.
|
16
|
+
s.add_runtime_dependency("faraday", "~> 0.5.3")
|
17
|
+
s.add_runtime_dependency("faraday_middleware", "~> 0.3.0")
|
17
18
|
s.add_runtime_dependency("multi_json", "~> 0.0.5")
|
18
19
|
s.add_runtime_dependency("multi_xml", "~> 0.2.0")
|
19
20
|
s.authors = ["Dan Melton", "Erik Michaels-Ober"]
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<service_requests>
|
3
|
+
<request>
|
4
|
+
<service_request_id>638344</service_request_id>
|
5
|
+
<status>closed</status>
|
6
|
+
<status_notes>Duplicate request.</status_notes>
|
7
|
+
<service_name>Sidewalk and Curb Issues</service_name>
|
8
|
+
<service_code>006</service_code>
|
9
|
+
<description></description>
|
10
|
+
<agency_responsible></agency_responsible>
|
11
|
+
<service_notice></service_notice>
|
12
|
+
<requested_datetime>2010-04-14T06:37:38-08:00</requested_datetime>
|
13
|
+
<updated_datetime>2010-04-14T06:37:38-08:00</updated_datetime>
|
14
|
+
<expected_datetime>2010-04-15T06:37:38-08:00</expected_datetime>
|
15
|
+
<address>8TH AVE and JUDAH ST</address>
|
16
|
+
<address_id>545483</address_id>
|
17
|
+
<zipcode>94122</zipcode>
|
18
|
+
<lat>37.762221815</lat>
|
19
|
+
<long>-122.4651145</long>
|
20
|
+
<media_url>http://open311.city.gov.s3.amazonaws.com/requests/media/638344.rss </media_url>
|
21
|
+
</request>
|
22
|
+
|
23
|
+
</service_requests>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<service_requests>
|
3
|
+
<request>
|
4
|
+
<service_request_id>293944</service_request_id>
|
5
|
+
<service_notice>
|
6
|
+
The City will inspect and require the responsible party to correct within 24 hours and/or issue a Correction Notice or Notice of Violation of the Public Works Code
|
7
|
+
</service_notice>
|
8
|
+
<account_id/>
|
9
|
+
</request>
|
10
|
+
</service_requests>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<service_definition>
|
3
|
+
<service_code>DMV66</service_code>
|
4
|
+
<attribute>
|
5
|
+
<variable>true</variable>
|
6
|
+
<code>WHISHETN</code>
|
7
|
+
<datatype>singlevaluelist</datatype>
|
8
|
+
<required>true</required>
|
9
|
+
<datatype_description></datatype_description>
|
10
|
+
<order>1</order>
|
11
|
+
<description>What is the ticket/tag/DL number?</description>
|
12
|
+
<values>
|
13
|
+
<value>
|
14
|
+
<key>123</key>
|
15
|
+
<name>Ford</name>
|
16
|
+
</value>
|
17
|
+
<value>
|
18
|
+
<key>124</key>
|
19
|
+
<name>Chrysler</name>
|
20
|
+
</value>
|
21
|
+
</values>
|
22
|
+
</attribute>
|
23
|
+
</service_definition>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<service_requests>
|
3
|
+
<request>
|
4
|
+
<service_request_id>638344</service_request_id>
|
5
|
+
<status>closed</status>
|
6
|
+
<status_notes>Duplicate request.</status_notes>
|
7
|
+
<service_name>Sidewalk and Curb Issues</service_name>
|
8
|
+
<service_code>006</service_code>
|
9
|
+
<description></description>
|
10
|
+
<agency_responsible></agency_responsible>
|
11
|
+
<service_notice></service_notice>
|
12
|
+
<requested_datetime>2010-04-14T06:37:38-08:00</requested_datetime>
|
13
|
+
<updated_datetime>2010-04-14T06:37:38-08:00</updated_datetime>
|
14
|
+
<expected_datetime>2010-04-15T06:37:38-08:00</expected_datetime>
|
15
|
+
<address>8TH AVE and JUDAH ST</address>
|
16
|
+
<address_id>545483</address_id>
|
17
|
+
<zipcode>94122</zipcode>
|
18
|
+
<lat>37.762221815</lat>
|
19
|
+
<long>-122.4651145</long>
|
20
|
+
<media_url>http://open311.city.gov.s3.amazonaws.com/requests/media/638344.rss </media_url>
|
21
|
+
</request>
|
22
|
+
<request>
|
23
|
+
<service_request_id>638349</service_request_id>
|
24
|
+
<status>open</status>
|
25
|
+
<status_notes></status_notes>
|
26
|
+
<service_name>Sidewalk and Curb Issues</service_name>
|
27
|
+
<service_code>006</service_code>
|
28
|
+
<description></description>
|
29
|
+
<agency_responsible></agency_responsible>
|
30
|
+
<service_notice></service_notice>
|
31
|
+
<requested_datetime>2010-04-19T06:37:38-08:00</requested_datetime>
|
32
|
+
<updated_datetime>2010-04-19T06:37:38-08:00</updated_datetime>
|
33
|
+
<expected_datetime>2010-04-19T06:37:38-08:00</expected_datetime>
|
34
|
+
<address>8TH AVE and JUDAH ST</address>
|
35
|
+
<address_id>545483</address_id>
|
36
|
+
<zipcode>94122</zipcode>
|
37
|
+
<lat>37.762221815</lat>
|
38
|
+
<long>-122.4651145</long>
|
39
|
+
<media_url>http://open311.city.gov.s3.amazonaws.com/requests/media/638349.rss </media_url>
|
40
|
+
</request>
|
41
|
+
</service_requests>
|
data/spec/open311_spec.rb
CHANGED
@@ -1,27 +1,163 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'json'
|
1
3
|
require File.expand_path('../spec_helper', __FILE__)
|
2
4
|
|
3
5
|
describe Open311, ".service_list" do
|
4
6
|
before do
|
5
7
|
Open311.configure do |config|
|
6
|
-
config.endpoint = '
|
7
|
-
config.
|
8
|
-
config.jurisdiction = 'sfgov.org'
|
8
|
+
config.endpoint = 'http://api.dc.org/open311/v2_dev/'
|
9
|
+
config.jurisdiction = 'dc.gov'
|
9
10
|
end
|
10
|
-
stub_request(:get, '
|
11
|
-
with(:query => {:jurisdiction_id => '
|
11
|
+
stub_request(:get, 'http://api.dc.org/open311/v2_dev/services.xml').
|
12
|
+
with(:query => {:jurisdiction_id => 'dc.gov', :lat => '38.888486', :long => '-77.020179'}).
|
12
13
|
to_return(:body => fixture('services.xml'), :headers => {'Content-Type' => 'text/xml; charset=utf-8'})
|
13
14
|
end
|
14
15
|
|
15
16
|
it "should request the correct resource" do
|
16
|
-
Open311.service_list
|
17
|
-
a_request(:get, '
|
18
|
-
with(:query => {:jurisdiction_id => '
|
17
|
+
Open311.service_list(:lat => '38.888486', :long => '-77.020179')
|
18
|
+
a_request(:get, 'http://api.dc.org/open311/v2_dev/services.xml').
|
19
|
+
with(:query => {:jurisdiction_id => 'dc.gov', :lat => '38.888486', :long => '-77.020179'}).
|
19
20
|
should have_been_made
|
20
21
|
end
|
21
22
|
|
22
23
|
it "should return the correct results" do
|
23
|
-
services = Open311.service_list
|
24
|
+
services = Open311.service_list(:lat => '38.888486', :long => '-77.020179')
|
24
25
|
services.should be_an Array
|
25
26
|
services.first.service_code.should == '001'
|
26
27
|
end
|
27
28
|
end
|
29
|
+
|
30
|
+
describe Open311, ".service_definition" do
|
31
|
+
before do
|
32
|
+
Open311.configure do |config|
|
33
|
+
config.endpoint = 'http://blasius.ws:3003/open311/'
|
34
|
+
config.jurisdiction = 'dc.gov'
|
35
|
+
end
|
36
|
+
stub_request(:get, 'http://blasius.ws:3003/open311/services/033.xml').
|
37
|
+
with(:query => {:jurisdiction_id => 'dc.gov', :lat => '38.888486', :long => '-77.020179'}).
|
38
|
+
to_return(:body => fixture('service_definition.xml'), :headers => {'Content-Type' => 'text/xml; charset=utf-8'})
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should request the correct resource" do
|
42
|
+
Open311.service_definition('033', :lat => '38.888486', :long => '-77.020179')
|
43
|
+
a_request(:get, 'http://blasius.ws:3003/open311/services/033.xml').
|
44
|
+
with(:query => {:jurisdiction_id => 'dc.gov', :lat => '38.888486', :long => '-77.020179'}).
|
45
|
+
should have_been_made
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return the correct results" do
|
49
|
+
service_def = Open311.service_definition('033', :lat => '38.888486', :long => '-77.020179')
|
50
|
+
service_def.should be_an Hash
|
51
|
+
service_def.service_code.should == "DMV66"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe Open311, ".service_requests" do
|
56
|
+
before do
|
57
|
+
Open311.configure do |config|
|
58
|
+
config.endpoint = 'http://blasius.ws:3003/open311/'
|
59
|
+
config.jurisdiction = 'dc.gov'
|
60
|
+
end
|
61
|
+
stub_request(:get, 'http://blasius.ws:3003/open311/requests.xml').
|
62
|
+
with(:query => {:jurisdiction_id => 'dc.gov', :lat => '38.888486', :long => '-77.020179'}).
|
63
|
+
to_return(:body => fixture('service_requests.xml'), :headers => {'Content-Type' => 'text/xml; charset=utf-8'})
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should request the correct resource" do
|
67
|
+
Open311.service_requests(:lat => '38.888486', :long => '-77.020179')
|
68
|
+
a_request(:get, 'http://blasius.ws:3003/open311/requests.xml').
|
69
|
+
with(:query => {:jurisdiction_id => 'dc.gov', :lat => '38.888486', :long => '-77.020179'}).
|
70
|
+
should have_been_made
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should return the correct results" do
|
74
|
+
service_requests = Open311.service_requests(:lat => '38.888486', :long => '-77.020179')
|
75
|
+
service_requests.should be_an Array
|
76
|
+
service_requests.length.should == 2
|
77
|
+
service_requests.first.id.should == 638344
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe Open311, ".get_service_request" do
|
82
|
+
before do
|
83
|
+
Open311.configure do |config|
|
84
|
+
config.endpoint = 'http://blasius.ws:3003/open311/'
|
85
|
+
config.jurisdiction = 'dc.gov'
|
86
|
+
end
|
87
|
+
stub_request(:get, 'http://blasius.ws:3003/open311/requests/638344.xml').
|
88
|
+
with(:query => {:jurisdiction_id => 'dc.gov', :lat => '38.888486', :long => '-77.020179'}).
|
89
|
+
to_return(:body => fixture('service_requests.xml'), :headers => {'Content-Type' => 'text/xml; charset=utf-8'})
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should request the correct resource" do
|
93
|
+
Open311.get_service_request('638344', :lat => '38.888486', :long => '-77.020179')
|
94
|
+
a_request(:get, 'http://blasius.ws:3003/open311/requests/638344.xml').
|
95
|
+
with(:query => {:jurisdiction_id => 'dc.gov', :lat => '38.888486', :long => '-77.020179'}).
|
96
|
+
should have_been_made
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should return the correct results" do
|
100
|
+
service_request = Open311.get_service_request(638344, :lat => '38.888486', :long => '-77.020179')
|
101
|
+
service_request.id.should == 638344
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe Open311, ".post_service_request" do
|
106
|
+
before do
|
107
|
+
Open311.configure do |config|
|
108
|
+
config.endpoint = 'http://blasius.ws:3003/open311/'
|
109
|
+
config.jurisdiction = 'dc.gov'
|
110
|
+
config.api_key = 'xyz'
|
111
|
+
end
|
112
|
+
|
113
|
+
@service_request_params = {
|
114
|
+
:service_code => '001',
|
115
|
+
:address_string => '1234 5th street',
|
116
|
+
:email => 'smit222@sfgov.edu',
|
117
|
+
:device_id => 'tt222111',
|
118
|
+
:account_id => '123456',
|
119
|
+
:first_name => 'john',
|
120
|
+
:last_name => 'smith',
|
121
|
+
:phone => '111111111',
|
122
|
+
:description => 'A large sinkhole is destroying the street',
|
123
|
+
:media_url => 'http://farm3.static.flickr.com/2002/2212426634_5ed477a060.jpg',
|
124
|
+
:lat => '38.888486',
|
125
|
+
:long => '-77.020179',
|
126
|
+
}
|
127
|
+
stub_request(:post, 'blasius.ws:3003/open311/requests.xml').
|
128
|
+
with(:body => {:jurisdiction_id => 'dc.gov', :api_key => 'xyz'}.merge(@service_request_params)).
|
129
|
+
to_return(:body => fixture('post_service_request.xml'), :headers => {'Content-Type' => 'text/xml; charset=utf-8'})
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should return the correct results" do
|
133
|
+
service_request_response = Open311.post_service_request(@service_request_params)
|
134
|
+
service_request_response.service_request_id.should == '293944'
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe Open311, ".request_id" do
|
139
|
+
|
140
|
+
before do
|
141
|
+
Open311.configure do |config|
|
142
|
+
config.endpoint = 'http://open311.sfgov.org/dev/v2/'
|
143
|
+
config.jurisdiction = 'sfgov.org'
|
144
|
+
end
|
145
|
+
stub_request(:get, 'http://open311.sfgov.org/dev/v2/tokens/12345.xml').
|
146
|
+
with(:query => {:jurisdiction_id => 'sfgov.org'}).
|
147
|
+
to_return(:body => fixture('request_id_from_token.xml'), :headers => {'Content-Type' => 'text/xml; charset=utf-8'})
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should request the correct resource" do
|
151
|
+
Open311.request_id(12345)
|
152
|
+
a_request(:get, 'http://open311.sfgov.org/dev/v2/tokens/12345.xml').
|
153
|
+
with(:query => {:jurisdiction_id => 'sfgov.org'}).
|
154
|
+
should have_been_made
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should return the correct result" do
|
158
|
+
service_request = Open311.request_id(12345)
|
159
|
+
service_request.id.should == 638344
|
160
|
+
service_request.token.should == 12345
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start do
|
3
|
+
add_group 'Open311', 'lib/open311'
|
4
|
+
add_group 'Faraday', 'lib/faraday'
|
5
|
+
end
|
6
|
+
|
1
7
|
require File.expand_path('../../lib/open311', __FILE__)
|
2
8
|
|
9
|
+
require 'rspec'
|
3
10
|
require 'webmock/rspec'
|
4
11
|
RSpec.configure do |config|
|
5
12
|
config.include WebMock::API
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: open311
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 29
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
- 0
|
9
7
|
- 1
|
10
|
-
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Dan Melton
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-18 00:00:00 -08:00
|
20
19
|
default_executable:
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
@@ -27,7 +26,6 @@ dependencies:
|
|
27
26
|
requirements:
|
28
27
|
- - ~>
|
29
28
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 15
|
31
29
|
segments:
|
32
30
|
- 1
|
33
31
|
- 0
|
@@ -35,206 +33,206 @@ dependencies:
|
|
35
33
|
type: :development
|
36
34
|
version_requirements: *id001
|
37
35
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
36
|
+
name: json
|
39
37
|
prerelease: false
|
40
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
40
|
requirements:
|
43
41
|
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 13
|
46
43
|
segments:
|
47
44
|
- 1
|
48
|
-
-
|
49
|
-
version: "1.
|
45
|
+
- 4
|
46
|
+
version: "1.4"
|
50
47
|
type: :development
|
51
48
|
version_requirements: *id002
|
52
49
|
- !ruby/object:Gem::Dependency
|
53
|
-
name:
|
50
|
+
name: maruku
|
54
51
|
prerelease: false
|
55
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
56
53
|
none: false
|
57
54
|
requirements:
|
58
55
|
- - ~>
|
59
56
|
- !ruby/object:Gem::Version
|
60
|
-
hash: 27
|
61
57
|
segments:
|
62
58
|
- 0
|
63
|
-
-
|
64
|
-
version: "0.
|
59
|
+
- 6
|
60
|
+
version: "0.6"
|
65
61
|
type: :development
|
66
62
|
version_requirements: *id003
|
67
63
|
- !ruby/object:Gem::Dependency
|
68
|
-
name:
|
64
|
+
name: nokogiri
|
69
65
|
prerelease: false
|
70
66
|
requirement: &id004 !ruby/object:Gem::Requirement
|
71
67
|
none: false
|
72
68
|
requirements:
|
73
69
|
- - ~>
|
74
70
|
- !ruby/object:Gem::Version
|
75
|
-
hash: 25
|
76
71
|
segments:
|
77
|
-
-
|
78
|
-
-
|
79
|
-
version: "
|
72
|
+
- 1
|
73
|
+
- 4
|
74
|
+
version: "1.4"
|
80
75
|
type: :development
|
81
76
|
version_requirements: *id004
|
82
77
|
- !ruby/object:Gem::Dependency
|
83
|
-
name:
|
78
|
+
name: rake
|
84
79
|
prerelease: false
|
85
80
|
requirement: &id005 !ruby/object:Gem::Requirement
|
86
81
|
none: false
|
87
82
|
requirements:
|
88
83
|
- - ~>
|
89
84
|
- !ruby/object:Gem::Version
|
90
|
-
hash: 13
|
91
85
|
segments:
|
92
|
-
- 2
|
93
86
|
- 0
|
94
|
-
-
|
95
|
-
version:
|
87
|
+
- 8
|
88
|
+
version: "0.8"
|
96
89
|
type: :development
|
97
90
|
version_requirements: *id005
|
98
91
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
92
|
+
name: rspec
|
100
93
|
prerelease: false
|
101
94
|
requirement: &id006 !ruby/object:Gem::Requirement
|
102
95
|
none: false
|
103
96
|
requirements:
|
104
97
|
- - ~>
|
105
98
|
- !ruby/object:Gem::Version
|
106
|
-
hash: 5
|
107
99
|
segments:
|
100
|
+
- 2
|
108
101
|
- 1
|
109
|
-
|
110
|
-
version: "1.5"
|
102
|
+
version: "2.1"
|
111
103
|
type: :development
|
112
104
|
version_requirements: *id006
|
113
105
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
106
|
+
name: simplecov
|
115
107
|
prerelease: false
|
116
108
|
requirement: &id007 !ruby/object:Gem::Requirement
|
117
109
|
none: false
|
118
110
|
requirements:
|
119
111
|
- - ~>
|
120
112
|
- !ruby/object:Gem::Version
|
121
|
-
hash: 5
|
122
113
|
segments:
|
123
114
|
- 0
|
124
|
-
-
|
125
|
-
version: "0.
|
115
|
+
- 3
|
116
|
+
version: "0.3"
|
126
117
|
type: :development
|
127
118
|
version_requirements: *id007
|
128
119
|
- !ruby/object:Gem::Dependency
|
129
|
-
name:
|
120
|
+
name: webmock
|
130
121
|
prerelease: false
|
131
122
|
requirement: &id008 !ruby/object:Gem::Requirement
|
132
123
|
none: false
|
133
124
|
requirements:
|
134
125
|
- - ~>
|
135
126
|
- !ruby/object:Gem::Version
|
136
|
-
|
127
|
+
segments:
|
128
|
+
- 1
|
129
|
+
- 5
|
130
|
+
version: "1.5"
|
131
|
+
type: :development
|
132
|
+
version_requirements: *id008
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: yard
|
135
|
+
prerelease: false
|
136
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
137
141
|
segments:
|
138
142
|
- 0
|
139
143
|
- 6
|
140
144
|
version: "0.6"
|
141
145
|
type: :development
|
142
|
-
version_requirements: *
|
146
|
+
version_requirements: *id009
|
143
147
|
- !ruby/object:Gem::Dependency
|
144
148
|
name: ZenTest
|
145
149
|
prerelease: false
|
146
|
-
requirement: &
|
150
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
147
151
|
none: false
|
148
152
|
requirements:
|
149
153
|
- - ~>
|
150
154
|
- !ruby/object:Gem::Version
|
151
|
-
hash: 19
|
152
155
|
segments:
|
153
156
|
- 4
|
154
157
|
- 4
|
155
158
|
version: "4.4"
|
156
159
|
type: :development
|
157
|
-
version_requirements: *
|
160
|
+
version_requirements: *id010
|
158
161
|
- !ruby/object:Gem::Dependency
|
159
162
|
name: hashie
|
160
163
|
prerelease: false
|
161
|
-
requirement: &
|
164
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
162
165
|
none: false
|
163
166
|
requirements:
|
164
167
|
- - ~>
|
165
168
|
- !ruby/object:Gem::Version
|
166
|
-
hash: 15
|
167
169
|
segments:
|
168
170
|
- 0
|
169
171
|
- 4
|
170
172
|
- 0
|
171
173
|
version: 0.4.0
|
172
174
|
type: :runtime
|
173
|
-
version_requirements: *
|
175
|
+
version_requirements: *id011
|
174
176
|
- !ruby/object:Gem::Dependency
|
175
177
|
name: faraday
|
176
178
|
prerelease: false
|
177
|
-
requirement: &
|
179
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
178
180
|
none: false
|
179
181
|
requirements:
|
180
182
|
- - ~>
|
181
183
|
- !ruby/object:Gem::Version
|
182
|
-
hash: 15
|
183
184
|
segments:
|
184
185
|
- 0
|
185
186
|
- 5
|
186
|
-
-
|
187
|
-
version: 0.5.
|
187
|
+
- 3
|
188
|
+
version: 0.5.3
|
188
189
|
type: :runtime
|
189
|
-
version_requirements: *
|
190
|
+
version_requirements: *id012
|
190
191
|
- !ruby/object:Gem::Dependency
|
191
192
|
name: faraday_middleware
|
192
193
|
prerelease: false
|
193
|
-
requirement: &
|
194
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
194
195
|
none: false
|
195
196
|
requirements:
|
196
197
|
- - ~>
|
197
198
|
- !ruby/object:Gem::Version
|
198
|
-
hash: 17
|
199
199
|
segments:
|
200
200
|
- 0
|
201
|
-
- 2
|
202
201
|
- 3
|
203
|
-
|
202
|
+
- 0
|
203
|
+
version: 0.3.0
|
204
204
|
type: :runtime
|
205
|
-
version_requirements: *
|
205
|
+
version_requirements: *id013
|
206
206
|
- !ruby/object:Gem::Dependency
|
207
207
|
name: multi_json
|
208
208
|
prerelease: false
|
209
|
-
requirement: &
|
209
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
210
210
|
none: false
|
211
211
|
requirements:
|
212
212
|
- - ~>
|
213
213
|
- !ruby/object:Gem::Version
|
214
|
-
hash: 21
|
215
214
|
segments:
|
216
215
|
- 0
|
217
216
|
- 0
|
218
217
|
- 5
|
219
218
|
version: 0.0.5
|
220
219
|
type: :runtime
|
221
|
-
version_requirements: *
|
220
|
+
version_requirements: *id014
|
222
221
|
- !ruby/object:Gem::Dependency
|
223
222
|
name: multi_xml
|
224
223
|
prerelease: false
|
225
|
-
requirement: &
|
224
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
226
225
|
none: false
|
227
226
|
requirements:
|
228
227
|
- - ~>
|
229
228
|
- !ruby/object:Gem::Version
|
230
|
-
hash: 23
|
231
229
|
segments:
|
232
230
|
- 0
|
233
231
|
- 2
|
234
232
|
- 0
|
235
233
|
version: 0.2.0
|
236
234
|
type: :runtime
|
237
|
-
version_requirements: *
|
235
|
+
version_requirements: *id015
|
238
236
|
description: A Ruby wrapper for the Open311 API v2.
|
239
237
|
email:
|
240
238
|
- dan@codeforamerica.org
|
@@ -262,8 +260,15 @@ files:
|
|
262
260
|
- lib/open311/client/request.rb
|
263
261
|
- lib/open311/client/service.rb
|
264
262
|
- lib/open311/configuration.rb
|
263
|
+
- lib/open311/service_request.rb
|
265
264
|
- lib/open311/version.rb
|
266
265
|
- open311.gemspec
|
266
|
+
- spec/fixtures/403.xml
|
267
|
+
- spec/fixtures/get_service_request.xml
|
268
|
+
- spec/fixtures/post_service_request.xml
|
269
|
+
- spec/fixtures/request_id_from_token.xml
|
270
|
+
- spec/fixtures/service_definition.xml
|
271
|
+
- spec/fixtures/service_requests.xml
|
267
272
|
- spec/fixtures/services.xml
|
268
273
|
- spec/open311_spec.rb
|
269
274
|
- spec/spec_helper.rb
|
@@ -284,7 +289,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
284
289
|
requirements:
|
285
290
|
- - ">="
|
286
291
|
- !ruby/object:Gem::Version
|
287
|
-
hash: 3
|
288
292
|
segments:
|
289
293
|
- 0
|
290
294
|
version: "0"
|
@@ -293,7 +297,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
293
297
|
requirements:
|
294
298
|
- - ">="
|
295
299
|
- !ruby/object:Gem::Version
|
296
|
-
hash: 23
|
297
300
|
segments:
|
298
301
|
- 1
|
299
302
|
- 3
|
@@ -307,6 +310,12 @@ signing_key:
|
|
307
310
|
specification_version: 3
|
308
311
|
summary: A Ruby wrapper for the Open311 API v2.
|
309
312
|
test_files:
|
313
|
+
- spec/fixtures/403.xml
|
314
|
+
- spec/fixtures/get_service_request.xml
|
315
|
+
- spec/fixtures/post_service_request.xml
|
316
|
+
- spec/fixtures/request_id_from_token.xml
|
317
|
+
- spec/fixtures/service_definition.xml
|
318
|
+
- spec/fixtures/service_requests.xml
|
310
319
|
- spec/fixtures/services.xml
|
311
320
|
- spec/open311_spec.rb
|
312
321
|
- spec/spec_helper.rb
|