slice-ruby 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ module Slice
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,32 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "slice/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "slice-ruby"
7
+ spec.version = Slice::VERSION
8
+ spec.authors = ["Naoki Orii"]
9
+ spec.email = ["mrorii@gmail.com"]
10
+ spec.summary = "A client library for Slice API written in Ruby."
11
+ spec.homepage = "https://github.com/slicedev/slice-ruby"
12
+
13
+ spec.files = `git ls-files`.split($/)
14
+ spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
15
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_dependency "activesupport"
19
+ spec.add_dependency "faraday", "~> 0.9"
20
+ spec.add_dependency "faraday_middleware"
21
+ spec.add_dependency "oauth2"
22
+ spec.add_dependency "rack"
23
+ spec.add_dependency "rainbow"
24
+ spec.add_dependency "rouge"
25
+ spec.add_dependency "slop", "< 4.0.0"
26
+ spec.add_development_dependency "bundler", "~> 1.6"
27
+ spec.add_development_dependency "json_schema"
28
+ spec.add_development_dependency "pry"
29
+ spec.add_development_dependency "rake"
30
+ spec.add_development_dependency "rspec", "2.14.1"
31
+ spec.add_development_dependency "webmock", "1.20.4"
32
+ end
@@ -0,0 +1,349 @@
1
+ require "spec_helper"
2
+
3
+ describe Slice::Client do
4
+ def stub_api_request
5
+ stub_request(request_method, requested_url).with(
6
+ body: request_body,
7
+ headers: requested_headers,
8
+ ).to_return(
9
+ body: response_body,
10
+ headers: response_headers,
11
+ status: status_code,
12
+ )
13
+ end
14
+
15
+ let(:status_code) do
16
+ 200
17
+ end
18
+
19
+ let(:response_body) do
20
+ response_hash.to_json
21
+ end
22
+
23
+ let(:response_hash) do
24
+ { "dummy" => "dummy" }
25
+ end
26
+
27
+ let(:response_headers) do
28
+ { "Content-Type" => "application/json" }
29
+ end
30
+
31
+ let(:requested_headers) do
32
+ Slice::Client::DEFAULT_HEADERS.clone
33
+ end
34
+
35
+ let(:request_body) do
36
+ params.nil? || [:get, :delete].include?(request_method) ? nil : params
37
+ end
38
+
39
+ let(:requested_url) do
40
+ "https://#{requested_host}#{path}"
41
+ end
42
+
43
+ let(:requested_host) do
44
+ Slice::Client::DEFAULT_HOST
45
+ end
46
+
47
+ let(:host) do
48
+ Slice::Client::DEFAULT_HOST
49
+ end
50
+
51
+ let(:client) do
52
+ described_class.new(options)
53
+ end
54
+
55
+ let(:options) do
56
+ {}
57
+ end
58
+
59
+ let(:arguments) do
60
+ [path, params, headers]
61
+ end
62
+
63
+ let(:path) do
64
+ "/api/v1/dummy"
65
+ end
66
+
67
+ let(:params) do
68
+ end
69
+
70
+ let(:headers) do
71
+ {}
72
+ end
73
+
74
+ shared_examples_for "returns a Slice::Response" do
75
+ it "returns a Slice::Response" do
76
+ should be_a Slice::Response
77
+ subject.body.should eq response_hash
78
+ subject.headers.should eq response_headers
79
+ subject.status.should eq status_code
80
+ end
81
+ end
82
+
83
+ shared_examples_for "valid condition" do
84
+ context "with valid condition" do
85
+ include_examples "returns a Slice::Response"
86
+ end
87
+ end
88
+
89
+ shared_examples_for "sends request with JSON-encoded body" do
90
+ context "with params" do
91
+ let(:params) do
92
+ { key1: "value1", key2: "value2" }
93
+ end
94
+
95
+ it "sends request with JSON-encoded body" do
96
+ should be_a Slice::Response
97
+ end
98
+ end
99
+ end
100
+
101
+ shared_examples_for "sends request with URL query" do
102
+ context "with params" do
103
+ let(:params) do
104
+ { key1: "value1", key2: "value2" }
105
+ end
106
+
107
+ let(:requested_url) do
108
+ super() + "?key1=value1&key2=value2"
109
+ end
110
+
111
+ it "sends request with URL query" do
112
+ should be_a Slice::Response
113
+ end
114
+ end
115
+ end
116
+
117
+ describe ".new" do
118
+ subject do
119
+ described_class.new(*arguments)
120
+ end
121
+
122
+ let(:arguments) do
123
+ [options]
124
+ end
125
+
126
+ let(:options) do
127
+ {}
128
+ end
129
+
130
+ shared_examples_for "returns a Slice::Client" do
131
+ it "returns a Slice::Client" do
132
+ should be_a described_class
133
+ end
134
+ end
135
+
136
+ context "without any arguments" do
137
+ let(:arguments) do
138
+ []
139
+ end
140
+ include_examples "returns a Slice::Client"
141
+ end
142
+
143
+ context "with :access_token option" do
144
+ let(:options) do
145
+ { access_token: "dummy" }
146
+ end
147
+ include_examples "returns a Slice::Client"
148
+ end
149
+
150
+ context "with :host option" do
151
+ let(:options) do
152
+ { host: "dummy" }
153
+ end
154
+ include_examples "returns a Slice::Client"
155
+ end
156
+ end
157
+
158
+ describe "#get" do
159
+ before do
160
+ stub_api_request
161
+ end
162
+
163
+ subject do
164
+ client.get(*arguments)
165
+ end
166
+
167
+ let(:request_method) do
168
+ :get
169
+ end
170
+
171
+ include_examples "valid condition"
172
+ include_examples "sends request with URL query"
173
+
174
+ context "without headers" do
175
+ let(:arguments) do
176
+ [path, params]
177
+ end
178
+ include_examples "returns a Slice::Response"
179
+ end
180
+
181
+ context "without params nor headers" do
182
+ let(:arguments) do
183
+ [path]
184
+ end
185
+ include_examples "returns a Slice::Response"
186
+ end
187
+
188
+ context "with a Slice::Client created with :host option" do
189
+ before do
190
+ options[:host] = host
191
+ end
192
+
193
+ let(:host) do
194
+ "example.com"
195
+ end
196
+
197
+ let(:requested_host) do
198
+ host
199
+ end
200
+
201
+ it "sends request to configured host" do
202
+ should be_a Slice::Response
203
+ end
204
+ end
205
+
206
+ context "with a Slice::Client created with :access_token option" do
207
+ before do
208
+ options[:access_token] = access_token
209
+ end
210
+
211
+ let(:access_token) do
212
+ "dummy-access-token"
213
+ end
214
+
215
+ let(:requested_headers) do
216
+ super().merge("Authorization" => "Bearer #{access_token}")
217
+ end
218
+
219
+ it "sends request with configured access token" do
220
+ should be_a Slice::Response
221
+ end
222
+ end
223
+
224
+ context "with headers" do
225
+ let(:headers) do
226
+ {
227
+ "KEY1" => "value1",
228
+ "KEY2" => "value2",
229
+ }
230
+ end
231
+
232
+ let(:requested_headers) do
233
+ super().merge(headers)
234
+ end
235
+
236
+ it "sends request with given headers" do
237
+ should be_a Slice::Response
238
+ end
239
+ end
240
+
241
+ context "with params" do
242
+ let(:params) do
243
+ { key1: "value1", key2: "value2" }
244
+ end
245
+
246
+ let(:requested_url) do
247
+ super() + "?key1=value1&key2=value2"
248
+ end
249
+
250
+ it "sends request with URL query, encoded from given params" do
251
+ should be_a Slice::Response
252
+ end
253
+ end
254
+
255
+ context "with multibyte path" do
256
+ let(:path) do
257
+ ""
258
+ end
259
+
260
+ let(:requested_url) do
261
+ "https://#{requested_host}#{URI.escape(path)}"
262
+ end
263
+
264
+ it "sends request with escaped path" do
265
+ should be_a Slice::Response
266
+ end
267
+ end
268
+ end
269
+
270
+ describe "#post" do
271
+ before do
272
+ stub_api_request
273
+ end
274
+
275
+ subject do
276
+ client.post(*arguments)
277
+ end
278
+
279
+ let(:request_method) do
280
+ :post
281
+ end
282
+
283
+ let(:status_code) do
284
+ 201
285
+ end
286
+
287
+ include_examples "valid condition"
288
+ include_examples "sends request with JSON-encoded body"
289
+ end
290
+
291
+ describe "#patch" do
292
+ before do
293
+ stub_api_request
294
+ end
295
+
296
+ subject do
297
+ client.patch(*arguments)
298
+ end
299
+
300
+ let(:request_method) do
301
+ :patch
302
+ end
303
+
304
+ include_examples "valid condition"
305
+ include_examples "sends request with JSON-encoded body"
306
+ end
307
+
308
+ describe "#put" do
309
+ before do
310
+ stub_api_request
311
+ end
312
+
313
+ subject do
314
+ client.put(*arguments)
315
+ end
316
+
317
+ let(:request_method) do
318
+ :put
319
+ end
320
+
321
+ let(:status_code) do
322
+ 204
323
+ end
324
+
325
+ include_examples "valid condition"
326
+ include_examples "sends request with JSON-encoded body"
327
+ end
328
+
329
+ describe "#delete" do
330
+ before do
331
+ stub_api_request
332
+ end
333
+
334
+ subject do
335
+ client.delete(*arguments)
336
+ end
337
+
338
+ let(:request_method) do
339
+ :delete
340
+ end
341
+
342
+ let(:status_code) do
343
+ 204
344
+ end
345
+
346
+ include_examples "valid condition"
347
+ include_examples "sends request with URL query"
348
+ end
349
+ end
@@ -0,0 +1,8 @@
1
+ require "slice"
2
+ require "webmock/rspec"
3
+
4
+ RSpec.configure do |config|
5
+ config.treat_symbols_as_metadata_keys_with_true_values = true
6
+ config.run_all_when_everything_filtered = true
7
+ config.filter_run :focus
8
+ end
metadata ADDED
@@ -0,0 +1,266 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: slice-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Naoki Orii
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-13 00:00:00.000000000 Z
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: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '0.9'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday_middleware
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: oauth2
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
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: rainbow
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rouge
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: slop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - <
116
+ - !ruby/object:Gem::Version
117
+ version: 4.0.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - <
123
+ - !ruby/object:Gem::Version
124
+ version: 4.0.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: bundler
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: '1.6'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: '1.6'
139
+ - !ruby/object:Gem::Dependency
140
+ name: json_schema
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rake
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rspec
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 2.14.1
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
194
+ version: 2.14.1
195
+ - !ruby/object:Gem::Dependency
196
+ name: webmock
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 1.20.4
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 1.20.4
209
+ description:
210
+ email:
211
+ - mrorii@gmail.com
212
+ executables:
213
+ - slice
214
+ extensions: []
215
+ extra_rdoc_files: []
216
+ files:
217
+ - .gitignore
218
+ - .travis.yml
219
+ - Gemfile
220
+ - LICENSE.txt
221
+ - Makefile
222
+ - README.md
223
+ - Rakefile
224
+ - bin/slice
225
+ - images/cli.png
226
+ - lib/slice.rb
227
+ - lib/slice/arguments.rb
228
+ - lib/slice/client.rb
229
+ - lib/slice/command_builder.rb
230
+ - lib/slice/commands/base.rb
231
+ - lib/slice/commands/error.rb
232
+ - lib/slice/commands/request.rb
233
+ - lib/slice/oauth.rb
234
+ - lib/slice/resource_based_methods.rb
235
+ - lib/slice/response.rb
236
+ - lib/slice/response_renderer.rb
237
+ - lib/slice/version.rb
238
+ - slice-ruby.gemspec
239
+ - spec/slice/client_spec.rb
240
+ - spec/spec_helper.rb
241
+ homepage: https://github.com/slicedev/slice-ruby
242
+ licenses: []
243
+ metadata: {}
244
+ post_install_message:
245
+ rdoc_options: []
246
+ require_paths:
247
+ - lib
248
+ required_ruby_version: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - '>='
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ required_rubygems_version: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ requirements: []
259
+ rubyforge_project:
260
+ rubygems_version: 2.4.2
261
+ signing_key:
262
+ specification_version: 4
263
+ summary: A client library for Slice API written in Ruby.
264
+ test_files:
265
+ - spec/slice/client_spec.rb
266
+ - spec/spec_helper.rb