json_roa-client 1.0.0 → 2.0.0.pre.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -4
- data/.rubocop.yml +0 -3
- data/lib/json_roa/client.rb +41 -5
- data/lib/json_roa/client/version.rb +1 -1
- data/spec/api_query_spec.rb +2 -2
- data/spec/array_query_spec.rb +19 -0
- data/spec/data/array.yml +3 -0
- data/spec/data/root.yml +3 -1
- data/spec/data/task1.yml +1 -1
- data/spec/data/tasks_page0.yml +1 -0
- data/spec/data/tasks_page1.yml +1 -1
- data/spec/spec_helper.rb +25 -8
- data/spec/version_check_spec.rb +28 -0
- metadata +11 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b662e7a8d461187981a2aac649bd983d79143018
|
4
|
+
data.tar.gz: b0e49acb1a34f43de026289053fe32fa9614c1b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63da467aa778be163c89bf25431758bb345c898ace2a32ffab7e4f0d078f2e89f4a6b28700341b532571bffa6ab6a41979787ad6ace2f0c0b49ae5958b8b088c
|
7
|
+
data.tar.gz: d2704f33acca5058450154f10a282572b22685277e277b6506ee4f7f2e93b820c66b9a24b63a8c30d70141103fc7365d0a8f8db3f7c95874a35cde23ad6a70df
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/lib/json_roa/client.rb
CHANGED
@@ -5,30 +5,66 @@ require 'faraday_middleware'
|
|
5
5
|
|
6
6
|
module JSON_ROA
|
7
7
|
|
8
|
+
class VersionError < StandardError
|
9
|
+
end
|
10
|
+
|
8
11
|
class Middleware < Faraday::Middleware
|
9
12
|
def call(env)
|
10
13
|
@app.call(env).on_complete do |env|
|
11
14
|
env.class.class_eval do |klass|
|
12
15
|
attr_accessor :json_roa_data
|
13
16
|
end
|
14
|
-
|
17
|
+
content_type = env.response_headers['content-type']
|
18
|
+
if content_type && content_type =~ /json-roa/
|
19
|
+
if env.body.is_a? Array
|
20
|
+
env.json_roa_data = env.body.first
|
21
|
+
env.body.delete_at 0
|
22
|
+
elsif env.body.is_a? Hash
|
23
|
+
env.json_roa_data = env.body.delete('_json-roa')
|
24
|
+
end
|
25
|
+
json_roa_version = env.json_roa_data['json-roa_version']
|
26
|
+
major_version =
|
27
|
+
begin
|
28
|
+
Integer(/^(\d+).*/.match(json_roa_version)[1])
|
29
|
+
rescue StandardError
|
30
|
+
raise VersionError,
|
31
|
+
'Failed to infer the major number of the JSON-ROA data.'
|
32
|
+
end
|
33
|
+
unless major_version == 1
|
34
|
+
raise VersionError, 'The major version' \
|
35
|
+
" #{major_version} is not supported by this client."
|
36
|
+
end
|
37
|
+
end
|
15
38
|
end
|
16
39
|
end
|
17
40
|
end
|
18
41
|
|
19
42
|
module Client
|
20
43
|
|
44
|
+
DEFAULT_OPTIONS = {
|
45
|
+
adapter: Faraday.default_adapter,
|
46
|
+
raise_error: true,
|
47
|
+
retry: true
|
48
|
+
}
|
49
|
+
|
21
50
|
class << self
|
22
51
|
|
23
|
-
def connect(url, &_block)
|
52
|
+
def connect(url, options = {}, &_block)
|
53
|
+
options = DEFAULT_OPTIONS.merge(options)
|
24
54
|
@conn = Faraday.new(
|
25
55
|
url: url,
|
26
56
|
headers: { accept: 'application/json-roa+json' }) do |conn|
|
27
57
|
conn.use ::JSON_ROA::Middleware
|
28
58
|
conn.response :json, content_type: /\bjson$/
|
29
|
-
|
30
|
-
|
31
|
-
|
59
|
+
if options[:retry]
|
60
|
+
conn.request :retry
|
61
|
+
end
|
62
|
+
if options[:raise_error]
|
63
|
+
conn.use Faraday::Response::RaiseError
|
64
|
+
end
|
65
|
+
if options[:adapter]
|
66
|
+
conn.adapter options[:adapter]
|
67
|
+
end
|
32
68
|
end
|
33
69
|
|
34
70
|
yield @conn if block_given?
|
data/spec/api_query_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative 'spec_helper.rb'
|
2
2
|
|
3
|
-
describe 'API: traversing from root to resource to some relation'
|
3
|
+
describe 'API: traversing from root to resource to some relation' do
|
4
4
|
|
5
5
|
describe 'root relation' do
|
6
6
|
|
@@ -8,7 +8,7 @@ describe 'API: traversing from root to resource to some relation' do
|
|
8
8
|
JSON_ROA::Client.connect('/')
|
9
9
|
end
|
10
10
|
|
11
|
-
describe 'root_resource via get'
|
11
|
+
describe 'root_resource via get' do
|
12
12
|
|
13
13
|
subject(:root_resource) { root_relation.get }
|
14
14
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative 'spec_helper.rb'
|
2
|
+
|
3
|
+
describe 'API: requesting an array object' do
|
4
|
+
|
5
|
+
describe 'array relation' do
|
6
|
+
|
7
|
+
let :array do
|
8
|
+
JSON_ROA::Client.connect('/array')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'array_resource via get' do
|
12
|
+
|
13
|
+
it do
|
14
|
+
expect(array.get.data).to be == [{ 'x' => 42 }]
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/spec/data/array.yml
ADDED
data/spec/data/root.yml
CHANGED
data/spec/data/task1.yml
CHANGED
data/spec/data/tasks_page0.yml
CHANGED
data/spec/data/tasks_page1.yml
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -27,24 +27,29 @@ module JSON_ROA
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
def load_yaml_file(filepath)
|
31
|
+
YAML.load_file(
|
32
|
+
File.expand_path(filepath, File.dirname(__FILE__)))
|
33
|
+
end
|
34
|
+
|
30
35
|
def root_data
|
31
|
-
|
32
|
-
File.dirname(__FILE__)))
|
36
|
+
load_yaml_file './data/root.yml'
|
33
37
|
end
|
34
38
|
|
35
39
|
def tasks_page0_data
|
36
|
-
|
37
|
-
File.dirname(__FILE__)))
|
40
|
+
load_yaml_file './data/tasks_page0.yml'
|
38
41
|
end
|
39
42
|
|
40
43
|
def tasks_page1_data
|
41
|
-
|
42
|
-
File.dirname(__FILE__)))
|
44
|
+
load_yaml_file './data/tasks_page1.yml'
|
43
45
|
end
|
44
46
|
|
45
47
|
def task1_data
|
46
|
-
|
47
|
-
|
48
|
+
load_yaml_file './data/task1.yml'
|
49
|
+
end
|
50
|
+
|
51
|
+
def array_data
|
52
|
+
load_yaml_file './data/array.yml'
|
48
53
|
end
|
49
54
|
|
50
55
|
def test_api
|
@@ -68,6 +73,18 @@ def test_api
|
|
68
73
|
stub.get('/tasks/t1') do |env|
|
69
74
|
[200, headers, task1_data.to_json]
|
70
75
|
end
|
76
|
+
stub.get('/array') do |env|
|
77
|
+
[200, headers, array_data.to_json]
|
78
|
+
end
|
79
|
+
stub.get('/missing-version') do |env|
|
80
|
+
[200, headers, { '_json-roa' => {} }]
|
81
|
+
end
|
82
|
+
stub.get('/malformed-version') do |env|
|
83
|
+
[200, headers, { '_json-roa' => { 'json-roa_version' => 'X1.0.0' } }]
|
84
|
+
end
|
85
|
+
stub.get('/incompatible-version') do |env|
|
86
|
+
[200, headers, { '_json-roa' => { 'json-roa_version' => '5.0.0' } }]
|
87
|
+
end
|
71
88
|
end
|
72
89
|
end
|
73
90
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative 'spec_helper.rb'
|
2
|
+
|
3
|
+
describe 'version check' do
|
4
|
+
|
5
|
+
describe 'missing version' do
|
6
|
+
it 'raises' do
|
7
|
+
expect do
|
8
|
+
JSON_ROA::Client.connect('/missing-version').get
|
9
|
+
end.to raise_error JSON_ROA::VersionError
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'malformed version' do
|
14
|
+
it 'raises' do
|
15
|
+
expect do
|
16
|
+
JSON_ROA::Client.connect('/malformed-version').get
|
17
|
+
end.to raise_error JSON_ROA::VersionError
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'incompatible version' do
|
22
|
+
it 'raises' do
|
23
|
+
expect do
|
24
|
+
JSON_ROA::Client.connect('/incompatible-version').get
|
25
|
+
end.to raise_error JSON_ROA::VersionError
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_roa-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre.beta.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Schank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -171,8 +171,10 @@ files:
|
|
171
171
|
- lib/json_roa/client/resource.rb
|
172
172
|
- lib/json_roa/client/version.rb
|
173
173
|
- spec/api_query_spec.rb
|
174
|
+
- spec/array_query_spec.rb
|
174
175
|
- spec/collection_spec.rb
|
175
176
|
- spec/connect_spec.rb
|
177
|
+
- spec/data/array.yml
|
176
178
|
- spec/data/root.yml
|
177
179
|
- spec/data/task1.yml
|
178
180
|
- spec/data/tasks_page0.yml
|
@@ -180,6 +182,7 @@ files:
|
|
180
182
|
- spec/methods_spec.rb
|
181
183
|
- spec/spec_helper.rb
|
182
184
|
- spec/template_expansion_spec.rb
|
185
|
+
- spec/version_check_spec.rb
|
183
186
|
homepage: ''
|
184
187
|
licenses:
|
185
188
|
- MIT
|
@@ -195,9 +198,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
195
198
|
version: '0'
|
196
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
200
|
requirements:
|
198
|
-
- - "
|
201
|
+
- - ">"
|
199
202
|
- !ruby/object:Gem::Version
|
200
|
-
version:
|
203
|
+
version: 1.3.1
|
201
204
|
requirements: []
|
202
205
|
rubyforge_project:
|
203
206
|
rubygems_version: 2.2.2
|
@@ -206,8 +209,10 @@ specification_version: 4
|
|
206
209
|
summary: The Ruby JSON-ROA Client Reference Implementation
|
207
210
|
test_files:
|
208
211
|
- spec/api_query_spec.rb
|
212
|
+
- spec/array_query_spec.rb
|
209
213
|
- spec/collection_spec.rb
|
210
214
|
- spec/connect_spec.rb
|
215
|
+
- spec/data/array.yml
|
211
216
|
- spec/data/root.yml
|
212
217
|
- spec/data/task1.yml
|
213
218
|
- spec/data/tasks_page0.yml
|
@@ -215,3 +220,5 @@ test_files:
|
|
215
220
|
- spec/methods_spec.rb
|
216
221
|
- spec/spec_helper.rb
|
217
222
|
- spec/template_expansion_spec.rb
|
223
|
+
- spec/version_check_spec.rb
|
224
|
+
has_rdoc:
|