excon-hypermedia 0.5.0 → 0.7.0

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.
@@ -1,171 +1,59 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:disable Metrics/MethodLength
3
- # rubocop:disable Metrics/LineLength
4
- # rubocop:disable Metrics/ClassLength
5
- # rubocop:disable Metrics/AbcSize
6
2
 
7
3
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
8
4
  require 'excon/hypermedia'
9
5
  require 'minitest/autorun'
6
+ require 'open4'
7
+ require_relative 'support/responses'
8
+
9
+ Excon.defaults.merge!(
10
+ connect_timeout: 1,
11
+ read_timeout: 1,
12
+ write_timeout: 1
13
+ )
14
+
15
+ @server_pid, _, _, e = Open4.popen4(File.expand_path('support/server.rb', __dir__))
16
+ until e.gets =~ /HTTPServer#start/; end
17
+
18
+ Minitest.after_run do
19
+ Process.kill(9, @server_pid)
20
+ Process.wait(@server_pid)
21
+ end
10
22
 
11
23
  module Excon
12
24
  # HyperMediaTest
13
25
  #
14
26
  class HyperMediaTest < Minitest::Test
15
- def setup
16
- Excon.defaults[:mock] = true
17
- Excon.defaults[:middlewares].push(Excon::HyperMedia::Middleware)
18
-
19
- response = { headers: { 'Content-Type' => 'application/hal+json' } }
20
- Excon.stub({ method: :get, path: '/api.json' }, response.merge(body: api_body))
21
- Excon.stub({ method: :get, path: '/product/bicycle' }, response.merge(body: bicycle_body))
22
- Excon.stub({ method: :get, path: '/product/bicycle/wheels/front' }, response.merge(body: front_wheel_body))
23
- Excon.stub({ method: :get, path: '/product/bicycle/wheels/rear' }, response.merge(body: rear_wheel_body))
24
- Excon.stub({ path: '/product/pump' }, response.merge(body: pump_body))
25
- Excon.stub({ method: :get, path: '/product/pump/parts' }, response.merge(body: parts_body))
26
- Excon.stub({ method: :get, path: '/product/handlebar' }, response.merge(body: handlebar_body))
27
- Excon.stub({ method: :get, path: '/api_v2.json' }, body: api_body, headers: { 'Content-Type' => 'application/json' })
28
- end
29
-
30
- def teardown
31
- Excon.stubs.clear
32
- Excon.defaults[:middlewares].delete(Excon::HyperMedia::Middleware)
33
- Excon.defaults[:mock] = true
27
+ def api
28
+ Excon.get('http://localhost:8000/api.json')
34
29
  end
35
30
 
36
- def data(name)
37
- JSON.parse(send("#{name}_body"))
31
+ def api_v2
32
+ Excon.get('http://localhost:8000/api_v2.json', hypermedia: true)
38
33
  end
39
34
 
40
- def api_body
41
- <<-EOF
42
- {
43
- "_links": {
44
- "self": {
45
- "href": "https://www.example.org/api.json"
46
- },
47
- "product": {
48
- "href": "https://www.example.org/product/{uid}",
49
- "templated": true
50
- }
51
- }
52
- }
53
- EOF
35
+ def empty_json_response
36
+ Excon.get('http://localhost:8000/empty_json')
54
37
  end
55
38
 
56
- def bicycle_body
57
- <<-EOF
58
- {
59
- "_links": {
60
- "self": {
61
- "href": "https://www.example.org/product/bicycle"
62
- },
63
- "handlebar": {
64
- "href": "https://www.example.org/product/handlebar"
65
- },
66
- "object_id": {
67
- "href": "https://www.example.org/product/bicycle/object_id_as_text"
68
- },
69
- "pump": {
70
- "href": "https://www.example.org/product/pump"
71
- },
72
- "wheels": [
73
- { "href": "https://www.example.org/product/bicycle/wheels/front" },
74
- { "href": "https://www.example.org/product/bicycle/wheels/rear" }
75
- ]
76
- },
77
- "bike-type": "Mountain Bike",
78
- "BMX": false,
79
- "derailleurs": {
80
- "back": 7,
81
- "front": 3
82
- },
83
- "name": "bicycle",
84
- "reflectors": true,
85
- "_embedded": {
86
- "pump": #{pump_body},
87
- "wheels": [#{front_wheel_body}, #{rear_wheel_body}]
88
- }
89
- }
90
- EOF
39
+ def bicycle
40
+ @bicycle ||= Excon.get('http://localhost:8000/product/bicycle')
91
41
  end
92
42
 
93
- def handlebar_body
94
- <<-EOF
95
- {
96
- "_links": {
97
- "self": {
98
- "href": "https://www.example.org/product/handlebar"
99
- }
100
- },
101
- "material": "Carbon fiber",
102
- "reach": "75mm",
103
- "bend": "compact"
104
- }
105
- EOF
106
- end
107
-
108
- def pump_body
109
- <<-EOF
110
- {
111
- "_links": {
112
- "self": {
113
- "href": "https://www.example.org/product/pump"
114
- },
115
- "parts": {
116
- "href": "https://www.example.org/product/pump/parts"
117
- }
118
- },
119
- "weight": "2kg",
120
- "type": "Floor Pump",
121
- "valve-type": "Presta",
122
- "_embedded": {
123
- "parts": #{parts_body}
124
- }
125
-
126
- }
127
- EOF
43
+ def setup
44
+ Excon.defaults[:middlewares].push(Excon::HyperMedia::Middleware)
128
45
  end
129
46
 
130
- def parts_body
131
- <<-EOF
132
- {
133
- "_links": {
134
- "self": {
135
- "href": "https://www.example.org/product/pump/parts"
136
- }
137
- },
138
- "count": 47
139
- }
140
- EOF
47
+ def teardown
48
+ Excon.defaults[:middlewares].delete(Excon::HyperMedia::Middleware)
141
49
  end
142
50
 
143
- def rear_wheel_body
144
- <<-EOF
145
- {
146
- "_links": {
147
- "self": {
148
- "href": "https://www.example.org/product/bicycle/wheels/rear"
149
- }
150
- },
151
- "position": "rear",
152
- "lacing_pattern": "Radial"
153
- }
154
- EOF
51
+ def data(name)
52
+ JSON.parse(Test::Response.send("#{name}_body"))
155
53
  end
156
54
 
157
- def front_wheel_body
158
- <<-EOF
159
- {
160
- "_links": {
161
- "self": {
162
- "href": "https://www.example.org/product/bicycle/wheels/front"
163
- }
164
- },
165
- "position": "front",
166
- "lacing_pattern": "Radial/2-Cross"
167
- }
168
- EOF
55
+ def url(path)
56
+ File.join('http://localhost:8000', path)
169
57
  end
170
58
  end
171
59
  end
metadata CHANGED
@@ -1,128 +1,142 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: excon-hypermedia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean
8
8
  - Mertz
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-28 00:00:00.000000000 Z
12
+ date: 2020-11-24 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
+ - !ruby/object:Gem::Dependency
99
+ name: rubocop
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '0.52'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0.52'
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: excon
100
114
  requirement: !ruby/object:Gem::Requirement
101
115
  requirements:
102
116
  - - "~>"
103
117
  - !ruby/object:Gem::Version
104
- version: '0.49'
118
+ version: '0.60'
105
119
  type: :runtime
106
120
  prerelease: false
107
121
  version_requirements: !ruby/object:Gem::Requirement
108
122
  requirements:
109
123
  - - "~>"
110
124
  - !ruby/object:Gem::Version
111
- version: '0.49'
125
+ version: '0.60'
112
126
  - !ruby/object:Gem::Dependency
113
127
  name: excon-addressable
114
128
  requirement: !ruby/object:Gem::Requirement
115
129
  requirements:
116
130
  - - "~>"
117
131
  - !ruby/object:Gem::Version
118
- version: '0.3'
132
+ version: '0.4'
119
133
  type: :runtime
120
134
  prerelease: false
121
135
  version_requirements: !ruby/object:Gem::Requirement
122
136
  requirements:
123
137
  - - "~>"
124
138
  - !ruby/object:Gem::Version
125
- version: '0.3'
139
+ version: '0.4'
126
140
  description: Excon, with Hypermedia traversing baked in.
127
141
  email:
128
142
  - jean@mertz.fm
@@ -157,15 +171,18 @@ files:
157
171
  - test/excon/integration_test.rb
158
172
  - test/excon/link_object_test.rb
159
173
  - test/excon/links_test.rb
174
+ - test/excon/middleware_test.rb
160
175
  - test/excon/properties_test.rb
161
176
  - test/excon/resource_object_test.rb
162
177
  - test/excon/response_test.rb
178
+ - test/support/responses.rb
179
+ - test/support/server.rb
163
180
  - test/test_helper.rb
164
181
  homepage: https://github.com/JeanMertz/excon-hypermedia
165
182
  licenses:
166
183
  - MIT
167
184
  metadata: {}
168
- post_install_message:
185
+ post_install_message:
169
186
  rdoc_options: []
170
187
  require_paths:
171
188
  - lib
@@ -180,9 +197,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
197
  - !ruby/object:Gem::Version
181
198
  version: '0'
182
199
  requirements: []
183
- rubyforge_project:
184
- rubygems_version: 2.6.4
185
- signing_key:
200
+ rubygems_version: 3.1.4
201
+ signing_key:
186
202
  specification_version: 4
187
203
  summary: Excon, with Hypermedia traversing baked in.
188
204
  test_files: []