uber-sdk 0.1.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,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: []