json_roa-client 1.0.0 → 2.0.0.pre.beta.3
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.
- 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:
|