patch_ruby 1.0.0.pre → 1.2.4

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +69 -0
  3. data/Gemfile +1 -2
  4. data/Gemfile.lock +13 -12
  5. data/Makefile +10 -0
  6. data/README.md +144 -15
  7. data/lib/patch_ruby.rb +2 -0
  8. data/lib/patch_ruby/models/allocation.rb +15 -0
  9. data/lib/patch_ruby/models/create_mass_estimate_request.rb +41 -4
  10. data/lib/patch_ruby/models/create_order_request.rb +68 -7
  11. data/lib/patch_ruby/models/estimate.rb +15 -0
  12. data/lib/patch_ruby/models/order.rb +85 -4
  13. data/lib/patch_ruby/models/photo.rb +216 -0
  14. data/lib/patch_ruby/models/preference.rb +15 -0
  15. data/lib/patch_ruby/models/project.rb +119 -25
  16. data/lib/patch_ruby/models/standard.rb +244 -0
  17. data/lib/patch_ruby/version.rb +1 -1
  18. data/spec/api/estimates_api_spec.rb +6 -7
  19. data/spec/api/orders_api_spec.rb +10 -11
  20. data/spec/api/preferences_api_spec.rb +8 -9
  21. data/spec/api/projects_api_spec.rb +4 -5
  22. data/spec/api_client_spec.rb +12 -33
  23. data/spec/constants.rb +3 -0
  24. data/spec/integration/estimates_spec.rb +30 -23
  25. data/spec/integration/orders_spec.rb +85 -38
  26. data/spec/integration/preferences_spec.rb +24 -30
  27. data/spec/integration/projects_spec.rb +38 -27
  28. data/spec/models/allocation_spec.rb +0 -1
  29. data/spec/models/create_mass_estimate_request_spec.rb +0 -1
  30. data/spec/models/create_order_request_spec.rb +0 -1
  31. data/spec/models/create_preference_request_spec.rb +0 -1
  32. data/spec/models/error_response_spec.rb +0 -1
  33. data/spec/models/estimate_list_response_spec.rb +0 -1
  34. data/spec/models/estimate_response_spec.rb +0 -1
  35. data/spec/models/estimate_spec.rb +0 -1
  36. data/spec/models/meta_index_object_spec.rb +0 -1
  37. data/spec/models/order_list_response_spec.rb +0 -1
  38. data/spec/models/order_response_spec.rb +0 -1
  39. data/spec/models/order_spec.rb +0 -1
  40. data/spec/models/preference_list_response_spec.rb +0 -1
  41. data/spec/models/preference_response_spec.rb +0 -1
  42. data/spec/models/preference_spec.rb +0 -1
  43. data/spec/models/project_list_response_spec.rb +0 -1
  44. data/spec/models/project_response_spec.rb +0 -1
  45. data/spec/models/project_spec.rb +0 -1
  46. data/spec/spec_helper.rb +1 -11
  47. metadata +26 -30
  48. data/spec/fixtures/vcr_cassettes/estimate_orders.yml +0 -276
  49. data/spec/fixtures/vcr_cassettes/estimates.yml +0 -211
  50. data/spec/fixtures/vcr_cassettes/orders.yml +0 -229
  51. data/spec/fixtures/vcr_cassettes/preferences.yml +0 -352
  52. data/spec/fixtures/vcr_cassettes/projects.yml +0 -143
@@ -16,17 +16,29 @@ module Patch
16
16
  class CreateOrderRequest
17
17
  attr_accessor :mass_g
18
18
 
19
+ attr_accessor :total_price_cents_usd
20
+
21
+ attr_accessor :project_id
22
+
23
+ attr_accessor :metadata
24
+
19
25
  # Attribute mapping from ruby-style variable name to JSON key.
20
26
  def self.attribute_map
21
27
  {
22
- :'mass_g' => :'mass_g'
28
+ :'mass_g' => :'mass_g',
29
+ :'total_price_cents_usd' => :'total_price_cents_usd',
30
+ :'project_id' => :'project_id',
31
+ :'metadata' => :'metadata'
23
32
  }
24
33
  end
25
34
 
26
35
  # Attribute type mapping.
27
36
  def self.openapi_types
28
37
  {
29
- :'mass_g' => :'Integer'
38
+ :'mass_g' => :'Integer',
39
+ :'total_price_cents_usd' => :'Integer',
40
+ :'project_id' => :'String',
41
+ :'metadata' => :'Object'
30
42
  }
31
43
  end
32
44
 
