onfleet-ruby 0.1.4 → 0.1.5

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 (46) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -0
  3. data/.rspec +1 -2
  4. data/.rubocop.yml +26 -0
  5. data/.rubocop_todo.yml +38 -0
  6. data/.ruby-version +2 -0
  7. data/Gemfile +3 -3
  8. data/Rakefile +10 -0
  9. data/lib/onfleet-ruby.rb +40 -38
  10. data/lib/onfleet-ruby/actions/create.rb +6 -3
  11. data/lib/onfleet-ruby/actions/delete.rb +4 -4
  12. data/lib/onfleet-ruby/actions/find.rb +8 -6
  13. data/lib/onfleet-ruby/actions/get.rb +5 -4
  14. data/lib/onfleet-ruby/actions/list.rb +15 -13
  15. data/lib/onfleet-ruby/actions/query_metadata.rb +5 -5
  16. data/lib/onfleet-ruby/actions/save.rb +13 -9
  17. data/lib/onfleet-ruby/actions/update.rb +4 -4
  18. data/lib/onfleet-ruby/address.rb +1 -0
  19. data/lib/onfleet-ruby/admin.rb +2 -1
  20. data/lib/onfleet-ruby/destination.rb +2 -1
  21. data/lib/onfleet-ruby/errors/authentication_error.rb +1 -0
  22. data/lib/onfleet-ruby/errors/connection_error.rb +1 -0
  23. data/lib/onfleet-ruby/errors/invalid_request_error.rb +1 -0
  24. data/lib/onfleet-ruby/errors/onfleet_error.rb +1 -0
  25. data/lib/onfleet-ruby/onfleet_object.rb +58 -59
  26. data/lib/onfleet-ruby/organization.rb +4 -9
  27. data/lib/onfleet-ruby/recipient.rb +2 -1
  28. data/lib/onfleet-ruby/task.rb +4 -4
  29. data/lib/onfleet-ruby/team.rb +2 -1
  30. data/lib/onfleet-ruby/util.rb +22 -20
  31. data/lib/onfleet-ruby/vehicle.rb +1 -0
  32. data/lib/onfleet-ruby/webhook.rb +2 -2
  33. data/lib/onfleet-ruby/worker.rb +2 -1
  34. data/onfleet-ruby.gemspec +11 -6
  35. data/spec/onfleet/admin_spec.rb +70 -0
  36. data/spec/onfleet/destination_spec.rb +62 -0
  37. data/spec/onfleet/organization_spec.rb +25 -0
  38. data/spec/onfleet/recipient_spec.rb +75 -0
  39. data/spec/onfleet/task_spec.rb +123 -0
  40. data/spec/onfleet/team_spec.rb +30 -0
  41. data/spec/onfleet/webhook_spec.rb +49 -0
  42. data/spec/onfleet/worker_spec.rb +67 -0
  43. data/spec/spec_helper.rb +78 -2
  44. data/spec/support/http_requests/shared_examples.rb +126 -0
  45. metadata +97 -13
  46. data/spec/test_data.rb +0 -14
