square.rb 8.0.0.20201216 → 26.1.0.20230119

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +79 -221
  4. data/lib/square/api/apple_pay_api.rb +15 -8
  5. data/lib/square/api/bank_accounts_api.rb +5 -5
  6. data/lib/square/api/base_api.rb +27 -9
  7. data/lib/square/api/booking_custom_attributes_api.rb +555 -0
  8. data/lib/square/api/bookings_api.rb +107 -15
  9. data/lib/square/api/cards_api.rb +171 -0
  10. data/lib/square/api/cash_drawers_api.rb +2 -2
  11. data/lib/square/api/catalog_api.rb +167 -73
  12. data/lib/square/api/checkout_api.rb +205 -3
  13. data/lib/square/api/customer_custom_attributes_api.rb +561 -0
  14. data/lib/square/api/customer_groups_api.rb +17 -8
  15. data/lib/square/api/customer_segments_api.rb +15 -6
  16. data/lib/square/api/customers_api.rb +67 -33
  17. data/lib/square/api/devices_api.rb +3 -2
  18. data/lib/square/api/disputes_api.rb +109 -105
  19. data/lib/square/api/gift_card_activities_api.rb +132 -0
  20. data/lib/square/api/gift_cards_api.rb +298 -0
  21. data/lib/square/api/inventory_api.rb +263 -24
  22. data/lib/square/api/invoices_api.rb +21 -21
  23. data/lib/square/api/labor_api.rb +70 -68
  24. data/lib/square/api/location_custom_attributes_api.rb +584 -0
  25. data/lib/square/api/locations_api.rb +21 -14
  26. data/lib/square/api/loyalty_api.rb +333 -50
  27. data/lib/square/api/merchants_api.rb +11 -9
  28. data/lib/square/api/mobile_authorization_api.rb +4 -4
  29. data/lib/square/api/o_auth_api.rb +78 -25
  30. data/lib/square/api/order_custom_attributes_api.rb +601 -0
  31. data/lib/square/api/orders_api.rb +84 -45
  32. data/lib/square/api/payments_api.rb +72 -24
  33. data/lib/square/api/payouts_api.rb +173 -0
  34. data/lib/square/api/refunds_api.rb +18 -7
  35. data/lib/square/api/sites_api.rb +43 -0
  36. data/lib/square/api/snippets_api.rb +146 -0
  37. data/lib/square/api/subscriptions_api.rb +190 -15
  38. data/lib/square/api/team_api.rb +46 -46
  39. data/lib/square/api/terminal_api.rb +172 -22
  40. data/lib/square/api/transactions_api.rb +15 -191
  41. data/lib/square/api/v1_transactions_api.rb +52 -124
  42. data/lib/square/api/vendors_api.rb +257 -0
  43. data/lib/square/api/webhook_subscriptions_api.rb +327 -0
  44. data/lib/square/api_helper.rb +217 -57
  45. data/lib/square/client.rb +90 -18
  46. data/lib/square/configuration.rb +64 -20
  47. data/lib/square/exceptions/validation_exception.rb +13 -0
  48. data/lib/square/http/api_response.rb +7 -9
  49. data/lib/square/http/faraday_client.rb +40 -9
  50. data/lib/square/http/http_client.rb +31 -12
  51. data/lib/square/http/http_request.rb +6 -2
  52. data/lib/square/utilities/date_time_helper.rb +151 -0
  53. data/lib/square/utilities/file_wrapper.rb +1 -2
  54. data/lib/square.rb +56 -44
  55. data/test/api/test_locations_api.rb +2 -5
  56. data/test/test_helper.rb +2 -2
  57. metadata +83 -15
  58. data/lib/square/api/v1_employees_api.rb +0 -751
  59. data/lib/square/api/v1_items_api.rb +0 -1766
@@ -3,14 +3,9 @@ module Square
3
3
  # are configured in this class.
4
4
  class Configuration
5
5
  # The attribute readers for properties.
6
- attr_reader :http_client
7
- attr_reader :timeout
8
- attr_reader :max_retries
9
- attr_reader :retry_interval
10
- attr_reader :backoff_factor
11
- attr_reader :environment
12
- attr_reader :square_version
13
- attr_reader :access_token
6
+ attr_reader :http_client, :connection, :adapter, :timeout, :max_retries, :retry_interval,
7
+ :backoff_factor, :retry_statuses, :retry_methods, :environment, :custom_url,
8
+ :square_version, :access_token, :user_agent_detail
14
9
 
15
10
  def additional_headers
16
11
  @additional_headers.clone
@@ -20,10 +15,19 @@ module Square
20
15
  attr_reader :environments
21
16
  end
22
17
 
23
- def initialize(timeout: 60, max_retries: 0, retry_interval: 1,
24
- backoff_factor: 1, environment: 'production',
25
- square_version: '2020-12-16', access_token: 'TODO: Replace',
26
- additional_headers: {})
18
+ def initialize(connection: nil, adapter: :net_http_persistent, timeout: 60,
19
+ max_retries: 0, retry_interval: 1, backoff_factor: 2,
20
+ retry_statuses: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524],
21
+ retry_methods: %i[get put], environment: 'production',
22
+ custom_url: 'https://connect.squareup.com',
23
+ square_version: '2023-01-19', access_token: '',
24
+ user_agent_detail: '', additional_headers: {})
25
+ # The Faraday connection object passed by the SDK user for making requests
26
+ @connection = connection
27
+
28
+ # The Faraday adapter object passed by the SDK user for performing http requests
29
+ @adapter = adapter
30
+
27
31
  # The value to use for connection timeout
28
32
  @timeout = timeout
29
33
 
@@ -37,9 +41,18 @@ module Square
37
41
  # by in order to provide backoff
38
42
  @backoff_factor = backoff_factor
39
43
 
44
+ # A list of HTTP statuses to retry
45
+ @retry_statuses = retry_statuses
46
+
47
+ # A list of HTTP methods to retry
48
+ @retry_methods = retry_methods
49
+
40
50
  # Current API environment
41
51
  @environment = String(environment)
42
52
 
53
+ # Sets the base URL requests are made to. Defaults to `https://connect.squareup.com`
54
+ @custom_url = custom_url
55
+
43
56
  # Square Connect API versions
44
57
  @square_version = square_version
45
58
 
@@ -51,33 +64,56 @@ module Square
51
64
 
52
65
  # The Http Client to use for making requests.
53
66
  @http_client = create_http_client
67
+
68
+ # User agent detail, to be appended with user-agent header.
69
+ @user_agent_detail = get_user_agent(user_agent_detail)
54
70
  end
55
71
 
56
- def clone_with(timeout: nil, max_retries: nil, retry_interval: nil,
57
- backoff_factor: nil, environment: nil, square_version: nil,
58
- access_token: nil, additional_headers: nil)
72
+ def clone_with(connection: nil, adapter: nil, timeout: nil,
73
+ max_retries: nil, retry_interval: nil, backoff_factor: nil,
74
+ retry_statuses: nil, retry_methods: nil, environment: nil,
75
+ custom_url: nil, square_version: nil, access_token: nil,
76
+ user_agent_detail: nil, additional_headers: nil)
77
+ connection ||= self.connection
78
+ adapter ||= self.adapter
59
79
  timeout ||= self.timeout
60
80
  max_retries ||= self.max_retries
61
81
  retry_interval ||= self.retry_interval
62
82
  backoff_factor ||= self.backoff_factor
83
+ retry_statuses ||= self.retry_statuses
84
+ retry_methods ||= self.retry_methods
63
85
  environment ||= self.environment
86
+ custom_url ||= self.custom_url
64
87
  square_version ||= self.square_version
65
88
  access_token ||= self.access_token
89
+ user_agent_detail ||= self.user_agent_detail
66
90
  additional_headers ||= self.additional_headers
67
91
 
68
- Configuration.new(timeout: timeout, max_retries: max_retries,
92
+ Configuration.new(connection: connection, adapter: adapter,
93
+ timeout: timeout, max_retries: max_retries,
69
94
  retry_interval: retry_interval,
70
95
  backoff_factor: backoff_factor,
71
- environment: environment,
72
- square_version: square_version,
96
+ retry_statuses: retry_statuses,
97
+ retry_methods: retry_methods, environment: environment,
98
+ custom_url: custom_url, square_version: square_version,
73
99
  access_token: access_token,
100
+ user_agent_detail: user_agent_detail,
74
101
  additional_headers: additional_headers)
75
102
  end
76
103
 
77
104
  def create_http_client
78
105
  FaradayClient.new(timeout: timeout, max_retries: max_retries,
79
106
  retry_interval: retry_interval,
80
- backoff_factor: backoff_factor)
107
+ backoff_factor: backoff_factor,
108
+ retry_statuses: retry_statuses,
109
+ retry_methods: retry_methods, connection: connection,
110
+ adapter: adapter)
111
+ end
112
+
113
+ def get_user_agent(user_agent_detail)
114
+ raise ArgumentError, 'The length of user-agent detail should not exceed 128 characters.' unless user_agent_detail.length < 128
115
+
116
+ user_agent_detail
81
117
  end
82
118
 
83
119
  # All the environments the SDK can run in.
@@ -87,6 +123,9 @@ module Square
87
123
  },
88
124
  'sandbox' => {
89
125
  'default' => 'https://connect.squareupsandbox.com'
126
+ },
127
+ 'custom' => {
128
+ 'default' => '{custom_url}'
90
129
  }
91
130
  }.freeze
92
131
 
@@ -95,7 +134,12 @@ module Square
95
134
  # required.
96
135
  # @return [String] The base URI.
97
136
  def get_base_uri(server = 'default')
98
- ENVIRONMENTS[environment][server].clone
137
+ parameters = {
138
+ 'custom_url' => { 'value' => custom_url, 'encode' => false }
139
+ }
140
+ APIHelper.append_url_with_template_parameters(
141
+ ENVIRONMENTS[environment][server], parameters
142
+ )
99
143
  end
100
144
  end
101
145
  end
@@ -0,0 +1,13 @@
1
+ module Square
2
+ # Class for exceptions when there is a schema validation error.
3
+ class ValidationException < StandardError
4
+ attr_reader :reason
5
+
6
+ # The constructor.
7
+ # @param [String] The reason for raising an exception.
8
+ def initialize(value, template)
9
+ @reason = "The value #{value} provided doesn't validate against the schema #{template}"
10
+ super(reason)
11
+ end
12
+ end
13
+ end
@@ -18,16 +18,14 @@ module Square
18
18
  @request = http_response.request
19
19
  @errors = errors
20
20
 
21
- if data.is_a? Hash
22
- if data.keys.any?
23
- @body = Struct.new(*data.keys) do
24
- define_method(:to_s) { http_response.raw_body }
25
- end.new(*data.values)
21
+ if (data.is_a? Hash) && data.keys.any?
22
+ @body = Struct.new(*data.keys) do
23
+ define_method(:to_s) { http_response.raw_body }
24
+ end.new(*data.values)
26
25
 
27
- @cursor = data.fetch(:cursor, nil)
28
- data.reject! { |k| k == :cursor || k == :errors }
29
- @data = Struct.new(*data.keys).new(*data.values) if data.keys.any?
30
- end
26
+ @cursor = data.fetch(:cursor, nil)
27
+ data.reject! { |k| %i[cursor errors].include?(k) }
28
+ @data = Struct.new(*data.keys).new(*data.values) if data.keys.any?
31
29
  else
32
30
  @data = data
33
31
  @body = data
@@ -1,25 +1,52 @@
1
1
  require 'faraday/http_cache'
2
- require 'faraday_middleware'
2
+ require 'faraday/retry'
3
+ require 'faraday/multipart'
4
+ require 'faraday/follow_redirects'
5
+ require 'faraday/gzip'
6
+ require 'faraday/net_http_persistent'
3
7
 
4
8
  module Square
5
9
  # An implementation of HttpClient.
6
10
  class FaradayClient < HttpClient
11
+ # The attribute readers for properties.
12
+ attr_reader :connection
13
+
7
14
  # The constructor.
8
15
  def initialize(timeout:, max_retries:, retry_interval:,
9
- backoff_factor:, cache: false, verify: true)
10
- @connection = Faraday.new do |faraday|
16
+ backoff_factor:, retry_statuses:, retry_methods:,
17
+ connection:, adapter:, cache: false, verify: true)
18
+ @connection = if connection.nil?
19
+ create_connection(timeout: timeout, max_retries: max_retries,
20
+ retry_interval: retry_interval, backoff_factor: backoff_factor,
21
+ retry_statuses: retry_statuses, retry_methods: retry_methods,
22
+ adapter: adapter, cache: cache, verify: verify)
23
+ else
24
+ connection
25
+ end
26
+ end
27
+
28
+ # Method to initialize connection.
29
+ def create_connection(timeout:, max_retries:, retry_interval:,
30
+ backoff_factor:, retry_statuses:, retry_methods:,
31
+ adapter:, cache: false, verify: true)
32
+ Faraday.new do |faraday|
11
33
  faraday.use Faraday::HttpCache, serializer: Marshal if cache
12
- faraday.use FaradayMiddleware::FollowRedirects
13
- faraday.use :gzip
34
+ faraday.use Faraday::FollowRedirects::Middleware
35
+ faraday.request :gzip
14
36
  faraday.request :multipart
