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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b48bd9fee8fa88a388136211e2b6fcadbb635ba
4
- data.tar.gz: 487226246eb7481ccbefd741c5d35dbc2c4cd3db
3
+ metadata.gz: b662e7a8d461187981a2aac649bd983d79143018
4
+ data.tar.gz: b0e49acb1a34f43de026289053fe32fa9614c1b8
5
5
  SHA512:
6
- metadata.gz: 289c5648a42ddcc4a39a7b3b606d233a7560c53c054703869721731acb2af6a71f196d6b194f988605af0886e3a5c40ef2092e270cbe3632ead68a186b28d1bc
7
- data.tar.gz: d713aab8bf657eafc4f7fbf1d4b5147d29dce8c46e055cf3352a08f1f0efb90e2c17b370cfab1e792e538e36614c53857772e72a9beef160823de9002f6fddf4
6
+ metadata.gz: 63da467aa778be163c89bf25431758bb345c898ace2a32ffab7e4f0d078f2e89f4a6b28700341b532571bffa6ab6a41979787ad6ace2f0c0b49ae5958b8b088c
7
+ data.tar.gz: d2704f33acca5058450154f10a282572b22685277e277b6506ee4f7f2e93b820c66b9a24b63a8c30d70141103fc7365d0a8f8db3f7c95874a35cde23ad6a70df
data/.gitignore CHANGED
@@ -1,3 +1,8 @@
1
+ *.a
2
+ *.bundle
3
+ *.gem
4
+ *.o
5
+ *.so
1
6
  /.bundle/
2
7
  /.yardoc
3
8
  /Gemfile.lock
@@ -7,8 +12,4 @@
7
12
  /pkg/
8
13
  /spec/reports/
9
14
  /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
15
  mkmf.log
data/.rubocop.yml CHANGED
@@ -174,6 +174,3 @@ Rails/Validation:
174
174
  Style/ClassAndModuleCamelCase:
175
175
  Enabled: false
176
176
 
177
- # Offense count: 2
178
- Style/RegexpLiteral:
179
- MaxSlashes: 0
@@ -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
- env.json_roa_data = env.body.delete('_json-roa')
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
- conn.request :retry
30
- conn.use Faraday::Response::RaiseError
31
- conn.adapter Faraday.default_adapter
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?
@@ -1,5 +1,5 @@
1
1
  module JSON_ROA
2
2
  module Client
3
- VERSION = '1.0.0'
3
+ VERSION = '2.0.0-beta.3'
4
4
  end
5
5
  end
@@ -1,6 +1,6 @@
1
1
  require_relative 'spec_helper.rb'
2
2
 
3
- describe 'API: traversing from root to resource to some relation' do
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' do
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
@@ -0,0 +1,3 @@
1
+ - json-roa_version: "1.0.0"
2
+
3
+ - x: 42
data/spec/data/root.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  x: 42
2
2
  _json-roa:
3
- version: 0.0.0
3
+ json-roa_version: 1.0.0
4
4
  relations:
5
5
  tasks:
6
6
  href: /tasks/{?x,y}
@@ -10,3 +10,5 @@ _json-roa:
10
10
  get: {}
11
11
  put: {}
12
12
  delete: {}
13
+ some_array:
14
+ href: /array
data/spec/data/task1.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  state: 'done'
2
2
  _json-roa:
3
- version: 0.0.0
3
+ json-roa_version: 1.0.0
4
4
  self_relation:
5
5
  href: /tasks/t1
6
6
  methods:
@@ -1,6 +1,7 @@
1
1
  tasks:
2
2
  - id: "t1"
3
3
  _json-roa:
4
+ json-roa_version: 1.0.0
4
5
  relations:
5
6
  root: /
6
7
  collection:
@@ -1,6 +1,6 @@
1
1
  tasks: []
2
2
  _json-roa:
3
- version: 0.0.0
3
+ json-roa_version: 1.0.0
4
4
  relations:
5
5
  root: /
6
6
  collection:
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
- YAML.load_file(File.expand_path('./data/root.yml',
32
- File.dirname(__FILE__)))
36
+ load_yaml_file './data/root.yml'
33
37
  end
34
38
 
35
39
  def tasks_page0_data
36
- YAML.load_file(File.expand_path('./data/tasks_page0.yml',
37
- File.dirname(__FILE__)))
40
+ load_yaml_file './data/tasks_page0.yml'
38
41
  end
39
42
 
40
43
  def tasks_page1_data
41
- YAML.load_file(File.expand_path('./data/tasks_page1.yml',
42
- File.dirname(__FILE__)))
44
+ load_yaml_file './data/tasks_page1.yml'
43
45
  end
44
46
 
45
47
  def task1_data
46
- YAML.load_file(File.expand_path('./data/task1.yml',
47
- File.dirname(__FILE__)))
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: 1.0.0
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-01-14 00:00:00.000000000 Z
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: '0'
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: