sfpark 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gemtest ADDED
File without changes
data/.gitignore ADDED
@@ -0,0 +1,40 @@
1
+ *.gem
2
+ *.rbc
3
+ *.sw[a-p]
4
+ *.tmproj
5
+ *.tmproject
6
+ *.un~
7
+ *~
8
+ .DS_Store
9
+ .Spotlight-V100
10
+ .Trashes
11
+ ._*
12
+ .bundle
13
+ .config
14
+ .directory
15
+ .elc
16
+ .emacs.desktop
17
+ .emacs.desktop.lock
18
+ .redcar
19
+ .yardoc
20
+ Desktop.ini
21
+ Gemfile.lock
22
+ Icon?
23
+ InstalledFiles
24
+ Session.vim
25
+ Thumbs.db
26
+ \#*\#
27
+ _yardoc
28
+ auto-save-list
29
+ coverage
30
+ doc
31
+ lib/bundler/man
32
+ pkg
33
+ pkg/*
34
+ rdoc
35
+ spec/reports
36
+ test/tmp
37
+ test/version_tmp
38
+ tmp
39
+ tmtags
40
+ tramp
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=nested
3
+ --backtrace
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby
6
+ - rbx
7
+ - rbx-2.0
8
+ - ree
data/.yardopts ADDED
@@ -0,0 +1,3 @@
1
+ --markup markdown
2
+ -
3
+ LICENSE.md
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gem_template.gemspec
4
+ gemspec
data/LICENSE.md ADDED
@@ -0,0 +1,10 @@
1
+ Copyright (c) 2011, Code for America
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5
+
6
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8
+ * Neither the name of Code for America nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9
+
10
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # SF Park
2
+ Ruby wrapper for the SF Park API
3
+
4
+ ## <a name="installation">Installation</a>
5
+ gem install sfpark
6
+
7
+ ## <a name="documentation">Documentation</a>
8
+ [http://rdoc.info/gems/sfpark](http://rdoc.info/gems/sfpark)
9
+
10
+ ## <a name="ci">Continuous Integration</a>
11
+ [![Build Status](https://secure.travis-ci.org/codeforamerica/sfpark.png)](http://travis-ci.org/codeforamerica/sfpark)
12
+
13
+ ## <a name="examples">Usage Examples</a>
14
+ require 'sfpark'
15
+
16
+ @client = SFPark.new
17
+ @client.availability # Return an array of 25 parking spots
18
+ @client.availability(:lat => 37.792275,:long => -122.397089,:radius => 0.25, :uom => 'mile') #Return array with specified area
19
+
20
+ ## <a name="contributing">Contributing</a>
21
+ In the spirit of [free software](http://www.fsf.org/licensing/essays/free-sw.html), **everyone** is encouraged to help improve this project.
22
+
23
+ Here are some ways *you* can contribute:
24
+
25
+ * by using alpha, beta, and prerelease versions
26
+ * by reporting bugs
27
+ * by suggesting new features
28
+ * by writing or editing documentation
29
+ * by writing specifications
30
+ * by writing code (**no patch is too small**: fix typos, add comments, clean up inconsistent whitespace)
31
+ * by refactoring code
32
+ * by resolving [issues](https://github.com/codeforamerica/sfpark/issues)
33
+ * by reviewing patches
34
+ * [financially](https://secure.codeforamerica.org/page/contribute)
35
+
36
+ ## <a name="issues">Submitting an Issue</a>
37
+ We use the [GitHub issue tracker](https://github.com/codeforamerica/sfpark/issues)
38
+ to track bugs and features. Before submitting a bug report or feature request,
39
+ check to make sure it hasn't already been submitted. You can indicate support
40
+ for an existing issuse by voting it up. When submitting a bug report, please
41
+ include a [Gist](https://gist.github.com/) that includes a stack trace and any
42
+ details that may be necessary to reproduce the bug, including your gem version,
43
+ Ruby version, and operating system. Ideally, a bug report should include a pull
44
+ request with failing specs.
45
+
46
+ ## <a name="pulls">Submitting a Pull Request</a>
47
+ 1. Fork the project.
48
+ 2. Create a topic branch.
49
+ 3. Implement your feature or bug fix.
50
+ 4. Add documentation for your feature or bug fix.
51
+ 5. Run <tt>bundle exec rake doc:yard</tt>. If your changes are not 100% documented, go back to step 4.
52
+ 6. Add specs for your feature or bug fix.
53
+ 7. Run <tt>bundle exec rake spec</tt>. If your changes are not 100% covered, go back to step 6.
54
+ 8. Commit and push your changes.
55
+ 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.)
56
+
57
+ ## <a name="rubies">Supported Rubies</a>
58
+ This library aims to support and is [tested
59
+ against](http://travis-ci.org/codeforamerica/sfpark) the following
60
+ Ruby implementations:
61
+
62
+ * Ruby 1.8.7
63
+ * Ruby 1.9.2
64
+ * Ruby 1.9.3
65
+ * [JRuby](http://www.jruby.org/)
66
+ * [Rubinius](http://rubini.us/)
67
+ * [Ruby Enterprise Edition](http://www.rubyenterpriseedition.com/)
68
+
69
+ If something doesn't work on one of these interpreters, it should be considered
70
+ a bug.
71
+
72
+ This library may inadvertently work (or seem to work) on other Ruby
73
+ implementations, however support will only be provided for the versions listed
74
+ above.
75
+
76
+ If you would like this library to support another Ruby version, you may
77
+ volunteer to be a maintainer. Being a maintainer entails making sure all tests
78
+ run and pass on that implementation. When something breaks on your
79
+ implementation, you will be personally responsible for providing patches in a
80
+ timely fashion. If critical issues for a particular implementation exist at the
81
+ time of a major release, support for that Ruby version may be dropped.
82
+
83
+ ## Credits
84
+ SF Park API - [API](http://sfpark.org/resources/sfpark-availability-service-api-reference/)
85
+
86
+ ## <a name="copyright">Copyright</a>
87
+ Copyright (c) 2011 Code for America.
88
+ See [LICENSE](https://github.com/codeforamerica/sfpark/blob/master/LICENSE.md) for details.
89
+
90
+ [![Code for America Tracker](http://stats.codeforamerica.org/codeforamerica/sfpark.png)](http://stats.codeforamerica.org/projects/sfpark)
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ require 'rspec/core/rake_task'
7
+ RSpec::Core::RakeTask.new(:spec)
8
+
9
+ task :default => :spec
10
+ task :test => :spec
11
+
12
+ require 'yard'
13
+ namespace :doc do
14
+ YARD::Rake::YardocTask.new do |task|
15
+ task.files = ['LICENSE.md', 'lib/**/*.rb']
16
+ task.options = ['--markup', 'markdown']
17
+ end
18
+ end
data/lib/sfpark.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'sfpark/configuration'
2
+ require 'sfpark/client'
3
+
4
+ module SFPark
5
+ extend Configuration
6
+ class << self
7
+ # Alias for SFPark::Client.new
8
+ #
9
+ # @return [SFPark::Client]
10
+ def new(options={})
11
+ SFPark::Client.new(options)
12
+ end
13
+
14
+ # Delegate to SFPark::Client.new
15
+ def method_missing(method, *args, &block)
16
+ return super unless new.respond_to?(method)
17
+ new.send(method, *args, &block)
18
+ end
19
+
20
+ def respond_to?(method, include_private=false)
21
+ new.respond_to?(method, include_private) || super(method, include_private)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ require 'sfpark/connection'
2
+ require 'sfpark/request'
3
+
4
+ require 'sfpark/client/availability'
5
+
6
+ module SFPark
7
+ class Client
8
+ attr_accessor(*Configuration::VALID_OPTIONS_KEYS)
9
+
10
+ def initialize(options={})
11
+ options = SFPark.options.merge(options)
12
+ Configuration::VALID_OPTIONS_KEYS.each do |key|
13
+ send("#{key}=", options[key])
14
+ end
15
+ end
16
+
17
+ include SFPark::Connection
18
+ include SFPark::Request
19
+
20
+ include SFPark::Client::Availability
21
+
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ module SFPark
2
+ class Client
3
+ module Availability
4
+
5
+ # Get the availiablity for parking in San Francisco
6
+ #
7
+ # @see http://sfpark.org/resources/sfpark-availability-service-api-reference/
8
+ # @param options [Hash] A customizable set of options.
9
+ # @option options requestid [String] Request parameter allows correlating a response to a particular request
10
+ # @option options lat [String] Latitude in decimal format to be specified along with LONG.
11
+ # @option options long [String] Longitude in decimal format to be specified along with LAT.
12
+ # @option options radius [String] Search Radius
13
+ # @option options uom [String] Unit of Measurement for the search radius mile, km, foot, meter, m, yard
14
+ # @option options type [String] Limit data to specified parking type
15
+ # @option options method [String] Method to invoke
16
+ # @option options pricing [String] Include rate information in response values: no, yes
17
+ # @return [Array<Hashie::Mash>]
18
+ # @example
19
+ # SFPark.availability
20
+ # SFPark.availability(:lat => 37.792275,:long => -122.397089,:radius => 0.25, :uom => 'mile')
21
+ def availability(options={})
22
+ get("availabilityservice", options)
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,65 @@
1
+ require 'sfpark/version'
2
+
3
+ module SFPark
4
+ # Defines constants and methods related to configuration
5
+ module Configuration
6
+ # An array of valid keys in the options hash when configuring a {SfPark::API}
7
+ VALID_OPTIONS_KEYS = [
8
+ :adapter,
9
+ :endpoint,
10
+ :proxy,
11
+ :response,
12
+ :user_agent,
13
+ :faraday_options].freeze
14
+
15
+ # The adapter that will be used to connect if none is set
16
+ DEFAULT_ADAPTER = :net_http
17
+
18
+ # The endpoint that will be used to connect if none is set
19
+ DEFAULT_ENDPOINT = 'http://api.sfpark.org/sfpark/rest'.freeze
20
+
21
+ # The response format appended to the path and sent in the 'Accept' header if none is set
22
+ #
23
+ # @note JSON is preferred over XML because it is more concise and faster to parse.
24
+ DEFAULT_RESPONSE = :json
25
+
26
+ # By default, don't use a proxy server
27
+ DEFAULT_PROXY = nil
28
+
29
+ # The value sent in the 'User-Agent' header if none is set
30
+ DEFAULT_USER_AGENT = "SFPark Ruby Gem #{SFPark::VERSION}".freeze
31
+
32
+ DEFAULT_FARADAY_OPTIONS = {}.freeze
33
+
34
+ # @private
35
+ attr_accessor *VALID_OPTIONS_KEYS
36
+
37
+ # When this module is extended, set all configuration options to their default values
38
+ def self.extended(base)
39
+ base.reset
40
+ end
41
+
42
+ # Convenience method to allow configuration options to be set in a block
43
+ def configure
44
+ yield self
45
+ end
46
+
47
+ # Create a hash of options and their values
48
+ def options
49
+ options = {}
50
+ VALID_OPTIONS_KEYS.each{|k| options[k] = send(k)}
51
+ options
52
+ end
53
+
54
+ # Reset all configuration options to defaults
55
+ def reset
56
+ self.adapter = DEFAULT_ADAPTER
57
+ self.endpoint = DEFAULT_ENDPOINT
58
+ self.proxy = DEFAULT_PROXY
59
+ self.user_agent = DEFAULT_USER_AGENT
60
+ self.response = DEFAULT_RESPONSE
61
+ self.faraday_options = DEFAULT_FARADAY_OPTIONS
62
+ self
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,27 @@
1
+ require 'faraday_middleware'
2
+
3
+ module SFPark
4
+ module Connection
5
+ private
6
+
7
+ def connection(options={})
8
+ merged_options = faraday_options.merge({
9
+ :headers => {
10
+ 'Accept' => "application/#{response}",
11
+ 'User-Agent' => user_agent
12
+ },
13
+ :ssl => {:verify => false},
14
+ :url => endpoint
15
+ })
16
+
17
+ Faraday.new(merged_options) do |builder|
18
+ builder.use Faraday::Request::UrlEncoded
19
+ builder.use Faraday::Response::RaiseError
20
+ builder.use Faraday::Response::Rashify
21
+ builder.use Faraday::Response::Mashify
22
+ builder.use Faraday::Response::ParseJson
23
+ builder.adapter(Faraday.default_adapter)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ module SFPark
2
+ module Request
3
+ def get(path, options={})
4
+ request(:get, path, options)
5
+ end
6
+
7
+ private
8
+
9
+ def request(method, path, options)
10
+ response = connection.send(method) do |request|
11
+ request.url(path, options)
12
+ request.params['response'] = 'json'
13
+ end
14
+ response.body
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module SFPark
2
+ VERSION = "0.0.1"
3
+ end
data/sfpark.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ require File.expand_path('../lib/sfpark/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.add_dependency 'faraday', '~> 0.7.4'
6
+ gem.add_dependency 'faraday_middleware', '~> 0.7.0'
7
+ gem.add_dependency 'hashie', '~> 1.1.0'
8
+ gem.add_dependency 'multi_json', '~> 1.0.2'
9
+ gem.add_dependency 'rash', '~> 0.3.0'
10
+ gem.add_development_dependency 'rake', '~> 0.9'
11
+ gem.add_development_dependency 'rdiscount', '~> 1.6'
12
+ gem.add_development_dependency 'rspec', '~> 2.6'
13
+ gem.add_development_dependency 'simplecov', '~> 0.4'
14
+ gem.add_development_dependency 'webmock', '~> 1.7'
15
+ gem.add_development_dependency 'yard', '~> 0.7'
16
+ gem.author = "Ryan Resella"
17
+ gem.description = %q{Ruby Wrapper for the SF Park API}
18
+ gem.email = 'ryan@codeforamerica.org'
19
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
20
+ gem.files = `git ls-files`.split("\n")
21
+ gem.homepage = ''
22
+ gem.name = 'sfpark'
23
+ gem.require_paths = ['lib']
24
+ gem.summary = gem.description
25
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
+ gem.version = SFPark::VERSION
27
+ end
@@ -0,0 +1,33 @@
1
+ require 'helper'
2
+
3
+ describe Faraday::Response do
4
+ before do
5
+ @client = SFPark::Client.new
6
+ end
7
+
8
+ {
9
+ 400 => Faraday::Error::ClientError,
10
+ 401 => Faraday::Error::ClientError,
11
+ 403 => Faraday::Error::ClientError,
12
+ 404 => Faraday::Error::ResourceNotFound,
13
+ 406 => Faraday::Error::ClientError,
14
+ 500 => Faraday::Error::ClientError,
15
+ 501 => Faraday::Error::ClientError,
16
+ 502 => Faraday::Error::ClientError,
17
+ 503 => Faraday::Error::ClientError,
18
+ }.each do |status, exception|
19
+ context "when HTTP status is #{status}" do
20
+
21
+ before do
22
+ stub_get("/availabilityservice?response=json").
23
+ to_return(:status => status, :body => fixture("availability.json"))
24
+ end
25
+
26
+ it "should raise #{exception.name} error" do
27
+ lambda do
28
+ @client.availability
29
+ end.should raise_error exception
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1 @@
1
+ {"STATUS":"SUCCESS","NUM_RECORDS":"25","MESSAGE":"25 records found","AVAILABILITY_UPDATED_TIMESTAMP":"2011-10-27T14:08:11.378-07:00","AVAILABILITY_REQUEST_TIMESTAMP":"2011-10-27T14:08:11.292-07:00","AVL":[{"TYPE":"OFF","OSPID":"931","NAME":"Civic Center Garage","DESC":"355 McAllister Street","INTER":"McAllister between Larkin & Polk","TEL":"(415) 863-1537","OPHRS":{"OPS":[{"FROM":"Monday","TO":"Friday","BEG":"6:00 AM","END":"12:00 AM"},{"FROM":"Saturday","BEG":"8:00 AM","END":"12:00 AM"},{"FROM":"Sunday","BEG":"9:00 AM","END":"10:00 PM"}]},"OCC":"608","OPER":"843","PTS":"1","LOC":"-122.4177671135,37.7802465669"},{"TYPE":"ON","BFID":"640011","NAME":"Redwood St (101-199)","OCC":"3","OPER":"4","PTS":"2","LOC":"-122.4192828405,37.7806708912,-122.4201217059,37.7805642728"},{"TYPE":"ON","BFID":"442061","NAME":"Golden Gate Ave (601-699)","OCC":"15","OPER":"16","PTS":"2","LOC":"-122.4206608328,37.7809344196,-122.4218356468,37.7807855562"},{"TYPE":"ON","BFID":"542022","NAME":"Larkin St (200-298)","OCC":"1","OPER":"3","PTS":"2","LOC":"-122.4167139409,37.7798410783,-122.4167913901,37.7802293301"},{"TYPE":"ON","BFID":"419042","NAME":"Franklin St (400-598)","OCC":"6","OPER":"6","PTS":"2","LOC":"-122.4214765641,37.7782428083,-122.4216354858,37.7790283645"},{"TYPE":"ON","BFID":"419051","NAME":"Franklin St (501-599)","OCC":"10","OPER":"12","PTS":"2","LOC":"-122.4218175417,37.7790474754,-122.4219603701,37.779757594"},{"TYPE":"ON","BFID":"701042","NAME":"Van Ness Ave (300-498)","OCC":"6","OPER":"6","PTS":"2","LOC":"-122.4199114866,37.7792134379,-122.4200020117,37.7796640515"},{"TYPE":"ON","BFID":"701052","NAME":"Van Ness Ave (500-598)","OCC":"7","OPER":"7","PTS":"2","LOC":"-122.4201267351,37.7802806276,-122.4202504526,37.7808901629"},{"TYPE":"ON","BFID":"701031","NAME":"Van Ness Ave (301-499)","OCC":"3","OPER":"8","PTS":"2","LOC":"-122.4201589217,37.7785515993,-122.4201981493,37.7790243412"},{"TYPE":"ON","BFID":"701032","NAME":"Van Ness Ave (300-498)","OCC":"5","OPER":"6","PTS":"2","LOC":"-122.4198189499,37.7787557835,-122.4199014283,37.7791641521"},{"TYPE":"ON","BFID":"612032","NAME":"Polk St (300-398)","OCC":"10","OPER":"12","PTS":"2","LOC":"-122.4183011467,37.7794659022,-122.4184238584,37.7800704084"},{"TYPE":"ON","BFID":"419052","NAME":"Franklin St (466-598)","OCC":"3","OPER":"7","PTS":"2","LOC":"-122.4216807483,37.7792536713,-122.4217873667,37.7797777107"},{"TYPE":"ON","BFID":"442072","NAME":"Golden Gate Ave (700-798)","OCC":"8","OPER":"17","PTS":"2","LOC":"-122.4222450211,37.7808690404,-122.4235083484,37.780708107"},{"TYPE":"ON","BFID":"442062","NAME":"Golden Gate Ave (600-698)","OCC":"11","OPER":"13","PTS":"2","LOC":"-122.4207402937,37.7810601489,-122.4218507343,37.7809193321"},{"TYPE":"ON","BFID":"563042","NAME":"Mcallister St (400-498)","OCC":"12","OPER":"13","PTS":"2","LOC":"-122.419091732,37.780308791,-122.4200211225,37.7801901026"},{"TYPE":"ON","BFID":"563032","NAME":"Mcallister St (300-398)","OCC":"6","OPER":"7","PTS":"2","LOC":"-122.4174542346,37.7805169986,-122.4184771676,37.780387246"},{"TYPE":"ON","BFID":"701041","NAME":"Van Ness Ave (301-499)","OCC":"5","OPER":"5","PTS":"2","LOC":"-122.4202253068,37.7791571112,-122.4203791994,37.7796399115"},{"TYPE":"ON","BFID":"563031","NAME":"Mcallister St (301-399)","OCC":"13","OPER":"16","PTS":"2","LOC":"-122.4171685778,37.7803480185,-122.4177942064,37.7802675518"},{"TYPE":"ON","BFID":"563051","NAME":"Mcallister St (501-599)","OCC":"8","OPER":"10","PTS":"2","LOC":"-122.4205019111,37.7800040233,-122.4217109234,37.7798501308"},{"TYPE":"ON","BFID":"563052","NAME":"Mcallister St (500-598)","OCC":"3","OPER":"15","PTS":"2","LOC":"-122.4207986321,37.7800915309,-122.4217742909,37.7799668075"},{"TYPE":"ON","BFID":"542021","NAME":"Larkin St (201-299)","OCC":"7","OPER":"7","PTS":"2","LOC":"-122.4169814927,37.779933615,-122.4170207202,37.7801307584"},{"TYPE":"ON","BFID":"419041","NAME":"Franklin St (401-499)","OCC":"4","OPER":"9","PTS":"2","LOC":"-122.4216395092,37.7781683766,-122.4217521625,37.7787276202"},{"TYPE":"ON","BFID":"701051","NAME":"Van Ness Ave (501-599)","OCC":"10","OPER":"11","PTS":"2","LOC":"-122.4204455844,37.7802454235,-122.4205703078,37.7808619996"},{"TYPE":"ON","BFID":"542011","NAME":"Larkin St (101-199)","OCC":"7","OPER":"14","PTS":"2","LOC":"-122.4167682559,37.7788654194,-122.4168587809,37.7793200563"},{"TYPE":"ON","BFID":"442071","NAME":"Golden Gate Ave (701-799)","OCC":"2","OPER":"11","PTS":"2","LOC":"-122.4222550795,37.780732247,-122.4235234359,37.7805703078"}]}
@@ -0,0 +1 @@
1
+ {"STATUS":"SUCCESS","NUM_RECORDS":"67","MESSAGE":"67 records found","AVAILABILITY_UPDATED_TIMESTAMP":"2011-10-27T14:07:41.749-07:00","AVAILABILITY_REQUEST_TIMESTAMP":"2011-10-27T14:07:41.655-07:00","AVL":[{"TYPE":"OFF","OSPID":"934","NAME":"Golden Gateway Garage","DESC":"250 Clay Street","INTER":"Clay between Front & Davis","TEL":"(415) 433-4722","OPHRS":{"OPS":[{"FROM":"Monday","TO":"Friday","BEG":"4:00 AM","END":"10:00 PM"},{"FROM":"Saturday","BEG":"7:00 AM","END":"10:00 PM"},{"FROM":"Sunday","BEG":"9:00 AM","END":"10:00 PM"}]},"OCC":"1054","OPER":"1095","PTS":"1","LOC":"-122.3986032,37.79544154"},{"TYPE":"ON","BFID":"651001","NAME":"Sansome St (1-99)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.4007030779,37.790581372,-122.4007936029,37.7910219272"},{"TYPE":"ON","BFID":"380002","NAME":"Davis St (2-98)","OCC":"1","OPER":"3","PTS":"2","LOC":"-122.3973757795,37.792760008,-122.3974994971,37.7933584792"},{"TYPE":"ON","BFID":"650011","NAME":"Sacramento St (101-199)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3967843492,37.7945222289,-122.397572923,37.7944216455"},{"TYPE":"ON","BFID":"606011","NAME":"Pine St (101-199)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3986944277,37.792336552,-122.3995503923,37.7922289278"},{"TYPE":"ON","BFID":"568003","NAME":"Mission St (35-99)","OCC":"7","OPER":"10","PTS":"2","LOC":"-122.393262925,37.7930637699,-122.3938030577,37.7926352847"},{"TYPE":"ON","BFID":"380001","NAME":"Davis St (1-99)","OCC":"2","OPER":"4","PTS":"2","LOC":"-122.3975186079,37.7926704888,-122.3976483605,37.793299135"},{"TYPE":"ON","BFID":"380022","NAME":"Davis St (200-398)","OCC":"0","OPER":"1","PTS":"2","LOC":"-122.3977318447,37.7945564273,-122.3978585798,37.7951810501"},{"TYPE":"ON","BFID":"651012","NAME":"Sansome St (100-198)","OCC":"1","OPER":"1","PTS":"2","LOC":"-122.4007131362,37.7914031382,-122.4007875679,37.7917632267"},{"TYPE":"ON","BFID":"568002","NAME":"Mission St (2-34)","OCC":"1","OPER":"1","PTS":"2","LOC":"-122.3928002414,37.7936552002,-122.3931090324,37.7934087709"},{"TYPE":"ON","BFID":"422021","NAME":"Front St (201-299)","OCC":"2","OPER":"3","PTS":"2","LOC":"-122.3989307986,37.7936883927,-122.3990062362,37.7941762221"},{"TYPE":"ON","BFID":"665012","NAME":"Steuart St (100-198)","OCC":"11","OPER":"17","PTS":"2","LOC":"-122.393068799,37.793032589,-122.3918446993,37.7920559244"},{"TYPE":"ON","BFID":"324032","NAME":"Battery St (300-398)","OCC":"0","OPER":"2","PTS":"2","LOC":"-122.4001046067,37.7943049688,-122.4002162543,37.7948481191"},{"TYPE":"ON","BFID":"380031","NAME":"Davis St (301-399)","OCC":"9","OPER":"11","PTS":"2","LOC":"-122.3980818749,37.7954475961,-122.3982035808,37.796047073"},{"TYPE":"ON","BFID":"606031","NAME":"Pine St (301-399)","OCC":"7","OPER":"10","PTS":"2","LOC":"-122.4011265339,37.7920297727,-122.4024381412,37.7918628043"},{"TYPE":"ON","BFID":"561002","NAME":"Main St (2-98)","OCC":"2","OPER":"3","PTS":"2","LOC":"-122.3964272782,37.7929330115,-122.3951579159,37.7919201368"},{"TYPE":"ON","BFID":"568004","NAME":"Mission St (36-98)","OCC":"6","OPER":"8","PTS":"2","LOC":"-122.3939800845,37.7926986522,-122.3934148059,37.7931472541"},{"TYPE":"ON","BFID":"661001","NAME":"Stevenson St (1-37)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3987688594,37.7903832227,-122.3992053913,37.7900382217"},{"TYPE":"ON","BFID":"324021","NAME":"Battery St (201-299)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.4000673909,37.7933393683,-122.4002001609,37.793983102"},{"TYPE":"ON","BFID":"386022","NAME":"Drumm St (200-298)","OCC":"4","OPER":"5","PTS":"2","LOC":"-122.3966596258,37.7956276403,-122.3967752967,37.7962180648"},{"TYPE":"ON","BFID":"665011","NAME":"Steuart St (101-199)","OCC":"1","OPER":"7","PTS":"2","LOC":"-122.392966204,37.7931754174,-122.3916908067,37.7921575136"},{"TYPE":"ON","BFID":"359012","NAME":"Clay St (100-198)","OCC":"12","OPER":"13","PTS":"2","LOC":"-122.3970046268,37.7954828002,-122.3978314222,37.7953771877"},{"TYPE":"ON","BFID":"324022","NAME":"Battery St (200-298)","OCC":"0","OPER":"2","PTS":"2","LOC":"-122.3999064575,37.7933433917,-122.4000432509,37.7940112653"},{"TYPE":"ON","BFID":"650041","NAME":"Sacramento St (401-499)","OCC":"2","OPER":"2","PTS":"2","LOC":"-122.4003480185,37.7940625629,-122.4011607322,37.793958962"},{"TYPE":"ON","BFID":"651022","NAME":"Sansome St (200-298)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.4008951921,37.7922802253,-122.4010309797,37.7929370348"},{"TYPE":"ON","BFID":"460021","NAME":"Halleck St (101-149)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.4013840274,37.7935013076,-122.4015520016,37.7934801851"},{"TYPE":"ON","BFID":"386011","NAME":"Drumm St (101-199)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3967179642,37.7946710923,-122.3968074834,37.7951146651"},{"TYPE":"ON","BFID":"606002","NAME":"Pine St (2-98)","OCC":"5","OPER":"6","PTS":"2","LOC":"-122.3976644538,37.7925900221,-122.3984671092,37.7924874271"},{"TYPE":"ON","BFID":"420001","NAME":"Fremont St (1-99)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3975528063,37.7912502515,-122.3967773084,37.7906326695"},{"TYPE":"ON","BFID":"201001","NAME":"1st St (1-99)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3989076645,37.7909273788,-122.3976322671,37.7899245625"},{"TYPE":"ON","BFID":"666001","NAME":"Sutter St (51-99)","OCC":"0","OPER":"1","PTS":"2","LOC":"-122.4007825387,37.7901649567,-122.4020478777,37.7900030175"},{"TYPE":"ON","BFID":"328002","NAME":"Beale St (2-98)","OCC":"3","OPER":"4","PTS":"2","LOC":"-122.3972812311,37.7922017703,-122.396047073,37.7912180648"},{"TYPE":"ON","BFID":"651021","NAME":"Sansome St (201-299)","OCC":"2","OPER":"2","PTS":"2","LOC":"-122.4010440555,37.7922420036,-122.4011748139,37.7928766848"},{"TYPE":"ON","BFID":"422032","NAME":"Front St (300-398)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3989187286,37.7944669081,-122.3990474754,37.7950985717"},{"TYPE":"ON","BFID":"386001","NAME":"Drumm St (7-99)","OCC":"4","OPER":"7","PTS":"2","LOC":"-122.3965379199,37.7937869644,-122.3966686783,37.7944276805"},{"TYPE":"ON","BFID":"328001","NAME":"Beale St (1-99)","OCC":"9","OPER":"9","PTS":"2","LOC":"-122.3970891169,37.7922751961,-122.3958911688,37.7913367532"},{"TYPE":"ON","BFID":"568001","NAME":"Mission St (1-33)","OCC":"3","OPER":"3","PTS":"2","LOC":"-122.3927398914,37.7934781734,-122.3930094548,37.7932649366"},{"TYPE":"ON","BFID":"422011","NAME":"Front St (101-199)","OCC":"0","OPER":"1","PTS":"2","LOC":"-122.3986873868,37.7925005029,-122.3988372561,37.7932247033"},{"TYPE":"ON","BFID":"359011","NAME":"Clay St (101-199)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3975568296,37.795338966,-122.397729833,37.7953178435"},{"TYPE":"ON","BFID":"422002","NAME":"Front St (2-98)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3984842084,37.7922892778,-122.3984701267,37.7922208811"},{"TYPE":"ON","BFID":"422012","NAME":"Front St (100-198)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3985405351,37.7925598471,-122.3986813518,37.7932438141"},{"TYPE":"ON","BFID":"606012","NAME":"Pine St (100-198)","OCC":"2","OPER":"2","PTS":"2","LOC":"-122.398734661,37.7924421646,-122.3996509757,37.7923264937"},{"TYPE":"ON","BFID":"380011","NAME":"Davis St (101-199)","OCC":"4","OPER":"8","PTS":"2","LOC":"-122.3977690606,37.7938915711,-122.3978525448,37.7942848521"},{"TYPE":"ON","BFID":"386012","NAME":"Drumm St (100-198)","OCC":"2","OPER":"2","PTS":"2","LOC":"-122.3964765641,37.7947254074,-122.3966073225,37.7953701469"},{"TYPE":"ON","BFID":"420002","NAME":"Fremont St (2-98)","OCC":"2","OPER":"3","PTS":"2","LOC":"-122.397735868,37.7911929189,-122.3968638101,37.7904968819"},{"TYPE":"ON","BFID":"650021","NAME":"Sacramento St (201-299)","OCC":"0","OPER":"1","PTS":"2","LOC":"-122.3980114665,37.7943663247,-122.3987799236,37.794267753"},{"TYPE":"ON","BFID":"422001","NAME":"Front St (1-99)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3985566284,37.7918607926,-122.3986391068,37.7922711728"},{"TYPE":"ON","BFID":"386021","NAME":"Drumm St (201-299)","OCC":"5","OPER":"5","PTS":"2","LOC":"-122.3969020318,37.7955773486,-122.3970348019,37.7962321464"},{"TYPE":"ON","BFID":"569002","NAME":"Market St (2-198)","OCC":"3","OPER":"4","PTS":"2","LOC":"-122.3948551599,37.7945956548,-122.3949617783,37.7945161939"},{"TYPE":"ON","BFID":"380012","NAME":"Davis St (100-198)","OCC":"2","OPER":"3","PTS":"2","LOC":"-122.3975648763,37.7936793402,-122.3976976463,37.7943049688"},{"TYPE":"ON","BFID":"420021","NAME":"Fremont St (201-299)","OCC":"5","OPER":"6","PTS":"2","LOC":"-122.3949446791,37.7891882921,-122.3942295313,37.7886179843"},{"TYPE":"ON","BFID":"830001","NAME":"The Embarcadero (101-199)","OCC":"12","OPER":"16","PTS":"2","LOC":"-122.3944407564,37.7950170992,-122.3949829008,37.7958308187"},{"TYPE":"ON","BFID":"651011","NAME":"Sansome St (101-199)","OCC":"0","OPER":"2","PTS":"2","LOC":"-122.4008509354,37.7912965198,-122.4009847113,37.7919472943"},{"TYPE":"ON","BFID":"651032","NAME":"Sansome St (300-398)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.4010963589,37.7932578958,-122.4012311406,37.7939187286"},{"TYPE":"ON","BFID":"831001","NAME":"The Embarcadero (101-199)","OCC":"6","OPER":"9","PTS":"2","LOC":"-122.394091732,37.7946871857,-122.3935445584,37.7943301147"},{"TYPE":"ON","BFID":"665002","NAME":"Steuart St (2-78)","OCC":"2","OPER":"5","PTS":"2","LOC":"-122.3946157715,37.7942657413,-122.394043452,37.7938090927"},{"TYPE":"ON","BFID":"606001","NAME":"Pine St (1-99)","OCC":"4","OPER":"5","PTS":"2","LOC":"-122.3977318447,37.7924542346,-122.3984349226,37.7923647153"},{"TYPE":"ON","BFID":"359032","NAME":"Clay St (302-398)","OCC":"7","OPER":"10","PTS":"2","LOC":"-122.3993260913,37.7952353651,-122.4001619392,37.7951287467"},{"TYPE":"ON","BFID":"422031","NAME":"Front St (301-399)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3990897204,37.7944296922,-122.3992184671,37.795066385"},{"TYPE":"ON","BFID":"650031","NAME":"Sacramento St (301-399)","OCC":"0","OPER":"1","PTS":"2","LOC":"-122.3991711929,37.7942134379,-122.4000020117,37.7941078254"},{"TYPE":"ON","BFID":"606032","NAME":"Pine St (300-398)","OCC":"5","OPER":"5","PTS":"2","LOC":"-122.4011084289,37.7921384027,-122.4024441762,37.7919684168"},{"TYPE":"ON","BFID":"324031","NAME":"Battery St (301-399)","OCC":"2","OPER":"7","PTS":"2","LOC":"-122.4002474351,37.7942164554,-122.4003661235,37.7947917924"},{"TYPE":"ON","BFID":"201002","NAME":"1st St (2-98)","OCC":"4","OPER":"7","PTS":"2","LOC":"-122.3989941662,37.7907925971,-122.3978696439,37.7899084691"},{"TYPE":"ON","BFID":"422022","NAME":"Front St (200-298)","OCC":"1","OPER":"1","PTS":"2","LOC":"-122.3988322269,37.7939780728,-122.3987316435,37.7934992959"},{"TYPE":"ON","BFID":"380021","NAME":"Davis St (201-399)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.3979139006,37.7945755381,-122.3979973848,37.79498793"},{"TYPE":"ON","BFID":"651031","NAME":"Sansome St (343-399)","OCC":"0","OPER":"0","PTS":"2","LOC":"-122.4013216657,37.7935928385,-122.4013749749,37.7938523436"},{"TYPE":"ON","BFID":"359022","NAME":"Clay St (200-300)","OCC":"2","OPER":"2","PTS":"2","LOC":"-122.3981452424,37.7953862402,-122.3991098371,37.7952625226"}]}
data/spec/helper.rb ADDED
@@ -0,0 +1,27 @@
1
+ $:.unshift File.expand_path('..', __FILE__)
2
+ $:.unshift File.expand_path('../../lib', __FILE__)
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+ require 'sfpark'
6
+ require 'rspec'
7
+ require 'webmock/rspec'
8
+
9
+ def a_get(url)
10
+ a_request(:get, sfpark_url(url))
11
+ end
12
+
13
+ def stub_get(url)
14
+ stub_request(:get, sfpark_url(url))
15
+ end
16
+
17
+ def fixture_path
18
+ File.expand_path("../fixtures", __FILE__)
19
+ end
20
+
21
+ def fixture(file)
22
+ File.new(fixture_path + '/' + file)
23
+ end
24
+
25
+ def sfpark_url(url)
26
+ "http://api.sfpark.org/sfpark/rest#{url}"
27
+ end
@@ -0,0 +1,34 @@
1
+ require 'helper'
2
+
3
+ describe SFPark::Client::Availability do
4
+ before do
5
+ @client = SFPark.new
6
+ end
7
+
8
+ describe "#availability" do
9
+ context "with no query parameters" do
10
+ before do
11
+ stub_get("/availabilityservice?response=json").
12
+ to_return(:status => 200, :body => fixture("availability.json"))
13
+ end
14
+
15
+ it "should return search the number of records available" do
16
+ search = @client.availability
17
+ search.num_records.should == "25"
18
+ end
19
+ end
20
+
21
+ context "with query paramaters" do
22
+ before do
23
+ stub_get("/availabilityservice?lat=37.792275&long=-122.397089&radius=0.25&uom=mile&response=json").
24
+ to_return(:status => 200, :body => fixture("availability_params.json"))
25
+ end
26
+
27
+ it "should return the num of records available" do
28
+ search = @client.availability(:lat => 37.792275,:long => -122.397089,:radius => 0.25, :uom => 'mile')
29
+ search.num_records.should == "67"
30
+ end
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ require 'helper'
2
+
3
+ describe SFPark do
4
+ after do
5
+ SFPark.reset
6
+ end
7
+
8
+ describe ".respond_to?" do
9
+ it "should be true if method exists" do
10
+ SFPark.respond_to?(:new, true).should be_true
11
+ end
12
+ end
13
+
14
+ describe ".new" do
15
+ it "should be a SFPark::Client" do
16
+ SFPark.new.should be_a SFPark::Client
17
+ end
18
+ end
19
+
20
+ describe ".delegate" do
21
+ it "should delegate missing methods to SFPark::Client" do
22
+ stub_get("/availabilityservice?response=json").
23
+ to_return(:status => 200, :body => fixture("availability.json"))
24
+ records = SFPark.availability
25
+ records.num_records.should == "25"
26
+ end
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,194 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sfpark
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ryan Resella
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-28 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday
16
+ requirement: &70135710220620 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.7.4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70135710220620
25
+ - !ruby/object:Gem::Dependency
26
+ name: faraday_middleware
27
+ requirement: &70135710220120 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 0.7.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70135710220120
36
+ - !ruby/object:Gem::Dependency
37
+ name: hashie
38
+ requirement: &70135710219660 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.1.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70135710219660
47
+ - !ruby/object:Gem::Dependency
48
+ name: multi_json
49
+ requirement: &70135710219200 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.2
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70135710219200
58
+ - !ruby/object:Gem::Dependency
59
+ name: rash
60
+ requirement: &70135710218740 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 0.3.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70135710218740
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: &70135710218280 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '0.9'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70135710218280
80
+ - !ruby/object:Gem::Dependency
81
+ name: rdiscount
82
+ requirement: &70135710217820 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: '1.6'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70135710217820
91
+ - !ruby/object:Gem::Dependency
92
+ name: rspec
93
+ requirement: &70135710217360 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: '2.6'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70135710217360
102
+ - !ruby/object:Gem::Dependency
103
+ name: simplecov
104
+ requirement: &70135710216900 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '0.4'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *70135710216900
113
+ - !ruby/object:Gem::Dependency
114
+ name: webmock
115
+ requirement: &70135710247900 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ version: '1.7'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70135710247900
124
+ - !ruby/object:Gem::Dependency
125
+ name: yard
126
+ requirement: &70135710247440 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: '0.7'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *70135710247440
135
+ description: Ruby Wrapper for the SF Park API
136
+ email: ryan@codeforamerica.org
137
+ executables: []
138
+ extensions: []
139
+ extra_rdoc_files: []
140
+ files:
141
+ - .gemtest
142
+ - .gitignore
143
+ - .rspec
144
+ - .travis.yml
145
+ - .yardopts
146
+ - Gemfile
147
+ - LICENSE.md
148
+ - README.md
149
+ - Rakefile
150
+ - lib/sfpark.rb
151
+ - lib/sfpark/client.rb
152
+ - lib/sfpark/client/availability.rb
153
+ - lib/sfpark/configuration.rb
154
+ - lib/sfpark/connection.rb
155
+ - lib/sfpark/request.rb
156
+ - lib/sfpark/version.rb
157
+ - sfpark.gemspec
158
+ - spec/faraday/response_spec.rb
159
+ - spec/fixtures/availability.json
160
+ - spec/fixtures/availability_params.json
161
+ - spec/helper.rb
162
+ - spec/sfpark/availability_spec.rb
163
+ - spec/sfpark_spec.rb
164
+ homepage: ''
165
+ licenses: []
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ requirements: []
183
+ rubyforge_project:
184
+ rubygems_version: 1.8.6
185
+ signing_key:
186
+ specification_version: 3
187
+ summary: Ruby Wrapper for the SF Park API
188
+ test_files:
189
+ - spec/faraday/response_spec.rb
190
+ - spec/fixtures/availability.json
191
+ - spec/fixtures/availability_params.json
192
+ - spec/helper.rb
193
+ - spec/sfpark/availability_spec.rb
194
+ - spec/sfpark_spec.rb