citibikenyc 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 07aeb5ee83325ec495e5a2a452d7548e214fe98a
4
+ data.tar.gz: 9e8630dba61d0850a7634e105dbcf712daa8de63
5
+ SHA512:
6
+ metadata.gz: aff897cf93ba7d222f1ac742effdf2c16368c221df6c7c8c93a6f2b80049b4efd60450ad739dc902b87dd48346371a66ae99cf1debf319f304f9e50fc25210b7
7
+ data.tar.gz: cf669aa4c87de7a3d89d25f1ce1a8a9153acc2fd517c3ba15d3f80510135c95f67e839e449ea5dd2e9ae29f292a476e48b4e6eaaa3cf13399d4940f451631d4e
@@ -0,0 +1,9 @@
1
+ *.gem
2
+ .ruby-version
3
+ .ruby-gemset
4
+ Gemfile.lock
5
+ .DS_Store
6
+ # YARD artifacts
7
+ .yardoc
8
+ _yardoc
9
+ doc/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ matrix:
3
+ allow_failures:
4
+ - rvm: ruby-head
5
+ rvm:
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - ruby-head
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Edgar Gonzalez
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,69 @@
1
+ # Citibikenyc [![Build Status](https://travis-ci.org/edgar/citibikenyc.png?branch=master)](https://travis-ci.org/edgar/citibikenyc) [![Dependency Status](https://gemnasium.com/edgar/citibikenyc.png)](https://gemnasium.com/edgar/citibikenyc)
2
+ A gem for CitibikeNYC API - citibikenyc.com
3
+
4
+ ## Installation
5
+
6
+ Add this line to your application's Gemfile:
7
+
8
+ gem 'citibikenyc'
9
+
10
+ And then execute:
11
+
12
+ $ bundle
13
+
14
+ Or install it yourself as:
15
+
16
+ $ gem install citibikenyc
17
+
18
+ ## API Usage Examples
19
+
20
+ require "rubygems"
21
+ require "citibikenyc"
22
+
23
+ # Get a list of all stations
24
+ puts Citibikenyc.stations
25
+
26
+ # Get only the current status for all stations
27
+ puts Citibikenyc.stations_status
28
+
29
+ # Get helmets info
30
+ puts Citibikenyc.helmets
31
+
32
+ # Get branches info
33
+ puts Citibikenyc.branches
34
+
35
+ For more information about the data returned by every method please check the specs folder
36
+
37
+ ## Configuration
38
+
39
+ Because citibikenyc gem is based on [Faraday](https://github.com/lostisland/faraday), it supports the following adapters:
40
+
41
+ * Net::HTTP (default)
42
+ * [Excon][https://github.com/geemus/excon]
43
+ * [Typhoeus][https://github.com/typhoeus/typhoeus]
44
+ * [Patron][http://toland.github.com/patron/]
45
+ * [EventMachine][https://github.com/igrigorik/em-http-request]
46
+
47
+ Beside the adapter, you can change the following properties:
48
+
49
+ * endpoint
50
+ * format
51
+ * user_agent
52
+ * proxy
53
+ * debug
54
+
55
+ For instance:
56
+
57
+ require 'typhoeus/adapters/faraday' # You will need the typhoeus gem
58
+
59
+ client = Citibikenyc.client(adapter: :typhoeus, user_agent: "foobar v1", debug: true)
60
+ client.stations
61
+
62
+
63
+ ## Contributing
64
+
65
+ 1. Fork it
66
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
67
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
68
+ 4. Push to the branch (`git push origin my-new-feature`)
69
+ 5. Create new Pull Request
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new
6
+ task :default => :spec
7
+ task :test => :spec
8
+
9
+ namespace :doc do
10
+ begin
11
+ require 'yard'
12
+ rescue LoadError
13
+ # ignore
14
+ else
15
+ YARD::Rake::YardocTask.new do |task|
16
+ task.files = ['lib/**/*.rb']
17
+ task.options = [
18
+ '--protected',
19
+ '--output-dir', 'doc/yard',
20
+ '--tag', 'format:Supported formats',
21
+ '--markup', 'markdown',
22
+ ]
23
+ end
24
+ end
25
+ end
26
+
27
+ desc "Open an irb session preloaded with this library"
28
+ task :console do
29
+ sh "irb -rubygems -I lib -r citibikenyc.rb"
30
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/citibikenyc/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.add_development_dependency 'rake'
6
+ gem.add_development_dependency('rspec', '~> 2.13.0')
7
+ gem.add_development_dependency('webmock', '~> 1.12.3')
8
+ gem.add_development_dependency('yard', '~> 0.8.6.2')
9
+ gem.add_development_dependency('bluecloth', '~> 2.2.0')
10
+ gem.add_runtime_dependency('faraday', '~> 0.8.7')
11
+ gem.add_runtime_dependency('faraday_middleware', '~> 0.9.0')
12
+ gem.add_runtime_dependency('multi_json', '~> 1.7.7')
13
+ gem.add_runtime_dependency('hashie', '~> 2.0.5')
14
+ gem.authors = ["Edgar Gonzalez"]
15
+ gem.email = ["edgargonzalez@gmail.com"]
16
+ gem.description = %q{A ruby wrapper for Citibikenyc API}
17
+ gem.homepage = "http://github.com/edgar/citibikenyc"
18
+
19
+ gem.files = `git ls-files`.split($\)
20
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
21
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
22
+ gem.summary = %q{A ruby wrapper for Citibikenyc API}
23
+ gem.name = "citibikenyc"
24
+ gem.require_paths = ["lib"]
25
+ gem.version = Citibikenyc::VERSION.dup
26
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../citibikenyc/error', __FILE__)
2
+ require File.expand_path('../citibikenyc/configuration', __FILE__)
3
+ require File.expand_path('../citibikenyc/api', __FILE__)
4
+ require File.expand_path('../citibikenyc/client', __FILE__)
5
+
6
+ module Citibikenyc
7
+ extend Configuration
8
+
9
+ # Alias for Citibikenyc::Client.new
10
+ #
11
+ # @return [Citibikenyc::Client]
12
+ def self.client(options={})
13
+ Citibikenyc::Client.new(options)
14
+ end
15
+
16
+ # Delegate to Citibikenyc::Client
17
+ def self.method_missing(method, *args, &block)
18
+ return super unless client.respond_to?(method)
19
+ client.send(method, *args, &block)
20
+ end
21
+
22
+ # Delegate to Citibikenyc::Client
23
+ def self.respond_to?(method)
24
+ return client.respond_to?(method) || super
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../connection', __FILE__)
2
+ require File.expand_path('../request', __FILE__)
3
+
4
+ module Citibikenyc
5
+ # @private
6
+ class API
7
+ # @private
8
+ attr_accessor *Configuration::VALID_OPTIONS_KEYS
9
+
10
+ # Creates a new API
11
+ def initialize(options={})
12
+ options = Citibikenyc.options.merge(options)
13
+ Configuration::VALID_OPTIONS_KEYS.each do |key|
14
+ send("#{key}=", options[key])
15
+ end
16
+ end
17
+
18
+ include Connection
19
+ include Request
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ module Citibikenyc
2
+ class Client < API
3
+
4
+ Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
5
+
6
+ include Citibikenyc::Client::Stations
7
+ include Citibikenyc::Client::Helmets
8
+ include Citibikenyc::Client::Branches
9
+ end
10
+ end
@@ -0,0 +1,24 @@
1
+ module Citibikenyc
2
+ class Client
3
+ # Defines methods related to branches
4
+ module Branches
5
+
6
+ # Returns all information about branches
7
+ #
8
+ # @param options [Hash] An optional options hash
9
+ # @return [Hashie::Mash]
10
+ # @example Return all information about the branches
11
+ # Citibikenyc.branches
12
+ # @format :json
13
+ def branches(options={})
14
+ get(branches_path, options)
15
+ end
16
+
17
+ protected
18
+
19
+ def branches_path
20
+ 'v1/branch/list'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module Citibikenyc
2
+ class Client
3
+ # Defines methods related to helmets
4
+ module Helmets
5
+
6
+ # Returns all information about helmets
7
+ #
8
+ # @param options [Hash] An optional options hash
9
+ # @return [Hashie::Mash]
10
+ # @example Return all information about the helmets
11
+ # Citibikenyc.helmets
12
+ # @format :json
13
+ def helmets(options={})
14
+ get(helmets_path, options)
15
+ end
16
+
17
+ protected
18
+
19
+ def helmets_path
20
+ 'v1/helmet/list'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ module Citibikenyc
2
+ class Client
3
+ # Defines methods related to stations
4
+ module Stations
5
+
6
+ # Returns all information about stations
7
+ #
8
+ # @param options [Hash] An optional options hash
9
+ # @return [Hashie::Mash]
10
+ # @example Return all information about the stations
11
+ # Citibikenyc.stations
12
+ # @format :json
13
+ def stations(options={})
14
+ get(stations_path, options)
15
+ end
16
+
17
+ # Returns only the stations status
18
+ #
19
+ # @param options [Hash] An optional options hash
20
+ # @return [Hashie::Mash]
21
+ # @example Returns only the stations status
22
+ # Citibikenyc.stations_status
23
+ # @format :json
24
+ def stations_status(options={})
25
+ get(stations_path, options.merge(:updateOnly => true))
26
+ end
27
+
28
+ protected
29
+
30
+ def stations_path
31
+ 'data2/stations.php'
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,78 @@
1
+ require 'faraday'
2
+ require File.expand_path('../version', __FILE__)
3
+
4
+ module Citibikenyc
5
+ # Defines constants and methods related to configuration
6
+ module Configuration
7
+ # An array of valid keys in the options hash when configuring a {Citibikenyc::API}
8
+ VALID_OPTIONS_KEYS = [
9
+ :adapter,
10
+ :endpoint,
11
+ :format,
12
+ :user_agent,
13
+ :proxy,
14
+ :debug
15
+ ].freeze
16
+
17
+ # An array of valid request/response formats
18
+ VALID_FORMATS = [
19
+ :json].freeze
20
+
21
+ # The adapter that will be used to connect if none is set
22
+ #
23
+ # @note The default faraday adapter is Net::HTTP.
24
+ DEFAULT_ADAPTER = Faraday.default_adapter
25
+
26
+ # By default, don't set an application ID
27
+ DEFAULT_CLIENT_ID = nil
28
+
29
+ # The endpoint that will be used to connect if none is set
30
+ #
31
+ # @note There is no reason to use any other endpoint at this time
32
+ DEFAULT_ENDPOINT = 'http://appservices.citibikenyc.com/'.freeze
33
+
34
+ # The response format appended to the path and sent in the 'Accept' header if none is set
35
+ #
36
+ # @note JSON is the only available format at this time
37
+ DEFAULT_FORMAT = :json
38
+
39
+ # By default, don't use a proxy server
40
+ DEFAULT_PROXY = nil
41
+
42
+ # By default, dont' log the request/response
43
+ DEFAULT_DEBUG = false
44
+
45
+ # The user agent that will be sent to the API endpoint if none is set
46
+ DEFAULT_USER_AGENT = "Citibikenyc #{Citibikenyc::VERSION}".freeze
47
+
48
+ # @private
49
+ attr_accessor *VALID_OPTIONS_KEYS
50
+
51
+ # When this module is extended, set all configuration options to their default values
52
+ def self.extended(base)
53
+ base.reset
54
+ end
55
+
56
+ # Convenience method to allow configuration options to be set in a block
57
+ def configure
58
+ yield self
59
+ end
60
+
61
+ # Create a hash of options and their values
62
+ def options
63
+ VALID_OPTIONS_KEYS.inject({}) do |option, key|
64
+ option.merge!(key => send(key))
65
+ end
66
+ end
67
+
68
+ # Reset all configuration options to defaults
69
+ def reset
70
+ self.adapter = DEFAULT_ADAPTER
71
+ self.endpoint = DEFAULT_ENDPOINT
72
+ self.format = DEFAULT_FORMAT
73
+ self.user_agent = DEFAULT_USER_AGENT
74
+ self.proxy = DEFAULT_PROXY
75
+ self.debug = DEFAULT_DEBUG
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,27 @@
1
+ require 'faraday_middleware'
2
+ Dir[File.expand_path('../../faraday/*.rb', __FILE__)].each{|f| require f}
3
+
4
+ module Citibikenyc
5
+ # @private
6
+ module Connection
7
+ private
8
+
9
+ def connection(raw=false)
10
+ options = {
11
+ :headers => {'Accept' => "application/json; charset=utf-8", 'User-Agent' => user_agent},
12
+ :proxy => proxy,
13
+ :ssl => {:verify => false},
14
+ :url => endpoint,
15
+ }
16
+
17
+ Faraday::Connection.new(options) do |connection|
18
+ connection.use Faraday::Request::UrlEncoded
19
+ connection.use FaradayMiddleware::Mashify unless raw
20
+ connection.use Faraday::Response::ParseJson unless raw
21
+ connection.use FaradayMiddleware::RaiseHttpException
22
+ connection.use Faraday::Response::Logger if debug
23
+ connection.adapter(adapter)
24
+ end
25
+ end
26
+ end
27
+ end