@@ -59,14 +71,34 @@ module Patch
59
71
  if attributes.key?(:'mass_g')
60
72
  self.mass_g = attributes[:'mass_g']
61
73
  end
74
+
75
+ if attributes.key?(:'total_price_cents_usd')
76
+ self.total_price_cents_usd = attributes[:'total_price_cents_usd']
77
+ end
78
+
79
+ if attributes.key?(:'project_id')
80
+ self.project_id = attributes[:'project_id']
81
+ end
82
+
83
+ if attributes.key?(:'metadata')
84
+ self.metadata = attributes[:'metadata']
85
+ end
62
86
  end
63
87
 
64
88
  # Show invalid properties with the reasons. Usually used together with valid?
65
89
  # @return Array for valid properties with the reasons
66
90
  def list_invalid_properties
67
91
  invalid_properties = Array.new
68
- if @mass_g.nil?
69
- invalid_properties.push('invalid value for "mass_g", mass_g cannot be nil.')
92
+ if !@mass_g.nil? && @mass_g > 2000000000
93
+ invalid_properties.push('invalid value for "mass_g", must be smaller than or equal to 2000000000.')
94
+ end
95
+
96
+ if !@mass_g.nil? && @mass_g < 1
97
+ invalid_properties.push('invalid value for "mass_g", must be greater than or equal to 1.')
98
+ end
99
+
100
+ if !@total_price_cents_usd.nil? && @total_price_cents_usd < 1
101
+ invalid_properties.push('invalid value for "total_price_cents_usd", must be greater than or equal to 1.')
70
102
  end
71
103
 
72
104
  invalid_properties
@@ -75,16 +107,45 @@ module Patch
75
107
  # Check to see if the all the properties in the model are valid
76
108
  # @return true if the model is valid
77
109
  def valid?
78
- return false if @mass_g.nil?
110
+ return false if !@mass_g.nil? && @mass_g > 2000000000
111
+ return false if !@mass_g.nil? && @mass_g < 1
112
+ return false if !@total_price_cents_usd.nil? && @total_price_cents_usd < 1
79
113
  true
80
114
  end
81
115
 
116
+ # Custom attribute writer method with validation
117
+ # @param [Object] mass_g Value to be assigned
118
+ def mass_g=(mass_g)
119
+ if !mass_g.nil? && mass_g > 2000000000
120
+ fail ArgumentError, 'invalid value for "mass_g", must be smaller than or equal to 2000000000.'
121
+ end
122
+
123
+ if !mass_g.nil? && mass_g < 1
124
+ fail ArgumentError, 'invalid value for "mass_g", must be greater than or equal to 1.'
125
+ end
126
+
127
+ @mass_g = mass_g
128
+ end
129
+
130
+ # Custom attribute writer method with validation
131
+ # @param [Object] total_price_cents_usd Value to be assigned
132
+ def total_price_cents_usd=(total_price_cents_usd)
133
+ if !total_price_cents_usd.nil? && total_price_cents_usd < 1
134
+ fail ArgumentError, 'invalid value for "total_price_cents_usd", must be greater than or equal to 1.'
135
+ end
136
+
137
+ @total_price_cents_usd = total_price_cents_usd
138
+ end
139
+
82
140
  # Checks equality by comparing each attribute.
83
141
  # @param [Object] Object to be compared
84
142
  def ==(o)
85
143
  return true if self.equal?(o)
86
144
  self.class == o.class &&
87
- mass_g == o.mass_g
145
+ mass_g == o.mass_g &&
146
+ total_price_cents_usd == o.total_price_cents_usd &&
147
+ project_id == o.project_id &&
148
+ metadata == o.metadata
88
149
  end
89
150
 
90
151
  # @see the `==` method
@@ -96,7 +157,7 @@ module Patch
96
157
  # Calculates hash code according to all attributes.
97
158
  # @return [Integer] Hash code
98
159
  def hash
99
- [mass_g].hash
160
+ [mass_g, total_price_cents_usd, project_id, metadata].hash
100
161
  end
101
162
 
102
163
  # Builds the object from hash
@@ -89,12 +89,27 @@ module Patch
89
89
  # @return Array for valid properties with the reasons
90
90
  def list_invalid_properties
91
91
  invalid_properties = Array.new
92
+ if @id.nil?
93
+ invalid_properties.push('invalid value for "id", id cannot be nil.')
94
+ end
95
+
96
+ if @production.nil?
97
+ invalid_properties.push('invalid value for "production", production cannot be nil.')
98
+ end
99
+
100
+ if @type.nil?
101
+ invalid_properties.push('invalid value for "type", type cannot be nil.')
102
+ end
103
+
92
104
  invalid_properties
