excon-hypermedia 0.5.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []