simplyq 0.8.0rc

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,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Simplyq
4
+ class SimplyqError < StandardError
5
+ # @return [SimplyqResponse] response object that conveys basic information
6
+ # about the response that triggered the error
7
+ attr_accessor :response
8
+
9
+ attr_reader :message
10
+ attr_reader :code
11
+ attr_reader :error
12
+ attr_reader :http_status
13
+ attr_reader :http_headers
14
+ attr_reader :http_body
15
+ attr_reader :json_body
16
+ attr_reader :request_id
17
+
18
+ def initialize(message = nil, http_status: nil, http_body: nil,
19
+ http_headers: nil, code: nil, error: nil)
20
+ @message = message
21
+ @http_status = http_status
22
+ @http_body = http_body
23
+ @json_body = parse_body
24
+ @http_headers = http_headers || {}
25
+ @code = code
26
+ @request_id = @http_headers["request-id"]
27
+ @error = error
28
+ end
29
+
30
+ def parse_body
31
+ return if @http_body.nil?
32
+
33
+ @json_body = JSON.parse(@http_body, symbolize_names: true)
34
+ rescue JSON::ParserError
35
+ @json_body = nil
36
+ end
37
+
38
+ def to_s
39
+ status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
40
+ id_string = @request_id.nil? ? "" : "(Request #{@request_id}) "
41
+ "#{status_string}#{id_string}#{@message}"
42
+ end
43
+ end
44
+
45
+ # AuthenticationError is raised when invalid credentials are used to connect
46
+ # to SimplyQ's servers.
47
+ class AuthenticationError < SimplyqError
48
+ end
49
+
50
+ # APIConnectionError is raised in the event that the SDK can't connect to
51
+ # SimplyQ's servers. Reasons vary from a network split to bad TLS certs.
52
+ class APIConnectionError < SimplyqError
53
+ end
54
+
55
+ # APIError is a general error, that can be raised when other errors are not
56
+ # appropriate. It can also be used to raise new errors that have been added
57
+ # to the API but not yet added to the SDK or not in the current version.
58
+ class APIError < SimplyqError
59
+ end
60
+
61
+ # InvalidRequestError is raised when a request data is found to be invalid.
62
+ class InvalidRequestError < SimplyqError
63
+ attr_accessor :param
64
+ attr_accessor :errors
65
+
66
+ def initialize(message, param, http_status: nil, http_body: nil,
67
+ http_headers: nil, code: nil, error: nil, errors: [])
68
+ super(message, http_status: http_status, http_body: http_body,
69
+ http_headers: http_headers,
70
+ code: code)
71
+ @param = param
72
+ @errors = errors
73
+ end
74
+ end
75
+
76
+ # PaymentRequiredError is raised when your ccount is in bad standing or
77
+ # exceeded the quota limits on the free plan.
78
+ # Please go to your account's billing page or reach out to support.
79
+ class PaymentRequiredError < SimplyqError
80
+ end
81
+
82
+ # RateLimitError is raised when your account is putting too much pressure on
83
+ # SimplyQ's server. Please back off on request rate, or reach out to support.
84
+ class RateLimitError < SimplyqError
85
+ end
86
+
87
+ # PermissionError is raised when your account does not have the right
88
+ # permissions to perform an action.
89
+ class PermissionError < SimplyqError
90
+ end
91
+
92
+ # SignatureVerificationError is raised when the signature verification for a
93
+ # webhook fails
94
+ class SignatureVerificationError < SimplyqError
95
+ end
96
+ end
@@ -0,0 +1,196 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Simplyq
4
+ module Model
5
+ class Application
6
+ # Unique identifier for the application
7
+ attr_accessor :uid
8
+
9
+ attr_accessor :name
10
+
11
+ attr_accessor :rate_limit
12
+
13
+ attr_accessor :created_at
14
+
15
+ attr_accessor :updated_at
16
+
17
+ attr_accessor :retry_strategy
18
+
19
+ def initialize(attributes = {})
20
+ self.uid = attributes[:uid].to_s if attributes.key?(:uid)
21
+
22
+ self.name = attributes[:name] if attributes.key?(:name)
23
+
24
+ self.rate_limit = attributes[:rate_limit] if attributes.key?(:rate_limit)
25
+
26
+ self.created_at = attributes[:created_at] if attributes.key?(:created_at)
27
+
28
+ self.updated_at = attributes[:updated_at] if attributes.key?(:updated_at)
29
+
30
+ self.retry_strategy = if attributes.key?(:retry_strategy)
31
+ RetryStrategy.from_hash(attributes[:retry_strategy])
32
+ else
33
+ RetryStrategy.new
34
+ end
35
+ end
36
+
37
+ # The model identifier attribute used in list operations
38
+ #
39
+ # @return [Symbol]
40
+ def self.identifier
41
+ :uid
42
+ end
43
+
44
+ # Serializes the object from a hash
45
+ #
46
+ # @param hash [Hash] Hash with the object data
47
+ # @return [Simplyq::Model::Application]
48
+ def self.from_hash(hash)
49
+ return if hash.nil?
50
+
51
+ new(hash)
52
+ end
53
+
54
+ # Show invalid properties with the reasons. Usually used together with valid?
55
+ # @return Array for valid properties with the reasons
56
+ def validation_errors
57
+ invalid_properties = []
58
+ invalid_properties.push('invalid value for "uid", uid cannot be nil.') if @uid.nil?
59
+
60
+ if @uid.to_s.length > 255
61
+ invalid_properties.push('invalid value for "uid", the character length must be smaller than or equal to 255.')
62
+ end
63
+
64
+ if @uid.to_s.empty?
65
+ invalid_properties.push('invalid value for "uid", the character length must be great than or equal to 1.')
66
+ end
67
+
68
+ pattern = Regexp.new(/^[a-zA-Z0-9\-_.]+$/)
69
+ invalid_properties.push("invalid value for \"uid\", must conform to the pattern #{pattern}.") if @uid !~ pattern
70
+
71
+ invalid_properties.push('invalid value for "name", name cannot be nil.') if @name.nil?
72
+
73
+ unless @retry_strategy.valid?
74
+ invalid_properties.concat(@retry_strategy.validation_errors.map { |x| "retry_strategy.#{x}" })
75
+ end
76
+
77
+ invalid_properties
78
+ end
79
+
80
+ # Check to see if all the properties in the model are valid
81
+ def valid?
82
+ validation_errors.empty? && retry_strategy.valid?
83
+ end
84
+
85
+ def [](key)
86
+ instance_variable_get(:"@#{key}")
87
+ end
88
+
89
+ def ==(other)
90
+ return false unless other.is_a?(Application)
91
+
92
+ uid == other.uid &&
93
+ name == other.name &&
94
+ rate_limit == other.rate_limit &&
95
+ created_at == other.created_at &&
96
+ updated_at == other.updated_at &&
97
+ retry_strategy == other.retry_strategy
98
+ end
99
+
100
+ def to_h
101
+ {
102
+ uid: uid,
103
+ name: name,
104
+ rate_limit: rate_limit,
105
+ retry_strategy: retry_strategy.to_h,
106
+ created_at: created_at,
107
+ updated_at: updated_at
108
+ }
109
+ end
110
+
111
+ def to_json(*args)
112
+ to_h.to_json(*args)
113
+ end
114
+
115
+ class RetryStrategy
116
+ # The retry strategy type identifies what algorithm will be used
117
+
118
+ SUPPORTED_TYPES = [
119
+ DEFAULT_TYPE = "base_exponential_backoff_with_deadline",
120
+ "exponential_backoff",
121
+ "exponential_backoff_with_deadline",
122
+ "fixed_wait",
123
+ "fixed_wait_with_deadline"
124
+ ].freeze
125
+
126
+ attr_accessor :type
127
+
128
+ attr_accessor :max_retries
129
+
130
+ attr_accessor :retry_delay
131
+
132
+ attr_accessor :deadline
133
+
134
+ def initialize(attributes = {})
135
+ self.type = DEFAULT_TYPE
136
+ self.type = attributes[:type] if attributes.key?(:type)
137
+
138
+ self.max_retries = attributes[:max_retries] if attributes.key?(:max_retries)
139
+
140
+ self.retry_delay = attributes[:retry_delay] if attributes.key?(:retry_delay)
141
+
142
+ self.deadline = attributes[:deadline] if attributes.key?(:deadline)
143
+ end
144
+
145
+ def self.from_hash(hash)
146
+ return if hash.nil?
147
+
148
+ new(hash)
149
+ end
150
+
151
+ # Show invalid properties with the reasons. Usually used together with valid?
152
+ # @return Array for valid properties with the reasons
153
+ def validation_errors
154
+ invalid_properties = []
155
+
156
+ unless SUPPORTED_TYPES.include?(@type)
157
+ invalid_properties.push("invalid value for \"type\", must be one of #{SUPPORTED_TYPES.join(", ")}.")
158
+ end
159
+
160
+ invalid_properties
161
+ end
162
+
163
+ # Check to see if all the properties in the model are valid
164
+ def valid?
165
+ validation_errors.empty?
166
+ end
167
+
168
+ def [](key)
169
+ instance_variable_get(:"@#{key}")
170
+ end
171
+
172
+ def ==(other)
173
+ return false unless other.is_a?(RetryStrategy)
174
+
175
+ type == other.type &&
176
+ max_retries == other.max_retries &&
177
+ retry_delay == other.retry_delay &&
178
+ deadline == other.deadline
179
+ end
180
+
181
+ def to_h
182
+ {
183
+ type: type,
184
+ max_retries: max_retries,
185
+ retry_delay: retry_delay,
186
+ deadline: deadline
187
+ }
188
+ end
189
+
190
+ def to_json(*args)
191
+ to_h.to_json(*args)
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Simplyq
4
+ module Model
5
+ class DeliveryAttempt
6
+ attr_accessor :id
7
+
8
+ attr_accessor :event_id
9
+
10
+ attr_accessor :endpoint_id
11
+
12
+ # The response of the endpoint when a delivery attempt was made or null if not yet attempted.
13
+ attr_accessor :response
14
+
15
+ # The response code of the endpoint when the event delivery was attempted.
16
+ attr_accessor :response_status_code
17
+
18
+ # The delivery status of the event to the endpoint
19
+ attr_accessor :status
20
+
21
+ # The tigger of the delivery attempt
22
+ attr_accessor :trigger_type
23
+
24
+ # This is the timestamp of when the delivery attempt was made to the endpoint. In case it has not yet been attempted and the status of the delivery attempt is **pending**, then the value of the timestamp will be **null**.
25
+ attr_accessor :attempted_at
26
+
27
+ def initialize(attributes = {})
28
+ self.id = attributes[:id] if attributes.key?(:id)
29
+
30
+ self.event_id = attributes[:event_id] if attributes.key?(:event_id)
31
+
32
+ self.endpoint_id = attributes[:endpoint_id] if attributes.key?(:endpoint_id)
33
+
34
+ self.response = attributes[:response] if attributes.key?(:response)
35
+
36
+ self.response_status_code = attributes[:response_status_code] if attributes.key?(:response_status_code)
37
+
38
+ self.status = attributes[:status] if attributes.key?(:status)
39
+
40
+ self.trigger_type = attributes[:trigger_type] if attributes.key?(:trigger_type)
41
+
42
+ self.attempted_at = attributes[:attempted_at] if attributes.key?(:attempted_at)
43
+ end
44
+
45
+ # The model identifier attribute used in list operations
46
+ #
47
+ # @return [Symbol]
48
+ def self.identifier
49
+ :id
50
+ end
51
+
52
+ # Serializes the object from a hash
53
+ #
54
+ # @param hash [Hash] Hash with the object data
55
+ # @return [Simplyq::Model::Endpoint]
56
+ def self.from_hash(hash)
57
+ return if hash.nil?
58
+
59
+ new(hash)
60
+ end
61
+
62
+ # Show invalid properties with the reasons. Usually used together with valid?
63
+ # @return Array for valid properties with the reasons
64
+ def validation_errors
65
+ []
66
+ end
67
+
68
+ # Check if the model is valid
69
+ # @return true if valid, false otherwise
70
+ def valid?
71
+ validation_errors.empty?
72
+ end
73
+
74
+ def [](key)
75
+ instance_variable_get(:"@#{key}")
76
+ end
77
+
78
+ def ==(other)
79
+ return false if other.nil?
80
+
81
+ self.class == other.class &&
82
+ id == other.id &&
83
+ event_id == other.event_id &&
84
+ endpoint_id == other.endpoint_id &&
85
+ response == other.response &&
86
+ response_status_code == other.response_status_code &&
87
+ status == other.status &&
88
+ trigger_type == other.trigger_type &&
89
+ attempted_at == other.attempted_at
90
+ end
91
+
92
+ def to_h
93
+ {
94
+ id: id,
95
+ event_id: event_id,
96
+ endpoint_id: endpoint_id,
97
+ response: response,
98
+ response_status_code: response_status_code,
99
+ status: status,
100
+ trigger_type: trigger_type,
101
+ attempted_at: attempted_at
102
+ }
103
+ end
104
+
105
+ def to_json(*args)
106
+ to_h.to_json(*args)
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,226 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Simplyq
4
+ module Model
5
+ class Endpoint
6
+ # Unique identifier of the endpoint inside the application.
7
+ attr_accessor :uid
8
+
9
+ attr_accessor :url
10
+
11
+ attr_accessor :version
12
+
13
+ attr_accessor :description
14
+
15
+ attr_accessor :filter_types
16
+
17
+ attr_accessor :topics
18
+
19
+ attr_accessor :active
20
+
21
+ attr_accessor :rate_limit
22
+
23
+ attr_accessor :headers
24
+
25
+ attr_accessor :secret
26
+
27
+ attr_accessor :created_at
28
+
29
+ attr_accessor :updated_at
30
+
31
+ def initialize(attributes = {})
32
+ self.uid = attributes[:uid] if attributes.key?(:uid)
33
+
34
+ self.url = attributes[:url] if attributes.key?(:url)
35
+
36
+ self.version = attributes[:version] if attributes.key?(:version)
37
+
38
+ self.description = attributes[:description] if attributes.key?(:description)
39
+
40
+ self.filter_types = attributes[:filter_types] if attributes.key?(:filter_types)
41
+
42
+ self.topics = attributes[:topics] if attributes.key?(:topics)
43
+
44
+ self.active = attributes[:active] if attributes.key?(:active)
45
+
46
+ self.rate_limit = attributes[:rate_limit] if attributes.key?(:rate_limit)
47
+
48
+ self.headers = if attributes.key?(:headers)
49
+ Headers.from_hash(attributes[:headers])
50
+ else
51
+ Headers.new
52
+ end
53
+
54
+ self.secret = attributes[:secret] if attributes.key?(:secret)
55
+
56
+ self.created_at = attributes[:created_at] if attributes.key?(:created_at)
57
+
58
+ self.updated_at = attributes[:updated_at] if attributes.key?(:updated_at)
59
+ end
60
+
61
+ # The model identifier attribute used in list operations
62
+ #
63
+ # @return [Symbol]
64
+ def self.identifier
65
+ :uid
66
+ end
67
+
68
+ # Serializes the object from a hash
69
+ #
70
+ # @param hash [Hash] Hash with the object data
71
+ # @return [Simplyq::Model::Endpoint]
72
+ def self.from_hash(hash)
73
+ return if hash.nil?
74
+
75
+ new(hash)
76
+ end
77
+
78
+ # Show invalid properties with the reasons. Usually used together with valid?
79
+ # @return Array for valid properties with the reasons
80
+ def validation_errors
81
+ invalid_properties = []
82
+ if !@uid.nil? && @uid.to_s.length > 255
83
+ invalid_properties.push('invalid value for "uid", the character length must be smaller than or equal to 255.')
84
+ end
85
+
86
+ if !@uid.nil? && @uid.to_s.empty?
87
+ invalid_properties.push('invalid value for "uid", the character length must be great than or equal to 1.')
88
+ end
89
+
90
+ pattern = Regexp.new(/^[a-zA-Z0-9\-_.]+$/)
91
+ if !@uid.nil? && @uid !~ pattern
92
+ invalid_properties.push("invalid value for \"uid\", must conform to the pattern #{pattern}.")
93
+ end
94
+
95
+ invalid_properties.push('invalid value for "url", url cannot be nil.') if @url.nil?
96
+
97
+ invalid_properties.push('invalid value for "version", version cannot be nil.') if @version.nil?
98
+
99
+ if !@topics.nil? && @topics.length > 5
100
+ invalid_properties.push('invalid value for "topics", number of items must be less than or equal to 5.')
101
+ end
102
+
103
+ if !@topics.nil? && @topics.empty?
104
+ invalid_properties.push('invalid value for "topics", number of items must be greater than or equal to 1.')
105
+ end
106
+
107
+ if !@rate_limit.nil? && @rate_limit < 1
108
+ invalid_properties.push('invalid value for "rate_limit", must be greater than or equal to 1.')
109
+ end
110
+
111
+ invalid_properties
112
+ end
113
+
114
+ # Check if the model is valid
115
+ # @return true if valid, false otherwise
116
+ def valid?
117
+ validation_errors.empty?
118
+ end
119
+
120
+ def [](key)
121
+ instance_variable_get(:"@#{key}")
122
+ end
123
+
124
+ def ==(other)
125
+ return false if other.nil?
126
+
127
+ self.class == other.class &&
128
+ uid == other.uid &&
129
+ url == other.url &&
130
+ version == other.version &&
131
+ description == other.description &&
132
+ filter_types == other.filter_types &&
133
+ topics == other.topics &&
134
+ active == other.active &&
135
+ rate_limit == other.rate_limit &&
136
+ headers == other.headers &&
137
+ secret == other.secret &&
138
+ created_at == other.created_at &&
139
+ updated_at == other.updated_at
140
+ end
141
+
142
+ def to_h
143
+ {
144
+ uid: uid,
145
+ url: url,
146
+ version: version,
147
+ description: description,
148
+ filter_types: filter_types,
149
+ topics: topics,
150
+ active: active,
151
+ rate_limit: rate_limit,
152
+ headers: headers.to_h,
153
+ secret: secret,
154
+ created_at: created_at,
155
+ updated_at: updated_at
156
+ }
157
+ end
158
+
159
+ def to_json(*args)
160
+ to_h.to_json(*args)
161
+ end
162
+
163
+ class Headers
164
+ attr_accessor :headers
165
+
166
+ attr_accessor :sensitive
167
+
168
+ def initialize(attributes = {})
169
+ self.headers = attributes[:headers] if attributes.key?(:headers)
170
+
171
+ self.sensitive = attributes[:sensitive] if attributes.key?(:sensitive)
172
+ end
173
+
174
+ def has_sensitive?
175
+ !sensitive.nil? && !sensitive.empty?
176
+ end
177
+
178
+ # Serializes the object from a hash
179
+ #
180
+ # @param hash [Hash] Hash with the object data
181
+ # @return [Simplyq::Model::Endpoint::Headers]
182
+ def self.from_hash(hash)
183
+ return if hash.nil?
184
+
185
+ new(hash)
186
+ end
187
+
188
+ # Show invalid properties with the reasons. Usually used together with valid?
189
+ #
190
+ # TODO: Add header object validation
191
+ #
192
+ # @return Array for valid properties with the reasons
193
+ def validation_errors
194
+ []
195
+ end
196
+
197
+ def valid?
198
+ validation_errors.empty?
199
+ end
200
+
201
+ def [](key)
202
+ instance_variable_get(:"@#{key}")
203
+ end
204
+
205
+ def ==(other)
206
+ return false if other.nil?
207
+
208
+ self.class == other.class &&
209
+ headers == other.headers &&
210
+ sensitive == other.sensitive
211
+ end
212
+
213
+ def to_h
214
+ {
215
+ headers: headers,
216
+ sensitive: sensitive
217
+ }
218
+ end
219
+
220
+ def to_json(*args)
221
+ to_h.to_json(*args)
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end