93
105
  end
94
106
 
95
107
  # Check to see if the all the properties in the model are valid
96
108
  # @return true if the model is valid
97
109
  def valid?
110
+ return false if @id.nil?
111
+ return false if @production.nil?
112
+ return false if @type.nil?
98
113
  true
99
114
  end
100
115
 
@@ -26,8 +26,12 @@ module Patch
26
26
 
27
27
  attr_accessor :price_cents_usd
28
28
 
29
+ attr_accessor :patch_fee_cents_usd
30
+
29
31
  attr_accessor :allocations
30
32
 
33
+ attr_accessor :metadata
34
+
31
35
  class EnumAttributeValidator
32
36
  attr_reader :datatype
33
37
  attr_reader :allowable_values
@@ -59,7 +63,9 @@ module Patch
59
63
  :'state' => :'state',
60
64
  :'allocation_state' => :'allocation_state',
61
65
  :'price_cents_usd' => :'price_cents_usd',
62
- :'allocations' => :'allocations'
66
+ :'patch_fee_cents_usd' => :'patch_fee_cents_usd',
67
+ :'allocations' => :'allocations',
68
+ :'metadata' => :'metadata'
63
69
  }
64
70
  end
65
71
 
@@ -72,7 +78,9 @@ module Patch
72
78
  :'state' => :'String',
73
79
  :'allocation_state' => :'String',
74
80
  :'price_cents_usd' => :'String',
75
- :'allocations' => :'Array<Allocation>'
81
+ :'patch_fee_cents_usd' => :'String',
82
+ :'allocations' => :'Array<Allocation>',
83
+ :'metadata' => :'Object'
76
84
  }
77
85
  end
78
86
 
@@ -126,30 +134,101 @@ module Patch
126
134
  self.price_cents_usd = attributes[:'price_cents_usd']
127
135
  end
128
136
 
137
+ if attributes.key?(:'patch_fee_cents_usd')
138
+ self.patch_fee_cents_usd = attributes[:'patch_fee_cents_usd']
139
+ end
140
+
129
141
  if attributes.key?(:'allocations')
130
142
  if (value = attributes[:'allocations']).is_a?(Array)
131
143
  self.allocations = value
132
144
  end
133
145
  end
146
+
147
+ if attributes.key?(:'metadata')
148
+ self.metadata = attributes[:'metadata']
149
+ end
134
150
  end
135
151
 
136
152
  # Show invalid properties with the reasons. Usually used together with valid?
137
153
  # @return Array for valid properties with the reasons
138
154
  def list_invalid_properties
139
155
  invalid_properties = Array.new
156
+ if @id.nil?
157
+ invalid_properties.push('invalid value for "id", id cannot be nil.')
158
+ end
159
+
160
+ if @mass_g.nil?
161
+ invalid_properties.push('invalid value for "mass_g", mass_g cannot be nil.')
162
+ end
163
+
164
+ if @mass_g > 2000000000
165
+ invalid_properties.push('invalid value for "mass_g", must be smaller than or equal to 2000000000.')
166
+ end
167
+
168
+ if @mass_g < 1
169
+ invalid_properties.push('invalid value for "mass_g", must be greater than or equal to 1.')
170
+ end
171
+
172
+ if @production.nil?
173
+ invalid_properties.push('invalid value for "production", production cannot be nil.')
174
+ end
175
+
176
+ if @state.nil?
177
+ invalid_properties.push('invalid value for "state", state cannot be nil.')
178
+ end
179
+
180
+ if @allocation_state.nil?
181
+ invalid_properties.push('invalid value for "allocation_state", allocation_state cannot be nil.')
182
+ end
183
+
184
+ if @allocations.nil?
185
+ invalid_properties.push('invalid value for "allocations", allocations cannot be nil.')
186
+ end
187
+
188
+ if @metadata.nil?
189
+ invalid_properties.push('invalid value for "metadata", metadata cannot be nil.')
190
+ end
191
+
140
192
  invalid_properties
141
193
  end
142
194
 
143
195
  # Check to see if the all the properties in the model are valid
144
196
  # @return true if the model is valid
145
197
  def valid?
198
+ return false if @id.nil?
199
+ return false if @mass_g.nil?
200
+ return false if @mass_g > 2000000000
201
+ return false if @mass_g < 1
202
+ return false if @production.nil?
203
+ return false if @state.nil?
146
204
  state_validator = EnumAttributeValidator.new('String', ["draft", "placed", "complete", "cancelled"])
147
205
  return false unless state_validator.valid?(@state)
206
+ return false if @allocation_state.nil?
148
207
  allocation_state_validator = EnumAttributeValidator.new('String', ["pending", "partially_allocated", "allocated"])
149
208
  return false unless allocation_state_validator.valid?(@allocation_state)
209
+ return false if @allocations.nil?
210
+ return false if @metadata.nil?
150
211
  true
151
212
  end
152
213
 
214
+ # Custom attribute writer method with validation
215
+ # @param [Object] mass_g Value to be assigned
216
+ def mass_g=(mass_g)
217
+ if mass_g.nil?
218
+ fail ArgumentError, 'mass_g cannot be nil'
219
+ end
220
+
221
+ if mass_g > 2000000000
222
+ fail ArgumentError, 'invalid value for "mass_g", must be smaller than or equal to 2000000000.'
223
+ end
224
+
225
+ if mass_g < 1
226
+ fail ArgumentError, 'invalid value for "mass_g", must be greater than or equal to 1.'
227
+ end
228
+
229
+ @mass_g = mass_g
230
+ end
231
+
153
232
  # Custom attribute writer method checking allowed values (enum).
154
233
  # @param [Object] state Object to be assigned
155
234
  def state=(state)
@@ -181,7 +260,9 @@ module Patch
181
260
  state == o.state &&
182
261
  allocation_state == o.allocation_state &&
183
262
  price_cents_usd == o.price_cents_usd &&
184
- allocations == o.allocations
263
+ patch_fee_cents_usd == o.patch_fee_cents_usd &&
264
+ allocations == o.allocations &&
265
+ metadata == o.metadata
185
266
  end
186
267
 
187
268
  # @see the `==` method
@@ -193,7 +274,7 @@ module Patch
193
274
  # Calculates hash code according to all attributes.
194
275
  # @return [Integer] Hash code
195
276
  def hash
196
- [id, mass_g, production, state, allocation_state, price_cents_usd, allocations].hash
277
+ [id, mass_g, production, state, allocation_state, price_cents_usd, patch_fee_cents_usd, allocations, metadata].hash
197
278
  end
198
279
 
199
280
  # Builds the object from hash
