excon-hypermedia 0.5.3 → 0.6.0

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: 6e498dada7c682834913fd4c4267edd45fe744d2
4
- data.tar.gz: 7e399ffe806735ccbf5984ab2d74bcf49646fe68
3
+ metadata.gz: 669bc2a498c87c5ad49049e6748d550769c991db
4
+ data.tar.gz: 49120d1428699dabc3dcc2c096222bffcb880372
5
5
  SHA512:
6
- metadata.gz: 558647f962ced9141ee73e82a83e296d3c88f711cf1b3769f0814ae0b6cfd6cc92ce0814c202fa0f450cf1df1d06cf6e91439f3c765432d96cc20b31c12a60eb
7
- data.tar.gz: cc3ad5802a30119dbaead138216298cd371bbf664c1679a1f6a6caaaf6939031cde9b3ea357191bb289d2adadaabccba653af3fa73d00f197556fff8620ca24d
6
+ metadata.gz: 8d6d2fe1929f0817a262594cc6094e30f569de3630bcefc905ce2df56f093ebd224566db2ef2bebaff5e5627a9b497116a7c6305169bee64ea8d4a5baafd4730
7
+ data.tar.gz: e5330746ac703d144ba260e18fe77e3d812244482c32f1eff557cca72709dd2962fdfe7b656ffb4731c7f1413706d7398e019c96a0be45a0e818f7e8326eb708
@@ -10,4 +10,4 @@ Metrics/LineLength:
10
10
  Max: 100
11
11
 
12
12
  Lint/EndAlignment:
13
- AlignWith: variable
13
+ EnforcedStyleAlignWith: variable
@@ -6,6 +6,14 @@ ruby-latest:
6
6
  name: tests
7
7
  code: bundle exec rake
8
8
 
9
+ ruby-25:
10
+ box: ruby:2.5
11
+ steps:
12
+ - bundle-install
13
+ - script:
14
+ name: tests
15
+ code: bundle exec rake
16
+
9
17
  ruby-23:
10
18
  box: ruby:2.3
11
19
  steps:
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  source 'https://rubygems.org'
3
4
  gemspec
data/README.md CHANGED
@@ -294,7 +294,7 @@ Excon.defaults[:hcp] = true
294
294
  ### shortcuts
295
295
 
296
296
  While the above examples shows the clean separation between the different
297
- concepts like `response`, `resource`, `links`, `properties` and `emeds`.
297
+ concepts like `response`, `resource`, `links`, `properties` and `embeds`.
298
298
 
299
299
  Traversing these objects always starts from the response object. To make moving
300
300
  around a bit faster, there are several methods available on the
data/Rakefile CHANGED
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'bundler/gem_tasks'
3
4
  require 'rake/testtask'
4
5
  require 'rubocop/rake_task'
5
6
 
6
7
  RuboCop::RakeTask.new do |t|
7
- t.options = %w(--display-cop-names --extra-details --display-style-guide)
8
+ t.options = %w[--display-cop-names --extra-details --display-style-guide]
8
9
  end
9
10
 
10
11
  Rake::TestTask.new(:test) do |t|
@@ -13,4 +14,4 @@ Rake::TestTask.new(:test) do |t|
13
14
  t.test_files = FileList['test/**/*_test.rb']
14
15
  end
15
16
 
16
- task default: %i(test rubocop)
17
+ task default: %i[test rubocop]
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  # encoding: utf-8
3
+
3
4
  lib = File.expand_path('../lib', __FILE__)
4
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
6
  require 'excon/hypermedia/version'
@@ -7,25 +8,25 @@ require 'excon/hypermedia/version'
7
8
  Gem::Specification.new do |spec|
8
9
  spec.name = 'excon-hypermedia'
9
10
  spec.version = Excon::HyperMedia::VERSION
10
- spec.authors = %w(Jean Mertz)
11
- spec.email = %w(jean@mertz.fm)
11
+ spec.authors = %w[Jean Mertz]
12
+ spec.email = %w[jean@mertz.fm]
12
13
 
13
14
  spec.summary = 'Excon, with Hypermedia traversing baked in.'
14
15
  spec.description = 'Excon, with Hypermedia traversing baked in.'
15
16
  spec.homepage = 'https://github.com/JeanMertz/excon-hypermedia'
16
17
  spec.license = 'MIT'
17
18
  spec.files = `git ls-files -z`.split("\x0")
18
- spec.require_paths = %w(lib)
19
+ spec.require_paths = %w[lib]
19
20
 
20
- spec.add_development_dependency 'bundler', '~> 1.9'
21
- spec.add_development_dependency 'rake', '~> 10.0'
22
- spec.add_development_dependency 'minitest', '~> 5.0'
23
- spec.add_development_dependency 'rubocop', '~> 0.40'
24
- spec.add_development_dependency 'pry', '~> 0.10'
21
+ spec.add_development_dependency 'bundler', '>= 1.15'
25
22
  spec.add_development_dependency 'm', '~> 1.5'
23
+ spec.add_development_dependency 'minitest', '~> 5.11'
26
24
  spec.add_development_dependency 'open4', '~> 1.3'
25
+ spec.add_development_dependency 'pry', '~> 0.11'
26
+ spec.add_development_dependency 'rake', '~> 12.3'
27
+ spec.add_development_dependency 'rubocop', '~> 0.52'
27
28
 
28
29
  spec.add_dependency 'backport_dig' if RUBY_VERSION < '2.3'
29
- spec.add_dependency 'excon', '~> 0.49'
30
- spec.add_dependency 'excon-addressable', '~> 0.3'
30
+ spec.add_dependency 'excon', '~> 0.60'
31
+ spec.add_dependency 'excon-addressable', '~> 0.4'
31
32
  end
@@ -45,10 +45,21 @@ module Excon
45
45
  # The second notation returns `nil` on missing keys, the first should do
46
46
  # as well.
47
47
  #
48
- def method_missing(_)
48
+ def method_missing(_) # rubocop:disable Style/MethodMissing
49
49
  nil
50
50
  end
51
51
 
52
+ # respond_to_missing?
53
+ #
54
+ # Checking if a key exists should be possible using `respond_to?`:
55
+ #
56
+ # collection.respond_to?(:hello_world)
57
+ # # => false
58
+ #
59
+ def respond_to_missing?(_, _ = false)
60
+ super
61
+ end
62
+
52
63
  def to_properties
53
64
  collection.each do |key, value|
54
65
  key = key.downcase
@@ -5,7 +5,15 @@ require 'backport_dig' if RUBY_VERSION < '2.3'
5
5
  Excon.defaults[:middlewares].delete(Excon::Addressable::Middleware)
6
6
  Excon.defaults[:middlewares].unshift(Excon::Addressable::Middleware)
7
7
 
8
+ # Excon
9
+ #
10
+ # We inject the `expand` key to the allowed lists of keys to be used when
11
+ # creating a request, or connection object. Excon does not enforce this yet, but
12
+ # it does print a warning, so this makes things future-proof.
8
13
  module Excon
14
+ VALID_REQUEST_KEYS.push(:hcp, :embedded, :hypermedia)
15
+ VALID_CONNECTION_KEYS.push(:hcp, :embedded, :hypermedia)
16
+
9
17
  module HyperMedia
10
18
  # Middleware
11
19
  #
@@ -31,7 +31,7 @@ module Excon
31
31
  end
32
32
 
33
33
  super
34
- rescue => e
34
+ rescue StandardError => e
35
35
  raise unless e.class == Excon::Errors::StubNotFound
36
36
 
37
37
  # If a request was made to a non-stubbed resource, don't use the Mock
@@ -11,7 +11,7 @@ module Excon
11
11
  # Represents a resource.
12
12
  #
13
13
  class ResourceObject
14
- RESERVED_PROPERTIES = %w(_links _embedded).freeze
14
+ RESERVED_PROPERTIES = %w[_links _embedded].freeze
15
15
 
16
16
  def initialize(data)
17
17
  @data = data
@@ -60,6 +60,10 @@ module Excon
60
60
  def method_missing(method_name, *_)
61
61
  _properties.respond_to?(method_name) ? _properties.send(method_name) : super
62
62
  end
63
+
64
+ def respond_to_missing?(method_name, _ = false)
65
+ _properties.respond_to?(method_name) || super
66
+ end
63
67
  end
64
68
  end
65
69
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Excon
4
4
  module HyperMedia
5
- VERSION = '0.5.3'
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
@@ -45,18 +45,22 @@ module Excon
45
45
  end
46
46
 
47
47
  def test_unknown_property
48
- assert_equal nil, api.resource._properties.invalid
49
- assert_equal nil, api.resource._properties['invalid']
48
+ assert_nil api.resource._properties.invalid
49
+ assert_nil api.resource._properties['invalid']
50
+ end
51
+
52
+ def test_unknown_property_respond_to
53
+ assert_equal false, api.resource._properties.respond_to?(:invalid)
50
54
  end
51
55
 
52
56
  def test_unknown_link
53
- assert_equal nil, empty_json_resource._links.invalid
54
- assert_equal nil, empty_json_resource._links['invalid']
57
+ assert_nil empty_json_resource._links.invalid
58
+ assert_nil empty_json_resource._links['invalid']
55
59
  end
56
60
 
57
61
  def test_unknown_embed
58
- assert_equal nil, api.resource._embedded.invalid
59
- assert_equal nil, api.resource._embedded['invalid']
62
+ assert_nil api.resource._embedded.invalid
63
+ assert_nil api.resource._embedded['invalid']
60
64
  end
61
65
  end
62
66
  end
@@ -13,7 +13,7 @@ module Excon
13
13
  end
14
14
 
15
15
  def test_non_hcp_response
16
- assert_equal nil, response[:hcp]
16
+ assert_nil response[:hcp]
17
17
  end
18
18
 
19
19
  def test_hcp_response
@@ -27,19 +27,19 @@ module Excon
27
27
  def test_hcp_response_with_missing_embedding
28
28
  response = api.rel('product', expand: { uid: 'bicycle' }, hcp: true).get
29
29
 
30
- assert_equal nil, response[:hcp]
30
+ assert_nil response[:hcp]
31
31
  end
32
32
 
33
33
  def test_hcp_response_with_embedding_but_missing_embed_for_request
34
34
  handlebar = response.rel('handlebar', hcp: true).get
35
35
 
36
- assert_equal nil, handlebar[:hcp]
36
+ assert_nil handlebar[:hcp]
37
37
  end
38
38
 
39
39
  def test_hcp_response_with_embedded_array
40
40
  wheels = response.rel('wheels', hcp: true)
41
41
 
42
- assert wheels.map(&:get).all? { |res| res[:hcp] }
42
+ assert(wheels.map(&:get).all? { |res| res[:hcp] })
43
43
  end
44
44
 
45
45
  def test_nested_hcp_responses
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # rubocop:disable Metrics/AbcSize
3
4
  # rubocop:disable Metrics/LineLength
4
5
 
@@ -91,3 +92,6 @@ module Excon
91
92
  end
92
93
  end
93
94
  end
95
+
96
+ # rubocop:enable Metrics/AbcSize
97
+ # rubocop:enable Metrics/LineLength
@@ -17,7 +17,7 @@ module Excon
17
17
  end
18
18
 
19
19
  def full
