idbus_api 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.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +1 -0
  5. data/.rubocop_todo.yml +36 -0
  6. data/.travis.yml +19 -0
  7. data/Gemfile +4 -0
  8. data/Guardfile +6 -0
  9. data/MIT-LICENSE +21 -0
  10. data/README.md +102 -0
  11. data/Rakefile +25 -0
  12. data/idbus_api.gemspec +35 -0
  13. data/lib/idbus_api.rb +49 -0
  14. data/lib/idbus_api/base.rb +0 -0
  15. data/lib/idbus_api/client.rb +29 -0
  16. data/lib/idbus_api/default.rb +65 -0
  17. data/lib/idbus_api/endpoint/fares.rb +31 -0
  18. data/lib/idbus_api/endpoint/stops.rb +18 -0
  19. data/lib/idbus_api/errors.rb +3 -0
  20. data/lib/idbus_api/stops.rb +4 -0
  21. data/lib/idbus_api/version.rb +3 -0
  22. data/spec/cassettes/IdbusApi_Client/_get/handles_query_params.json +1 -0
  23. data/spec/cassettes/IdbusApi_Client/_last_response/caches_the_last_agent_response.json +1 -0
  24. data/spec/cassettes/IdbusApi_Endpoint_Fares/Not_authenticated/_fares/raises_an_unauthorized_execption.json +1 -0
  25. data/spec/cassettes/IdbusApi_Endpoint_Fares/authenticated/_fares_for_a_specific_route/returns_a_list_of_fares.json +1 -0
  26. data/spec/cassettes/IdbusApi_Endpoint_Stops/Not_authenticated/_stops/raises_an_unauthorized_execption.json +1 -0
  27. data/spec/cassettes/IdbusApi_Endpoint_Stops/authenticated/_stops/returns_a_list_of_stops.json +1 -0
  28. data/spec/cassettes/root.json +1 -0
  29. data/spec/idbus_api/client_spec.rb +214 -0
  30. data/spec/idbus_api/endpoint/fares_spec.rb +43 -0
  31. data/spec/idbus_api/endpoint/stops_spec.rb +35 -0
  32. data/spec/idbus_api_spec.rb +40 -0
  33. data/spec/spec_helper.rb +68 -0
  34. data/tasks/rspec.rake +21 -0
  35. metadata +246 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a8d04adf19e8cd56f2bdc02564303cada23a6364
4
+ data.tar.gz: 5ad55361ad7fef7920202e4d1547d8cc521f3836
5
+ SHA512:
6
+ metadata.gz: ced582baf89e79f8dfea0c21450f689335eb0b9570ee34820bea2bae79fa73ea8d0515f69b10b1a361085c254224688f9dd8363d81d22ff5a60d7e1dbd492d4a
7
+ data.tar.gz: 50731a514b3636e56f326f47c47fa16268abeb130c875dee86d6d6d1619f10b4d4109b91d9c8b0915fe1eb12715257326b77f8f7d6af0cf87bb8ec8c68cebdab
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ pkg/*
2
+ doc/*
3
+ rdoc/*
4
+ *.gem
5
+ .bundle
6
+ Gemfile.lock
7
+ .gh_pages
8
+ coverage/
9
+ *#*
10
+ *~
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1 @@
1
+ inherit_from: .rubocop_todo.yml
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,36 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2014-06-01 12:18:38 +0200 using RuboCop version 0.22.0.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 1
9
+ # Configuration parameters: CountComments.
10
+ ClassLength:
11
+ Max: 142
12
+
13
+ # Offense count: 1
14
+ CyclomaticComplexity:
15
+ Max: 8
16
+
17
+ # Offense count: 5
18
+ Documentation:
19
+ Enabled: false
20
+
21
+ # Offense count: 53
22
+ LineLength:
23
+ Max: 704
24
+
25
+ # Offense count: 2
26
+ # Configuration parameters: CountComments.
27
+ MethodLength:
28
+ Max: 19
29
+
30
+ # Offense count: 2
31
+ MultilineBlockChain:
32
+ Enabled: false
33
+
34
+ # Offense count: 5
35
+ RescueModifier:
36
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,19 @@
1
+ language: ruby
2
+
3
+ notifications:
4
+ email: false
5
+
6
+ rvm:
7
+ - 2.0
8
+ - 2.1
9
+ - ruby-head
10
+
11
+ matrix:
12
+ allow_failures:
13
+ - rvm: ruby-head
14
+
15
+ before_install:
16
+ - gem install fakeweb
17
+
18
+ script:
19
+ - "bundle exec rake spec"
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem "api", "~> 0.0.2", :git => "https://github.com/paulrbr/api.git"
data/Guardfile ADDED
@@ -0,0 +1,6 @@
1
+ group 'gem' do
2
+ guard 'rspec', :cmd => "bundle exec rspec", :all_on_start => false, :all_after_pass => false, :failed_mode => :focus do
3
+ watch(%r{^spec/.+_spec\.rb$})
4
+ watch(%r{^lib/idbus_api/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
5
+ end
6
+ end
data/MIT-LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2015 Paul Bonaud
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
data/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # iDBUS API wrapper
2
+
3
+ [![Build Status](https://travis-ci.org/paulRbr/idbus_api.svg)](https://travis-ci.org/paulRbr/idbus_api) [![Coverage Status](https://coveralls.io/repos/paulRbr/idbus_api/badge.svg)](https://coveralls.io/r/paulRbr/idbus_api)
4
+
5
+ ## Description
6
+
7
+ This gem wraps the new iDBUS API v1 available at https://api.idbus.com
8
+
9
+ ## Installation
10
+
11
+ You can use this gem in your project by specifying it in your `Gemfile`:
12
+
13
+ ```
14
+ gem "idbus_api"
15
+ ```
16
+
17
+ or simply install it via the CLI:
18
+
19
+ ```
20
+ gem install idbus_api
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ All the API methods are available as module methods or as client instance methods.
26
+
27
+ ### Configure the client
28
+
29
+ ```
30
+ IdbusApi.configure do |c|
31
+ c.access_token = "my_secret_token"
32
+ c.connection_options = {
33
+ ssl: { verify: false }
34
+ } # Hash of Faraday ConnectionOptions. See http://www.rubydoc.info/github/lostisland/faraday/Faraday/Connection#initialize-instance_method
35
+ c.user_agent = "My App"
36
+ end
37
+
38
+ # Fetch all stops
39
+ IdbusApi.stops
40
+ ```
41
+
42
+ or
43
+
44
+ ```
45
+ client = IdbusApi::Client.new(
46
+ access_token: "my_secret_token",
47
+ user_agent: "My App"
48
+ )
49
+
50
+ # Fetch fares
51
+ client.fares(date: "2015-07-07")
52
+ ```
53
+
54
+ ### Fetching resources
55
+
56
+ All resources are `Resource` objects. This object provides both dot notation and `[]` access for the api response fields.
57
+
58
+ #### Stops
59
+
60
+ ```
61
+ # Fetch stops from /v1/stops endpoint
62
+ stops = IdbusApi.stops
63
+
64
+ stops.first.short_name == "Paris CDG (aéroport)"
65
+ ```
66
+
67
+ #### Fares
68
+
69
+ Fares can be fetched with optional parameters. Full list of available parameters is available on the api documentation https://api.idbus.com/.
70
+
71
+ ```
72
+ # Fetch fares for specific origin station and specific date
73
+ fares = IdbusApi.fares(origin_id: 3, date: "2015-08-15")
74
+
75
+ fares.first.price_cents
76
+ => 1500
77
+
78
+ fares.first.to_hash
79
+ => {
80
+ :id => 13864,
81
+ :updated_at => 2015-06-11 07:55:22 UTC,
82
+ :origin_id => 3,
83
+ :destination_id => 13,
84
+ :departure => "2015-08-15T08:40:00.000+02:00",
85
+ :arrival => "2015-08-15T12:55:00.000+02:00",
86
+ :price_cents => 1500,
87
+ :price_currency => "EUR",
88
+ :book_path => "/v1/fares/13864/book",
89
+ :available => true,
90
+ :legs => [{:origin_id=>3, :destination_id=>13, :departure=>"2015-08-15T08:40:00.000+02:00", :arrival=>"2015-08-15T12:55:00.000+02:00", :bus_number=>"3912"}]
91
+ }
92
+ ```
93
+
94
+ ## Disclaimer
95
+
96
+ Neither I, nor any developer who contributed to this project, accept any kind of liability for your use of this library.
97
+
98
+ _This gem is not endorsed or affiliated with any company, api.idbus.com, nor iDBUS, nor SNCF._
99
+
100
+ ## License
101
+
102
+ Code licensed under [MIT-LICENSE](https://github.com/paulrbr/idbus_api/blob/master/MIT-LICENSE)
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task default: :spec
8
+
9
+ require 'idbus_api/version'
10
+ require 'rdoc/task'
11
+ RDoc::Task.new(:rdoc) do |rdoc|
12
+ rdoc.main = 'README.rdoc'
13
+ rdoc.rdoc_dir = 'rdoc'
14
+ rdoc.title = "IdbusApi #{IdbusApi::VERSION} documentation"
15
+ rdoc.rdoc_files.include('README*')
16
+ rdoc.rdoc_files.include('lib/**/*.rb')
17
+ rdoc.options << '--webcvs=http://github.com/paulrbr/idbus_api/tree/master/'
18
+ end
19
+
20
+ require 'gokdok'
21
+ Gokdok::Dokker.new do |gd|
22
+ gd.repo_url = 'git@github.com:paulrbr/idbus_api.git'
23
+ gd.doc_home = 'rdoc'
24
+ gd.remote_path = '.'
25
+ end
data/idbus_api.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
2
+ require 'idbus_api/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'idbus_api'
6
+ s.licenses = ['MIT']
7
+ s.version = IdbusApi::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Paul Bonaud']
10
+ s.email = ['paul+gh@bonaud.fr']
11
+ s.homepage = 'http://github.com/paulrbr/idbus_api'
12
+ s.summary = %q(Easily access the API of iDBUS.)
13
+ s.description = %q(Easily use Ruby or the command line to find information from the iDBUS API.)
14
+
15
+ s.rubyforge_project = 'idbus_api'
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
20
+ s.require_paths = ['lib']
21
+
22
+ s.add_dependency 'api'
23
+
24
+ s.add_development_dependency 'rake'
25
+ s.add_development_dependency 'rspec'
26
+ s.add_development_dependency 'webmock'
27
+ s.add_development_dependency 'vcr'
28
+ s.add_development_dependency 'multi_json'
29
+ s.add_development_dependency 'gokdok'
30
+ s.add_development_dependency 'guard'
31
+ s.add_development_dependency 'guard-rspec'
32
+ s.add_development_dependency 'rdoc'
33
+ s.add_development_dependency 'fakeweb'
34
+ s.add_development_dependency 'coveralls'
35
+ end
data/lib/idbus_api.rb ADDED
@@ -0,0 +1,49 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__)) unless
2
+ $LOAD_PATH.include?(File.dirname(__FILE__)) || $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'rubygems'
5
+ require 'json'
6
+
7
+ require 'api'
8
+
9
+ require 'idbus_api/default'
10
+ require 'idbus_api/client'
11
+ #require 'idbus_api/base'
12
+ #require 'idbus_api/stop'
13
+ #require 'idbus_api/fare'
14
+ require 'idbus_api/version'
15
+
16
+
17
+ # Ruby toolkit for the iDBUS API
18
+ module IdbusApi
19
+
20
+ class << self
21
+
22
+ include Api::Configurable
23
+
24
+ # API client based on configured options {Configurable}
25
+ #
26
+ # @return [IdbusApi::Client] API wrapper
27
+ def client
28
+ return @client if defined?(@client) && @client.same_options?(options)
29
+ @client = IdbusApi::Client.new(options)
30
+ end
31
+
32
+ private
33
+
34
+ def respond_to_missing?(method_name, include_private = false)
35
+ client.respond_to?(method_name, include_private)
36
+ end
37
+
38
+ def method_missing(method_name, *args, &block)
39
+ if client.respond_to?(method_name)
40
+ return client.send(method_name, *args, &block)
41
+ end
42
+
43
+ super
44
+ end
45
+
46
+ end
47
+ end
48
+
49
+ IdbusApi.reset!
File without changes
@@ -0,0 +1,29 @@
1
+ require 'api/authentication'
2
+ require 'api/configurable'
3
+ require 'api/connection'
4
+
5
+ require 'idbus_api/errors'
6
+ require 'idbus_api/endpoint/stops'
7
+ require 'idbus_api/endpoint/fares'
8
+
9
+ module IdbusApi
10
+
11
+ # Client for the iDBUS API
12
+ #
13
+ # @see https://api.idbus.com
14
+ class Client < Api::Client
15
+
16
+ # Include API gem modules
17
+ include Api::Authentication
18
+ include Api::Configurable
19
+ include Api::Connection
20
+
21
+ # Describe API endpoints
22
+ include IdbusApi::Endpoint::Stops
23
+ include IdbusApi::Endpoint::Fares
24
+
25
+ # Header keys that can be passed in options hash to {#get}
26
+ CONVENIENCE_HEADERS = Set.new([:accept, :content_type])
27
+
28
+ end
29
+ end
@@ -0,0 +1,65 @@
1
+ require "api/default_options"
2
+
3
+ module IdbusApi
4
+
5
+ # Default configuration options for {Client}
6
+ module Default
7
+
8
+ # Default API endpoint
9
+ API_ENDPOINT = "https://api.idbus.com".freeze
10
+
11
+ # Default API version
12
+ API_VERSION = "v1".freeze
13
+
14
+ # Default User Agent header string
15
+ USER_AGENT = "Idbus API Ruby Gem #{IdbusApi::VERSION}".freeze
16
+
17
+ class << self
18
+
19
+ include Api::DefaultOptions
20
+
21
+ # Default access token from ENV
22
+ # @return [String]
23
+ def access_token
24
+ ENV['IDBUS_ACCESS_TOKEN']
25
+ end
26
+
27
+ # Default access token prefix
28
+ # @return [String]
29
+ def access_token_prefix
30
+ "Token"
31
+ end
32
+
33
+ # Default API endpoint from ENV or {API_ENDPOINT}
34
+ # @return [String]
35
+ def api_endpoint
36
+ ENV['IDBUS_API_ENDPOINT'] || API_ENDPOINT
37
+ end
38
+
39
+ # Default API version from ENV or {API_VERSION}
40
+ # @return [String]
41
+ def api_version
42
+ ENV['IDBUS_API_VERSION'] || API_VERSION
43
+ end
44
+
45
+ # Default options for Faraday::Connection
46
+ # @return [Hash]
47
+ def connection_options
48
+ {
49
+ :headers => {
50
+ :user_agent => user_agent
51
+ }
52
+ }
53
+ end
54
+
55
+ # Default User-Agent header string from ENV or {USER_AGENT}
56
+ # @return [String]
57
+ # Default User-Agent header string from ENV or {USER_AGENT}
58
+ # @return [String]
59
+ def user_agent
60
+ ENV['IDBUS_USER_AGENT'] || USER_AGENT
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,31 @@
1
+ module IdbusApi
2
+
3
+ module Endpoint
4
+
5
+ # Methods of the Fares API
6
+ module Fares
7
+
8
+ # Make a call to the GET /fares endpoint
9
+ #
10
+ # @param parameters [Hash] optional parameters to pass to the request
11
+ # @return [Array<Sawyer::Resource>]
12
+ def fares(parameters = {})
13
+ allowed_parameters = %i(
14
+ origin_id
15
+ destination_id
16
+ date
17
+ start_date
18
+ end_date
19
+ currencies
20
+ updated_after
21
+ )
22
+
23
+ wrong_parameters = parameters.keys - allowed_parameters
24
+ fail IdbusApi::WrongParameters, wrong_parameters unless wrong_parameters.empty?
25
+
26
+ paginate("/fares", parameters).fares
27
+ end
28
+
29
+ end
30
+ end
31
+ end