@@ -0,0 +1,216 @@
1
+ =begin
2
+ #Patch API V1
3
+
4
+ #The core API used to integrate with Patch's service
5
+
6
+ The version of the OpenAPI document: v1
7
+ Contact: developers@usepatch.com
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.3.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Patch
16
+ class Photo
17
+ attr_accessor :url
18
+
19
+ # Attribute mapping from ruby-style variable name to JSON key.
20
+ def self.attribute_map
21
+ {
22
+ :'url' => :'url'
23
+ }
24
+ end
25
+
26
+ # Attribute type mapping.
27
+ def self.openapi_types
28
+ {
29
+ :'url' => :'String'
30
+ }
31
+ end
32
+
33
+ # Allows models with corresponding API classes to delegate API operations to those API classes
34
+ # Exposes Model.operation_id which delegates to ModelsApi.new.operation_id
35
+ # Eg. Order.create_order delegates to OrdersApi.new.create_order
36
+ def self.method_missing(message, *args, &block)
37
+ if Object.const_defined?('Patch::PhotosApi::OPERATIONS') && Patch::PhotosApi::OPERATIONS.include?(message)
38
+ Patch::PhotosApi.new.send(message, *args)
39
+ else
40
+ super
41
+ end
42
+ end
43
+
44
+ # Initializes the object
45
+ # @param [Hash] attributes Model attributes in the form of hash
46
+ def initialize(attributes = {})
47
+ if (!attributes.is_a?(Hash))
48
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Patch::Photo` initialize method"
49
+ end
50
+
51
+ # check to see if the attribute exists and convert string to symbol for hash key
52
+ attributes = attributes.each_with_object({}) { |(k, v), h|
53
+ if (!self.class.attribute_map.key?(k.to_sym))
54
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Patch::Photo`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
55
+ end
56
+ h[k.to_sym] = v
57
+ }
58
+
59
+ if attributes.key?(:'url')
60
+ self.url = attributes[:'url']
61
+ end
62
+ end
63
+
64
+ # Show invalid properties with the reasons. Usually used together with valid?
65
+ # @return Array for valid properties with the reasons
66
+ def list_invalid_properties
67
+ invalid_properties = Array.new
68
+ if @url.nil?
69
+ invalid_properties.push('invalid value for "url", url cannot be nil.')
70
+ end
71
+
72
+ invalid_properties
73
+ end
74
+
75
+ # Check to see if the all the properties in the model are valid
76
+ # @return true if the model is valid
77
+ def valid?
78
+ return false if @url.nil?
79
+ true
80
+ end
81
+
82
+ # Checks equality by comparing each attribute.
83
+ # @param [Object] Object to be compared
84
+ def ==(o)
85
+ return true if self.equal?(o)
86
+ self.class == o.class &&
87
+ url == o.url
88
+ end
89
+
90
+ # @see the `==` method
91
+ # @param [Object] Object to be compared
92
+ def eql?(o)
93
+ self == o
94
+ end
95
+
96
+ # Calculates hash code according to all attributes.
97
+ # @return [Integer] Hash code
98
+ def hash
99
+ [url].hash
100
+ end
101
+
102
+ # Builds the object from hash
103
+ # @param [Hash] attributes Model attributes in the form of hash
104
+ # @return [Object] Returns the model itself
105
+ def self.build_from_hash(attributes)
106
+ new.build_from_hash(attributes)
107
+ end
108
+
109
+ # Builds the object from hash
110
+ # @param [Hash] attributes Model attributes in the form of hash
111
+ # @return [Object] Returns the model itself
112
+ def build_from_hash(attributes)
113
+ return nil unless attributes.is_a?(Hash)
114
+ self.class.openapi_types.each_pair do |key, type|
115
+ if type =~ /\AArray<(.*)>/i
116
+ # check to ensure the input is an array given that the attribute
117
+ # is documented as an array but the input is not
118
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
119
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
120
+ end
121
+ elsif !attributes[self.class.attribute_map[key]].nil?
122
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
123
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
124
+ end
125
+
126
+ self
127
+ end
128
+
129
+ # Deserializes the data based on type
130
+ # @param string type Data type
131
+ # @param string value Value to be deserialized
132
+ # @return [Object] Deserialized data
133
+ def _deserialize(type, value)
134
+ case type.to_sym
135
+ when :DateTime
136
+ DateTime.parse(value)
137
+ when :Date
138
+ Date.parse(value)
139
+ when :String
140
+ value.to_s
141
+ when :Integer
142
+ value.to_i
143
+ when :Float
144
+ value.to_f
145
+ when :Boolean
146
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
147
+ true
148
+ else
149
+ false
150
+ end
151
+ when :Object
152
+ # generic object (usually a Hash), return directly
153
+ value
154
+ when /\AArray<(?<inner_type>.+)>\z/
155
+ inner_type = Regexp.last_match[:inner_type]
156
+ value.map { |v| _deserialize(inner_type, v) }
157
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
158
+ k_type = Regexp.last_match[:k_type]
159
+ v_type = Regexp.last_match[:v_type]
160
+ {}.tap do |hash|
161
+ value.each do |k, v|
162
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
163
+ end
164
+ end
165
+ else # model
166
+ Patch.const_get(type).build_from_hash(value)
167
+ end
168
+ end
169
+
170
+ # Returns the string representation of the object
171
+ # @return [String] String presentation of the object
172
+ def to_s
173
+ to_hash.to_s
174
+ end
175
+
176
+ # to_body is an alias to to_hash (backward compatibility)
177
+ # @return [Hash] Returns the object in the form of hash
178
+ def to_body
179
+ to_hash
180
+ end
181
+
182
+ # Returns the object in the form of hash
183
+ # @return [Hash] Returns the object in the form of hash
184
+ def to_hash
185
+ hash = {}
186
+ self.class.attribute_map.each_pair do |attr, param|
187
+ value = self.send(attr)
188
+ if value.nil?
189
+ is_nullable = self.class.openapi_nullable.include?(attr)
190
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
191
+ end
192
+
193
+ hash[param] = _to_hash(value)
194
+ end
195
+ hash
196
+ end
197
+
198
+ # Outputs non-array value in the form of hash
199
+ # For object, use to_hash. Otherwise, just return the value
200
+ # @param [Object] value Any valid value
201
+ # @return [Hash] Returns the value in the form of hash
202
+ def _to_hash(value)
203
+ if value.is_a?(Array)
204
+ value.compact.map { |v| _to_hash(v) }
205
+ elsif value.is_a?(Hash)
206
+ {}.tap do |hash|
207
+ value.each { |k, v| hash[k] = _to_hash(v) }
208
+ end
209
+ elsif value.respond_to? :to_hash
210
+ value.to_hash
211
+ else
212
+ value
213
+ end
214
+ end
215
+ end
216
+ end