15
37
  faraday.request :url_encoded
16
38
  faraday.ssl[:ca_file] = Certifi.where
17
39
  faraday.ssl[:verify] = verify
18
40
  faraday.request :retry, max: max_retries, interval: retry_interval,
19
- backoff_factor: backoff_factor
20
- faraday.adapter Faraday.default_adapter
41
+ backoff_factor: backoff_factor,
42
+ retry_statuses: retry_statuses,
43
+ methods: retry_methods,
44
+ retry_if: proc { |env, _exc|
45
+ env.request.context['forced_retry'] ||= false
46
+ }
47
+ faraday.adapter adapter
21
48
  faraday.options[:params_encoder] = Faraday::FlatParamsEncoder
22
- faraday.options[:timeout] = timeout if timeout > 0
49
+ faraday.options[:timeout] = timeout if timeout.positive?
23
50
  end
24
51
  end
25
52
 
@@ -29,7 +56,9 @@ module Square
29
56
  http_request.http_method.downcase,
30
57
  http_request.query_url
31
58
  ) do |request|
32
- request.headers = http_request.headers
59
+ request.headers = http_request.headers.map { |k, v| [k.to_s, v.to_s] }
60
+ request.options.context ||= {}
61
+ request.options.context.merge!(http_request.context)
33
62
  unless http_request.http_method == HttpMethodEnum::GET &&
34
63
  http_request.parameters.empty?
35
64
  request.body = http_request.parameters
@@ -45,6 +74,8 @@ module Square
45
74
  http_request.query_url
46
75
  ) do |request|
47
76
  request.headers = http_request.headers
77
+ request.options.context ||= {}
78
+ request.options.context.merge!(http_request.context)
48
79
  unless http_request.http_method == HttpMethodEnum::GET &&
49
80
  http_request.parameters.empty?
50
81
  request.body = http_request.parameters
@@ -28,72 +28,91 @@ module Square
28
28
  # Get a GET HttpRequest object.
29
29
  # @param [String] The URL to send the request to.
30
30
  # @param [Hash, Optional] The headers for the HTTP Request.
31
+ # @param [Hash, Optional] The context for the HTTP Request.
31
32
  def get(query_url,
32
- headers: {})
33
+ headers: {},
34
+ context: {})
33
35
  HttpRequest.new(HttpMethodEnum::GET,
34
36
  query_url,
35
- headers: headers)
37
+ headers: headers,
38
+ context: context)
36
39
  end
37
40
 
38
41
  # Get a HEAD HttpRequest object.
39
42
  # @param [String] The URL to send the request to.
40
43
  # @param [Hash, Optional] The headers for the HTTP Request.
44
+ # @param [Hash, Optional] The context for the HTTP Request.
41
45
  def head(query_url,
42
- headers: {})
46
+ headers: {},
47
+ context: {})
43
48
  HttpRequest.new(HttpMethodEnum::HEAD,
44
49
  query_url,
45
- headers: headers)
50
+ headers: headers,
51
+ context: context)
46
52
  end
47
53
 
48
54
  # Get a POST HttpRequest object.
49
55
  # @param [String] The URL to send the request to.
50
56
  # @param [Hash, Optional] The headers for the HTTP Request.
51
57
  # @param [Hash, Optional] The parameters for the HTTP Request.
58
+ # @param [Hash, Optional] The context for the HTTP Request.
52
59
  def post(query_url,
53
60
  headers: {},
54
- parameters: {})
61
+ parameters: {},
62
+ context: {})
55
63
  HttpRequest.new(HttpMethodEnum::POST,
56
64
  query_url,
57
65
  headers: headers,
58
- parameters: parameters)
66
+ parameters: parameters,
67
+ context: context)
59
68
  end
60
69
 
61
70
  # Get a PUT HttpRequest object.
62
71
  # @param [String] The URL to send the request to.
63
72
  # @param [Hash, Optional] The headers for the HTTP Request.
64
73
  # @param [Hash, Optional] The parameters for the HTTP Request.
74
+ # @param [Hash, Optional] The context for the HTTP Request.
65
75
  def put(query_url,
66
76
  headers: {},
67
- parameters: {})
77
+ parameters: {},
78
+ context: {})
68
79
  HttpRequest.new(HttpMethodEnum::PUT,
69
80
  query_url,
70
81
  headers: headers,
71
- parameters: parameters)
82
+ parameters: parameters,
83
+ context: context)
72
84
  end
73
85
 
74
86
  # Get a PATCH HttpRequest object.
75
87
  # @param [String] The URL to send the request to.
76
88
  # @param [Hash, Optional] The headers for the HTTP Request.
77
89
  # @param [Hash, Optional] The parameters for the HTTP Request.
90
+ # @param [Hash, Optional] The context for the HTTP Request.
78
91
  def patch(query_url,
79
92
  headers: {},
80
- parameters: {})
93
+ parameters: {},
94
+ context: {})
81
95
  HttpRequest.new(HttpMethodEnum::PATCH,
82
96
  query_url,
83
97
  headers: headers,
84
- parameters: parameters)
98
+ parameters: parameters,
99
+ context: context)
85
100
  end
86
101
 
87
102
  # Get a DELETE HttpRequest object.
88
103
  # @param [String] The URL to send the request to.
89
104
  # @param [Hash, Optional] The headers for the HTTP Request.
105
+ # @param [Hash, Optional] The parameters for the HTTP Request.
106
+ # @param [Hash, Optional] The context for the HTTP Request.
90
107
  def delete(query_url,
91
108
  headers: {},
92
- parameters: {})
109
+ parameters: nil,
110
+ context: {})
93
111
  HttpRequest.new(HttpMethodEnum::DELETE,
94
112
  query_url,
95
113
  headers: headers,
96
- parameters: parameters)
114
+ parameters: parameters,
115
+ context: context)
97
116
  end
98
117
  end
99
118
  end
@@ -2,21 +2,25 @@ module Square
2
2
  # Represents a single Http Request.
3
3
  class HttpRequest
4
4
  attr_accessor :http_method, :query_url, :headers,
5
- :parameters, :username, :password
5
+ :parameters, :username, :password,
6
+ :context
6
7
 
7
8
  # The constructor.
8
9
  # @param [HttpMethodEnum] The HTTP method.
9
10
  # @param [String] The URL to send the request to.
10
11
  # @param [Hash, Optional] The headers for the HTTP Request.
11
12
  # @param [Hash, Optional] The parameters for the HTTP Request.
13
+ # @param [Hash, Optional] The context for the HTTP Request.
12
14
  def initialize(http_method,
13
15
  query_url,
14
16
  headers: {},
15
- parameters: {})
17
+ parameters: {},
18
+ context: {})
16
19
  @http_method = http_method
17
20
  @query_url = query_url
18
21
  @headers = headers
19
22
  @parameters = parameters
23
+ @context = context
20
24
  end
21
25
 
22
26
  # Add a header to the HttpRequest.
