uber-sdk 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class Map < Base
4
+ attr_accessor :request_id, :href
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class Price < Base
4
+ attr_accessor :product_id,
5
+ :currency_code,
6
+ :display_name,
7
+ :estimate,
8
+ :low_estimate,
9
+ :high_estimate,
10
+ :surge_multiplier,
11
+ :duration,
12
+ :distance
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class Product < Base
4
+ attr_accessor :product_id, :description, :display_name, :capacity, :image
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class Promotion < Base
4
+ attr_accessor :display_text, :localized_value, :type
5
+ end
6
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class Request < Base
4
+ attr_accessor :request_id,
5
+ :product_id,
6
+ :status,
7
+ :vehicle,
8
+ :driver,
9
+ :location,
10
+ :eta,
11
+ :surge_multiplier,
12
+ :meta,
13
+ :errors
14
+
15
+ def driver=(value)
16
+ @driver = value.nil? ? nil : Driver.new(value)
17
+ end
18
+
19
+ def vehicle=(value)
20
+ @vehicle = value.nil? ? nil : Vehicle.new(value)
21
+ end
22
+
23
+ def location=(value)
24
+ @location = value.nil? ? nil : Location.new(value)
25
+ end
26
+
27
+ def errors=(values)
28
+ @errors = values.map { |v| RequestError.new(v) }
29
+ end
30
+
31
+ def errors?
32
+ @errors && @errors.size >= 1
33
+ end
34
+
35
+ def vehicle_name
36
+ vehicle.nil? ? nil : "#{vehicle.make} #{vehicle.model}"
37
+ end
38
+
39
+ def vehicle_image_url
40
+ vehicle.nil? ? nil : vehicle.picture_url.to_s
41
+ end
42
+
43
+ def driver_image_url
44
+ driver.nil? ? nil : driver.picture_url.to_s
45
+ end
46
+
47
+ def humanized_eta
48
+ !eta.nil? && eta.to_i == 1 ? "#{eta} minute" : "#{eta} minutes"
49
+ end
50
+ end
51
+
52
+ class RequestError < Base
53
+ attr_accessor :status, :code, :title
54
+ end
55
+
56
+ class Driver < Base
57
+ attr_accessor :phone_number, :rating, :picture_url, :name
58
+ end
59
+
60
+ class Vehicle < Base
61
+ attr_accessor :make, :model, :license_plate, :picture_url
62
+ end
63
+
64
+ class Location < Base
65
+ attr_accessor :latitude, :longitude, :bearing
66
+ end
67
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class Time < Base
4
+ attr_accessor :product_id, :display_name, :estimate
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class User < Base
4
+ attr_accessor :first_name, :last_name, :email, :picture, :promo_code, :uuid
5
+ end
6
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ require "faraday"
3
+ require "json"
4
+
5
+ module Uber
6
+ module Response
7
+ class ParseJson < Faraday::Response::Middleware
8
+ WHITESPACE_REGEX = /\A^\s*$\z/
9
+
10
+ def parse(body)
11
+ case body
12
+ when WHITESPACE_REGEX, nil
13
+ nil
14
+ else
15
+ JSON.parse(body, symbolize_names: true)
16
+ end
17
+ end
18
+
19
+ def on_complete(response)
20
+ if respond_to?(:parse) &&
21
+ !unparsable_status_codes.include?(response.status)
22
+ response.body = parse(response.body)
23
+ end
24
+ end
25
+
26
+ def unparsable_status_codes
27
+ [204, 301, 302, 304]
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ Faraday::Response.register_middleware parse_json: Uber::Response::ParseJson
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class RateLimit
4
+ attr_reader :attrs
5
+
6
+ def initialize(attrs = {})
7
+ return if attrs.nil? || attrs.empty?
8
+ @attrs = attrs
9
+ end
10
+
11
+ # @return [Integer]
12
+ def limit
13
+ limit = @attrs["x-rate-limit-limit"]
14
+ limit.to_i if limit
15
+ end
16
+
17
+ # @return [Integer]
18
+ def remaining
19
+ remaining = @attrs["x-rate-limit-remaining"]
20
+ remaining.to_i if remaining
21
+ end
22
+
23
+ # @return [Time]
24
+ def reset_at
25
+ reset = @attrs["x-rate-limit-reset"]
26
+ ::Time.at(reset.to_i) if reset
27
+ end
28
+
29
+ # @return [Integer]
30
+ def reset_in
31
+ [(reset_at - ::Time.now).ceil, 0].max if reset_at
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require "uber/base"
3
+
4
+ module Uber
5
+ class Token < Uber::Base
6
+ attr_accessor :access_token, :token_type
7
+ alias_method :to_s, :access_token
8
+
9
+ BEARER_TYPE = "bearer"
10
+
11
+ # @return [Boolean]
12
+ def bearer?
13
+ token_type == BEARER_TYPE
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ require "uber/arguments"
3
+ require "uber/api_request"
4
+
5
+ module Uber
6
+ module Utils
7
+ # @param request_method [Symbol]
8
+ # @param path [String]
9
+ # @param options [Hash]
10
+ # @param klass [Class]
11
+ def perform_with_object(request_method, path, options, klass)
12
+ request = Uber::ApiRequest.new(self, request_method, path, options)
13
+ request.perform_with_object(klass)
14
+ end
15
+
16
+ # @param request_method [Symbol]
17
+ # @param path [String]
18
+ # @param options [Hash]
19
+ # @param klass [Class]
20
+ def perform_with_objects(request_method, path, options, klass)
21
+ request = Uber::ApiRequest.new(self, request_method, path, options)
22
+ request.perform_with_objects(klass)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ module Uber
3
+ class Version
4
+ MAJOR = 0
5
+ MINOR = 1
6
+ PATCH = 1
7
+
8
+ class << self
9
+ # @return [String]
10
+ def to_s
11
+ [MAJOR, MINOR, PATCH].compact.join(".")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+ lib = File.expand_path("../lib", __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "uber/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "uber-sdk"
9
+ spec.version = Uber::Version
10
+ spec.authors = ["Christopher EnyTC", "Dingding Ye"]
11
+ spec.email = ["chris@enytc.com", "yedingding@gmail.com"]
12
+ spec.summary = "Uber SDK for Ruby."
13
+ spec.description = "A Ruby SDK for the Uber API."
14
+ spec.homepage = "https://github.com/chrisenytc/uber-sdk"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = %w(LICENSE.txt README.md Rakefile uber-sdk.gemspec)
18
+ spec.files += Dir.glob("lib/**/*.rb")
19
+ spec.files += Dir.glob("test/**/*")
20
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
+ spec.test_files = Dir.glob("test/**/*")
22
+ spec.require_paths = ["lib"]
23
+ spec.required_rubygems_version = ">= 1.3.5"
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.5"
26
+ spec.add_development_dependency "rake", "~> 0"
27
+ spec.add_development_dependency "webmock", "~> 1.21"
28
+ spec.add_development_dependency "rspec", "~> 3.3"
29
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 0.6"
30
+
31
+ spec.add_dependency "faraday", "~> 0.9"
32
+ spec.add_dependency "json", "~> 1.8"
33
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uber-sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Christopher EnyTC
8
+ - Dingding Ye
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-08-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '1.5'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '1.5'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: webmock
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: '1.21'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '1.21'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rspec
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '3.3'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '3.3'
70
+ - !ruby/object:Gem::Dependency
71
+ name: codeclimate-test-reporter
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '0.6'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: '0.6'
84
+ - !ruby/object:Gem::Dependency
85
+ name: faraday
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: '0.9'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: '0.9'
98
+ - !ruby/object:Gem::Dependency
99
+ name: json
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: '1.8'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: '1.8'
112
+ description: A Ruby SDK for the Uber API.
113
+ email:
114
+ - chris@enytc.com
115
+ - yedingding@gmail.com
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - LICENSE.txt
121
+ - README.md
122
+ - Rakefile
123
+ - lib/uber.rb
124
+ - lib/uber/api.rb
125
+ - lib/uber/api/activities.rb
126
+ - lib/uber/api/me.rb
127
+ - lib/uber/api/price_estimates.rb
128
+ - lib/uber/api/products.rb
129
+ - lib/uber/api/promotions.rb
130
+ - lib/uber/api/requests.rb
131
+ - lib/uber/api/time_estimates.rb
132
+ - lib/uber/api_request.rb
133
+ - lib/uber/arguments.rb
134
+ - lib/uber/base.rb
135
+ - lib/uber/client.rb
136
+ - lib/uber/error.rb
137
+ - lib/uber/models/activity.rb
138
+ - lib/uber/models/estimate.rb
139
+ - lib/uber/models/map.rb
140
+ - lib/uber/models/price.rb
141
+ - lib/uber/models/product.rb
142
+ - lib/uber/models/promotion.rb
143
+ - lib/uber/models/request.rb
144
+ - lib/uber/models/time.rb
145
+ - lib/uber/models/user.rb
146
+ - lib/uber/parse_json.rb
147
+ - lib/uber/rate_limit.rb
148
+ - lib/uber/token.rb
149
+ - lib/uber/utils.rb
150
+ - lib/uber/version.rb
151
+ - uber-sdk.gemspec
152
+ homepage: https://github.com/chrisenytc/uber-sdk
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: 1.3.5
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.4.5
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Uber SDK for Ruby.
176
+ test_files: []