@@ -0,0 +1,126 @@
1
+ RSpec.shared_examples_for "an action that makes a request to Onfleet" do |method:|
2
+ it "should include the base64-encoded API key in the auth header" do
3
+ encoded_api_key = Base64.urlsafe_encode64(Onfleet.api_key)
4
+
5
+ subject.call
6
+ expect(
7
+ a_request(method, url).with(headers: { 'Authorization' => "Basic #{encoded_api_key}" })
8
+ ).to have_been_made.once
9
+ end
10
+
11
+ it "should specify that it will accept JSON" do
12
+ subject.call
13
+ expect(
14
+ a_request(method, url).with(headers: { 'Accept' => 'application/json' })
15
+ ).to have_been_made.once
16
+ end
17
+
18
+ if %i[post put patch].include?(method.to_sym)
19
+ it "should set the content type to JSON" do
20
+ subject.call
21
+ expect(
22
+ a_request(method, url).with(headers: { 'Content-Type' => 'application/json' })
23
+ ).to have_been_made.once
24
+ end
25
+ end
26
+
27
+ context "without valid authentication" do
28
+ let(:response) { { status: 401, body: { message: 'bad auth' }.to_json } }
29
+ it { should raise_error(Onfleet::AuthenticationError) }
30
+ end
31
+
32
+ context "without valid authorization" do
33
+ let(:response) { { status: 404, body: { message: 'bad auth' }.to_json } }
34
+ it { should raise_error(Onfleet::InvalidRequestError) }
35
+ end
36
+
37
+ context "when an unspecified error occurs" do
38
+ let(:response) { { status: 500, body: { message: 'all bad' }.to_json } }
39
+ it { should raise_error(Onfleet::OnfleetError) }
40
+ end
41
+ end
42
+
43
+ RSpec.shared_examples_for Onfleet::Actions::Get do |path:|
44
+ set_up_request_stub(:get, path)
45
+ let(:response_body) { { id: 'an-object' } }
46
+ it_should_behave_like "an action that makes a request to Onfleet", method: :get
47
+ end
48
+
49
+ RSpec.shared_examples_for Onfleet::Actions::List do |path:|
50
+ set_up_request_stub(:get, path)
51
+ let(:response_body) { [{ id: 'an-object' }, { id: 'another-object' }] }
52
+ it_should_behave_like "an action that makes a request to Onfleet", method: :get
53
+ end
54
+
55
+ RSpec.shared_examples_for Onfleet::Actions::Create do |path:|
56
+ set_up_request_stub(:post, path)
57
+ let(:response_body) { { id: 'an-object' } }
58
+
59
+ it_should_behave_like "an action that makes a request to Onfleet", method: :post
60
+
61
+ it "should send the object params, not including ID, in JSON" do
62
+ expected_params = camelize_keys(params.stringify_keys.except('id'))
63
+
64
+ subject.call
65
+ expect(
66
+ a_request(:post, url).with(body: expected_params.to_json)
67
+ ).to have_been_made.once
68
+ end
69
+ end
70
+
71
+ RSpec.shared_examples_for Onfleet::Actions::Update do |path:|
72
+ set_up_request_stub(:put, path)
73
+ let(:response_body) { { id: 'an-object' } }
74
+
75
+ it_should_behave_like "an action that makes a request to Onfleet", method: :put
76
+
77
+ # The current implementation -- using instance variables -- makes it impossible
78
+ # to have this example pass deterministically.
79
+ xit "should send the object params, including ID, in JSON" do
80
+ expected_params = camelize_keys(params.merge(id: id))
81
+
82
+ subject.call
83
+ expect(
84
+ a_request(:put, url).with(body: expected_params.to_json)
85
+ ).to have_been_made.once
86
+ end
87
+ end
88
+
89
+ RSpec.shared_examples_for Onfleet::Actions::Delete do |path:|
90
+ set_up_request_stub(:delete, path)
91
+ let(:response_body) { '' }
92
+
93
+ it_should_behave_like "an action that makes a request to Onfleet", method: :delete
94
+ end
95
+
96
+ RSpec.shared_examples_for Onfleet::Actions::Find do |path:|
97
+ set_up_request_stub(:get, path)
98
+ let(:response_body) { { id: 'an-object' } }
99
+ it_should_behave_like "an action that makes a request to Onfleet", method: :get
100
+ end
101
+
102
+ RSpec.shared_examples_for Onfleet::Actions::QueryMetadata do |path:|
103
+ set_up_request_stub(:post, path + '/metadata')
104
+ let(:response_body) { [{ id: 'an-object' }, { id: 'another-object' }] }
105
+ it_should_behave_like "an action that makes a request to Onfleet", method: :post
106
+
107
+ it "should send metadata in JSON" do
108
+ subject.call
109
+ expect(
110
+ a_request(:post, url).with(body: metadata.to_json)
111
+ ).to have_been_made.once
112
+ end
113
+ end
114
+
115
+ def set_up_request_stub(method, path)
116
+ let(:url) { URI.join(Onfleet.base_url, path).to_s }
117
+ let(:response) { { status: 200, body: response_body.to_json } }
118
+ before { stub_request(method, url).to_return(response) }
119
+ end
120
+
121
+ def camelize_keys(hash)
122
+ hash.inject({}) do |accumulator, (key, value)|
123
+ accumulator.merge(key.camelize(:lower) => value)
124
+ end
125
+ end
126
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onfleet-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Wargnier
@@ -10,40 +10,104 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2016-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rest-client
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '1.4'
33
+ version: '2.0'
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1.4'
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rspec
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: 3.3.0
61
+ version: '3.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-its
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
34
73
  - - ">="