@@ -0,0 +1,151 @@
1
+ require 'date'
2
+ module Square
3
+ # A utility that supports dateTime conversion to different formats
4
+ class DateTimeHelper
5
+ # Safely converts a DateTime object into a rfc1123 format string
6
+ # @param [DateTime] The DateTime object
7
+ # @return [String] The rfc1123 formatted datetime string
8
+ def self.to_rfc1123(date_time)
9
+ date_time&.httpdate
10
+ end
11
+
12
+ # Safely converts a map of DateTime objects into a map of rfc1123 format string
13
+ # @param [hash] a map of DateTime objects
14
+ # @return [hash] a map of rfc1123 formatted datetime string
15
+ def self.to_rfc1123_map(date_time, hash, key)
16
+ return if date_time.nil?
17
+
18
+ hash[key] = {}
19
+ date_time.each do |k, v|
20
+ hash[key][k] =
21
+ if v.is_a?(BaseModel)
22
+ v.to_hash
23
+ else
24
+ v.is_a?(DateTime) ? DateTimeHelper.to_rfc1123(v) : v
25
+ end
26
+ end
27
+ hash[key]
28
+ end
29
+
30
+ # Safely converts an array of DateTime objects into an array of rfc1123 format string
31
+ # @param [Array] an array of DateTime objects
32
+ # @return [Array] an array of rfc1123 formatted datetime string
33
+ def self.to_rfc1123_array(date_time, hash, key)
34
+ return if date_time.nil?
35
+
36
+ hash[key] = date_time.map do |v|
37
+ if v.is_a?(BaseModel)
38
+ v.to_hash
39
+ else
40
+ v.is_a?(DateTime) ? DateTimeHelper.to_rfc1123(v) : v
41
+ end
42
+ end
43
+ end
44
+
45
+ # Safely converts a DateTime object into a unix format string
46
+ # @param [DateTime] The DateTime object
47
+ # @return [String] The unix formatted datetime string
48
+ def self.to_unix(date_time)
49
+ date_time.to_time.utc.to_i unless date_time.nil?
50
+ end
51
+
52
+ # Safely converts a map of DateTime objects into a map of unix format string
53
+ # @param [hash] a map of DateTime objects
54
+ # @return [hash] a map of unix formatted datetime string
55
+ def self.to_unix_map(date_time, hash, key)
56
+ return if date_time.nil?
57
+
58
+ hash[key] = {}
59
+ date_time.each do |k, v|
60
+ hash[key][k] =
61
+ if v.is_a?(BaseModel)
62
+ v.to_hash
63
+ else
64
+ v.is_a?(DateTime) ? DateTimeHelper.to_unix(v) : v
65
+ end
66
+ end
67
+ hash[key]
68
+ end
69
+
70
+ # Safely converts an array of DateTime objects into a map of unix format string
71
+ # @param [hash] an array of DateTime objects
72
+ # @return [hash] an array of unix formatted datetime string
73
+ def self.to_unix_array(date_time, hash, key)
74
+ return if date_time.nil?
75
+
76
+ hash[key] = date_time.map do |v|
77
+ if v.is_a?(BaseModel)
78
+ v.to_hash
79
+ else
80
+ v.is_a?(DateTime) ? DateTimeHelper.to_unix(v) : v
81
+ end
82
+ end
83
+ end
84
+
85
+ # Safely converts a DateTime object into a rfc3339 format string
86
+ # @param [DateTime] The DateTime object
87
+ # @return [String] The rfc3339 formatted datetime string
88
+ def self.to_rfc3339(date_time)
89
+ date_time&.rfc3339
90
+ end
91
+
92
+ # Safely converts a map of DateTime objects into a map of rfc1123 format string
93
+ # @param [hash] a map of DateTime objects
94
+ # @return [hash] a map of rfc1123 formatted datetime string
95
+ def self.to_rfc3339_map(date_time, hash, key)
96
+ return if date_time.nil?
97
+
98
+ hash[key] = {}
99
+ date_time.each do |k, v|
100
+ hash[key][k] =
101
+ if v.is_a?(BaseModel)
102
+ v.to_hash
103
+ else
104
+ v.is_a?(DateTime) ? DateTimeHelper.to_rfc3339(v) : v
105
+ end
106
+ end
107
+ hash[key]
108
+ end
109
+
110
+ # Safely converts an array of DateTime objects into an array of rfc1123 format string
111
+ # @param [Array] an array of DateTime objects
112
+ # @return [Array] an array of rfc1123 formatted datetime string
113
+ def self.to_rfc3339_array(date_time, hash, key)
114
+ return if date_time.nil?
115
+
116
+ hash[key] = date_time.map do |v|
117
+ if v.is_a?(BaseModel)
118
+ v.to_hash
119
+ else
120
+ v.is_a?(DateTime) ? DateTimeHelper.to_rfc3339(v) : v
121
+ end
122
+ end
123
+ end
124
+
125
+ # Safely converts a rfc1123 format string into a DateTime object
126
+ # @param [String] The rfc1123 formatted datetime string
127
+ # @return [DateTime] A DateTime object
128
+ def self.from_rfc1123(date_time)
129
+ DateTime.httpdate(date_time)
130
+ end
131
+
132
+ # Safely converts a unix format string into a DateTime object
133
+ # @param [String] The unix formatted datetime string
134
+ # @return [DateTime] A DateTime object
135
+ def self.from_unix(date_time)
136
+ Time.at(date_time.to_i).utc.to_datetime
137
+ end
138
+
139
+ # Safely converts a rfc3339 format string into a DateTime object
140
+ # @param [String] The rfc3339 formatted datetime string
141
+ # @return [DateTime] A DateTime object
142
+ def self.from_rfc3339(date_time)
143
+ # missing timezone information
144
+ if date_time.end_with?('Z') || date_time.index('+')
145
+ DateTime.rfc3339(date_time)
146
+ else
147
+ DateTime.rfc3339("#{date_time}Z")
148
+ end
149
+ end
150
+ end
151
+ end
@@ -1,8 +1,7 @@
1
1
  module Square
2
2
  # A utility to allow users to set the content-type for files
3
3
  class FileWrapper
4
- attr_reader :content_type
5
- attr_reader :file
4
+ attr_reader :content_type, :file
6
5
 
7
6
  def initialize(file, content_type: 'application/octet-stream')
8
7
  @file = file