pulp_maven_client 0.33.2 → 0.34.1

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.
@@ -0,0 +1,310 @@
1
+ =begin
2
+ #Pulp 3 API
3
+
4
+ #Fetch, Upload, Organize, and Distribute Software Packages
5
+
6
+ The version of the OpenAPI document: v3
7
+ Contact: pulp-list@redhat.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.10.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module PulpMavenClient
17
+ # One MavenPackage in a repository version. ``version`` is stored unchanged.
18
+ class MavenRepositoryFlatPackageResponse
19
+ # Maven groupId.
20
+ attr_accessor :group_id
21
+
22
+ # Maven artifactId.
23
+ attr_accessor :artifact_id
24
+
25
+ # Version stored on the MavenPackage, including any rebuild suffix.
26
+ attr_accessor :version
27
+
28
+ # When this GAV entered the repository version: RepositoryContent.pulp_created, falling back to the content unit's pulp_created.
29
+ attr_accessor :last_updated
30
+
31
+ # Description from the POM. Empty when the POM has none.
32
+ attr_accessor :description
33
+
34
+ # Licenses from the POM. Empty when the POM has none.
35
+ attr_accessor :licenses
36
+
37
+ # Attribute mapping from ruby-style variable name to JSON key.
38
+ def self.attribute_map
39
+ {
40
+ :'group_id' => :'group_id',
41
+ :'artifact_id' => :'artifact_id',
42
+ :'version' => :'version',
43
+ :'last_updated' => :'last_updated',
44
+ :'description' => :'description',
45
+ :'licenses' => :'licenses'
46
+ }
47
+ end
48
+
49
+ # Returns all the JSON keys this model knows about
50
+ def self.acceptable_attributes
51
+ attribute_map.values
52
+ end
53
+
54
+ # Attribute type mapping.
55
+ def self.openapi_types
56
+ {
57
+ :'group_id' => :'String',
58
+ :'artifact_id' => :'String',
59
+ :'version' => :'String',
60
+ :'last_updated' => :'Time',
61
+ :'description' => :'String',
62
+ :'licenses' => :'Array<MavenPackageLicenseResponse>'
63
+ }
64
+ end
65
+
66
+ # List of attributes with nullable: true
67
+ def self.openapi_nullable
68
+ Set.new([
69
+ ])
70
+ end
71
+
72
+ # Initializes the object
73
+ # @param [Hash] attributes Model attributes in the form of hash
74
+ def initialize(attributes = {})
75
+ if (!attributes.is_a?(Hash))
76
+ fail ArgumentError, "The input argument (attributes) must be a hash in `PulpMavenClient::MavenRepositoryFlatPackageResponse` initialize method"
77
+ end
78
+
79
+ # check to see if the attribute exists and convert string to symbol for hash key
80
+ attributes = attributes.each_with_object({}) { |(k, v), h|
81
+ if (!self.class.attribute_map.key?(k.to_sym))
82
+ fail ArgumentError, "`#{k}` is not a valid attribute in `PulpMavenClient::MavenRepositoryFlatPackageResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
83
+ end
84
+ h[k.to_sym] = v
85
+ }
86
+
87
+ if attributes.key?(:'group_id')
88
+ self.group_id = attributes[:'group_id']
89
+ else
90
+ self.group_id = nil
91
+ end
92
+
93
+ if attributes.key?(:'artifact_id')
94
+ self.artifact_id = attributes[:'artifact_id']
95
+ else
96
+ self.artifact_id = nil
97
+ end
98
+
99
+ if attributes.key?(:'version')
100
+ self.version = attributes[:'version']
101
+ else
102
+ self.version = nil
103
+ end
104
+
105
+ if attributes.key?(:'last_updated')
106
+ self.last_updated = attributes[:'last_updated']
107
+ else
108
+ self.last_updated = nil
109
+ end
110
+
111
+ if attributes.key?(:'description')
112
+ self.description = attributes[:'description']
113
+ else
114
+ self.description = nil
115
+ end
116
+
117
+ if attributes.key?(:'licenses')
118
+ if (value = attributes[:'licenses']).is_a?(Array)
119
+ self.licenses = value
120
+ end
121
+ else
122
+ self.licenses = nil
123
+ end
124
+ end
125
+
126
+ # Show invalid properties with the reasons. Usually used together with valid?
127
+ # @return Array for valid properties with the reasons
128
+ def list_invalid_properties
129
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
130
+ invalid_properties = Array.new
131
+ if @group_id.nil?
132
+ invalid_properties.push('invalid value for "group_id", group_id cannot be nil.')
133
+ end
134
+
135
+ if @artifact_id.nil?
136
+ invalid_properties.push('invalid value for "artifact_id", artifact_id cannot be nil.')
137
+ end
138
+
139
+ if @version.nil?
140
+ invalid_properties.push('invalid value for "version", version cannot be nil.')
141
+ end
142
+
143
+ if @last_updated.nil?
144
+ invalid_properties.push('invalid value for "last_updated", last_updated cannot be nil.')
145
+ end
146
+
147
+ if @description.nil?
148
+ invalid_properties.push('invalid value for "description", description cannot be nil.')
149
+ end
150
+
151
+ if @licenses.nil?
152
+ invalid_properties.push('invalid value for "licenses", licenses cannot be nil.')
153
+ end
154
+
155
+ invalid_properties
156
+ end
157
+
158
+ # Check to see if the all the properties in the model are valid
159
+ # @return true if the model is valid
160
+ def valid?
161
+ warn '[DEPRECATED] the `valid?` method is obsolete'
162
+ return false if @group_id.nil?
163
+ return false if @artifact_id.nil?
164
+ return false if @version.nil?
165
+ return false if @last_updated.nil?
166
+ return false if @description.nil?
167
+ return false if @licenses.nil?
168
+ true
169
+ end
170
+
171
+ # Checks equality by comparing each attribute.
172
+ # @param [Object] Object to be compared
173
+ def ==(o)
174
+ return true if self.equal?(o)
175
+ self.class == o.class &&
176
+ group_id == o.group_id &&
177
+ artifact_id == o.artifact_id &&
178
+ version == o.version &&
179
+ last_updated == o.last_updated &&
180
+ description == o.description &&
181
+ licenses == o.licenses
182
+ end
183
+
184
+ # @see the `==` method
185
+ # @param [Object] Object to be compared
186
+ def eql?(o)
187
+ self == o
188
+ end
189
+
190
+ # Calculates hash code according to all attributes.
191
+ # @return [Integer] Hash code
192
+ def hash
193
+ [group_id, artifact_id, version, last_updated, description, licenses].hash
194
+ end
195
+
196
+ # Builds the object from hash
197
+ # @param [Hash] attributes Model attributes in the form of hash
198
+ # @return [Object] Returns the model itself
199
+ def self.build_from_hash(attributes)
200
+ return nil unless attributes.is_a?(Hash)
201
+ attributes = attributes.transform_keys(&:to_sym)
202
+ transformed_hash = {}
203
+ openapi_types.each_pair do |key, type|
204
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
205
+ transformed_hash["#{key}"] = nil
206
+ elsif type =~ /\AArray<(.*)>/i
207
+ # check to ensure the input is an array given that the attribute
208
+ # is documented as an array but the input is not
209
+ if attributes[attribute_map[key]].is_a?(Array)
210
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
211
+ end
212
+ elsif !attributes[attribute_map[key]].nil?
213
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
214
+ end
215
+ end
216
+ new(transformed_hash)
217
+ end
218
+
219
+ # Deserializes the data based on type
220
+ # @param string type Data type
221
+ # @param string value Value to be deserialized
222
+ # @return [Object] Deserialized data
223
+ def self._deserialize(type, value)
224
+ case type.to_sym
225
+ when :Time
226
+ Time.parse(value)
227
+ when :Date
228
+ Date.parse(value)
229
+ when :String
230
+ value.to_s
231
+ when :Integer
232
+ value.to_i
233
+ when :Float
234
+ value.to_f
235
+ when :Boolean
236
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
237
+ true
238
+ else
239
+ false
240
+ end
241
+ when :Object
242
+ # generic object (usually a Hash), return directly
243
+ value
244
+ when /\AArray<(?<inner_type>.+)>\z/
245
+ inner_type = Regexp.last_match[:inner_type]
246
+ value.map { |v| _deserialize(inner_type, v) }
247
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
248
+ k_type = Regexp.last_match[:k_type]
249
+ v_type = Regexp.last_match[:v_type]
250
+ {}.tap do |hash|
251
+ value.each do |k, v|
252
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
253
+ end
254
+ end
255
+ else # model
256
+ # models (e.g. Pet) or oneOf
257
+ klass = PulpMavenClient.const_get(type)
258
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
259
+ end
260
+ end
261
+
262
+ # Returns the string representation of the object
263
+ # @return [String] String presentation of the object
264
+ def to_s
265
+ to_hash.to_s
266
+ end
267
+
268
+ # to_body is an alias to to_hash (backward compatibility)
269
+ # @return [Hash] Returns the object in the form of hash
270
+ def to_body
271
+ to_hash
272
+ end
273
+
274
+ # Returns the object in the form of hash
275
+ # @return [Hash] Returns the object in the form of hash
276
+ def to_hash
277
+ hash = {}
278
+ self.class.attribute_map.each_pair do |attr, param|
279
+ value = self.send(attr)
280
+ if value.nil?
281
+ is_nullable = self.class.openapi_nullable.include?(attr)
282
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
283
+ end
284
+
285
+ hash[param] = _to_hash(value)
286
+ end
287
+ hash
288
+ end
289
+
290
+ # Outputs non-array value in the form of hash
291
+ # For object, use to_hash. Otherwise, just return the value
292
+ # @param [Object] value Any valid value
293
+ # @return [Hash] Returns the value in the form of hash
294
+ def _to_hash(value)
295
+ if value.is_a?(Array)
296
+ value.compact.map { |v| _to_hash(v) }
297
+ elsif value.is_a?(Hash)
298
+ {}.tap do |hash|
299
+ value.each { |k, v| hash[k] = _to_hash(v) }
300
+ end
301
+ elsif value.respond_to? :to_hash
302
+ value.to_hash
303
+ else
304
+ value
305
+ end
306
+ end
307
+
308
+ end
309
+
310
+ end
@@ -0,0 +1,263 @@
1
+ =begin
2
+ #Pulp 3 API
3
+
4
+ #Fetch, Upload, Organize, and Distribute Software Packages
5
+
6
+ The version of the OpenAPI document: v3
7
+ Contact: pulp-list@redhat.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.10.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module PulpMavenClient
17
+ class PaginatedMavenRepositoryFlatPackageListResponse
18
+ attr_accessor :count
19
+
20
+ attr_accessor :_next
21
+
22
+ attr_accessor :previous
23
+
24
+ attr_accessor :results
25
+
26
+ # Attribute mapping from ruby-style variable name to JSON key.
27
+ def self.attribute_map
28
+ {
29
+ :'count' => :'count',
30
+ :'_next' => :'next',
31
+ :'previous' => :'previous',
32
+ :'results' => :'results'
33
+ }
34
+ end
35
+
36
+ # Returns all the JSON keys this model knows about
37
+ def self.acceptable_attributes
38
+ attribute_map.values
39
+ end
40
+
41
+ # Attribute type mapping.
42
+ def self.openapi_types
43
+ {
44
+ :'count' => :'Integer',
45
+ :'_next' => :'String',
46
+ :'previous' => :'String',
47
+ :'results' => :'Array<MavenRepositoryFlatPackageResponse>'
48
+ }
49
+ end
50
+
51
+ # List of attributes with nullable: true
52
+ def self.openapi_nullable
53
+ Set.new([
54
+ :'_next',
55
+ :'previous',
56
+ ])
57
+ end
58
+
59
+ # Initializes the object
60
+ # @param [Hash] attributes Model attributes in the form of hash
61
+ def initialize(attributes = {})
62
+ if (!attributes.is_a?(Hash))
63
+ fail ArgumentError, "The input argument (attributes) must be a hash in `PulpMavenClient::PaginatedMavenRepositoryFlatPackageListResponse` initialize method"
64
+ end
65
+
66
+ # check to see if the attribute exists and convert string to symbol for hash key
67
+ attributes = attributes.each_with_object({}) { |(k, v), h|
68
+ if (!self.class.attribute_map.key?(k.to_sym))
69
+ fail ArgumentError, "`#{k}` is not a valid attribute in `PulpMavenClient::PaginatedMavenRepositoryFlatPackageListResponse`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
70
+ end
71
+ h[k.to_sym] = v
72
+ }
73
+
74
+ if attributes.key?(:'count')
75
+ self.count = attributes[:'count']
76
+ else
77
+ self.count = nil
78
+ end
79
+
80
+ if attributes.key?(:'_next')
81
+ self._next = attributes[:'_next']
82
+ else
83
+ self._next = nil
84
+ end
85
+
86
+ if attributes.key?(:'previous')
87
+ self.previous = attributes[:'previous']
88
+ else
89
+ self.previous = nil
90
+ end
91
+
92
+ if attributes.key?(:'results')
93
+ if (value = attributes[:'results']).is_a?(Array)
94
+ self.results = value
95
+ end
96
+ else
97
+ self.results = nil
98
+ end
99
+ end
100
+
101
+ # Show invalid properties with the reasons. Usually used together with valid?
102
+ # @return Array for valid properties with the reasons
103
+ def list_invalid_properties
104
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
105
+ invalid_properties = Array.new
106
+ if @count.nil?
107
+ invalid_properties.push('invalid value for "count", count cannot be nil.')
108
+ end
109
+
110
+ if @results.nil?
111
+ invalid_properties.push('invalid value for "results", results cannot be nil.')
112
+ end
113
+
114
+ invalid_properties
115
+ end
116
+
117
+ # Check to see if the all the properties in the model are valid
118
+ # @return true if the model is valid
119
+ def valid?
120
+ warn '[DEPRECATED] the `valid?` method is obsolete'
121
+ return false if @count.nil?
122
+ return false if @results.nil?
123
+ true
124
+ end
125
+
126
+ # Checks equality by comparing each attribute.
127
+ # @param [Object] Object to be compared
128
+ def ==(o)
129
+ return true if self.equal?(o)
130
+ self.class == o.class &&
131
+ count == o.count &&
132
+ _next == o._next &&
133
+ previous == o.previous &&
134
+ results == o.results
135
+ end
136
+
137
+ # @see the `==` method
138
+ # @param [Object] Object to be compared
139
+ def eql?(o)
140
+ self == o
141
+ end
142
+
143
+ # Calculates hash code according to all attributes.
144
+ # @return [Integer] Hash code
145
+ def hash
146
+ [count, _next, previous, results].hash
147
+ end
148
+
149
+ # Builds the object from hash
150
+ # @param [Hash] attributes Model attributes in the form of hash
151
+ # @return [Object] Returns the model itself
152
+ def self.build_from_hash(attributes)
153
+ return nil unless attributes.is_a?(Hash)
154
+ attributes = attributes.transform_keys(&:to_sym)
155
+ transformed_hash = {}
156
+ openapi_types.each_pair do |key, type|
157
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
158
+ transformed_hash["#{key}"] = nil
159
+ elsif type =~ /\AArray<(.*)>/i
160
+ # check to ensure the input is an array given that the attribute
161
+ # is documented as an array but the input is not
162
+ if attributes[attribute_map[key]].is_a?(Array)
163
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
164
+ end
165
+ elsif !attributes[attribute_map[key]].nil?
166
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
167
+ end
168
+ end
169
+ new(transformed_hash)
170
+ end
171
+
172
+ # Deserializes the data based on type
173
+ # @param string type Data type
174
+ # @param string value Value to be deserialized
175
+ # @return [Object] Deserialized data
176
+ def self._deserialize(type, value)
177
+ case type.to_sym
178
+ when :Time
179
+ Time.parse(value)
180
+ when :Date
181
+ Date.parse(value)
182
+ when :String
183
+ value.to_s
184
+ when :Integer
185
+ value.to_i
186
+ when :Float
187
+ value.to_f
188
+ when :Boolean
189
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
190
+ true
191
+ else
192
+ false
193
+ end
194
+ when :Object
195
+ # generic object (usually a Hash), return directly
196
+ value
197
+ when /\AArray<(?<inner_type>.+)>\z/
198
+ inner_type = Regexp.last_match[:inner_type]
199
+ value.map { |v| _deserialize(inner_type, v) }
200
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
201
+ k_type = Regexp.last_match[:k_type]
202
+ v_type = Regexp.last_match[:v_type]
203
+ {}.tap do |hash|
204
+ value.each do |k, v|
205
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
206
+ end
207
+ end
208
+ else # model
209
+ # models (e.g. Pet) or oneOf
210
+ klass = PulpMavenClient.const_get(type)
211
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
212
+ end
213
+ end
214
+
215
+ # Returns the string representation of the object
216
+ # @return [String] String presentation of the object
217
+ def to_s
218
+ to_hash.to_s
219
+ end
220
+
221
+ # to_body is an alias to to_hash (backward compatibility)
222
+ # @return [Hash] Returns the object in the form of hash
223
+ def to_body
224
+ to_hash
225
+ end
226
+
227
+ # Returns the object in the form of hash
228
+ # @return [Hash] Returns the object in the form of hash
229
+ def to_hash
230
+ hash = {}
231
+ self.class.attribute_map.each_pair do |attr, param|
232
+ value = self.send(attr)
233
+ if value.nil?
234
+ is_nullable = self.class.openapi_nullable.include?(attr)
235
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
236
+ end
237
+
238
+ hash[param] = _to_hash(value)
239
+ end
240
+ hash
241
+ end
242
+
243
+ # Outputs non-array value in the form of hash
244
+ # For object, use to_hash. Otherwise, just return the value
245
+ # @param [Object] value Any valid value
246
+ # @return [Hash] Returns the value in the form of hash
247
+ def _to_hash(value)
248
+ if value.is_a?(Array)
249
+ value.compact.map { |v| _to_hash(v) }
250
+ elsif value.is_a?(Hash)
251
+ {}.tap do |hash|
252
+ value.each { |k, v| hash[k] = _to_hash(v) }
253
+ end
254
+ elsif value.respond_to? :to_hash
255
+ value.to_hash
256
+ else
257
+ value
258
+ end
259
+ end
260
+
261
+ end
262
+
263
+ end
@@ -11,5 +11,5 @@ Generator version: 7.10.0
11
11
  =end