35
74
  - !ruby/object:Gem::Version
36
- version: 3.0.0
75
+ version: '0'
37
76
  type: :development
38
77
  prerelease: false
39
78
  version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
40
86
  requirements:
41
87
  - - "~>"
42
88
  - !ruby/object:Gem::Version
43
- version: 3.3.0
44
- - - ">="
89
+ version: '0.55'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.55'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.4'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
45
109
  - !ruby/object:Gem::Version
46
- version: 3.0.0
110
+ version: '3.4'
47
111
  description: To interact with Onfleet's API
48
112
  email: nick@stylelend.com
49
113
  executables: []
@@ -52,8 +116,12 @@ extra_rdoc_files: []
52
116
  files:
53
117
  - ".gitignore"
54
118
  - ".rspec"
119
+ - ".rubocop.yml"
120
+ - ".rubocop_todo.yml"
121
+ - ".ruby-version"
55
122
  - Gemfile
56
123
  - README.md
124
+ - Rakefile
57
125
  - lib/onfleet-ruby.rb
58
126
  - lib/onfleet-ruby/actions/create.rb
59
127
  - lib/onfleet-ruby/actions/delete.rb
@@ -80,8 +148,16 @@ files:
80
148
  - lib/onfleet-ruby/webhook.rb
81
149
  - lib/onfleet-ruby/worker.rb
82
150
  - onfleet-ruby.gemspec
151
+ - spec/onfleet/admin_spec.rb
152
+ - spec/onfleet/destination_spec.rb
153
+ - spec/onfleet/organization_spec.rb
154
+ - spec/onfleet/recipient_spec.rb
155
+ - spec/onfleet/task_spec.rb
156
+ - spec/onfleet/team_spec.rb
157
+ - spec/onfleet/webhook_spec.rb
158
+ - spec/onfleet/worker_spec.rb
83
159
  - spec/spec_helper.rb
84
- - spec/test_data.rb
160
+ - spec/support/http_requests/shared_examples.rb
85
161
  homepage: http://rubygems.org/gems/onfleet-ruby
86
162
  licenses:
87
163
  - MIT
@@ -102,10 +178,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
178
  version: '0'
103
179
  requirements: []
104
180
  rubyforge_project:
105
- rubygems_version: 2.4.8
181
+ rubygems_version: 2.7.6
106
182
  signing_key:
107
183
  specification_version: 4
108
184
  summary: Onfleet ruby api
109
185
  test_files:
186
+ - spec/onfleet/admin_spec.rb
187
+ - spec/onfleet/destination_spec.rb
188
+ - spec/onfleet/organization_spec.rb
189
+ - spec/onfleet/recipient_spec.rb
190
+ - spec/onfleet/task_spec.rb
191
+ - spec/onfleet/team_spec.rb
192
+ - spec/onfleet/webhook_spec.rb
193
+ - spec/onfleet/worker_spec.rb
110
194
  - spec/spec_helper.rb
111
- - spec/test_data.rb
195
+ - spec/support/http_requests/shared_examples.rb
@@ -1,14 +0,0 @@
1
- module Onfleet
2
- module TestData
3
- def recipient
4
-
5
- end
6
-
7
- def destination
8
-
9
- end
10
-
11
- def task
12
- end
13
- end
14
- end