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 CHANGED
@@ -1,4 +1,5 @@
1
1
  *.gem
2
+ *.rbc
2
3
  .DS_Store
3
4
  .bundle
4
5
  .yardoc
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- open311 (0.0.1)
5
- faraday (~> 0.5.2)
6
- faraday_middleware (~> 0.2.3)
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.2)
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.2.3)
23
- faraday (~> 0.5.2)
22
+ faraday_middleware (0.3.0)
23
+ faraday (~> 0.5.3)
24
24
  hashie (0.4.0)
25
- libxml-ruby (1.1.4)
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
- rcov (0.9.9)
32
- rspec (2.0.1)
33
- rspec-core (~> 2.0.1)
34
- rspec-expectations (~> 2.0.1)
35
- rspec-mocks (~> 2.0.1)
36
- rspec-core (2.0.1)
37
- rspec-expectations (2.0.1)
38
- diff-lcs (>= 1.1.2)
39
- rspec-mocks (2.0.1)
40
- rspec-core (~> 2.0.1)
41
- rspec-expectations (~> 2.0.1)
42
- webmock (1.5.0)
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
- yajl-ruby (0.7.8)
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.2)
55
- faraday_middleware (~> 0.2.3)
62
+ faraday (~> 0.5.3)
63
+ faraday_middleware (~> 0.3.0)
56
64
  hashie (~> 0.4.0)
57
- libxml-ruby (~> 1.1)
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
- rcov (~> 0.9)
63
- rspec (~> 2.0.1)
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/gems/open311>
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.format = 'xml'
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:rcov</tt>. If your changes are not 100% covered, go back to step 6.
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
- namespace :spec do
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'
@@ -28,7 +28,6 @@ module Faraday
28
28
 
29
29
  def initialize(app)
30
30
  super
31
- @parser = nil
32
31
  end
33
32
 
34
33
  private
data/lib/open311.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require File.expand_path('../open311/configuration', __FILE__)
2
2
  require File.expand_path('../open311/client', __FILE__)
3
+ require File.expand_path('../open311/service_request', __FILE__)
3
4
 
4
5
  module Open311
5
6
  extend Configuration
@@ -15,12 +15,17 @@ module Open311
15
15
  :url => endpoint
16
16
  }
17
17
 
18
- Faraday::Connection.new(options) do |builder|
19
- builder.use Faraday::Request::Multipart
20
- builder.adapter(adapter)
21
- builder.use Faraday::Response::RaiseError
22
- builder.use Faraday::Response::Parse unless raw
23
- builder.use Faraday::Response::Mashify unless raw
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
@@ -26,7 +26,7 @@ module Open311
26
26
  request.url(formatted_path(path), options)
27
27
  when :post, :put
28
28
  request.path = formatted_path(path)
29
- request.body = options
29
+ request.body = options unless options.empty?
30
30
  end
31
31
  end
32
32
  raw ? response : response.body
@@ -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('dev/v2/services', options)
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 = :json.freeze
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
@@ -1,3 +1,3 @@
1
1
  module Open311
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
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("libxml-ruby", "~> 1.1")
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("rcov", "~> 0.9")
9
- s.add_development_dependency("rspec", "~> 2.0.1")
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.2")
16
- s.add_runtime_dependency("faraday_middleware", "~> 0.2.3")
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,4 @@
1
+ HTTP/1.1 403 Forbidden
2
+
3
+ <?xml version="1.0" encoding="utf-8"?>
4
+ <error>Invalid api_key received -- can't proceed with create_request.</error>
@@ -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,7 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <service_requests>
3
+ <request>
4
+ <service_request_id>638344</service_request_id>
5
+ <token>12345</token>
6
+ </request>
7
+ </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 = 'https://open311.sfgov.org/'
7
- config.format = 'xml'
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, 'https://open311.sfgov.org/dev/v2/services.xml').
11
- with(:query => {:jurisdiction_id => 'sfgov.org'}).
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, 'https://open311.sfgov.org/dev/v2/services.xml').
18
- with(:query => {:jurisdiction_id => 'sfgov.org'}).
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
- version: 0.0.1
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-08 00:00:00 -08:00
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: libxml-ruby
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
- - 1
49
- version: "1.1"
45
+ - 4
46
+ version: "1.4"
50
47
  type: :development
51
48
  version_requirements: *id002
52
49
  - !ruby/object:Gem::Dependency
53
- name: rake
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
- - 8
64
- version: "0.8"
59
+ - 6
60
+ version: "0.6"
65
61
  type: :development
66
62
  version_requirements: *id003
67
63
  - !ruby/object:Gem::Dependency
68
- name: rcov
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
- - 0
78
- - 9
79
- version: "0.9"
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: rspec
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
- - 1
95
- version: 2.0.1
87
+ - 8
88
+ version: "0.8"
96
89
  type: :development
97
90
  version_requirements: *id005
98
91
  - !ruby/object:Gem::Dependency
99
- name: webmock
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
- - 5
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: yajl-ruby
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
- - 7
125
- version: "0.7"
115
+ - 3
116
+ version: "0.3"
126
117
  type: :development
127
118
  version_requirements: *id007
128
119
  - !ruby/object:Gem::Dependency
129
- name: yard
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
- hash: 7
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: *id008
146
+ version_requirements: *id009
143
147
  - !ruby/object:Gem::Dependency
144
148
  name: ZenTest
145
149
  prerelease: false
146
- requirement: &id009 !ruby/object:Gem::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: *id009
160
+ version_requirements: *id010
158
161
  - !ruby/object:Gem::Dependency
159
162
  name: hashie
160
163
  prerelease: false
161
- requirement: &id010 !ruby/object:Gem::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: *id010
175
+ version_requirements: *id011
174
176
  - !ruby/object:Gem::Dependency
175
177
  name: faraday
176
178
  prerelease: false
177
- requirement: &id011 !ruby/object:Gem::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
- - 2
187
- version: 0.5.2
187
+ - 3
188
+ version: 0.5.3
188
189
  type: :runtime
189
- version_requirements: *id011
190
+ version_requirements: *id012
190
191
  - !ruby/object:Gem::Dependency
191
192
  name: faraday_middleware
192
193
  prerelease: false
193
- requirement: &id012 !ruby/object:Gem::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
- version: 0.2.3
202
+ - 0
203
+ version: 0.3.0
204
204
  type: :runtime
205
- version_requirements: *id012
205
+ version_requirements: *id013
206
206
  - !ruby/object:Gem::Dependency
207
207
  name: multi_json
208
208
  prerelease: false
209
- requirement: &id013 !ruby/object:Gem::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: *id013
220
+ version_requirements: *id014
222
221
  - !ruby/object:Gem::Dependency
223
222
  name: multi_xml
224
223
  prerelease: false
225
- requirement: &id014 !ruby/object:Gem::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: *id014
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