12
12
 
13
13
  module PulpMavenClient
14
- VERSION = '0.33.2'
14
+ VERSION = '0.34.1'
15
15
  end
@@ -30,14 +30,17 @@ require 'pulp_maven_client/models/maven_maven_remote_response'
30
30
  require 'pulp_maven_client/models/maven_maven_remote_response_hidden_fields_inner'
31
31
  require 'pulp_maven_client/models/maven_maven_repository'
32
32
  require 'pulp_maven_client/models/maven_maven_repository_response'
33
+ require 'pulp_maven_client/models/maven_package_license_response'
33
34
  require 'pulp_maven_client/models/maven_package_release_response'
34
35
  require 'pulp_maven_client/models/maven_path_index_status_response'
36
+ require 'pulp_maven_client/models/maven_repository_flat_package_response'
35
37
  require 'pulp_maven_client/models/maven_repository_metrics_response'
36
38
  require 'pulp_maven_client/models/maven_repository_package_response'
37
39
  require 'pulp_maven_client/models/my_permissions_response'
38
40
  require 'pulp_maven_client/models/nested_role'
39
41
  require 'pulp_maven_client/models/nested_role_response'
40
42
  require 'pulp_maven_client/models/object_roles_response'
43
+ require 'pulp_maven_client/models/paginated_maven_repository_flat_package_list_response'
41
44
  require 'pulp_maven_client/models/paginated_maven_repository_package_list_response'
