snaptrade 2.0.46 → 2.0.48

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -3
  3. data/README.md +28 -11
  4. data/lib/snaptrade/api/trading_api.rb +29 -25
  5. data/lib/snaptrade/api/transactions_and_reporting_api.rb +4 -4
  6. data/lib/snaptrade/models/account_order_record.rb +15 -15
  7. data/lib/snaptrade/models/account_order_record_universal_symbol.rb +17 -17
  8. data/lib/snaptrade/models/action_strict_with_options.rb +41 -0
  9. data/lib/snaptrade/models/brokerage.rb +26 -26
  10. data/lib/snaptrade/models/brokerage_authorization.rb +14 -14
  11. data/lib/snaptrade/models/holdings_status.rb +1 -0
  12. data/lib/snaptrade/models/manual_trade.rb +1 -1
  13. data/lib/snaptrade/models/manual_trade_form.rb +1 -1
  14. data/lib/snaptrade/models/manual_trade_form_with_options.rb +333 -0
  15. data/lib/snaptrade/models/manual_trade_symbol.rb +14 -14
  16. data/lib/snaptrade/models/option_brokerage_symbol.rb +13 -13
  17. data/lib/snaptrade/models/options_position.rb +15 -15
  18. data/lib/snaptrade/models/position.rb +16 -16
  19. data/lib/snaptrade/models/position_symbol.rb +10 -10
  20. data/lib/snaptrade/models/transactions_status.rb +1 -0
  21. data/lib/snaptrade/models/underlying_symbol.rb +17 -17
  22. data/lib/snaptrade/models/universal_activity.rb +1 -1
  23. data/lib/snaptrade/models/universal_symbol.rb +17 -17
  24. data/lib/snaptrade/version.rb +1 -1
  25. data/lib/snaptrade.rb +2 -0
  26. data/spec/api/trading_api_spec.rb +1 -1
  27. data/spec/api/transactions_and_reporting_api_spec.rb +1 -1
  28. data/spec/models/account_order_record_spec.rb +6 -6
  29. data/spec/models/account_order_record_universal_symbol_spec.rb +3 -3
  30. data/spec/models/action_strict_with_options_spec.rb +23 -0
  31. data/spec/models/brokerage_authorization_spec.rb +6 -6
  32. data/spec/models/brokerage_spec.rb +8 -8
  33. data/spec/models/manual_trade_form_with_options_spec.rb +83 -0
  34. data/spec/models/manual_trade_symbol_spec.rb +6 -6
  35. data/spec/models/option_brokerage_symbol_spec.rb +3 -3
  36. data/spec/models/options_position_spec.rb +2 -2
  37. data/spec/models/position_spec.rb +2 -2
  38. data/spec/models/position_symbol_spec.rb +3 -3
  39. data/spec/models/underlying_symbol_spec.rb +3 -3
  40. data/spec/models/universal_symbol_spec.rb +3 -3
  41. metadata +8 -2
@@ -34,9 +34,6 @@ module SnapTrade
34
34
  # URL to the brokerage's logo in square format.
35
35
  attr_accessor :aws_s3_square_logo_url
36
36
 
37
- # This field is deprecated.
38
- attr_accessor :open_url
39
-
40
37
  # URL to the brokerage's website.
41
38
  attr_accessor :url
42
39
 
@@ -46,12 +43,12 @@ module SnapTrade
46
43
  # Whether the brokerage is currently in maintenance mode. A brokerage in maintenance mode will not be available for new connections.
47
44
  attr_accessor :maintenance_mode
48
45
 
49
- # This field is deprecated. Please contact us if you have a valid use case for it.
50
- attr_accessor :allows_fractional_units
51
-
52
46
  # Whether the brokerage allows trading through SnapTrade.
53
47
  attr_accessor :allows_trading
54
48
 
49
+ # This field is deprecated. Please contact us if you have a valid use case for it.
50
+ attr_accessor :allows_fractional_units
51
+
55
52
  # This field is deprecated. Please contact us if you have a valid use case for it.
56
53
  attr_accessor :has_reporting
57
54
 
@@ -63,6 +60,9 @@ module SnapTrade
63
60
  # This field is deprecated. Please contact us if you have a valid use case for it.
64
61
  attr_accessor :exchanges
65
62
 
63
+ # This field is deprecated.
64
+ attr_accessor :open_url
65
+
66
66
  # Attribute mapping from ruby-style variable name to JSON key.
67
67
  def self.attribute_map
68
68
  {
@@ -73,16 +73,16 @@ module SnapTrade
73
73
  :'description' => :'description',
74
74
  :'aws_s3_logo_url' => :'aws_s3_logo_url',
75
75
  :'aws_s3_square_logo_url' => :'aws_s3_square_logo_url',
76
- :'open_url' => :'open_url',
77
76
  :'url' => :'url',
78
77
  :'enabled' => :'enabled',
79
78
  :'maintenance_mode' => :'maintenance_mode',
80
- :'allows_fractional_units' => :'allows_fractional_units',
81
79
  :'allows_trading' => :'allows_trading',
80
+ :'allows_fractional_units' => :'allows_fractional_units',
82
81
  :'has_reporting' => :'has_reporting',
83
82
  :'is_real_time_connection' => :'is_real_time_connection',
84
83
  :'brokerage_type' => :'brokerage_type',
85
- :'exchanges' => :'exchanges'
84
+ :'exchanges' => :'exchanges',
85
+ :'open_url' => :'open_url'
86
86
  }
87
87
  end
88
88
 
@@ -101,16 +101,16 @@ module SnapTrade
101
101
  :'description' => :'String',
102
102
  :'aws_s3_logo_url' => :'String',
103
103
  :'aws_s3_square_logo_url' => :'String',
104
- :'open_url' => :'String',
105
104
  :'url' => :'String',
106
105
  :'enabled' => :'Boolean',
107
106
  :'maintenance_mode' => :'Boolean',
108
- :'allows_fractional_units' => :'Boolean',
109
107
  :'allows_trading' => :'Boolean',
108
+ :'allows_fractional_units' => :'Boolean',
110
109
  :'has_reporting' => :'Boolean',
111
110
  :'is_real_time_connection' => :'Boolean',
112
111
  :'brokerage_type' => :'BrokerageType',
113
- :'exchanges' => :'Array<Object>'
112
+ :'exchanges' => :'Array<Object>',
113
+ :'open_url' => :'String'
114
114
  }
115
115
  end
116
116
 
@@ -118,10 +118,10 @@ module SnapTrade
118
118
  def self.openapi_nullable
119
119
  Set.new([
120
120
  :'aws_s3_square_logo_url',
121
- :'open_url',
122
- :'allows_fractional_units',
123
121
  :'allows_trading',
122
+ :'allows_fractional_units',
124
123
  :'has_reporting',
124
+ :'open_url'
125
125
  ])
126
126
  end
127
127
 
@@ -168,10 +168,6 @@ module SnapTrade
168
168
  self.aws_s3_square_logo_url = attributes[:'aws_s3_square_logo_url']
169
169
  end
170
170
 
171
- if attributes.key?(:'open_url')
172
- self.open_url = attributes[:'open_url']
173
- end
174
-
175
171
  if attributes.key?(:'url')
176
172
  self.url = attributes[:'url']
177
173
  end
@@ -184,14 +180,14 @@ module SnapTrade
184
180
  self.maintenance_mode = attributes[:'maintenance_mode']
185
181
  end
186
182
 
187
- if attributes.key?(:'allows_fractional_units')
188
- self.allows_fractional_units = attributes[:'allows_fractional_units']
189
- end
190
-
191
183
  if attributes.key?(:'allows_trading')
192
184
  self.allows_trading = attributes[:'allows_trading']
193
185
  end
194
186
 
187
+ if attributes.key?(:'allows_fractional_units')
188
+ self.allows_fractional_units = attributes[:'allows_fractional_units']
189
+ end
190
+
195
191
  if attributes.key?(:'has_reporting')
196
192
  self.has_reporting = attributes[:'has_reporting']
197
193
  end
@@ -209,6 +205,10 @@ module SnapTrade
209
205
  self.exchanges = value
210
206
  end
211
207
  end
208
+
209
+ if attributes.key?(:'open_url')
210
+ self.open_url = attributes[:'open_url']
211
+ end
212
212
  end
213
213
 
214
214
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -236,16 +236,16 @@ module SnapTrade
236
236
  description == o.description &&
237
237
  aws_s3_logo_url == o.aws_s3_logo_url &&
238
238
  aws_s3_square_logo_url == o.aws_s3_square_logo_url &&
239
- open_url == o.open_url &&
240
239
  url == o.url &&
241
240
  enabled == o.enabled &&
242
241
  maintenance_mode == o.maintenance_mode &&
243
- allows_fractional_units == o.allows_fractional_units &&
244
242
  allows_trading == o.allows_trading &&
243
+ allows_fractional_units == o.allows_fractional_units &&
245
244
  has_reporting == o.has_reporting &&
246
245
  is_real_time_connection == o.is_real_time_connection &&
247
246
  brokerage_type == o.brokerage_type &&
248
- exchanges == o.exchanges
247
+ exchanges == o.exchanges &&
248
+ open_url == o.open_url
249
249
  end
250
250
 
251
251
  # @see the `==` method
@@ -257,7 +257,7 @@ module SnapTrade
257
257
  # Calculates hash code according to all attributes.
258
258
  # @return [Integer] Hash code
259
259
  def hash
260
- [id, slug, name, display_name, description, aws_s3_logo_url, aws_s3_square_logo_url, open_url, url, enabled, maintenance_mode, allows_fractional_units, allows_trading, has_reporting, is_real_time_connection, brokerage_type, exchanges].hash
260
+ [id, slug, name, display_name, description, aws_s3_logo_url, aws_s3_square_logo_url, url, enabled, maintenance_mode, allows_trading, allows_fractional_units, has_reporting, is_real_time_connection, brokerage_type, exchanges, open_url].hash
261
261
  end
262
262
 
263
263
  # Builds the object from hash
@@ -19,9 +19,6 @@ module SnapTrade
19
19
  # Timestamp of when the connection was established in SnapTrade.
20
20
  attr_accessor :created_date
21
21
 
22
- # Timestamp of when the connection was last updated in SnapTrade. This field is deprecated. Please let us know if you have a valid use case for this field.
23
- attr_accessor :updated_date
24
-
25
22
  attr_accessor :brokerage
26
23
 
27
24
  # A short, human-readable name for the connection.
@@ -39,18 +36,21 @@ module SnapTrade
39
36
  # Additional data about the connection. This information is specific to the brokerage and there's no standard format for this data. This field is deprecated and subject to removal in a future version.
40
37
  attr_accessor :meta
41
38
 
39
+ # Timestamp of when the connection was last updated in SnapTrade. This field is deprecated. Please let us know if you have a valid use case for this field.
40
+ attr_accessor :updated_date
41
+
42
42
  # Attribute mapping from ruby-style variable name to JSON key.
43
43
  def self.attribute_map
44
44
  {
45
45
  :'id' => :'id',
46
46
  :'created_date' => :'created_date',
47
- :'updated_date' => :'updated_date',
48
47
  :'brokerage' => :'brokerage',
49
48
  :'name' => :'name',
50
49
  :'type' => :'type',
51
50
  :'disabled' => :'disabled',
52
51
  :'disabled_date' => :'disabled_date',
53
- :'meta' => :'meta'
52
+ :'meta' => :'meta',
53
+ :'updated_date' => :'updated_date'
54
54
  }
55
55
  end
56
56
 
@@ -64,13 +64,13 @@ module SnapTrade
64
64
  {
65
65
  :'id' => :'String',
66
66
  :'created_date' => :'Time',
67
- :'updated_date' => :'Time',
68
67
  :'brokerage' => :'Brokerage',
69
68
  :'name' => :'String',
70
69
  :'type' => :'String',
71
70
  :'disabled' => :'Boolean',
72
71
  :'disabled_date' => :'Time',
73
- :'meta' => :'Hash<String, Object>'
72
+ :'meta' => :'Hash<String, Object>',
73
+ :'updated_date' => :'Time'
74
74
  }
75
75
  end
76
76
 
@@ -104,10 +104,6 @@ module SnapTrade
104
104
  self.created_date = attributes[:'created_date']
105
105
  end
106
106
 
107
- if attributes.key?(:'updated_date')
108
- self.updated_date = attributes[:'updated_date']
109
- end
110
-
111
107
  if attributes.key?(:'brokerage')
112
108
  self.brokerage = attributes[:'brokerage']
113
109
  end
@@ -133,6 +129,10 @@ module SnapTrade
133
129
  self.meta = value
134
130
  end
135
131
  end
132
+
133
+ if attributes.key?(:'updated_date')
134
+ self.updated_date = attributes[:'updated_date']
135
+ end
136
136
  end
137
137
 
138
138
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -155,13 +155,13 @@ module SnapTrade
155
155
  self.class == o.class &&
156
156
  id == o.id &&
157
157
  created_date == o.created_date &&
158
- updated_date == o.updated_date &&
159
158
  brokerage == o.brokerage &&
160
159
  name == o.name &&
161
160
  type == o.type &&
162
161
  disabled == o.disabled &&
163
162
  disabled_date == o.disabled_date &&
164
- meta == o.meta
163
+ meta == o.meta &&
164
+ updated_date == o.updated_date
165
165
  end
166
166
 
167
167
  # @see the `==` method
@@ -173,7 +173,7 @@ module SnapTrade
173
173
  # Calculates hash code according to all attributes.
174
174
  # @return [Integer] Hash code
175
175
  def hash
176
- [id, created_date, updated_date, brokerage, name, type, disabled, disabled_date, meta].hash
176
+ [id, created_date, brokerage, name, type, disabled, disabled_date, meta, updated_date].hash
177
177
  end
178
178
 
179
179
  # Builds the object from hash
@@ -43,6 +43,7 @@ module SnapTrade
43
43
  # List of attributes with nullable: true
44
44
  def self.openapi_nullable
45
45
  Set.new([
46
+ :'last_successful_sync'
46
47
  ])
47
48
  end
48
49
 
@@ -27,7 +27,7 @@ module SnapTrade
27
27
 
28
28
  attr_accessor :symbol
29
29
 
30
- # The action describes the intent or side of a trade. This is either `BUY` or `SELL`
30
+ # The action describes the intent or side of a trade. This is either `BUY` or `SELL`.
31
31
  attr_accessor :action
32
32
 
33
33
  attr_accessor :units
@@ -16,7 +16,7 @@ module SnapTrade
16
16
  # Unique identifier for the connected brokerage account. This is the UUID used to reference the account in SnapTrade.
17
17
  attr_accessor :account_id
18
18
 
19
- # The action describes the intent or side of a trade. This is either `BUY` or `SELL`
19
+ # The action describes the intent or side of a trade. This is either `BUY` or `SELL`.
20
20
  attr_accessor :action
21
21
 
22
22
  # Unique identifier for the symbol within SnapTrade. This is the ID used to reference the symbol in SnapTrade API calls.
@@ -0,0 +1,333 @@
1
+ =begin
2
+ #SnapTrade
3
+
4
+ #Connect brokerage accounts to your app for live positions and trading
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+ Contact: api@snaptrade.com
8
+ =end
9
+
10
+ require 'date'
11
+ require 'time'
12
+
13
+ module SnapTrade
14
+ # Inputs for placing an order with the brokerage.
15
+ class ManualTradeFormWithOptions
16
+ # Unique identifier for the connected brokerage account. This is the UUID used to reference the account in SnapTrade.
17
+ attr_accessor :account_id
18
+
19
+ # The action describes the intent or side of a trade. This is either `BUY` or `SELL` for Equity symbols or `BUY_TO_OPEN`, `BUY_TO_CLOSE`, `SELL_TO_OPEN` or `SELL_TO_CLOSE` for Options.
20
+ attr_accessor :action
21
+
22
+ # The universal symbol ID of the security to trade. Must be 'null' if `symbol` is provided, otherwise must be provided.
23
+ attr_accessor :universal_symbol_id
24
+
25
+ # The security's trading ticker symbol. This currently only support Options symbols in the 21 character OCC format. For example \"AAPL 131124C00240000\" represents a call option on AAPL expiring on 2024-11-13 with a strike price of $240. For more information on the OCC format, see [here](https://en.wikipedia.org/wiki/Option_symbol#OCC_format). If 'symbol' is provided, then 'universal_symbol_id' must be 'null'.
26
+ attr_accessor :symbol
27
+
28
+ # The type of order to place. - For `Limit` and `StopLimit` orders, the `price` field is required. - For `Stop` and `StopLimit` orders, the `stop` field is required.
29
+ attr_accessor :order_type
30
+
31
+ # The Time in Force type for the order. This field indicates how long the order will remain active before it is executed or expires. Here are the supported values: - `Day` - Day. The order is valid only for the trading day on which it is placed. - `GTC` - Good Til Canceled. The order is valid until it is executed or canceled. - `FOK` - Fill Or Kill. The order must be executed in its entirety immediately or be canceled completely.
32
+ attr_accessor :time_in_force
33
+
34
+ # The limit price for `Limit` and `StopLimit` orders.
35
+ attr_accessor :price
36
+
37
+ # The price at which a stop order is triggered for `Stop` and `StopLimit` orders.
38
+ attr_accessor :stop
39
+
40
+ # For Equity orders, this represents the number of shares for the order. This can be a decimal for fractional orders. Must be `null` if `notional_value` is provided. If placing an Option order, this field represents the number of contracts to buy or sell. (e.g., 1 contract = 100 shares).
41
+ attr_accessor :units
42
+
43
+ attr_accessor :notional_value
44
+
45
+ # Attribute mapping from ruby-style variable name to JSON key.
46
+ def self.attribute_map
47
+ {
48
+ :'account_id' => :'account_id',
49
+ :'action' => :'action',
50
+ :'universal_symbol_id' => :'universal_symbol_id',
51
+ :'symbol' => :'symbol',
52
+ :'order_type' => :'order_type',
53
+ :'time_in_force' => :'time_in_force',
54
+ :'price' => :'price',
55
+ :'stop' => :'stop',
56
+ :'units' => :'units',
57
+ :'notional_value' => :'notional_value'
58
+ }
59
+ end
60
+
61
+ # Returns all the JSON keys this model knows about
62
+ def self.acceptable_attributes
63
+ attribute_map.values
64
+ end
65
+
66
+ # Attribute type mapping.
67
+ def self.openapi_types
68
+ {
69
+ :'account_id' => :'String',
70
+ :'action' => :'ActionStrictWithOptions',
71
+ :'universal_symbol_id' => :'String',
72
+ :'symbol' => :'String',
73
+ :'order_type' => :'OrderTypeStrict',
74
+ :'time_in_force' => :'TimeInForceStrict',
75
+ :'price' => :'Float',
76
+ :'stop' => :'Float',
77
+ :'units' => :'Float',
78
+ :'notional_value' => :'ManualTradeFormNotionalValue'
79
+ }
80
+ end
81
+
82
+ # List of attributes with nullable: true
83
+ def self.openapi_nullable
84
+ Set.new([
85
+ :'universal_symbol_id',
86
+ :'symbol',
87
+ :'price',
88
+ :'stop',
89
+ :'units',
90
+ :'notional_value'
91
+ ])
92
+ end
93
+
94
+ # Initializes the object
95
+ # @param [Hash] attributes Model attributes in the form of hash
96
+ def initialize(attributes = {})
97
+ if (!attributes.is_a?(Hash))
98
+ fail ArgumentError, "The input argument (attributes) must be a hash in `SnapTrade::ManualTradeFormWithOptions` initialize method"
99
+ end
100
+
101
+ # check to see if the attribute exists and convert string to symbol for hash key
102
+ attributes = attributes.each_with_object({}) { |(k, v), h|
103
+ if (!self.class.attribute_map.key?(k.to_sym))
104
+ fail ArgumentError, "`#{k}` is not a valid attribute in `SnapTrade::ManualTradeFormWithOptions`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
105
+ end
106
+ h[k.to_sym] = v
107
+ }
108
+
109
+ if attributes.key?(:'account_id')
110
+ self.account_id = attributes[:'account_id']
111
+ end
112
+
113
+ if attributes.key?(:'action')
114
+ self.action = attributes[:'action']
115
+ end
116
+
117
+ if attributes.key?(:'universal_symbol_id')
118
+ self.universal_symbol_id = attributes[:'universal_symbol_id']
119
+ end
120
+
121
+ if attributes.key?(:'symbol')
122
+ self.symbol = attributes[:'symbol']
123
+ end
124
+
125
+ if attributes.key?(:'order_type')
126
+ self.order_type = attributes[:'order_type']
127
+ end
128
+
129
+ if attributes.key?(:'time_in_force')
130
+ self.time_in_force = attributes[:'time_in_force']
131
+ end
132
+
133
+ if attributes.key?(:'price')
134
+ self.price = attributes[:'price']
135
+ end
136
+
137
+ if attributes.key?(:'stop')
138
+ self.stop = attributes[:'stop']
139
+ end
140
+
141
+ if attributes.key?(:'units')
142
+ self.units = attributes[:'units']
143
+ end
144
+
145
+ if attributes.key?(:'notional_value')
146
+ self.notional_value = attributes[:'notional_value']
147
+ end
148
+ end
149
+
150
+ # Show invalid properties with the reasons. Usually used together with valid?
151
+ # @return Array for valid properties with the reasons
152
+ def list_invalid_properties
153
+ invalid_properties = Array.new
154
+ if @account_id.nil?
155
+ invalid_properties.push('invalid value for "account_id", account_id cannot be nil.')
156
+ end
157
+
158
+ if @action.nil?
159
+ invalid_properties.push('invalid value for "action", action cannot be nil.')
160
+ end
161
+
162
+ if @order_type.nil?
163
+ invalid_properties.push('invalid value for "order_type", order_type cannot be nil.')
164
+ end
165
+
166
+ if @time_in_force.nil?
167
+ invalid_properties.push('invalid value for "time_in_force", time_in_force cannot be nil.')
168
+ end
169
+
170
+ invalid_properties
171
+ end
172
+
173
+ # Check to see if the all the properties in the model are valid
174
+ # @return true if the model is valid
175
+ def valid?
176
+ return false if @account_id.nil?
177
+ return false if @action.nil?
178
+ return false if @order_type.nil?
179
+ return false if @time_in_force.nil?
180
+ true
181
+ end
182
+
183
+ # Checks equality by comparing each attribute.
184
+ # @param [Object] Object to be compared
185
+ def ==(o)
186
+ return true if self.equal?(o)
187
+ self.class == o.class &&
188
+ account_id == o.account_id &&
189
+ action == o.action &&
190
+ universal_symbol_id == o.universal_symbol_id &&
191
+ symbol == o.symbol &&
192
+ order_type == o.order_type &&
193
+ time_in_force == o.time_in_force &&
194
+ price == o.price &&
195
+ stop == o.stop &&
196
+ units == o.units &&
197
+ notional_value == o.notional_value
198
+ end
199
+
200
+ # @see the `==` method
201
+ # @param [Object] Object to be compared
202
+ def eql?(o)
203
+ self == o
204
+ end
205
+
206
+ # Calculates hash code according to all attributes.
207
+ # @return [Integer] Hash code
208
+ def hash
209
+ [account_id, action, universal_symbol_id, symbol, order_type, time_in_force, price, stop, units, notional_value].hash
210
+ end
211
+
212
+ # Builds the object from hash
213
+ # @param [Hash] attributes Model attributes in the form of hash
214
+ # @return [Object] Returns the model itself
215
+ def self.build_from_hash(attributes)
216
+ new.build_from_hash(attributes)
217
+ end
218
+
219
+ # Builds the object from hash
220
+ # @param [Hash] attributes Model attributes in the form of hash
221
+ # @return [Object] Returns the model itself
222
+ def build_from_hash(attributes)
223
+ return nil unless attributes.is_a?(Hash)
224
+ attributes = attributes.transform_keys(&:to_sym)
225
+ self.class.openapi_types.each_pair do |key, type|
226
+ if attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
227
+ self.send("#{key}=", nil)
228
+ elsif type =~ /\AArray<(.*)>/i
229
+ # check to ensure the input is an array given that the attribute
230
+ # is documented as an array but the input is not
231
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
232
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
233
+ end
234
+ elsif !attributes[self.class.attribute_map[key]].nil?
235
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
236
+ end
237
+ end
238
+
239
+ self
240
+ end
241
+
242
+ # Deserializes the data based on type
243
+ # @param string type Data type
244
+ # @param string value Value to be deserialized
245
+ # @return [Object] Deserialized data
246
+ def _deserialize(type, value)
247
+ case type.to_sym
248
+ when :Time
249
+ Time.parse(value)
250
+ when :Date
251
+ Date.parse(value)
252
+ when :String
253
+ value.to_s
254
+ when :Integer
255
+ value.to_i
256
+ when :Float
257
+ value.to_f
258
+ when :Boolean
259
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
260
+ true
261
+ else
262
+ false
263
+ end
264
+ when :Object
265
+ # generic object (usually a Hash), return directly
266
+ value
267
+ when /\AArray<(?<inner_type>.+)>\z/
268
+ inner_type = Regexp.last_match[:inner_type]
269
+ value.map { |v| _deserialize(inner_type, v) }
270
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
271
+ k_type = Regexp.last_match[:k_type]
272
+ v_type = Regexp.last_match[:v_type]
273
+ {}.tap do |hash|
274
+ value.each do |k, v|
275
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
276
+ end
277
+ end
278
+ else # model
279
+ # models (e.g. Pet) or oneOf
280
+ klass = SnapTrade.const_get(type)
281
+ klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
282
+ end
283
+ end
284
+
285
+ # Returns the string representation of the object
286
+ # @return [String] String presentation of the object
287
+ def to_s
288
+ to_hash.to_s
289
+ end
290
+
291
+ # to_body is an alias to to_hash (backward compatibility)
292
+ # @return [Hash] Returns the object in the form of hash
293
+ def to_body
294
+ to_hash
295
+ end
296
+
297
+ # Returns the object in the form of hash
298
+ # @return [Hash] Returns the object in the form of hash
299
+ def to_hash
300
+ hash = {}
301
+ self.class.attribute_map.each_pair do |attr, param|
302
+ value = self.send(attr)
303
+ if value.nil?
304
+ is_nullable = self.class.openapi_nullable.include?(attr)
305
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
306
+ end
307
+
308
+ hash[param] = _to_hash(value)
309
+ end
310
+ hash
311
+ end
312
+
313
+ # Outputs non-array value in the form of hash
314
+ # For object, use to_hash. Otherwise, just return the value
315
+ # @param [Object] value Any valid value
316
+ # @return [Hash] Returns the value in the form of hash
317
+ def _to_hash(value)
318
+ if value.is_a?(Array)
319
+ value.compact.map { |v| _to_hash(v) }
320
+ elsif value.is_a?(Hash)
321
+ {}.tap do |hash|
322
+ value.each { |k, v| hash[k] = _to_hash(v) }
323
+ end
324
+ elsif value.respond_to? :to_hash
325
+ value.to_hash
326
+ else
327
+ value
328
+ end
329
+ end
330
+
331
+ end
332
+
333
+ end