20
- <<-EOF
20
+ <<-JSON
21
21
  {
22
22
  "href": "https://example.org/goodbye/{receiver}",
23
23
  "templated": "true",
@@ -28,7 +28,7 @@ module Excon
28
28
  "title": "Goodbye!",
29
29
  "hreflang": "en-gb"
30
30
  }
31
- EOF
31
+ JSON
32
32
  end
33
33
 
34
34
  def data(name)
@@ -9,7 +9,7 @@ module Excon
9
9
  #
10
10
  class LinksTest < Minitest::Test
11
11
  def body
12
- <<-EOF
12
+ <<-JSON
13
13
  {
14
14
  "_links": {
15
15
  "self": {
@@ -20,7 +20,7 @@ module Excon
20
20
  }
21
21
  }
22
22
  }
23
- EOF
23
+ JSON
24
24
  end
25
25
 
26
26
  def data
@@ -36,7 +36,7 @@ module Excon
36
36
  end
37
37
 
38
38
  def test_link_properties
39
- assert_equal %w(self parts), links.to_h.keys
39
+ assert_equal %w[self parts], links.to_h.keys
40
40
  end
41
41
  end
42
42
  end
@@ -9,7 +9,7 @@ module Excon
9
9
  #
10
10
  class PropertiesTest < Minitest::Test
11
11
  def body
12
- <<-EOF
12
+ <<-JSON
13
13
  {
14
14
  "size": "49CM",
15
15
  "bike-type": "Mountain Bike",
@@ -20,7 +20,7 @@ module Excon
20
20
  "reflectors": true,
21
21
  "BMX": false
22
22
  }
23
- EOF
23
+ JSON
24
24
  end
25
25
 
26
26
  def data
@@ -9,7 +9,7 @@ module Excon
9
9
  #
10
10
  class ResourceObjectTest < Minitest::Test
11
11
  def body
12
- <<-EOF
12
+ <<-JSON
13
13
  {
14
14
  "_links": {
15
15
  "hello": {
@@ -19,7 +19,7 @@ module Excon
19
19
  "uid": "universe",
20
20
  "hello": "world"
21
21
  }
22
- EOF
22
+ JSON
23
23
  end
24
24
 
25
25
  def data
@@ -42,11 +42,16 @@ module Excon
42
42
  assert_equal 'universe', resource.uid
43
43
  assert_equal 'world', resource.hello
44
44
  assert_equal 'world', resource['hello']
45
- assert_equal nil, resource['invalid']
45
+ assert_nil resource['invalid']
46
46
  end
47
47
 
48
48
  def test_correctly_raising_no_method_error
49
49
  assert_raises(NoMethodError) { resource.invalid }
50
50
  end
51
+
52
+ def test_correctly_respond_to
53
+ assert_equal true, resource.respond_to?(:hello)
54
+ assert_equal false, resource.respond_to?(:invalid)
55
+ end
51
56
  end
52
57
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:disable Metrics/MethodLength
2
+
3
3
  # rubocop:disable Metrics/ModuleLength
4
4
 
5
5
  # :no-doc:
@@ -9,7 +9,7 @@ module Test
9
9
  module_function
10
10
 
11
11
  def api_body
12
- <<-EOF
12
+ <<-JSON
13
13
  {
14
14
  "_links": {
15
15
  "self": {
@@ -21,11 +21,11 @@ module Test
21
21
  }
22
22
  }
23
23
  }
24
- EOF
24
+ JSON
25
25
  end
26
26
 
27
27
  def bicycle_body
28
- <<-EOF
28
+ <<-JSON
29
29
  {
30
30
  "_links": {
31
31
  "self": {
@@ -58,11 +58,11 @@ module Test
58
58
  "wheels": [#{front_wheel_body}, #{rear_wheel_body}]
59
59
  }
60
60
  }
61
- EOF
61
+ JSON
62
62
  end
63
63
 
64
64
  def handlebar_body
65
- <<-EOF
65
+ <<-JSON
66
66
  {
67
67
  "_links": {
68
68
  "self": {
@@ -73,11 +73,11 @@ module Test
73
73
  "reach": "75mm",
74
74
  "bend": "compact"
75
75
  }
76
- EOF
76
+ JSON
77
77
  end
78
78
 
79
79
  def pump_body
80
- <<-EOF
80
+ <<-JSON
81
81
  {
82
82
  "_links": {
83
83
  "self": {
@@ -95,11 +95,11 @@ module Test
95
95
  }
96
96
 
97
97
  }
98
- EOF
98
+ JSON
99
99
  end
100
100
 
101
101
  def parts_body
102
- <<-EOF
102
+ <<-JSON
103
103
  {
104
104
  "_links": {
105
105
  "self": {
@@ -108,11 +108,11 @@ module Test
108
108
  },
109
109
  "count": 47
110
110
  }
111
- EOF
111
+ JSON
112
112
  end
113
113
 
114
114
  def rear_wheel_body
115
- <<-EOF
115
+ <<-JSON
116
116
  {
117
117
  "_links": {
118
118
  "self": {
@@ -122,11 +122,11 @@ module Test
122
122
  "position": "rear",
123
123
  "lacing_pattern": "Radial"
124
124
  }
125
- EOF
125
+ JSON
126
126
  end
127
127
 
128
128
  def front_wheel_body
129
- <<-EOF
129
+ <<-JSON
130
130
  {
131
131
  "_links": {
132
132
  "self": {
@@ -136,7 +136,9 @@ module Test
136
136
  "position": "front",
137
137
  "lacing_pattern": "Radial/2-Cross"
138
138
  }
139
- EOF
139
+ JSON
140
140
  end
141
141
  end
142
142
  end
143
+
144
+ # rubocop:enable Metrics/ModuleLength
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: excon-hypermedia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean
@@ -9,134 +9,134 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-29 00:00:00.000000000 Z
12
+ date: 2018-03-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '1.9'
20
+ version: '1.15'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '1.9'
27
+ version: '1.15'
28
28
  - !ruby/object:Gem::Dependency
29
- name: rake
29
+ name: m
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '10.0'
34
+ version: '1.5'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '10.0'
41
+ version: '1.5'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: minitest
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '5.0'
48
+ version: '5.11'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '5.0'
55
+ version: '5.11'
56
56
  - !ruby/object:Gem::Dependency
57
- name: rubocop
57
+ name: open4
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '0.40'
62
+ version: '1.3'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '0.40'
69
+ version: '1.3'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: pry
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '0.10'
76
+ version: '0.11'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '0.10'
83
+ version: '0.11'
84
84
  - !ruby/object:Gem::Dependency
85
- name: m
85
+ name: rake
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '1.5'
90
+ version: '12.3'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '1.5'
97
+ version: '12.3'
98
98
  - !ruby/object:Gem::Dependency
99
- name: open4
99
+ name: rubocop
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: '1.3'
104
+ version: '0.52'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: '1.3'
111
+ version: '0.52'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: excon
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: '0.49'
118
+ version: '0.60'
119
119
  type: :runtime
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: '0.49'
125
+ version: '0.60'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: excon-addressable
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - "~>"
131
131
  - !ruby/object:Gem::Version
132
- version: '0.3'
132
+ version: '0.4'
133
133
  type: :runtime
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - "~>"
138
138
  - !ruby/object:Gem::Version
139
- version: '0.3'
139
+ version: '0.4'
140
140
  description: Excon, with Hypermedia traversing baked in.
141
141
  email:
142
142
  - jean@mertz.fm
@@ -197,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
197
  version: '0'
198
198
  requirements: []
199
199
  rubyforge_project:
200
- rubygems_version: 2.6.4
200
+ rubygems_version: 2.6.13
201
201
  signing_key:
202
202
  specification_version: 4
203
203
  summary: Excon, with Hypermedia traversing baked in.