42
45
  require 'pulp_maven_client/models/paginated_repository_version_response_list'
43
46
  require 'pulp_maven_client/models/paginatedmaven_maven_artifact_response_list'
@@ -229,6 +229,22 @@ describe 'RepositoriesMavenApi' do
229
229
  end
230
230
  end
231
231
 
232
+ # unit tests for packages_flat
233
+ # List packages (flat)
234
+ # Return one MavenPackage row per stored GAV in a repository version (latest complete version if repository_version is omitted). version is the stored string, so rebuilds are separate rows. Pagination count is the number of GAVs. description is an empty string when the POM has none. licenses is an empty list when the POM has none. Ordered by group_id, artifact_id, version in byte order.
235
+ # @param maven_maven_repository_href
236
+ # @param [Hash] opts the optional parameters
237
+ # @option opts [Array<String>] :x_task_diagnostics List of profilers to use on tasks.
238
+ # @option opts [String] :repository_version HREF or PRN of a version of this repository. Defaults to the latest complete version.
239
+ # @option opts [Array<String>] :fields A list of fields to include in the response.
240
+ # @option opts [Array<String>] :exclude_fields A list of fields to exclude from the response.
241
+ # @return [PaginatedMavenRepositoryFlatPackageListResponse]
242
+ describe 'packages_flat test' do
243
+ it 'should work' do
244
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
245
+ end
246
+ end
247
+
232
248
  # unit tests for partial_update
233
249
  # Update a maven repository
234
250
  # Update the entity partially and trigger an asynchronous task if necessary
@@ -0,0 +1,42 @@
1
+ =begin
2
+ #Pulp 3 API
3
+
4
+ #Fetch, Upload, Organize, and Distribute Software Packages
5
+
6
+ The version of the OpenAPI document: v3
7
+ Contact: pulp-list@redhat.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.10.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for PulpMavenClient::MavenPackageLicenseResponse
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe PulpMavenClient::MavenPackageLicenseResponse do
21
+ let(:instance) { PulpMavenClient::MavenPackageLicenseResponse.new }
22
+
23
+ describe 'test an instance of MavenPackageLicenseResponse' do
24
+ it 'should create an instance of MavenPackageLicenseResponse' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(PulpMavenClient::MavenPackageLicenseResponse)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "name"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "url"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ end