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 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: