From a1c08752b6d2b043bf75376e13a03bde72b9c355 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 15:54:30 +0200 Subject: [PATCH 01/25] Rename SeamHttpApiError to HttpApiError --- lib/seam/errors.rb | 6 +++--- lib/seam/request.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index 3e90f5c..cea4e6f 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -3,7 +3,7 @@ module Seam module Errors # HTTP - class SeamHttpApiError < StandardError + class HttpApiError < StandardError attr_reader :code, :status_code, :request_id, :data def initialize(error, status_code, request_id) @@ -15,13 +15,13 @@ def initialize(error, status_code, request_id) end end - class SeamHttpUnauthorizedError < SeamHttpApiError + class SeamHttpUnauthorizedError < HttpApiError def initialize(request_id) super({type: "unauthorized", message: "Unauthorized"}, 401, request_id) end end - class SeamHttpInvalidInputError < SeamHttpApiError + class SeamHttpInvalidInputError < HttpApiError attr_reader :validation_errors def initialize(error, status_code, request_id) diff --git a/lib/seam/request.rb b/lib/seam/request.rb index 2512736..d4858aa 100644 --- a/lib/seam/request.rb +++ b/lib/seam/request.rb @@ -52,7 +52,7 @@ def handle_error_response(response, _method, _uri) ) end - raise Errors::SeamHttpApiError.new(error_details, status_code, request_id) + raise Errors::HttpApiError.new(error_details, status_code, request_id) end def build_url(uri) From 7640fdfcd3ef610d6817540fcebb9f7a2fc1559e Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 15:56:16 +0200 Subject: [PATCH 02/25] Rename SeamHttpUnauthorizedError to UnauthorizedError --- lib/seam/errors.rb | 2 +- lib/seam/request.rb | 2 +- spec/request_spec.rb | 4 ++-- spec/seam_client/request_spec.rb | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index cea4e6f..9bccbf7 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -15,7 +15,7 @@ def initialize(error, status_code, request_id) end end - class SeamHttpUnauthorizedError < HttpApiError + class UnauthorizedError < HttpApiError def initialize(request_id) super({type: "unauthorized", message: "Unauthorized"}, 401, request_id) end diff --git a/lib/seam/request.rb b/lib/seam/request.rb index d4858aa..869d6c5 100644 --- a/lib/seam/request.rb +++ b/lib/seam/request.rb @@ -34,7 +34,7 @@ def handle_error_response(response, _method, _uri) status_code = response.status.code request_id = response.headers["seam-request-id"] - raise Errors::SeamHttpUnauthorizedError.new(request_id) if status_code == 401 + raise Errors::UnauthorizedError.new(request_id) if status_code == 401 error = response.parse["error"] || {} error_type = error["type"] || "unknown_error" diff --git a/spec/request_spec.rb b/spec/request_spec.rb index da68090..3c20c65 100644 --- a/spec/request_spec.rb +++ b/spec/request_spec.rb @@ -22,7 +22,7 @@ it "parses the error" do expect { client.health }.to raise_error do |error| - expect(error).to be_a(Seam::Errors::SeamHttpApiError) + expect(error).to be_a(Seam::Errors::HttpApiError) expect(error.message).to eq(message) expect(error.code).to eq(type) expect(error.request_id).to eq(request_id) @@ -48,7 +48,7 @@ it "parses the error" do expect { client.health }.to raise_error do |error| - expect(error).to be_a(Seam::Errors::SeamHttpApiError) + expect(error).to be_a(Seam::Errors::HttpApiError) expect(error.message).to eq(message) expect(error.code).to eq(type) expect(error.request_id).to eq(request_id) diff --git a/spec/seam_client/request_spec.rb b/spec/seam_client/request_spec.rb index 78b891d..6f5a0f9 100644 --- a/spec/seam_client/request_spec.rb +++ b/spec/seam_client/request_spec.rb @@ -11,8 +11,8 @@ .to_return(status: 401, headers: {"seam-request-id" => request_id}) end - it "raises SeamHttpUnauthorizedError" do - expect { seam.devices.list }.to raise_error(Seam::Errors::SeamHttpUnauthorizedError) do |error| + it "raises UnauthorizedError" do + expect { seam.devices.list }.to raise_error(Seam::Errors::UnauthorizedError) do |error| expect(error.message).to eq("Unauthorized") expect(error.request_id).to eq(request_id) end @@ -67,8 +67,8 @@ "seam-request-id" => request_id}) end - it "raises SeamHttpApiError with the correct details" do - expect { seam.devices.list }.to raise_error(Seam::Errors::SeamHttpApiError) do |error| + it "raises HttpApiError with the correct details" do + expect { seam.devices.list }.to raise_error(Seam::Errors::HttpApiError) do |error| expect(error.message).to eq(error_message) expect(error.status_code).to eq(error_status) expect(error.request_id).to eq(request_id) From d99db3bb1988d842e3827ceb66aa2e14ddea8995 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 15:57:34 +0200 Subject: [PATCH 03/25] Rename UnauthorizedError to HttpUnauthorizedError --- lib/seam/errors.rb | 2 +- lib/seam/request.rb | 2 +- spec/seam_client/request_spec.rb | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index 9bccbf7..f33cce4 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -15,7 +15,7 @@ def initialize(error, status_code, request_id) end end - class UnauthorizedError < HttpApiError + class HttpUnauthorizedError < HttpApiError def initialize(request_id) super({type: "unauthorized", message: "Unauthorized"}, 401, request_id) end diff --git a/lib/seam/request.rb b/lib/seam/request.rb index 869d6c5..a21c77e 100644 --- a/lib/seam/request.rb +++ b/lib/seam/request.rb @@ -34,7 +34,7 @@ def handle_error_response(response, _method, _uri) status_code = response.status.code request_id = response.headers["seam-request-id"] - raise Errors::UnauthorizedError.new(request_id) if status_code == 401 + raise Errors::HttpUnauthorizedError.new(request_id) if status_code == 401 error = response.parse["error"] || {} error_type = error["type"] || "unknown_error" diff --git a/spec/seam_client/request_spec.rb b/spec/seam_client/request_spec.rb index 6f5a0f9..07a0d33 100644 --- a/spec/seam_client/request_spec.rb +++ b/spec/seam_client/request_spec.rb @@ -11,8 +11,8 @@ .to_return(status: 401, headers: {"seam-request-id" => request_id}) end - it "raises UnauthorizedError" do - expect { seam.devices.list }.to raise_error(Seam::Errors::UnauthorizedError) do |error| + it "raises HttpUnauthorizedError" do + expect { seam.devices.list }.to raise_error(Seam::Errors::HttpUnauthorizedError) do |error| expect(error.message).to eq("Unauthorized") expect(error.request_id).to eq(request_id) end From cfacfef83344298a5a382ef2a78947406d7dba14 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 15:58:13 +0200 Subject: [PATCH 04/25] Rename SeamHttpInvalidInputError to InvalidInputError --- lib/seam/errors.rb | 2 +- lib/seam/request.rb | 2 +- spec/seam_client/http_error_spec.rb | 16 ++++++++-------- spec/seam_client/request_spec.rb | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index f33cce4..b922b94 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -21,7 +21,7 @@ def initialize(request_id) end end - class SeamHttpInvalidInputError < HttpApiError + class InvalidInputError < HttpApiError attr_reader :validation_errors def initialize(error, status_code, request_id) diff --git a/lib/seam/request.rb b/lib/seam/request.rb index a21c77e..a0a6708 100644 --- a/lib/seam/request.rb +++ b/lib/seam/request.rb @@ -47,7 +47,7 @@ def handle_error_response(response, _method, _uri) if error_type == "invalid_input" error_details["validation_errors"] = error["validation_errors"] - raise Errors::SeamHttpInvalidInputError.new( + raise Errors::InvalidInputError.new( error_details, status_code, request_id ) end diff --git a/spec/seam_client/http_error_spec.rb b/spec/seam_client/http_error_spec.rb index 911e6c3..ba92a15 100644 --- a/spec/seam_client/http_error_spec.rb +++ b/spec/seam_client/http_error_spec.rb @@ -1,6 +1,6 @@ require "spec_helper" -RSpec.describe Seam::Errors::SeamHttpInvalidInputError do +RSpec.describe Seam::Errors::InvalidInputError do let(:api_key) { "seam_apikey1_token" } let(:client) { Seam.new(api_key: api_key) } @@ -19,16 +19,16 @@ } end - it "raises SeamHttpInvalidInputError with correct validation messages" do + it "raises InvalidInputError with correct validation messages" do stub_seam_request(:post, "/devices/list", - error_response, - status: 400).with do |req| + error_response, + status: 400).with do |req| req.body.source == {device_ids: 123}.to_json end expect do client.devices.list(device_ids: 123) - end.to raise_error(Seam::Errors::SeamHttpInvalidInputError) do |error| + end.to raise_error(Seam::Errors::InvalidInputError) do |error| expect(error.code).to eq("invalid_input") expect(error.status_code).to eq(400) expect(error.get_validation_error_messages("device_ids")).to eq(["Expected array, received number"]) @@ -37,14 +37,14 @@ it "returns an empty array for non-existent validation errors" do stub_seam_request(:post, "/devices/list", - error_response, - status: 400).with do |req| + error_response, + status: 400).with do |req| req.body.source == {device_ids: 123}.to_json end begin client.devices.list(device_ids: 123) - rescue Seam::Errors::SeamHttpInvalidInputError => e + rescue Seam::Errors::InvalidInputError => e expect(e.get_validation_error_messages("non_existent_field")).to eq([]) end end diff --git a/spec/seam_client/request_spec.rb b/spec/seam_client/request_spec.rb index 07a0d33..56b55a5 100644 --- a/spec/seam_client/request_spec.rb +++ b/spec/seam_client/request_spec.rb @@ -37,10 +37,10 @@ "seam-request-id" => request_id}) end - it "raises SeamHttpInvalidInputError" do + it "raises InvalidInputError" do expect do seam.devices.get(device_id: "invalid_device_id") - end.to raise_error(Seam::Errors::SeamHttpInvalidInputError) do |error| + end.to raise_error(Seam::Errors::InvalidInputError) do |error| expect(error.message).to eq(error_message) expect(error.status_code).to eq(error_status) expect(error.request_id).to eq(request_id) From 64c7ebdf17b41d05250b554a6ac04be82800ee6b Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 15:59:07 +0200 Subject: [PATCH 05/25] Rename SeamActionAttemptError to ActionAttemptError --- lib/seam/errors.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index b922b94..2f71665 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -36,7 +36,7 @@ def get_validation_error_messages(param_name) end # Action attempt - class SeamActionAttemptError < StandardError + class ActionAttemptError < StandardError attr_reader :action_attempt def initialize(message, action_attempt) @@ -49,7 +49,7 @@ def name end end - class SeamActionAttemptFailedError < SeamActionAttemptError + class SeamActionAttemptFailedError < ActionAttemptError attr_reader :code def initialize(action_attempt) @@ -58,7 +58,7 @@ def initialize(action_attempt) end end - class SeamActionAttemptTimeoutError < SeamActionAttemptError + class SeamActionAttemptTimeoutError < ActionAttemptError def initialize(action_attempt, timeout) message = "Timed out waiting for action attempt after #{timeout}s" super(message, action_attempt) From df81b94cd6dd3b7542b9a5d34e04acb9dc311f8f Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 15:59:29 +0200 Subject: [PATCH 06/25] Rename SeamActionAttemptFailedError to ActionAttemptFailedError --- lib/seam/errors.rb | 2 +- lib/seam/utils/action_attempt_utils.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index 2f71665..66a890c 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -49,7 +49,7 @@ def name end end - class SeamActionAttemptFailedError < ActionAttemptError + class ActionAttemptFailedError < ActionAttemptError attr_reader :code def initialize(action_attempt) diff --git a/lib/seam/utils/action_attempt_utils.rb b/lib/seam/utils/action_attempt_utils.rb index 1e0e44b..8ba4136 100644 --- a/lib/seam/utils/action_attempt_utils.rb +++ b/lib/seam/utils/action_attempt_utils.rb @@ -29,7 +29,7 @@ def self.wait_until_finished(action_attempt, client, timeout: nil, polling_inter action_attempt = update_action_attempt(action_attempt, client) end - raise Errors::SeamActionAttemptFailedError.new(action_attempt) if action_attempt.status == "error" + raise Errors::ActionAttemptFailedError.new(action_attempt) if action_attempt.status == "error" action_attempt end From adabd2189c2c83a11bdb3189ff6d658a8b2464e9 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 15:59:52 +0200 Subject: [PATCH 07/25] More SeamActionAttemptFailedError rename --- spec/seam_client/wait_for_action_attepmt_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/seam_client/wait_for_action_attepmt_spec.rb b/spec/seam_client/wait_for_action_attepmt_spec.rb index a63c00f..651c6e2 100644 --- a/spec/seam_client/wait_for_action_attepmt_spec.rb +++ b/spec/seam_client/wait_for_action_attepmt_spec.rb @@ -142,7 +142,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: true ) - end.to raise_error(Seam::Errors::SeamActionAttemptFailedError) do |error| + end.to raise_error(Seam::Errors::ActionAttemptFailedError) do |error| expect(error.message).to include("Failed") expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq("error") From 4fb1ca3a0a21748a01cd90090058fa160499f0dc Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 16:00:35 +0200 Subject: [PATCH 08/25] Rename SeamActionAttemptTimeoutError to ActionAttemptTimeoutError --- lib/seam/errors.rb | 2 +- lib/seam/utils/action_attempt_utils.rb | 2 +- spec/seam_client/wait_for_action_attepmt_spec.rb | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index 66a890c..7157b0b 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -58,7 +58,7 @@ def initialize(action_attempt) end end - class SeamActionAttemptTimeoutError < ActionAttemptError + class ActionAttemptTimeoutError < ActionAttemptError def initialize(action_attempt, timeout) message = "Timed out waiting for action attempt after #{timeout}s" super(message, action_attempt) diff --git a/lib/seam/utils/action_attempt_utils.rb b/lib/seam/utils/action_attempt_utils.rb index 8ba4136..0131773 100644 --- a/lib/seam/utils/action_attempt_utils.rb +++ b/lib/seam/utils/action_attempt_utils.rb @@ -24,7 +24,7 @@ def self.wait_until_finished(action_attempt, client, timeout: nil, polling_inter sleep(polling_interval) time_waiting += polling_interval - raise Errors::SeamActionAttemptTimeoutError.new(action_attempt, timeout) if time_waiting > timeout + raise Errors::ActionAttemptTimeoutError.new(action_attempt, timeout) if time_waiting > timeout action_attempt = update_action_attempt(action_attempt, client) end diff --git a/spec/seam_client/wait_for_action_attepmt_spec.rb b/spec/seam_client/wait_for_action_attepmt_spec.rb index 651c6e2..bfba54d 100644 --- a/spec/seam_client/wait_for_action_attepmt_spec.rb +++ b/spec/seam_client/wait_for_action_attepmt_spec.rb @@ -119,7 +119,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.1} ) - end.to raise_error(Seam::Errors::SeamActionAttemptTimeoutError) do |error| + end.to raise_error(Seam::Errors::ActionAttemptTimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end @@ -167,7 +167,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.5, polling_interval: 3} ) - end.to raise_error(Seam::Errors::SeamActionAttemptTimeoutError) do |error| + end.to raise_error(Seam::Errors::ActionAttemptTimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end From 88ed48d2836900b8042366ea1a114d28d60dfea7 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Tue, 20 Aug 2024 14:00:59 +0000 Subject: [PATCH 09/25] ci: Format code --- spec/seam_client/http_error_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/seam_client/http_error_spec.rb b/spec/seam_client/http_error_spec.rb index ba92a15..3a5d66c 100644 --- a/spec/seam_client/http_error_spec.rb +++ b/spec/seam_client/http_error_spec.rb @@ -21,8 +21,8 @@ it "raises InvalidInputError with correct validation messages" do stub_seam_request(:post, "/devices/list", - error_response, - status: 400).with do |req| + error_response, + status: 400).with do |req| req.body.source == {device_ids: 123}.to_json end @@ -37,8 +37,8 @@ it "returns an empty array for non-existent validation errors" do stub_seam_request(:post, "/devices/list", - error_response, - status: 400).with do |req| + error_response, + status: 400).with do |req| req.body.source == {device_ids: 123}.to_json end From 62e876197d9754c99a9de2e7cbbe7a4198a652b6 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Tue, 20 Aug 2024 16:19:28 +0200 Subject: [PATCH 10/25] Fix tests, move SeamInvalidTokenError to Http module --- lib/seam/auth.rb | 33 +++---- lib/seam/errors.rb | 97 ++++++++++--------- lib/seam/request.rb | 6 +- lib/seam/utils/action_attempt_utils.rb | 4 +- spec/request_spec.rb | 4 +- spec/seam_client/api_key_spec.rb | 8 +- .../client_multi_workspace_spec.rb | 8 +- spec/seam_client/http_error_spec.rb | 6 +- .../seam_client/personal_access_token_spec.rb | 8 +- spec/seam_client/request_spec.rb | 6 +- .../wait_for_action_attepmt_spec.rb | 6 +- 11 files changed, 93 insertions(+), 93 deletions(-) diff --git a/lib/seam/auth.rb b/lib/seam/auth.rb index 5f30814..7521ec3 100644 --- a/lib/seam/auth.rb +++ b/lib/seam/auth.rb @@ -2,14 +2,9 @@ require_relative "options" require_relative "token" +require_relative "errors" module SeamAuth - class SeamInvalidTokenError < StandardError - def initialize(message) - super("Seam received an invalid token: #{message}") - end - end - def self.get_auth_headers(api_key: nil, personal_access_token: nil, workspace_id: nil) if SeamOptions.seam_http_options_with_api_key?(api_key: api_key, personal_access_token: personal_access_token) return get_auth_headers_for_api_key(api_key) @@ -29,23 +24,23 @@ def self.get_auth_headers(api_key: nil, personal_access_token: nil, workspace_id def self.get_auth_headers_for_api_key(api_key) if SeamAuth.client_session_token?(api_key) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "A Client Session Token cannot be used as an api_key" ) end - raise SeamInvalidTokenError.new("A JWT cannot be used as an api_key") if SeamAuth.jwt?(api_key) + raise Http::SeamInvalidTokenError.new("A JWT cannot be used as an api_key") if SeamAuth.jwt?(api_key) - raise SeamInvalidTokenError.new("An Access Token cannot be used as an api_key") if SeamAuth.access_token?(api_key) + raise Http::SeamInvalidTokenError.new("An Access Token cannot be used as an api_key") if SeamAuth.access_token?(api_key) if SeamAuth.publishable_key?(api_key) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "A Publishable Key cannot be used as an api_key" ) end unless SeamAuth.seam_token?(api_key) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "Unknown or invalid api_key format, expected token to start with #{SeamAuth::TOKEN_PREFIX}" ) end @@ -55,25 +50,25 @@ def self.get_auth_headers_for_api_key(api_key) def self.get_auth_headers_for_personal_access_token(personal_access_token, workspace_id) if SeamAuth.jwt?(personal_access_token) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "A JWT cannot be used as a personal_access_token" ) end if SeamAuth.client_session_token?(personal_access_token) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "A Client Session Token cannot be used as a personal_access_token" ) end if SeamAuth.publishable_key?(personal_access_token) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "A Publishable Key cannot be used as a personal_access_token" ) end unless SeamAuth.access_token?(personal_access_token) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "Unknown or invalid personal_access_token format, expected token to start with #{SeamAuth::ACCESS_TOKEN_PREFIX}" ) end @@ -86,25 +81,25 @@ def self.get_auth_headers_for_personal_access_token(personal_access_token, works def self.get_auth_headers_for_multi_workspace_personal_access_token(personal_access_token) if SeamAuth.jwt?(personal_access_token) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "A JWT cannot be used as a personal_access_token" ) end if SeamAuth.client_session_token?(personal_access_token) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "A Client Session Token cannot be used as a personal_access_token" ) end if SeamAuth.publishable_key?(personal_access_token) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "A Publishable Key cannot be used as a personal_access_token" ) end unless SeamAuth.access_token?(personal_access_token) - raise SeamInvalidTokenError.new( + raise Http::SeamInvalidTokenError.new( "Unknown or invalid personal_access_token format, expected token to start with #{SeamAuth::ACCESS_TOKEN_PREFIX}" ) end diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index 7157b0b..e50a1fd 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -1,68 +1,73 @@ # frozen_string_literal: true module Seam - module Errors - # HTTP - class HttpApiError < StandardError - attr_reader :code, :status_code, :request_id, :data + class HttpApiError < StandardError + attr_reader :code, :status_code, :request_id, :data - def initialize(error, status_code, request_id) - super(error[:message]) - @code = error[:type] - @status_code = status_code - @request_id = request_id - @data = error[:data] - end + def initialize(error, status_code, request_id) + super(error[:message]) + @code = error[:type] + @status_code = status_code + @request_id = request_id + @data = error[:data] end + end - class HttpUnauthorizedError < HttpApiError - def initialize(request_id) - super({type: "unauthorized", message: "Unauthorized"}, 401, request_id) - end + class HttpUnauthorizedError < HttpApiError + def initialize(request_id) + super({type: "unauthorized", message: "Unauthorized"}, 401, request_id) end + end - class InvalidInputError < HttpApiError - attr_reader :validation_errors + class InvalidInputError < HttpApiError + attr_reader :validation_errors - def initialize(error, status_code, request_id) - super(error, status_code, request_id) - @code = "invalid_input" - @validation_errors = error["validation_errors"] || {} - end + def initialize(error, status_code, request_id) + super(error, status_code, request_id) + @code = "invalid_input" + @validation_errors = error["validation_errors"] || {} + end - def get_validation_error_messages(param_name) - @validation_errors.dig(param_name, "_errors") || [] - end + def get_validation_error_messages(param_name) + @validation_errors.dig(param_name, "_errors") || [] end + end - # Action attempt - class ActionAttemptError < StandardError - attr_reader :action_attempt + # Action attempt + class ActionAttemptError < StandardError + attr_reader :action_attempt - def initialize(message, action_attempt) - super(message) - @action_attempt = action_attempt - end + def initialize(message, action_attempt) + super(message) + @action_attempt = action_attempt + end - def name - self.class.name - end + def name + self.class.name end + end - class ActionAttemptFailedError < ActionAttemptError - attr_reader :code + class ActionAttemptFailedError < ActionAttemptError + attr_reader :code - def initialize(action_attempt) - super(action_attempt.error.message, action_attempt) - @code = action_attempt.error.type - end + def initialize(action_attempt) + super(action_attempt.error.message, action_attempt) + @code = action_attempt.error.type end + end + + class ActionAttemptTimeoutError < ActionAttemptError + def initialize(action_attempt, timeout) + message = "Timed out waiting for action attempt after #{timeout}s" + super(message, action_attempt) + end + end +end - class ActionAttemptTimeoutError < ActionAttemptError - def initialize(action_attempt, timeout) - message = "Timed out waiting for action attempt after #{timeout}s" - super(message, action_attempt) - end +module Http + class SeamInvalidTokenError < StandardError + def initialize(message) + super("Seam received an invalid token: #{message}") end end end diff --git a/lib/seam/request.rb b/lib/seam/request.rb index a0a6708..12afd8e 100644 --- a/lib/seam/request.rb +++ b/lib/seam/request.rb @@ -34,7 +34,7 @@ def handle_error_response(response, _method, _uri) status_code = response.status.code request_id = response.headers["seam-request-id"] - raise Errors::HttpUnauthorizedError.new(request_id) if status_code == 401 + raise HttpUnauthorizedError.new(request_id) if status_code == 401 error = response.parse["error"] || {} error_type = error["type"] || "unknown_error" @@ -47,12 +47,12 @@ def handle_error_response(response, _method, _uri) if error_type == "invalid_input" error_details["validation_errors"] = error["validation_errors"] - raise Errors::InvalidInputError.new( + raise InvalidInputError.new( error_details, status_code, request_id ) end - raise Errors::HttpApiError.new(error_details, status_code, request_id) + raise HttpApiError.new(error_details, status_code, request_id) end def build_url(uri) diff --git a/lib/seam/utils/action_attempt_utils.rb b/lib/seam/utils/action_attempt_utils.rb index 0131773..664a601 100644 --- a/lib/seam/utils/action_attempt_utils.rb +++ b/lib/seam/utils/action_attempt_utils.rb @@ -24,12 +24,12 @@ def self.wait_until_finished(action_attempt, client, timeout: nil, polling_inter sleep(polling_interval) time_waiting += polling_interval - raise Errors::ActionAttemptTimeoutError.new(action_attempt, timeout) if time_waiting > timeout + raise ActionAttemptTimeoutError.new(action_attempt, timeout) if time_waiting > timeout action_attempt = update_action_attempt(action_attempt, client) end - raise Errors::ActionAttemptFailedError.new(action_attempt) if action_attempt.status == "error" + raise ActionAttemptFailedError.new(action_attempt) if action_attempt.status == "error" action_attempt end diff --git a/spec/request_spec.rb b/spec/request_spec.rb index 3c20c65..a6aaa68 100644 --- a/spec/request_spec.rb +++ b/spec/request_spec.rb @@ -22,7 +22,7 @@ it "parses the error" do expect { client.health }.to raise_error do |error| - expect(error).to be_a(Seam::Errors::HttpApiError) + expect(error).to be_a(Seam::HttpApiError) expect(error.message).to eq(message) expect(error.code).to eq(type) expect(error.request_id).to eq(request_id) @@ -48,7 +48,7 @@ it "parses the error" do expect { client.health }.to raise_error do |error| - expect(error).to be_a(Seam::Errors::HttpApiError) + expect(error).to be_a(Seam::HttpApiError) expect(error.message).to eq(message) expect(error.code).to eq(type) expect(error.request_id).to eq(request_id) diff --git a/spec/seam_client/api_key_spec.rb b/spec/seam_client/api_key_spec.rb index 2aec3dd..b21342b 100644 --- a/spec/seam_client/api_key_spec.rb +++ b/spec/seam_client/api_key_spec.rb @@ -24,19 +24,19 @@ it "checks api key format" do expect do Seam.from_api_key("some-invalid-key-format") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) + end.to raise_error(Http::SeamInvalidTokenError, /Unknown/) expect do Seam.from_api_key("ey") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) + end.to raise_error(Http::SeamInvalidTokenError, /JWT/) expect do Seam.from_api_key("seam_cst_token") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Client Session Token/) + end.to raise_error(Http::SeamInvalidTokenError, /Client Session Token/) expect do Seam.from_api_key("seam_at") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Access Token/) + end.to raise_error(Http::SeamInvalidTokenError, /Access Token/) end end end diff --git a/spec/seam_client/client_multi_workspace_spec.rb b/spec/seam_client/client_multi_workspace_spec.rb index b9173bd..afa8426 100644 --- a/spec/seam_client/client_multi_workspace_spec.rb +++ b/spec/seam_client/client_multi_workspace_spec.rb @@ -39,10 +39,10 @@ describe "token format validation" do it "raises SeamInvalidTokenError for invalid token formats" do - expect { described_class.from_personal_access_token("invalid_token") }.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) - expect { described_class.from_personal_access_token("seam_apikey_token") }.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) - expect { described_class.from_personal_access_token("seam_cst") }.to raise_error(SeamAuth::SeamInvalidTokenError, /Client Session Token/) - expect { described_class.from_personal_access_token("ey") }.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) + expect { described_class.from_personal_access_token("invalid_token") }.to raise_error(Http::SeamInvalidTokenError, /Unknown/) + expect { described_class.from_personal_access_token("seam_apikey_token") }.to raise_error(Http::SeamInvalidTokenError, /Unknown/) + expect { described_class.from_personal_access_token("seam_cst") }.to raise_error(Http::SeamInvalidTokenError, /Client Session Token/) + expect { described_class.from_personal_access_token("ey") }.to raise_error(Http::SeamInvalidTokenError, /JWT/) end end end diff --git a/spec/seam_client/http_error_spec.rb b/spec/seam_client/http_error_spec.rb index 3a5d66c..e6ee6ff 100644 --- a/spec/seam_client/http_error_spec.rb +++ b/spec/seam_client/http_error_spec.rb @@ -1,6 +1,6 @@ require "spec_helper" -RSpec.describe Seam::Errors::InvalidInputError do +RSpec.describe Seam::InvalidInputError do let(:api_key) { "seam_apikey1_token" } let(:client) { Seam.new(api_key: api_key) } @@ -28,7 +28,7 @@ expect do client.devices.list(device_ids: 123) - end.to raise_error(Seam::Errors::InvalidInputError) do |error| + end.to raise_error(Seam::InvalidInputError) do |error| expect(error.code).to eq("invalid_input") expect(error.status_code).to eq(400) expect(error.get_validation_error_messages("device_ids")).to eq(["Expected array, received number"]) @@ -44,7 +44,7 @@ begin client.devices.list(device_ids: 123) - rescue Seam::Errors::InvalidInputError => e + rescue Seam::InvalidInputError => e expect(e.get_validation_error_messages("non_existent_field")).to eq([]) end end diff --git a/spec/seam_client/personal_access_token_spec.rb b/spec/seam_client/personal_access_token_spec.rb index 1bfe738..d11510e 100644 --- a/spec/seam_client/personal_access_token_spec.rb +++ b/spec/seam_client/personal_access_token_spec.rb @@ -7,19 +7,19 @@ it "raises error for invalid personal access token formats" do expect do Seam.from_personal_access_token("some-invalid-key-format", workspace_id) - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) + end.to raise_error(Http::SeamInvalidTokenError, /Unknown/) expect do Seam.from_personal_access_token("seam_apikey_token", workspace_id) - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) + end.to raise_error(Http::SeamInvalidTokenError, /Unknown/) expect do Seam.from_personal_access_token("seam_cst", workspace_id) - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Client Session Token/) + end.to raise_error(Http::SeamInvalidTokenError, /Client Session Token/) expect do Seam.from_personal_access_token("ey", workspace_id) - end.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) + end.to raise_error(Http::SeamInvalidTokenError, /JWT/) end end end diff --git a/spec/seam_client/request_spec.rb b/spec/seam_client/request_spec.rb index 56b55a5..1670316 100644 --- a/spec/seam_client/request_spec.rb +++ b/spec/seam_client/request_spec.rb @@ -12,7 +12,7 @@ end it "raises HttpUnauthorizedError" do - expect { seam.devices.list }.to raise_error(Seam::Errors::HttpUnauthorizedError) do |error| + expect { seam.devices.list }.to raise_error(Seam::HttpUnauthorizedError) do |error| expect(error.message).to eq("Unauthorized") expect(error.request_id).to eq(request_id) end @@ -40,7 +40,7 @@ it "raises InvalidInputError" do expect do seam.devices.get(device_id: "invalid_device_id") - end.to raise_error(Seam::Errors::InvalidInputError) do |error| + end.to raise_error(Seam::InvalidInputError) do |error| expect(error.message).to eq(error_message) expect(error.status_code).to eq(error_status) expect(error.request_id).to eq(request_id) @@ -68,7 +68,7 @@ end it "raises HttpApiError with the correct details" do - expect { seam.devices.list }.to raise_error(Seam::Errors::HttpApiError) do |error| + expect { seam.devices.list }.to raise_error(Seam::HttpApiError) do |error| expect(error.message).to eq(error_message) expect(error.status_code).to eq(error_status) expect(error.request_id).to eq(request_id) diff --git a/spec/seam_client/wait_for_action_attepmt_spec.rb b/spec/seam_client/wait_for_action_attepmt_spec.rb index bfba54d..00103bc 100644 --- a/spec/seam_client/wait_for_action_attepmt_spec.rb +++ b/spec/seam_client/wait_for_action_attepmt_spec.rb @@ -119,7 +119,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.1} ) - end.to raise_error(Seam::Errors::ActionAttemptTimeoutError) do |error| + end.to raise_error(Seam::ActionAttemptTimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end @@ -142,7 +142,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: true ) - end.to raise_error(Seam::Errors::ActionAttemptFailedError) do |error| + end.to raise_error(Seam::ActionAttemptFailedError) do |error| expect(error.message).to include("Failed") expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq("error") @@ -167,7 +167,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.5, polling_interval: 3} ) - end.to raise_error(Seam::Errors::ActionAttemptTimeoutError) do |error| + end.to raise_error(Seam::ActionAttemptTimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end From db2129ab0039124499bfa2cb07e4c883afba1740 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 19 Sep 2024 16:00:51 +0200 Subject: [PATCH 11/25] Rename Http to Client and HttptMultiWorkspace to ClientMultiWorkspace --- lib/seam/client.rb | 44 ++++++++++++++++++ ...workspace.rb => client_multi_workspace.rb} | 2 +- lib/seam/http.rb | 45 +++---------------- spec/request_spec.rb | 2 +- spec/seam_client/api_key_spec.rb | 2 +- .../client_multi_workspace_spec.rb | 18 +++++--- spec/seam_client/env_spec.rb | 2 +- spec/seam_client/init_seam_spec.rb | 2 +- .../seam_client/personal_access_token_spec.rb | 2 +- spec/seam_client/request_spec.rb | 2 +- .../wait_for_action_attepmt_spec.rb | 2 +- 11 files changed, 71 insertions(+), 52 deletions(-) create mode 100644 lib/seam/client.rb rename lib/seam/{http_multi_workspace.rb => client_multi_workspace.rb} (98%) diff --git a/lib/seam/client.rb b/lib/seam/client.rb new file mode 100644 index 0000000..33ea5e7 --- /dev/null +++ b/lib/seam/client.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require_relative "parse_options" +require_relative "routes/routes" + +module Seam + class Client + include Seam::Routes + + attr_accessor :defaults + + def initialize(api_key: nil, personal_access_token: nil, workspace_id: nil, endpoint: nil, + wait_for_action_attempt: true, debug: false) + options = SeamOptions.parse_options(api_key: api_key, personal_access_token: personal_access_token, workspace_id: workspace_id, endpoint: endpoint) + @endpoint = options[:endpoint] + @auth_headers = options[:auth_headers] + @debug = debug + @wait_for_action_attempt = wait_for_action_attempt + @defaults = Seam::DeepHashAccessor.new({"wait_for_action_attempt" => wait_for_action_attempt}) + end + + def lts_version + Seam::LTS_VERSION + end + + def request_seam_object(method, path, klass, inner_object, config = {}) + response = request_seam(method, path, config) + + data = response[inner_object] + + klass.load_from_response(data, self) + end + + def request_seam(method, path, config = {}) + Seam::Request.new( + auth_headers: @auth_headers, + endpoint: @endpoint, + debug: @debug + ).perform( + method, path, config + ) + end + end +end diff --git a/lib/seam/http_multi_workspace.rb b/lib/seam/client_multi_workspace.rb similarity index 98% rename from lib/seam/http_multi_workspace.rb rename to lib/seam/client_multi_workspace.rb index dfe2569..d863fd4 100644 --- a/lib/seam/http_multi_workspace.rb +++ b/lib/seam/client_multi_workspace.rb @@ -5,7 +5,7 @@ require_relative "auth" module Seam - class HttpMultiWorkspace + class ClientMultiWorkspace attr_reader :wait_for_action_attempt, :defaults def initialize(personal_access_token:, endpoint: nil, wait_for_action_attempt: true) diff --git a/lib/seam/http.rb b/lib/seam/http.rb index e4d66f3..c2db985 100644 --- a/lib/seam/http.rb +++ b/lib/seam/http.rb @@ -1,44 +1,11 @@ # frozen_string_literal: true -require_relative "parse_options" -require_relative "routes/routes" - module Seam - class Http - include Seam::Routes - - attr_accessor :defaults - - def initialize(api_key: nil, personal_access_token: nil, workspace_id: nil, endpoint: nil, - wait_for_action_attempt: true, debug: false) - options = SeamOptions.parse_options(api_key: api_key, personal_access_token: personal_access_token, workspace_id: workspace_id, endpoint: endpoint) - @endpoint = options[:endpoint] - @auth_headers = options[:auth_headers] - @debug = debug - @wait_for_action_attempt = wait_for_action_attempt - @defaults = Seam::DeepHashAccessor.new({"wait_for_action_attempt" => wait_for_action_attempt}) - end - - def lts_version - Seam::LTS_VERSION - end - - def request_seam_object(method, path, klass, inner_object, config = {}) - response = request_seam(method, path, config) - - data = response[inner_object] - - klass.load_from_response(data, self) - end - - def request_seam(method, path, config = {}) - Seam::Request.new( - auth_headers: @auth_headers, - endpoint: @endpoint, - debug: @debug - ).perform( - method, path, config - ) + module Http + class SeamInvalidTokenError < StandardError + def initialize(message) + super("Seam received an invalid token: #{message}") + end end end -end +end \ No newline at end of file diff --git a/spec/request_spec.rb b/spec/request_spec.rb index a6aaa68..68120ee 100644 --- a/spec/request_spec.rb +++ b/spec/request_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Http do +RSpec.describe Seam::Client do let(:client) { Seam.new(api_key: "seam_some_api_key") } describe "Exceptions" do diff --git a/spec/seam_client/api_key_spec.rb b/spec/seam_client/api_key_spec.rb index b21342b..7d64021 100644 --- a/spec/seam_client/api_key_spec.rb +++ b/spec/seam_client/api_key_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Http do +RSpec.describe Seam::Client do let(:client) { Seam.new(api_key: "seam_some_api_key") } let(:device_hash) { {device_id: "123"} } diff --git a/spec/seam_client/client_multi_workspace_spec.rb b/spec/seam_client/client_multi_workspace_spec.rb index afa8426..3edeea7 100644 --- a/spec/seam_client/client_multi_workspace_spec.rb +++ b/spec/seam_client/client_multi_workspace_spec.rb @@ -2,14 +2,14 @@ require "spec_helper" -RSpec.describe Seam::HttpMultiWorkspace do +RSpec.describe Seam::ClientMultiWorkspace do let(:personal_access_token) { "seam_at_12345" } let(:endpoint) { "https://example.com/api" } let(:client) { described_class.from_personal_access_token(personal_access_token, endpoint: endpoint) } describe ".from_personal_access_token" do it "creates a new instance with the given token and endpoint" do - expect(client).to be_a(Seam::HttpMultiWorkspace) + expect(client).to be_a(Seam::ClientMultiWorkspace) expect(client.instance_variable_get(:@auth_headers)).to include("authorization" => "Bearer #{personal_access_token}") expect(client.instance_variable_get(:@endpoint)).to eq(endpoint) end @@ -39,9 +39,17 @@ describe "token format validation" do it "raises SeamInvalidTokenError for invalid token formats" do - expect { described_class.from_personal_access_token("invalid_token") }.to raise_error(Http::SeamInvalidTokenError, /Unknown/) - expect { described_class.from_personal_access_token("seam_apikey_token") }.to raise_error(Http::SeamInvalidTokenError, /Unknown/) - expect { described_class.from_personal_access_token("seam_cst") }.to raise_error(Http::SeamInvalidTokenError, /Client Session Token/) + expect do + described_class.from_personal_access_token("invalid_token") + end.to raise_error(Http::SeamInvalidTokenError, /Unknown/) + expect do + described_class.from_personal_access_token("seam_apikey_token") + end.to raise_error(Http::SeamInvalidTokenError, + /Unknown/) + expect do + described_class.from_personal_access_token("seam_cst") + end.to raise_error(Http::SeamInvalidTokenError, + /Client Session Token/) expect { described_class.from_personal_access_token("ey") }.to raise_error(Http::SeamInvalidTokenError, /JWT/) end end diff --git a/spec/seam_client/env_spec.rb b/spec/seam_client/env_spec.rb index 1c1baec..f237dee 100644 --- a/spec/seam_client/env_spec.rb +++ b/spec/seam_client/env_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Http do +RSpec.describe Seam::Client do before(:each) do cleanup_env end diff --git a/spec/seam_client/init_seam_spec.rb b/spec/seam_client/init_seam_spec.rb index 3d34255..8092fed 100644 --- a/spec/seam_client/init_seam_spec.rb +++ b/spec/seam_client/init_seam_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Http do +RSpec.describe Seam::Client do let(:seam) { Seam.new(api_key: "seam_some_api_key") } describe "#initialize" do diff --git a/spec/seam_client/personal_access_token_spec.rb b/spec/seam_client/personal_access_token_spec.rb index d11510e..f260308 100644 --- a/spec/seam_client/personal_access_token_spec.rb +++ b/spec/seam_client/personal_access_token_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Http do +RSpec.describe Seam::Client do let(:workspace_id) { "e4203e37-e569-4a5a-bfb7-e3e8de66161d" } describe "#from_personal_access_token" do diff --git a/spec/seam_client/request_spec.rb b/spec/seam_client/request_spec.rb index 1670316..33be1f4 100644 --- a/spec/seam_client/request_spec.rb +++ b/spec/seam_client/request_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Http do +RSpec.describe Seam::Client do let(:seam) { Seam.new(api_key: "seam_some_api_key") } let(:request_id) { "request_id_1234" } diff --git a/spec/seam_client/wait_for_action_attepmt_spec.rb b/spec/seam_client/wait_for_action_attepmt_spec.rb index 00103bc..dd03bab 100644 --- a/spec/seam_client/wait_for_action_attepmt_spec.rb +++ b/spec/seam_client/wait_for_action_attepmt_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe Seam::Http do +RSpec.describe Seam::Client do let(:api_key) { "seam_apikey1_token" } let(:device_id) { "august_device_1" } From b0d8526fd0613563d1ecf43d403e02da8b6326c5 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 19 Sep 2024 16:02:04 +0200 Subject: [PATCH 12/25] Leftover renames --- lib/seam/errors.rb | 8 -------- spec/spec_helper.rb | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index e50a1fd..cc3187e 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -63,11 +63,3 @@ def initialize(action_attempt, timeout) end end end - -module Http - class SeamInvalidTokenError < StandardError - def initialize(message) - super("Seam received an invalid token: #{message}") - end - end -end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f55a037..f31e4f0 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -8,7 +8,7 @@ require "seam" require "seam/auth" require "seam/options" -require "seam/http_multi_workspace" +require "seam/client_multi_workspace" require "seam/deep_hash_accessor" require "webmock/rspec" From 5f69fd566c47de4a66a8895d5fd2c0c487ec02be Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 19 Sep 2024 16:02:35 +0200 Subject: [PATCH 13/25] Renames in lib/seam.rb --- lib/seam.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/seam.rb b/lib/seam.rb index ffbe920..1c42229 100644 --- a/lib/seam.rb +++ b/lib/seam.rb @@ -5,8 +5,8 @@ require_relative "seam/default_endpoint" require_relative "seam/request" require_relative "seam/logger" -require_relative "seam/http" -require_relative "seam/http_multi_workspace" +require_relative "seam/client" +require_relative "seam/client_multi_workspace" require_relative "seam/base_client" require_relative "seam/base_resource" require_relative "seam/errors" @@ -16,7 +16,7 @@ module Seam def self.new(**args) - Http.new(**args) + Client.new(**args) end def self.from_api_key(api_key, endpoint: nil, wait_for_action_attempt: false, debug: false) From 84b1b3c6880818f85b01449e6ed8c273346ac2ab Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 19 Sep 2024 16:11:36 +0200 Subject: [PATCH 14/25] Move http errors to http module, fix specs --- lib/seam/auth.rb | 33 ++++++++++-------- lib/seam/errors.rb | 33 ------------------ lib/seam/http.rb | 34 ++++++++++++++++--- lib/seam/request.rb | 6 ++-- spec/request_spec.rb | 4 +-- spec/seam_client/api_key_spec.rb | 8 ++--- .../client_multi_workspace_spec.rb | 12 +++---- spec/seam_client/http_error_spec.rb | 6 ++-- .../seam_client/personal_access_token_spec.rb | 8 ++--- spec/seam_client/request_spec.rb | 6 ++-- spec/spec_helper.rb | 1 + 11 files changed, 75 insertions(+), 76 deletions(-) diff --git a/lib/seam/auth.rb b/lib/seam/auth.rb index 7521ec3..5f30814 100644 --- a/lib/seam/auth.rb +++ b/lib/seam/auth.rb @@ -2,9 +2,14 @@ require_relative "options" require_relative "token" -require_relative "errors" module SeamAuth + class SeamInvalidTokenError < StandardError + def initialize(message) + super("Seam received an invalid token: #{message}") + end + end + def self.get_auth_headers(api_key: nil, personal_access_token: nil, workspace_id: nil) if SeamOptions.seam_http_options_with_api_key?(api_key: api_key, personal_access_token: personal_access_token) return get_auth_headers_for_api_key(api_key) @@ -24,23 +29,23 @@ def self.get_auth_headers(api_key: nil, personal_access_token: nil, workspace_id def self.get_auth_headers_for_api_key(api_key) if SeamAuth.client_session_token?(api_key) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "A Client Session Token cannot be used as an api_key" ) end - raise Http::SeamInvalidTokenError.new("A JWT cannot be used as an api_key") if SeamAuth.jwt?(api_key) + raise SeamInvalidTokenError.new("A JWT cannot be used as an api_key") if SeamAuth.jwt?(api_key) - raise Http::SeamInvalidTokenError.new("An Access Token cannot be used as an api_key") if SeamAuth.access_token?(api_key) + raise SeamInvalidTokenError.new("An Access Token cannot be used as an api_key") if SeamAuth.access_token?(api_key) if SeamAuth.publishable_key?(api_key) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "A Publishable Key cannot be used as an api_key" ) end unless SeamAuth.seam_token?(api_key) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "Unknown or invalid api_key format, expected token to start with #{SeamAuth::TOKEN_PREFIX}" ) end @@ -50,25 +55,25 @@ def self.get_auth_headers_for_api_key(api_key) def self.get_auth_headers_for_personal_access_token(personal_access_token, workspace_id) if SeamAuth.jwt?(personal_access_token) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "A JWT cannot be used as a personal_access_token" ) end if SeamAuth.client_session_token?(personal_access_token) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "A Client Session Token cannot be used as a personal_access_token" ) end if SeamAuth.publishable_key?(personal_access_token) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "A Publishable Key cannot be used as a personal_access_token" ) end unless SeamAuth.access_token?(personal_access_token) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "Unknown or invalid personal_access_token format, expected token to start with #{SeamAuth::ACCESS_TOKEN_PREFIX}" ) end @@ -81,25 +86,25 @@ def self.get_auth_headers_for_personal_access_token(personal_access_token, works def self.get_auth_headers_for_multi_workspace_personal_access_token(personal_access_token) if SeamAuth.jwt?(personal_access_token) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "A JWT cannot be used as a personal_access_token" ) end if SeamAuth.client_session_token?(personal_access_token) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "A Client Session Token cannot be used as a personal_access_token" ) end if SeamAuth.publishable_key?(personal_access_token) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "A Publishable Key cannot be used as a personal_access_token" ) end unless SeamAuth.access_token?(personal_access_token) - raise Http::SeamInvalidTokenError.new( + raise SeamInvalidTokenError.new( "Unknown or invalid personal_access_token format, expected token to start with #{SeamAuth::ACCESS_TOKEN_PREFIX}" ) end diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index cc3187e..1f3f68f 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -1,39 +1,6 @@ # frozen_string_literal: true module Seam - class HttpApiError < StandardError - attr_reader :code, :status_code, :request_id, :data - - def initialize(error, status_code, request_id) - super(error[:message]) - @code = error[:type] - @status_code = status_code - @request_id = request_id - @data = error[:data] - end - end - - class HttpUnauthorizedError < HttpApiError - def initialize(request_id) - super({type: "unauthorized", message: "Unauthorized"}, 401, request_id) - end - end - - class InvalidInputError < HttpApiError - attr_reader :validation_errors - - def initialize(error, status_code, request_id) - super(error, status_code, request_id) - @code = "invalid_input" - @validation_errors = error["validation_errors"] || {} - end - - def get_validation_error_messages(param_name) - @validation_errors.dig(param_name, "_errors") || [] - end - end - - # Action attempt class ActionAttemptError < StandardError attr_reader :action_attempt diff --git a/lib/seam/http.rb b/lib/seam/http.rb index c2db985..efad275 100644 --- a/lib/seam/http.rb +++ b/lib/seam/http.rb @@ -2,10 +2,36 @@ module Seam module Http - class SeamInvalidTokenError < StandardError - def initialize(message) - super("Seam received an invalid token: #{message}") + class HttpApiError < StandardError + attr_reader :code, :status_code, :request_id, :data + + def initialize(error, status_code, request_id) + super(error[:message]) + @code = error[:type] + @status_code = status_code + @request_id = request_id + @data = error[:data] + end + end + + class HttpUnauthorizedError < HttpApiError + def initialize(request_id) + super({type: "unauthorized", message: "Unauthorized"}, 401, request_id) + end + end + + class InvalidInputError < HttpApiError + attr_reader :validation_errors + + def initialize(error, status_code, request_id) + super(error, status_code, request_id) + @code = "invalid_input" + @validation_errors = error["validation_errors"] || {} + end + + def get_validation_error_messages(param_name) + @validation_errors.dig(param_name, "_errors") || [] end end end -end \ No newline at end of file +end diff --git a/lib/seam/request.rb b/lib/seam/request.rb index 12afd8e..c861516 100644 --- a/lib/seam/request.rb +++ b/lib/seam/request.rb @@ -34,7 +34,7 @@ def handle_error_response(response, _method, _uri) status_code = response.status.code request_id = response.headers["seam-request-id"] - raise HttpUnauthorizedError.new(request_id) if status_code == 401 + raise Http::HttpUnauthorizedError.new(request_id) if status_code == 401 error = response.parse["error"] || {} error_type = error["type"] || "unknown_error" @@ -47,12 +47,12 @@ def handle_error_response(response, _method, _uri) if error_type == "invalid_input" error_details["validation_errors"] = error["validation_errors"] - raise InvalidInputError.new( + raise Http::InvalidInputError.new( error_details, status_code, request_id ) end - raise HttpApiError.new(error_details, status_code, request_id) + raise Http::HttpApiError.new(error_details, status_code, request_id) end def build_url(uri) diff --git a/spec/request_spec.rb b/spec/request_spec.rb index 68120ee..5332171 100644 --- a/spec/request_spec.rb +++ b/spec/request_spec.rb @@ -22,7 +22,7 @@ it "parses the error" do expect { client.health }.to raise_error do |error| - expect(error).to be_a(Seam::HttpApiError) + expect(error).to be_a(Seam::Http::HttpApiError) expect(error.message).to eq(message) expect(error.code).to eq(type) expect(error.request_id).to eq(request_id) @@ -48,7 +48,7 @@ it "parses the error" do expect { client.health }.to raise_error do |error| - expect(error).to be_a(Seam::HttpApiError) + expect(error).to be_a(Seam::Http::HttpApiError) expect(error.message).to eq(message) expect(error.code).to eq(type) expect(error.request_id).to eq(request_id) diff --git a/spec/seam_client/api_key_spec.rb b/spec/seam_client/api_key_spec.rb index 7d64021..f3a663a 100644 --- a/spec/seam_client/api_key_spec.rb +++ b/spec/seam_client/api_key_spec.rb @@ -24,19 +24,19 @@ it "checks api key format" do expect do Seam.from_api_key("some-invalid-key-format") - end.to raise_error(Http::SeamInvalidTokenError, /Unknown/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) expect do Seam.from_api_key("ey") - end.to raise_error(Http::SeamInvalidTokenError, /JWT/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) expect do Seam.from_api_key("seam_cst_token") - end.to raise_error(Http::SeamInvalidTokenError, /Client Session Token/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /Client Session Token/) expect do Seam.from_api_key("seam_at") - end.to raise_error(Http::SeamInvalidTokenError, /Access Token/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /Access Token/) end end end diff --git a/spec/seam_client/client_multi_workspace_spec.rb b/spec/seam_client/client_multi_workspace_spec.rb index 3edeea7..e98ff8f 100644 --- a/spec/seam_client/client_multi_workspace_spec.rb +++ b/spec/seam_client/client_multi_workspace_spec.rb @@ -41,16 +41,16 @@ it "raises SeamInvalidTokenError for invalid token formats" do expect do described_class.from_personal_access_token("invalid_token") - end.to raise_error(Http::SeamInvalidTokenError, /Unknown/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) expect do described_class.from_personal_access_token("seam_apikey_token") - end.to raise_error(Http::SeamInvalidTokenError, - /Unknown/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, + /Unknown/) expect do described_class.from_personal_access_token("seam_cst") - end.to raise_error(Http::SeamInvalidTokenError, - /Client Session Token/) - expect { described_class.from_personal_access_token("ey") }.to raise_error(Http::SeamInvalidTokenError, /JWT/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, + /Client Session Token/) + expect { described_class.from_personal_access_token("ey") }.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) end end end diff --git a/spec/seam_client/http_error_spec.rb b/spec/seam_client/http_error_spec.rb index e6ee6ff..5a32eac 100644 --- a/spec/seam_client/http_error_spec.rb +++ b/spec/seam_client/http_error_spec.rb @@ -1,6 +1,6 @@ require "spec_helper" -RSpec.describe Seam::InvalidInputError do +RSpec.describe Seam::Http::InvalidInputError do let(:api_key) { "seam_apikey1_token" } let(:client) { Seam.new(api_key: api_key) } @@ -28,7 +28,7 @@ expect do client.devices.list(device_ids: 123) - end.to raise_error(Seam::InvalidInputError) do |error| + end.to raise_error(Seam::Http::InvalidInputError) do |error| expect(error.code).to eq("invalid_input") expect(error.status_code).to eq(400) expect(error.get_validation_error_messages("device_ids")).to eq(["Expected array, received number"]) @@ -44,7 +44,7 @@ begin client.devices.list(device_ids: 123) - rescue Seam::InvalidInputError => e + rescue Seam::Http::InvalidInputError => e expect(e.get_validation_error_messages("non_existent_field")).to eq([]) end end diff --git a/spec/seam_client/personal_access_token_spec.rb b/spec/seam_client/personal_access_token_spec.rb index f260308..834d221 100644 --- a/spec/seam_client/personal_access_token_spec.rb +++ b/spec/seam_client/personal_access_token_spec.rb @@ -7,19 +7,19 @@ it "raises error for invalid personal access token formats" do expect do Seam.from_personal_access_token("some-invalid-key-format", workspace_id) - end.to raise_error(Http::SeamInvalidTokenError, /Unknown/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) expect do Seam.from_personal_access_token("seam_apikey_token", workspace_id) - end.to raise_error(Http::SeamInvalidTokenError, /Unknown/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) expect do Seam.from_personal_access_token("seam_cst", workspace_id) - end.to raise_error(Http::SeamInvalidTokenError, /Client Session Token/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /Client Session Token/) expect do Seam.from_personal_access_token("ey", workspace_id) - end.to raise_error(Http::SeamInvalidTokenError, /JWT/) + end.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) end end end diff --git a/spec/seam_client/request_spec.rb b/spec/seam_client/request_spec.rb index 33be1f4..e1b099f 100644 --- a/spec/seam_client/request_spec.rb +++ b/spec/seam_client/request_spec.rb @@ -12,7 +12,7 @@ end it "raises HttpUnauthorizedError" do - expect { seam.devices.list }.to raise_error(Seam::HttpUnauthorizedError) do |error| + expect { seam.devices.list }.to raise_error(Seam::Http::HttpUnauthorizedError) do |error| expect(error.message).to eq("Unauthorized") expect(error.request_id).to eq(request_id) end @@ -40,7 +40,7 @@ it "raises InvalidInputError" do expect do seam.devices.get(device_id: "invalid_device_id") - end.to raise_error(Seam::InvalidInputError) do |error| + end.to raise_error(Seam::Http::InvalidInputError) do |error| expect(error.message).to eq(error_message) expect(error.status_code).to eq(error_status) expect(error.request_id).to eq(request_id) @@ -68,7 +68,7 @@ end it "raises HttpApiError with the correct details" do - expect { seam.devices.list }.to raise_error(Seam::HttpApiError) do |error| + expect { seam.devices.list }.to raise_error(Seam::Http::HttpApiError) do |error| expect(error.message).to eq(error_message) expect(error.status_code).to eq(error_status) expect(error.request_id).to eq(request_id) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f31e4f0..1386279 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,6 +6,7 @@ SimpleCov.start require "seam" +require "seam/http" require "seam/auth" require "seam/options" require "seam/client_multi_workspace" From ec8edae52cb0b0bb5743fa617c52769c103b48c5 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 19 Sep 2024 16:20:41 +0200 Subject: [PATCH 15/25] Put action attempt errors under errors module --- lib/seam/errors.rb | 40 ++++++++++--------- lib/seam/helpers/action_attempt.rb | 4 +- .../wait_for_action_attepmt_spec.rb | 6 +-- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb index 1f3f68f..c9a6a24 100644 --- a/lib/seam/errors.rb +++ b/lib/seam/errors.rb @@ -1,32 +1,34 @@ # frozen_string_literal: true module Seam - class ActionAttemptError < StandardError - attr_reader :action_attempt + module Errors + class ActionAttemptError < StandardError + attr_reader :action_attempt - def initialize(message, action_attempt) - super(message) - @action_attempt = action_attempt - end + def initialize(message, action_attempt) + super(message) + @action_attempt = action_attempt + end - def name - self.class.name + def name + self.class.name + end end - end - class ActionAttemptFailedError < ActionAttemptError - attr_reader :code + class ActionAttemptFailedError < ActionAttemptError + attr_reader :code - def initialize(action_attempt) - super(action_attempt.error.message, action_attempt) - @code = action_attempt.error.type + def initialize(action_attempt) + super(action_attempt.error.message, action_attempt) + @code = action_attempt.error.type + end end - end - class ActionAttemptTimeoutError < ActionAttemptError - def initialize(action_attempt, timeout) - message = "Timed out waiting for action attempt after #{timeout}s" - super(message, action_attempt) + class ActionAttemptTimeoutError < ActionAttemptError + def initialize(action_attempt, timeout) + message = "Timed out waiting for action attempt after #{timeout}s" + super(message, action_attempt) + end end end end diff --git a/lib/seam/helpers/action_attempt.rb b/lib/seam/helpers/action_attempt.rb index 22954dd..439491e 100644 --- a/lib/seam/helpers/action_attempt.rb +++ b/lib/seam/helpers/action_attempt.rb @@ -26,12 +26,12 @@ def self.wait_until_finished(action_attempt, client, timeout: nil, polling_inter sleep(polling_interval) time_waiting += polling_interval - raise ActionAttemptTimeoutError.new(action_attempt, timeout) if time_waiting > timeout + raise Errors::ActionAttemptTimeoutError.new(action_attempt, timeout) if time_waiting > timeout action_attempt = update_action_attempt(action_attempt, client) end - raise ActionAttemptFailedError.new(action_attempt) if action_attempt.status == "error" + raise Errors::ActionAttemptFailedError.new(action_attempt) if action_attempt.status == "error" action_attempt end diff --git a/spec/seam_client/wait_for_action_attepmt_spec.rb b/spec/seam_client/wait_for_action_attepmt_spec.rb index dd03bab..417302c 100644 --- a/spec/seam_client/wait_for_action_attepmt_spec.rb +++ b/spec/seam_client/wait_for_action_attepmt_spec.rb @@ -119,7 +119,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.1} ) - end.to raise_error(Seam::ActionAttemptTimeoutError) do |error| + end.to raise_error(Seam::Errors::ActionAttemptTimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end @@ -142,7 +142,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: true ) - end.to raise_error(Seam::ActionAttemptFailedError) do |error| + end.to raise_error(Seam::Errors::ActionAttemptFailedError) do |error| expect(error.message).to include("Failed") expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq("error") @@ -167,7 +167,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.5, polling_interval: 3} ) - end.to raise_error(Seam::ActionAttemptTimeoutError) do |error| + end.to raise_error(Seam::Errors::ActionAttemptTimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end From 6a590dfae6e18adfddc64896290cee10f4d36b48 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 3 Oct 2024 13:29:28 +0200 Subject: [PATCH 16/25] Rename SeamWebhook to Webhook --- lib/seam/{seam_webhook.rb => webhook.rb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename lib/seam/{seam_webhook.rb => webhook.rb} (94%) diff --git a/lib/seam/seam_webhook.rb b/lib/seam/webhook.rb similarity index 94% rename from lib/seam/seam_webhook.rb rename to lib/seam/webhook.rb index 3c7de05..7f0247f 100644 --- a/lib/seam/seam_webhook.rb +++ b/lib/seam/webhook.rb @@ -3,7 +3,7 @@ require "svix" module Seam - class SeamWebhook + class Webhook def initialize(secret) @webhook = Svix::Webhook.new(secret) end From e8538f09a45bc6b4fa8d0120c683d2a773aa2bd0 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 3 Oct 2024 13:30:16 +0200 Subject: [PATCH 17/25] Make Http a module with http errors, SingleWorkspace and MultiWorkspace classes --- lib/seam.rb | 8 +-- lib/seam/client.rb | 44 ------------ lib/seam/client_multi_workspace.rb | 69 ------------------ lib/seam/http.rb | 6 ++ lib/seam/http_multi_workspace.rb | 71 +++++++++++++++++++ lib/seam/http_single_workspace.rb | 46 ++++++++++++ spec/request_spec.rb | 2 +- spec/seam_client/api_key_spec.rb | 2 +- .../client_multi_workspace_spec.rb | 4 +- spec/seam_client/env_spec.rb | 2 +- spec/seam_client/init_seam_spec.rb | 2 +- .../seam_client/personal_access_token_spec.rb | 2 +- spec/seam_client/request_spec.rb | 2 +- .../wait_for_action_attepmt_spec.rb | 2 +- spec/spec_helper.rb | 4 -- 15 files changed, 136 insertions(+), 130 deletions(-) delete mode 100644 lib/seam/client.rb delete mode 100644 lib/seam/client_multi_workspace.rb create mode 100644 lib/seam/http_multi_workspace.rb create mode 100644 lib/seam/http_single_workspace.rb diff --git a/lib/seam.rb b/lib/seam.rb index 9cf2a1f..1e52767 100644 --- a/lib/seam.rb +++ b/lib/seam.rb @@ -5,19 +5,19 @@ require_relative "seam/default_endpoint" require_relative "seam/request" require_relative "seam/logger" -require_relative "seam/client" -require_relative "seam/client_multi_workspace" +require_relative "seam/http" +require_relative "seam/http_multi_workspace" require_relative "seam/base_client" require_relative "seam/base_resource" require_relative "seam/errors" -require_relative "seam/seam_webhook" +require_relative "seam/webhook" require_relative "seam/routes/resources/index" require_relative "seam/routes/clients/index" module Seam def self.new(**args) - Client.new(**args) + Http.new(**args) end def self.from_api_key(api_key, endpoint: nil, wait_for_action_attempt: false, debug: false) diff --git a/lib/seam/client.rb b/lib/seam/client.rb deleted file mode 100644 index 33ea5e7..0000000 --- a/lib/seam/client.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -require_relative "parse_options" -require_relative "routes/routes" - -module Seam - class Client - include Seam::Routes - - attr_accessor :defaults - - def initialize(api_key: nil, personal_access_token: nil, workspace_id: nil, endpoint: nil, - wait_for_action_attempt: true, debug: false) - options = SeamOptions.parse_options(api_key: api_key, personal_access_token: personal_access_token, workspace_id: workspace_id, endpoint: endpoint) - @endpoint = options[:endpoint] - @auth_headers = options[:auth_headers] - @debug = debug - @wait_for_action_attempt = wait_for_action_attempt - @defaults = Seam::DeepHashAccessor.new({"wait_for_action_attempt" => wait_for_action_attempt}) - end - - def lts_version - Seam::LTS_VERSION - end - - def request_seam_object(method, path, klass, inner_object, config = {}) - response = request_seam(method, path, config) - - data = response[inner_object] - - klass.load_from_response(data, self) - end - - def request_seam(method, path, config = {}) - Seam::Request.new( - auth_headers: @auth_headers, - endpoint: @endpoint, - debug: @debug - ).perform( - method, path, config - ) - end - end -end diff --git a/lib/seam/client_multi_workspace.rb b/lib/seam/client_multi_workspace.rb deleted file mode 100644 index d863fd4..0000000 --- a/lib/seam/client_multi_workspace.rb +++ /dev/null @@ -1,69 +0,0 @@ -# frozen_string_literal: true - -require_relative "parse_options" -require_relative "lts_version" -require_relative "auth" - -module Seam - class ClientMultiWorkspace - attr_reader :wait_for_action_attempt, :defaults - - def initialize(personal_access_token:, endpoint: nil, wait_for_action_attempt: true) - @wait_for_action_attempt = wait_for_action_attempt - @defaults = {"wait_for_action_attempt" => wait_for_action_attempt} - @endpoint = SeamOptions.get_endpoint(endpoint) - @auth_headers = SeamAuth.get_auth_headers_for_multi_workspace_personal_access_token(personal_access_token) - end - - def self.lts_version - Seam::LTS_VERSION - end - - def lts_version - Seam::LTS_VERSION - end - - def workspaces - @workspaces ||= WorkspacesProxy.new(Seam::Clients::Workspaces.new(self)) - end - - def self.from_personal_access_token(personal_access_token, endpoint: nil, wait_for_action_attempt: true) - new( - personal_access_token: personal_access_token, - endpoint: endpoint, - wait_for_action_attempt: wait_for_action_attempt - ) - end - - def request_seam_object(method, path, klass, inner_object, config = {}) - response = request_seam(method, path, config) - - data = response[inner_object] - - klass.load_from_response(data, self) - end - - def request_seam(method, path, config = {}) - Seam::Request.new( - auth_headers: @auth_headers, - endpoint: @endpoint - ).perform( - method, path, config - ) - end - end -end - -class WorkspacesProxy - def initialize(workspaces) - @workspaces = workspaces - end - - def list(**kwargs) - @workspaces.list(**kwargs) - end - - def create(**kwargs) - @workspaces.create(**kwargs) - end -end diff --git a/lib/seam/http.rb b/lib/seam/http.rb index efad275..a08811e 100644 --- a/lib/seam/http.rb +++ b/lib/seam/http.rb @@ -1,7 +1,13 @@ # frozen_string_literal: true +require_relative "http_single_workspace" + module Seam module Http + def self.new(**args) + Http::SingleWorkspace.new(**args) + end + class HttpApiError < StandardError attr_reader :code, :status_code, :request_id, :data diff --git a/lib/seam/http_multi_workspace.rb b/lib/seam/http_multi_workspace.rb new file mode 100644 index 0000000..dba3408 --- /dev/null +++ b/lib/seam/http_multi_workspace.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +require_relative "parse_options" +require_relative "lts_version" +require_relative "auth" + +module Seam + module Http + class MultiWorkspace + attr_reader :wait_for_action_attempt, :defaults + + def initialize(personal_access_token:, endpoint: nil, wait_for_action_attempt: true) + @wait_for_action_attempt = wait_for_action_attempt + @defaults = {"wait_for_action_attempt" => wait_for_action_attempt} + @endpoint = SeamOptions.get_endpoint(endpoint) + @auth_headers = SeamAuth.get_auth_headers_for_multi_workspace_personal_access_token(personal_access_token) + end + + def self.lts_version + Seam::LTS_VERSION + end + + def lts_version + Seam::LTS_VERSION + end + + def workspaces + @workspaces ||= WorkspacesProxy.new(Seam::Clients::Workspaces.new(self)) + end + + def self.from_personal_access_token(personal_access_token, endpoint: nil, wait_for_action_attempt: true) + new( + personal_access_token: personal_access_token, + endpoint: endpoint, + wait_for_action_attempt: wait_for_action_attempt + ) + end + + def request_seam_object(method, path, klass, inner_object, config = {}) + response = request_seam(method, path, config) + + data = response[inner_object] + + klass.load_from_response(data, self) + end + + def request_seam(method, path, config = {}) + Seam::Request.new( + auth_headers: @auth_headers, + endpoint: @endpoint + ).perform( + method, path, config + ) + end + end + end +end + +class WorkspacesProxy + def initialize(workspaces) + @workspaces = workspaces + end + + def list(**kwargs) + @workspaces.list(**kwargs) + end + + def create(**kwargs) + @workspaces.create(**kwargs) + end +end diff --git a/lib/seam/http_single_workspace.rb b/lib/seam/http_single_workspace.rb new file mode 100644 index 0000000..99c96a8 --- /dev/null +++ b/lib/seam/http_single_workspace.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require_relative "parse_options" +require_relative "routes/routes" + +module Seam + module Http + class SingleWorkspace + include Seam::Routes + + attr_accessor :defaults + + def initialize(api_key: nil, personal_access_token: nil, workspace_id: nil, endpoint: nil, + wait_for_action_attempt: true, debug: false) + options = SeamOptions.parse_options(api_key: api_key, personal_access_token: personal_access_token, workspace_id: workspace_id, endpoint: endpoint) + @endpoint = options[:endpoint] + @auth_headers = options[:auth_headers] + @debug = debug + @wait_for_action_attempt = wait_for_action_attempt + @defaults = Seam::DeepHashAccessor.new({"wait_for_action_attempt" => wait_for_action_attempt}) + end + + def lts_version + Seam::LTS_VERSION + end + + def request_seam_object(method, path, klass, inner_object, config = {}) + response = request_seam(method, path, config) + + data = response[inner_object] + + klass.load_from_response(data, self) + end + + def request_seam(method, path, config = {}) + Seam::Request.new( + auth_headers: @auth_headers, + endpoint: @endpoint, + debug: @debug + ).perform( + method, path, config + ) + end + end + end +end diff --git a/spec/request_spec.rb b/spec/request_spec.rb index 5332171..86970de 100644 --- a/spec/request_spec.rb +++ b/spec/request_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Client do +RSpec.describe Seam::Http do let(:client) { Seam.new(api_key: "seam_some_api_key") } describe "Exceptions" do diff --git a/spec/seam_client/api_key_spec.rb b/spec/seam_client/api_key_spec.rb index f3a663a..2aec3dd 100644 --- a/spec/seam_client/api_key_spec.rb +++ b/spec/seam_client/api_key_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Client do +RSpec.describe Seam::Http do let(:client) { Seam.new(api_key: "seam_some_api_key") } let(:device_hash) { {device_id: "123"} } diff --git a/spec/seam_client/client_multi_workspace_spec.rb b/spec/seam_client/client_multi_workspace_spec.rb index e98ff8f..bbaa704 100644 --- a/spec/seam_client/client_multi_workspace_spec.rb +++ b/spec/seam_client/client_multi_workspace_spec.rb @@ -2,14 +2,14 @@ require "spec_helper" -RSpec.describe Seam::ClientMultiWorkspace do +RSpec.describe Seam::Http::MultiWorkspace do let(:personal_access_token) { "seam_at_12345" } let(:endpoint) { "https://example.com/api" } let(:client) { described_class.from_personal_access_token(personal_access_token, endpoint: endpoint) } describe ".from_personal_access_token" do it "creates a new instance with the given token and endpoint" do - expect(client).to be_a(Seam::ClientMultiWorkspace) + expect(client).to be_a(Seam::Http::MultiWorkspace) expect(client.instance_variable_get(:@auth_headers)).to include("authorization" => "Bearer #{personal_access_token}") expect(client.instance_variable_get(:@endpoint)).to eq(endpoint) end diff --git a/spec/seam_client/env_spec.rb b/spec/seam_client/env_spec.rb index f237dee..1c1baec 100644 --- a/spec/seam_client/env_spec.rb +++ b/spec/seam_client/env_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Client do +RSpec.describe Seam::Http do before(:each) do cleanup_env end diff --git a/spec/seam_client/init_seam_spec.rb b/spec/seam_client/init_seam_spec.rb index 8092fed..3d34255 100644 --- a/spec/seam_client/init_seam_spec.rb +++ b/spec/seam_client/init_seam_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Client do +RSpec.describe Seam::Http do let(:seam) { Seam.new(api_key: "seam_some_api_key") } describe "#initialize" do diff --git a/spec/seam_client/personal_access_token_spec.rb b/spec/seam_client/personal_access_token_spec.rb index 834d221..1bfe738 100644 --- a/spec/seam_client/personal_access_token_spec.rb +++ b/spec/seam_client/personal_access_token_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Client do +RSpec.describe Seam::Http do let(:workspace_id) { "e4203e37-e569-4a5a-bfb7-e3e8de66161d" } describe "#from_personal_access_token" do diff --git a/spec/seam_client/request_spec.rb b/spec/seam_client/request_spec.rb index e1b099f..9306c9c 100644 --- a/spec/seam_client/request_spec.rb +++ b/spec/seam_client/request_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::Client do +RSpec.describe Seam::Http do let(:seam) { Seam.new(api_key: "seam_some_api_key") } let(:request_id) { "request_id_1234" } diff --git a/spec/seam_client/wait_for_action_attepmt_spec.rb b/spec/seam_client/wait_for_action_attepmt_spec.rb index 417302c..bfba54d 100644 --- a/spec/seam_client/wait_for_action_attepmt_spec.rb +++ b/spec/seam_client/wait_for_action_attepmt_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -RSpec.describe Seam::Client do +RSpec.describe Seam::Http do let(:api_key) { "seam_apikey1_token" } let(:device_id) { "august_device_1" } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 1386279..d80e139 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,10 +6,6 @@ SimpleCov.start require "seam" -require "seam/http" -require "seam/auth" -require "seam/options" -require "seam/client_multi_workspace" require "seam/deep_hash_accessor" require "webmock/rspec" From 4defdc80c711a7b69a7b5d9ed8911c9d0e1405f4 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 3 Oct 2024 13:50:33 +0200 Subject: [PATCH 18/25] Bump generator to 1.14.5 to put resource related stuff under Resources module --- lib/seam/base_resource.rb | 78 ++++++++++--------- lib/seam/routes/clients/access_codes.rb | 12 +-- .../routes/clients/access_codes_simulate.rb | 2 +- .../routes/clients/access_codes_unmanaged.rb | 4 +- lib/seam/routes/clients/acs_access_groups.rb | 8 +- .../routes/clients/acs_credential_pools.rb | 2 +- ...acs_credential_provisioning_automations.rb | 2 +- lib/seam/routes/clients/acs_credentials.rb | 8 +- lib/seam/routes/clients/acs_entrances.rb | 6 +- lib/seam/routes/clients/acs_systems.rb | 6 +- lib/seam/routes/clients/acs_users.rb | 8 +- lib/seam/routes/clients/action_attempts.rb | 4 +- lib/seam/routes/clients/client_sessions.rb | 8 +- lib/seam/routes/clients/connect_webviews.rb | 6 +- lib/seam/routes/clients/connected_accounts.rb | 6 +- lib/seam/routes/clients/devices.rb | 6 +- lib/seam/routes/clients/devices_unmanaged.rb | 4 +- lib/seam/routes/clients/events.rb | 4 +- lib/seam/routes/clients/locks.rb | 8 +- lib/seam/routes/clients/networks.rb | 4 +- lib/seam/routes/clients/noise_sensors.rb | 2 +- .../clients/noise_sensors_noise_thresholds.rb | 6 +- lib/seam/routes/clients/phones.rb | 2 +- lib/seam/routes/clients/phones_simulate.rb | 2 +- lib/seam/routes/clients/thermostats.rb | 16 ++-- .../routes/clients/thermostats_schedules.rb | 6 +- lib/seam/routes/clients/user_identities.rb | 12 +-- .../user_identities_enrollment_automations.rb | 4 +- lib/seam/routes/clients/webhooks.rb | 6 +- lib/seam/routes/clients/workspaces.rb | 8 +- lib/seam/routes/resources/access_code.rb | 12 +-- lib/seam/routes/resources/acs_access_group.rb | 8 +- lib/seam/routes/resources/acs_credential.rb | 12 +-- .../routes/resources/acs_credential_pool.rb | 8 +- .../acs_credential_provisioning_automation.rb | 8 +- lib/seam/routes/resources/acs_entrance.rb | 10 ++- lib/seam/routes/resources/acs_system.rb | 12 +-- lib/seam/routes/resources/acs_user.rb | 12 +-- lib/seam/routes/resources/action_attempt.rb | 6 +- lib/seam/routes/resources/client_session.rb | 8 +- lib/seam/routes/resources/connect_webview.rb | 8 +- .../routes/resources/connected_account.rb | 12 +-- lib/seam/routes/resources/device.rb | 12 +-- lib/seam/routes/resources/device_provider.rb | 6 +- .../routes/resources/enrollment_automation.rb | 8 +- lib/seam/routes/resources/event.rb | 8 +- lib/seam/routes/resources/network.rb | 8 +- lib/seam/routes/resources/noise_threshold.rb | 6 +- lib/seam/routes/resources/phone.rb | 12 +-- lib/seam/routes/resources/resource_error.rb | 8 +- .../resources/resource_errors_support.rb | 8 +- lib/seam/routes/resources/resource_warning.rb | 8 +- .../resources/resource_warnings_support.rb | 8 +- lib/seam/routes/resources/service_health.rb | 6 +- .../routes/resources/thermostat_schedule.rb | 10 ++- .../routes/resources/unmanaged_access_code.rb | 12 +-- lib/seam/routes/resources/unmanaged_device.rb | 12 +-- lib/seam/routes/resources/user_identity.rb | 8 +- lib/seam/routes/resources/webhook.rb | 6 +- lib/seam/routes/resources/workspace.rb | 6 +- package-lock.json | 9 ++- package.json | 2 +- spec/clients/access_codes_spec.rb | 10 +-- spec/clients/action_attempts_spec.rb | 2 +- spec/clients/connect_webviews_spec.rb | 6 +- spec/clients/connected_accounts_spec.rb | 6 +- spec/clients/devices_spec.rb | 12 +-- spec/clients/events_spec.rb | 4 +- spec/clients/locks_spec.rb | 8 +- spec/clients/unmanaged_access_codes_spec.rb | 4 +- spec/clients/unmanaged_devices_spec.rb | 6 +- spec/clients/workspaces_spec.rb | 6 +- spec/resources/action_attempt_spec.rb | 4 +- spec/resources/base_resource_spec.rb | 4 +- .../client_multi_workspace_spec.rb | 2 +- 75 files changed, 333 insertions(+), 270 deletions(-) diff --git a/lib/seam/base_resource.rb b/lib/seam/base_resource.rb index 4fa03a8..fa9061f 100644 --- a/lib/seam/base_resource.rb +++ b/lib/seam/base_resource.rb @@ -3,59 +3,61 @@ require_relative "deep_hash_accessor" module Seam - class BaseResource - attr_accessor :data, :client + module Resources + class BaseResource + attr_accessor :data, :client - def initialize(data, client = nil) - @data = data - @client = client + def initialize(data, client = nil) + @data = data + @client = client - @data.each do |key, value| - value = Seam::DeepHashAccessor.new(value) if value.is_a?(Hash) - instance_variable_set(:"@#{key}", value) + @data.each do |key, value| + value = Seam::DeepHashAccessor.new(value) if value.is_a?(Hash) + instance_variable_set(:"@#{key}", value) + end end - end - def update_from_response(data) - @data = data - @data.each do |key, value| - instance_variable_set(:"@#{key}", value) + def update_from_response(data) + @data = data + @data.each do |key, value| + instance_variable_set(:"@#{key}", value) + end end - end - def self.load_from_response(data, client = nil) - if data.is_a?(Array) - data.map { |d| new(d, client) } - else - new(data, client) + def self.load_from_response(data, client = nil) + if data.is_a?(Array) + data.map { |d| new(d, client) } + else + new(data, client) + end end - end - def inspect - "<#{self.class.name}:#{"0x00%x" % (object_id << 1)}\n" + # rubocop:disable Style/StringConcatenation, Style/FormatString - instance_variables - .map { |k| k.to_s.sub("@", "") } - .filter { |k| k != "data" and k != "client" and respond_to? k } - .map { |k| " #{k}=#{send(k).inspect}" } - .join("\n") + ">" - end + def inspect + "<#{self.class.name}:#{"0x00%x" % (object_id << 1)}\n" + # rubocop:disable Style/StringConcatenation, Style/FormatString + instance_variables + .map { |k| k.to_s.sub("@", "") } + .filter { |k| k != "data" and k != "client" and respond_to? k } + .map { |k| " #{k}=#{send(k).inspect}" } + .join("\n") + ">" + end - def self.date_accessor(*attrs) - attrs.each do |attr| - define_method(attr) do - value = instance_variable_get(:"@#{attr}") + def self.date_accessor(*attrs) + attrs.each do |attr| + define_method(attr) do + value = instance_variable_get(:"@#{attr}") - raise "No value for #{attr} set" if value.nil? + raise "No value for #{attr} set" if value.nil? - parse_datetime(value) + parse_datetime(value) + end end end - end - protected + protected - def parse_datetime(value) - Time.parse(value) + def parse_datetime(value) + Time.parse(value) + end end end end diff --git a/lib/seam/routes/clients/access_codes.rb b/lib/seam/routes/clients/access_codes.rb index 437ebfd..b85f5c4 100644 --- a/lib/seam/routes/clients/access_codes.rb +++ b/lib/seam/routes/clients/access_codes.rb @@ -15,7 +15,7 @@ def create(device_id:, allow_external_modification: nil, attempt_for_offline_dev request_seam_object( :post, "/access_codes/create", - Seam::AccessCode, + Seam::Resources::AccessCode, "access_code", body: {device_id: device_id, allow_external_modification: allow_external_modification, attempt_for_offline_device: attempt_for_offline_device, code: code, common_code_key: common_code_key, ends_at: ends_at, is_external_modification_allowed: is_external_modification_allowed, is_offline_access_code: is_offline_access_code, is_one_time_use: is_one_time_use, max_time_rounding: max_time_rounding, name: name, prefer_native_scheduling: prefer_native_scheduling, preferred_code_length: preferred_code_length, starts_at: starts_at, sync: sync, use_backup_access_code_pool: use_backup_access_code_pool, use_offline_access_code: use_offline_access_code}.compact ) @@ -25,7 +25,7 @@ def create_multiple(device_ids:, allow_external_modification: nil, attempt_for_o request_seam_object( :post, "/access_codes/create_multiple", - Seam::AccessCode, + Seam::Resources::AccessCode, "access_codes", body: {device_ids: device_ids, allow_external_modification: allow_external_modification, attempt_for_offline_device: attempt_for_offline_device, behavior_when_code_cannot_be_shared: behavior_when_code_cannot_be_shared, code: code, ends_at: ends_at, is_external_modification_allowed: is_external_modification_allowed, is_offline_access_code: is_offline_access_code, is_one_time_use: is_one_time_use, max_time_rounding: max_time_rounding, name: name, prefer_native_scheduling: prefer_native_scheduling, preferred_code_length: preferred_code_length, starts_at: starts_at, use_backup_access_code_pool: use_backup_access_code_pool, use_offline_access_code: use_offline_access_code}.compact ) @@ -45,7 +45,7 @@ def generate_code(device_id:) request_seam_object( :post, "/access_codes/generate_code", - Seam::AccessCode, + Seam::Resources::AccessCode, "generated_code", body: {device_id: device_id}.compact ) @@ -55,7 +55,7 @@ def get(access_code_id: nil, code: nil, device_id: nil) request_seam_object( :post, "/access_codes/get", - Seam::AccessCode, + Seam::Resources::AccessCode, "access_code", body: {access_code_id: access_code_id, code: code, device_id: device_id}.compact ) @@ -65,7 +65,7 @@ def list(access_code_ids: nil, device_id: nil, user_identifier_key: nil) request_seam_object( :post, "/access_codes/list", - Seam::AccessCode, + Seam::Resources::AccessCode, "access_codes", body: {access_code_ids: access_code_ids, device_id: device_id, user_identifier_key: user_identifier_key}.compact ) @@ -75,7 +75,7 @@ def pull_backup_access_code(access_code_id:) request_seam_object( :post, "/access_codes/pull_backup_access_code", - Seam::AccessCode, + Seam::Resources::AccessCode, "backup_access_code", body: {access_code_id: access_code_id}.compact ) diff --git a/lib/seam/routes/clients/access_codes_simulate.rb b/lib/seam/routes/clients/access_codes_simulate.rb index 01bae3a..e6b84e0 100644 --- a/lib/seam/routes/clients/access_codes_simulate.rb +++ b/lib/seam/routes/clients/access_codes_simulate.rb @@ -7,7 +7,7 @@ def create_unmanaged_access_code(code:, device_id:, name:) request_seam_object( :post, "/access_codes/simulate/create_unmanaged_access_code", - Seam::UnmanagedAccessCode, + Seam::Resources::UnmanagedAccessCode, "access_code", body: {code: code, device_id: device_id, name: name}.compact ) diff --git a/lib/seam/routes/clients/access_codes_unmanaged.rb b/lib/seam/routes/clients/access_codes_unmanaged.rb index f0f4f54..3d96d67 100644 --- a/lib/seam/routes/clients/access_codes_unmanaged.rb +++ b/lib/seam/routes/clients/access_codes_unmanaged.rb @@ -27,7 +27,7 @@ def get(access_code_id: nil, code: nil, device_id: nil) request_seam_object( :post, "/access_codes/unmanaged/get", - Seam::UnmanagedAccessCode, + Seam::Resources::UnmanagedAccessCode, "access_code", body: {access_code_id: access_code_id, code: code, device_id: device_id}.compact ) @@ -37,7 +37,7 @@ def list(device_id:, user_identifier_key: nil) request_seam_object( :post, "/access_codes/unmanaged/list", - Seam::UnmanagedAccessCode, + Seam::Resources::UnmanagedAccessCode, "access_codes", body: {device_id: device_id, user_identifier_key: user_identifier_key}.compact ) diff --git a/lib/seam/routes/clients/acs_access_groups.rb b/lib/seam/routes/clients/acs_access_groups.rb index fbe0857..b4f5b5a 100644 --- a/lib/seam/routes/clients/acs_access_groups.rb +++ b/lib/seam/routes/clients/acs_access_groups.rb @@ -17,7 +17,7 @@ def get(acs_access_group_id:) request_seam_object( :post, "/acs/access_groups/get", - Seam::AcsAccessGroup, + Seam::Resources::AcsAccessGroup, "acs_access_group", body: {acs_access_group_id: acs_access_group_id}.compact ) @@ -27,7 +27,7 @@ def list(acs_system_id: nil, acs_user_id: nil) request_seam_object( :post, "/acs/access_groups/list", - Seam::AcsAccessGroup, + Seam::Resources::AcsAccessGroup, "acs_access_groups", body: {acs_system_id: acs_system_id, acs_user_id: acs_user_id}.compact ) @@ -37,7 +37,7 @@ def list_accessible_entrances(acs_access_group_id:) request_seam_object( :post, "/acs/access_groups/list_accessible_entrances", - Seam::AcsEntrance, + Seam::Resources::AcsEntrance, "acs_entrances", body: {acs_access_group_id: acs_access_group_id}.compact ) @@ -47,7 +47,7 @@ def list_users(acs_access_group_id:) request_seam_object( :post, "/acs/access_groups/list_users", - Seam::AcsUser, + Seam::Resources::AcsUser, "acs_users", body: {acs_access_group_id: acs_access_group_id}.compact ) diff --git a/lib/seam/routes/clients/acs_credential_pools.rb b/lib/seam/routes/clients/acs_credential_pools.rb index dbede9e..66996e5 100644 --- a/lib/seam/routes/clients/acs_credential_pools.rb +++ b/lib/seam/routes/clients/acs_credential_pools.rb @@ -7,7 +7,7 @@ def list(acs_system_id:) request_seam_object( :post, "/acs/credential_pools/list", - Seam::AcsCredentialPool, + Seam::Resources::AcsCredentialPool, "acs_credential_pools", body: {acs_system_id: acs_system_id}.compact ) diff --git a/lib/seam/routes/clients/acs_credential_provisioning_automations.rb b/lib/seam/routes/clients/acs_credential_provisioning_automations.rb index c77f4f3..6864f62 100644 --- a/lib/seam/routes/clients/acs_credential_provisioning_automations.rb +++ b/lib/seam/routes/clients/acs_credential_provisioning_automations.rb @@ -7,7 +7,7 @@ def launch(credential_manager_acs_system_id:, user_identity_id:, acs_credential_ request_seam_object( :post, "/acs/credential_provisioning_automations/launch", - Seam::AcsCredentialProvisioningAutomation, + Seam::Resources::AcsCredentialProvisioningAutomation, "acs_credential_provisioning_automation", body: {credential_manager_acs_system_id: credential_manager_acs_system_id, user_identity_id: user_identity_id, acs_credential_pool_id: acs_credential_pool_id, create_credential_manager_user: create_credential_manager_user, credential_manager_acs_user_id: credential_manager_acs_user_id}.compact ) diff --git a/lib/seam/routes/clients/acs_credentials.rb b/lib/seam/routes/clients/acs_credentials.rb index c095548..ea83200 100644 --- a/lib/seam/routes/clients/acs_credentials.rb +++ b/lib/seam/routes/clients/acs_credentials.rb @@ -17,7 +17,7 @@ def create(access_method:, acs_user_id:, allowed_acs_entrance_ids: nil, code: ni request_seam_object( :post, "/acs/credentials/create", - Seam::AcsCredential, + Seam::Resources::AcsCredential, "acs_credential", body: {access_method: access_method, acs_user_id: acs_user_id, allowed_acs_entrance_ids: allowed_acs_entrance_ids, code: code, credential_manager_acs_system_id: credential_manager_acs_system_id, ends_at: ends_at, is_multi_phone_sync_credential: is_multi_phone_sync_credential, starts_at: starts_at, visionline_metadata: visionline_metadata}.compact ) @@ -37,7 +37,7 @@ def get(acs_credential_id:) request_seam_object( :post, "/acs/credentials/get", - Seam::AcsCredential, + Seam::Resources::AcsCredential, "acs_credential", body: {acs_credential_id: acs_credential_id}.compact ) @@ -47,7 +47,7 @@ def list(acs_user_id: nil, acs_system_id: nil, user_identity_id: nil, created_be request_seam_object( :post, "/acs/credentials/list", - Seam::AcsCredential, + Seam::Resources::AcsCredential, "acs_credentials", body: {acs_user_id: acs_user_id, acs_system_id: acs_system_id, user_identity_id: user_identity_id, created_before: created_before, is_multi_phone_sync_credential: is_multi_phone_sync_credential, limit: limit}.compact ) @@ -57,7 +57,7 @@ def list_accessible_entrances(acs_credential_id:) request_seam_object( :post, "/acs/credentials/list_accessible_entrances", - Seam::AcsEntrance, + Seam::Resources::AcsEntrance, "acs_entrances", body: {acs_credential_id: acs_credential_id}.compact ) diff --git a/lib/seam/routes/clients/acs_entrances.rb b/lib/seam/routes/clients/acs_entrances.rb index c32b7e9..896c69a 100644 --- a/lib/seam/routes/clients/acs_entrances.rb +++ b/lib/seam/routes/clients/acs_entrances.rb @@ -7,7 +7,7 @@ def get(acs_entrance_id:) request_seam_object( :post, "/acs/entrances/get", - Seam::AcsEntrance, + Seam::Resources::AcsEntrance, "acs_entrance", body: {acs_entrance_id: acs_entrance_id}.compact ) @@ -27,7 +27,7 @@ def list(acs_credential_id: nil, acs_system_id: nil) request_seam_object( :post, "/acs/entrances/list", - Seam::AcsEntrance, + Seam::Resources::AcsEntrance, "acs_entrances", body: {acs_credential_id: acs_credential_id, acs_system_id: acs_system_id}.compact ) @@ -37,7 +37,7 @@ def list_credentials_with_access(acs_entrance_id:, include_if: nil) request_seam_object( :post, "/acs/entrances/list_credentials_with_access", - Seam::AcsCredential, + Seam::Resources::AcsCredential, "acs_credentials", body: {acs_entrance_id: acs_entrance_id, include_if: include_if}.compact ) diff --git a/lib/seam/routes/clients/acs_systems.rb b/lib/seam/routes/clients/acs_systems.rb index 936c847..31fa209 100644 --- a/lib/seam/routes/clients/acs_systems.rb +++ b/lib/seam/routes/clients/acs_systems.rb @@ -7,7 +7,7 @@ def get(acs_system_id:) request_seam_object( :post, "/acs/systems/get", - Seam::AcsSystem, + Seam::Resources::AcsSystem, "acs_system", body: {acs_system_id: acs_system_id}.compact ) @@ -17,7 +17,7 @@ def list(connected_account_id: nil) request_seam_object( :post, "/acs/systems/list", - Seam::AcsSystem, + Seam::Resources::AcsSystem, "acs_systems", body: {connected_account_id: connected_account_id}.compact ) @@ -27,7 +27,7 @@ def list_compatible_credential_manager_acs_systems(acs_system_id:) request_seam_object( :post, "/acs/systems/list_compatible_credential_manager_acs_systems", - Seam::AcsSystem, + Seam::Resources::AcsSystem, "acs_systems", body: {acs_system_id: acs_system_id}.compact ) diff --git a/lib/seam/routes/clients/acs_users.rb b/lib/seam/routes/clients/acs_users.rb index 54dadf1..323cb95 100644 --- a/lib/seam/routes/clients/acs_users.rb +++ b/lib/seam/routes/clients/acs_users.rb @@ -17,7 +17,7 @@ def create(acs_system_id:, access_schedule: nil, acs_access_group_ids: nil, emai request_seam_object( :post, "/acs/users/create", - Seam::AcsUser, + Seam::Resources::AcsUser, "acs_user", body: {acs_system_id: acs_system_id, access_schedule: access_schedule, acs_access_group_ids: acs_access_group_ids, email: email, email_address: email_address, full_name: full_name, phone_number: phone_number, user_identity_id: user_identity_id}.compact ) @@ -37,7 +37,7 @@ def get(acs_user_id:) request_seam_object( :post, "/acs/users/get", - Seam::AcsUser, + Seam::Resources::AcsUser, "acs_user", body: {acs_user_id: acs_user_id}.compact ) @@ -47,7 +47,7 @@ def list(acs_system_id: nil, created_before: nil, limit: nil, user_identity_emai request_seam_object( :post, "/acs/users/list", - Seam::AcsUser, + Seam::Resources::AcsUser, "acs_users", body: {acs_system_id: acs_system_id, created_before: created_before, limit: limit, user_identity_email_address: user_identity_email_address, user_identity_id: user_identity_id, user_identity_phone_number: user_identity_phone_number}.compact ) @@ -57,7 +57,7 @@ def list_accessible_entrances(acs_user_id:) request_seam_object( :post, "/acs/users/list_accessible_entrances", - Seam::AcsEntrance, + Seam::Resources::AcsEntrance, "acs_entrances", body: {acs_user_id: acs_user_id}.compact ) diff --git a/lib/seam/routes/clients/action_attempts.rb b/lib/seam/routes/clients/action_attempts.rb index 4c85542..d9bc0ff 100644 --- a/lib/seam/routes/clients/action_attempts.rb +++ b/lib/seam/routes/clients/action_attempts.rb @@ -9,7 +9,7 @@ def get(action_attempt_id:, wait_for_action_attempt: nil) action_attempt = request_seam_object( :post, "/action_attempts/get", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {action_attempt_id: action_attempt_id}.compact ) @@ -21,7 +21,7 @@ def list(action_attempt_ids:) request_seam_object( :post, "/action_attempts/list", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempts", body: {action_attempt_ids: action_attempt_ids}.compact ) diff --git a/lib/seam/routes/clients/client_sessions.rb b/lib/seam/routes/clients/client_sessions.rb index 10a0fb6..16ca468 100644 --- a/lib/seam/routes/clients/client_sessions.rb +++ b/lib/seam/routes/clients/client_sessions.rb @@ -7,7 +7,7 @@ def create(connect_webview_ids: nil, connected_account_ids: nil, expires_at: nil request_seam_object( :post, "/client_sessions/create", - Seam::ClientSession, + Seam::Resources::ClientSession, "client_session", body: {connect_webview_ids: connect_webview_ids, connected_account_ids: connected_account_ids, expires_at: expires_at, user_identifier_key: user_identifier_key, user_identity_ids: user_identity_ids}.compact ) @@ -27,7 +27,7 @@ def get(client_session_id: nil, user_identifier_key: nil) request_seam_object( :post, "/client_sessions/get", - Seam::ClientSession, + Seam::Resources::ClientSession, "client_session", body: {client_session_id: client_session_id, user_identifier_key: user_identifier_key}.compact ) @@ -37,7 +37,7 @@ def get_or_create(connect_webview_ids: nil, connected_account_ids: nil, expires_ request_seam_object( :post, "/client_sessions/get_or_create", - Seam::ClientSession, + Seam::Resources::ClientSession, "client_session", body: {connect_webview_ids: connect_webview_ids, connected_account_ids: connected_account_ids, expires_at: expires_at, user_identifier_key: user_identifier_key, user_identity_ids: user_identity_ids}.compact ) @@ -57,7 +57,7 @@ def list(client_session_id: nil, connect_webview_id: nil, user_identifier_key: n request_seam_object( :post, "/client_sessions/list", - Seam::ClientSession, + Seam::Resources::ClientSession, "client_sessions", body: {client_session_id: client_session_id, connect_webview_id: connect_webview_id, user_identifier_key: user_identifier_key, user_identity_id: user_identity_id, without_user_identifier_key: without_user_identifier_key}.compact ) diff --git a/lib/seam/routes/clients/connect_webviews.rb b/lib/seam/routes/clients/connect_webviews.rb index 7872852..bbfcf96 100644 --- a/lib/seam/routes/clients/connect_webviews.rb +++ b/lib/seam/routes/clients/connect_webviews.rb @@ -7,7 +7,7 @@ def create(accepted_providers: nil, automatically_manage_new_devices: nil, custo request_seam_object( :post, "/connect_webviews/create", - Seam::ConnectWebview, + Seam::Resources::ConnectWebview, "connect_webview", body: {accepted_providers: accepted_providers, automatically_manage_new_devices: automatically_manage_new_devices, custom_metadata: custom_metadata, custom_redirect_failure_url: custom_redirect_failure_url, custom_redirect_url: custom_redirect_url, device_selection_mode: device_selection_mode, provider_category: provider_category, wait_for_device_creation: wait_for_device_creation}.compact ) @@ -27,7 +27,7 @@ def get(connect_webview_id:) request_seam_object( :post, "/connect_webviews/get", - Seam::ConnectWebview, + Seam::Resources::ConnectWebview, "connect_webview", body: {connect_webview_id: connect_webview_id}.compact ) @@ -37,7 +37,7 @@ def list(custom_metadata_has: nil, limit: nil, user_identifier_key: nil) request_seam_object( :post, "/connect_webviews/list", - Seam::ConnectWebview, + Seam::Resources::ConnectWebview, "connect_webviews", body: {custom_metadata_has: custom_metadata_has, limit: limit, user_identifier_key: user_identifier_key}.compact ) diff --git a/lib/seam/routes/clients/connected_accounts.rb b/lib/seam/routes/clients/connected_accounts.rb index 36b9b23..45d7767 100644 --- a/lib/seam/routes/clients/connected_accounts.rb +++ b/lib/seam/routes/clients/connected_accounts.rb @@ -17,7 +17,7 @@ def get(connected_account_id: nil, email: nil) request_seam_object( :post, "/connected_accounts/get", - Seam::ConnectedAccount, + Seam::Resources::ConnectedAccount, "connected_account", body: {connected_account_id: connected_account_id, email: email}.compact ) @@ -27,7 +27,7 @@ def list(custom_metadata_has: nil, user_identifier_key: nil) request_seam_object( :post, "/connected_accounts/list", - Seam::ConnectedAccount, + Seam::Resources::ConnectedAccount, "connected_accounts", body: {custom_metadata_has: custom_metadata_has, user_identifier_key: user_identifier_key}.compact ) @@ -37,7 +37,7 @@ def update(connected_account_id:, automatically_manage_new_devices: nil, custom_ request_seam_object( :post, "/connected_accounts/update", - Seam::ConnectedAccount, + Seam::Resources::ConnectedAccount, "connected_account", body: {connected_account_id: connected_account_id, automatically_manage_new_devices: automatically_manage_new_devices, custom_metadata: custom_metadata}.compact ) diff --git a/lib/seam/routes/clients/devices.rb b/lib/seam/routes/clients/devices.rb index f505d68..72104f7 100644 --- a/lib/seam/routes/clients/devices.rb +++ b/lib/seam/routes/clients/devices.rb @@ -25,7 +25,7 @@ def get(device_id: nil, name: nil) request_seam_object( :post, "/devices/get", - Seam::Device, + Seam::Resources::Device, "device", body: {device_id: device_id, name: name}.compact ) @@ -35,7 +35,7 @@ def list(connect_webview_id: nil, connected_account_id: nil, connected_account_i request_seam_object( :post, "/devices/list", - Seam::Device, + Seam::Resources::Device, "devices", body: {connect_webview_id: connect_webview_id, connected_account_id: connected_account_id, connected_account_ids: connected_account_ids, created_before: created_before, custom_metadata_has: custom_metadata_has, device_ids: device_ids, device_types: device_types, exclude_if: exclude_if, include_if: include_if, limit: limit, manufacturer: manufacturer, user_identifier_key: user_identifier_key}.compact ) @@ -45,7 +45,7 @@ def list_device_providers(provider_category: nil) request_seam_object( :post, "/devices/list_device_providers", - Seam::DeviceProvider, + Seam::Resources::DeviceProvider, "device_providers", body: {provider_category: provider_category}.compact ) diff --git a/lib/seam/routes/clients/devices_unmanaged.rb b/lib/seam/routes/clients/devices_unmanaged.rb index ffb8d51..745c174 100644 --- a/lib/seam/routes/clients/devices_unmanaged.rb +++ b/lib/seam/routes/clients/devices_unmanaged.rb @@ -7,7 +7,7 @@ def get(device_id: nil, name: nil) request_seam_object( :post, "/devices/unmanaged/get", - Seam::UnmanagedDevice, + Seam::Resources::UnmanagedDevice, "device", body: {device_id: device_id, name: name}.compact ) @@ -17,7 +17,7 @@ def list(connect_webview_id: nil, connected_account_id: nil, connected_account_i request_seam_object( :post, "/devices/unmanaged/list", - Seam::UnmanagedDevice, + Seam::Resources::UnmanagedDevice, "devices", body: {connect_webview_id: connect_webview_id, connected_account_id: connected_account_id, connected_account_ids: connected_account_ids, created_before: created_before, custom_metadata_has: custom_metadata_has, device_ids: device_ids, device_types: device_types, exclude_if: exclude_if, include_if: include_if, limit: limit, manufacturer: manufacturer, user_identifier_key: user_identifier_key}.compact ) diff --git a/lib/seam/routes/clients/events.rb b/lib/seam/routes/clients/events.rb index ba99c1c..e6bc60c 100644 --- a/lib/seam/routes/clients/events.rb +++ b/lib/seam/routes/clients/events.rb @@ -7,7 +7,7 @@ def get(device_id: nil, event_id: nil, event_type: nil) request_seam_object( :post, "/events/get", - Seam::SeamEvent, + Seam::Resources::SeamEvent, "event", body: {device_id: device_id, event_id: event_id, event_type: event_type}.compact ) @@ -17,7 +17,7 @@ def list(access_code_id: nil, access_code_ids: nil, between: nil, connect_webvie request_seam_object( :post, "/events/list", - Seam::SeamEvent, + Seam::Resources::SeamEvent, "events", body: {access_code_id: access_code_id, access_code_ids: access_code_ids, between: between, connect_webview_id: connect_webview_id, connected_account_id: connected_account_id, device_id: device_id, device_ids: device_ids, event_type: event_type, event_types: event_types, limit: limit, since: since}.compact ) diff --git a/lib/seam/routes/clients/locks.rb b/lib/seam/routes/clients/locks.rb index 44f3c84..70b6570 100644 --- a/lib/seam/routes/clients/locks.rb +++ b/lib/seam/routes/clients/locks.rb @@ -9,7 +9,7 @@ def get(device_id: nil, name: nil) request_seam_object( :post, "/locks/get", - Seam::Device, + Seam::Resources::Device, "device", body: {device_id: device_id, name: name}.compact ) @@ -19,7 +19,7 @@ def list(connect_webview_id: nil, connected_account_id: nil, connected_account_i request_seam_object( :post, "/locks/list", - Seam::Device, + Seam::Resources::Device, "devices", body: {connect_webview_id: connect_webview_id, connected_account_id: connected_account_id, connected_account_ids: connected_account_ids, created_before: created_before, custom_metadata_has: custom_metadata_has, device_ids: device_ids, device_types: device_types, exclude_if: exclude_if, include_if: include_if, limit: limit, manufacturer: manufacturer, user_identifier_key: user_identifier_key}.compact ) @@ -29,7 +29,7 @@ def lock_door(device_id:, sync: nil, wait_for_action_attempt: nil) action_attempt = request_seam_object( :post, "/locks/lock_door", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {device_id: device_id, sync: sync}.compact ) @@ -41,7 +41,7 @@ def unlock_door(device_id:, sync: nil, wait_for_action_attempt: nil) action_attempt = request_seam_object( :post, "/locks/unlock_door", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {device_id: device_id, sync: sync}.compact ) diff --git a/lib/seam/routes/clients/networks.rb b/lib/seam/routes/clients/networks.rb index df41258..fef8687 100644 --- a/lib/seam/routes/clients/networks.rb +++ b/lib/seam/routes/clients/networks.rb @@ -7,7 +7,7 @@ def get(network_id:) request_seam_object( :post, "/networks/get", - Seam::Network, + Seam::Resources::Network, "network", body: {network_id: network_id}.compact ) @@ -17,7 +17,7 @@ def list request_seam_object( :post, "/networks/list", - Seam::Network, + Seam::Resources::Network, "networks", body: {}.compact ) diff --git a/lib/seam/routes/clients/noise_sensors.rb b/lib/seam/routes/clients/noise_sensors.rb index 820379a..771ea81 100644 --- a/lib/seam/routes/clients/noise_sensors.rb +++ b/lib/seam/routes/clients/noise_sensors.rb @@ -15,7 +15,7 @@ def list(connect_webview_id: nil, connected_account_id: nil, connected_account_i request_seam_object( :post, "/noise_sensors/list", - Seam::Device, + Seam::Resources::Device, "devices", body: {connect_webview_id: connect_webview_id, connected_account_id: connected_account_id, connected_account_ids: connected_account_ids, created_before: created_before, custom_metadata_has: custom_metadata_has, device_ids: device_ids, device_types: device_types, exclude_if: exclude_if, include_if: include_if, limit: limit, manufacturer: manufacturer, user_identifier_key: user_identifier_key}.compact ) diff --git a/lib/seam/routes/clients/noise_sensors_noise_thresholds.rb b/lib/seam/routes/clients/noise_sensors_noise_thresholds.rb index 3ef7b8a..2be00f0 100644 --- a/lib/seam/routes/clients/noise_sensors_noise_thresholds.rb +++ b/lib/seam/routes/clients/noise_sensors_noise_thresholds.rb @@ -7,7 +7,7 @@ def create(device_id:, ends_daily_at:, starts_daily_at:, name: nil, noise_thresh request_seam_object( :post, "/noise_sensors/noise_thresholds/create", - Seam::NoiseThreshold, + Seam::Resources::NoiseThreshold, "noise_threshold", body: {device_id: device_id, ends_daily_at: ends_daily_at, starts_daily_at: starts_daily_at, name: name, noise_threshold_decibels: noise_threshold_decibels, noise_threshold_nrs: noise_threshold_nrs, sync: sync}.compact ) @@ -27,7 +27,7 @@ def get(noise_threshold_id:) request_seam_object( :post, "/noise_sensors/noise_thresholds/get", - Seam::NoiseThreshold, + Seam::Resources::NoiseThreshold, "noise_threshold", body: {noise_threshold_id: noise_threshold_id}.compact ) @@ -37,7 +37,7 @@ def list(device_id:, is_programmed: nil) request_seam_object( :post, "/noise_sensors/noise_thresholds/list", - Seam::NoiseThreshold, + Seam::Resources::NoiseThreshold, "noise_thresholds", body: {device_id: device_id, is_programmed: is_programmed}.compact ) diff --git a/lib/seam/routes/clients/phones.rb b/lib/seam/routes/clients/phones.rb index 99ad70e..00f0dd5 100644 --- a/lib/seam/routes/clients/phones.rb +++ b/lib/seam/routes/clients/phones.rb @@ -21,7 +21,7 @@ def list(acs_credential_id: nil, owner_user_identity_id: nil) request_seam_object( :post, "/phones/list", - Seam::Phone, + Seam::Resources::Phone, "phones", body: {acs_credential_id: acs_credential_id, owner_user_identity_id: owner_user_identity_id}.compact ) diff --git a/lib/seam/routes/clients/phones_simulate.rb b/lib/seam/routes/clients/phones_simulate.rb index 91696b7..747a7a9 100644 --- a/lib/seam/routes/clients/phones_simulate.rb +++ b/lib/seam/routes/clients/phones_simulate.rb @@ -7,7 +7,7 @@ def create_sandbox_phone(user_identity_id:, assa_abloy_metadata: nil, custom_sdk request_seam_object( :post, "/phones/simulate/create_sandbox_phone", - Seam::Phone, + Seam::Resources::Phone, "phone", body: {user_identity_id: user_identity_id, assa_abloy_metadata: assa_abloy_metadata, custom_sdk_installation_id: custom_sdk_installation_id, phone_metadata: phone_metadata}.compact ) diff --git a/lib/seam/routes/clients/thermostats.rb b/lib/seam/routes/clients/thermostats.rb index bd9ae8f..d2f6257 100644 --- a/lib/seam/routes/clients/thermostats.rb +++ b/lib/seam/routes/clients/thermostats.rb @@ -13,7 +13,7 @@ def activate_climate_preset(climate_preset_key:, device_id:, wait_for_action_att action_attempt = request_seam_object( :post, "/thermostats/activate_climate_preset", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {climate_preset_key: climate_preset_key, device_id: device_id}.compact ) @@ -25,7 +25,7 @@ def cool(device_id:, cooling_set_point_celsius: nil, cooling_set_point_fahrenhei action_attempt = request_seam_object( :post, "/thermostats/cool", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {device_id: device_id, cooling_set_point_celsius: cooling_set_point_celsius, cooling_set_point_fahrenheit: cooling_set_point_fahrenheit, sync: sync}.compact ) @@ -57,7 +57,7 @@ def get(device_id: nil, name: nil) request_seam_object( :post, "/thermostats/get", - Seam::Device, + Seam::Resources::Device, "thermostat", body: {device_id: device_id, name: name}.compact ) @@ -67,7 +67,7 @@ def heat(device_id:, heating_set_point_celsius: nil, heating_set_point_fahrenhei action_attempt = request_seam_object( :post, "/thermostats/heat", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {device_id: device_id, heating_set_point_celsius: heating_set_point_celsius, heating_set_point_fahrenheit: heating_set_point_fahrenheit, sync: sync}.compact ) @@ -79,7 +79,7 @@ def heat_cool(device_id:, cooling_set_point_celsius: nil, cooling_set_point_fahr action_attempt = request_seam_object( :post, "/thermostats/heat_cool", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {device_id: device_id, cooling_set_point_celsius: cooling_set_point_celsius, cooling_set_point_fahrenheit: cooling_set_point_fahrenheit, heating_set_point_celsius: heating_set_point_celsius, heating_set_point_fahrenheit: heating_set_point_fahrenheit, sync: sync}.compact ) @@ -91,7 +91,7 @@ def list(connect_webview_id: nil, connected_account_id: nil, connected_account_i request_seam_object( :post, "/thermostats/list", - Seam::Device, + Seam::Resources::Device, "thermostats", body: {connect_webview_id: connect_webview_id, connected_account_id: connected_account_id, connected_account_ids: connected_account_ids, created_before: created_before, custom_metadata_has: custom_metadata_has, device_ids: device_ids, device_types: device_types, exclude_if: exclude_if, include_if: include_if, limit: limit, manufacturer: manufacturer, user_identifier_key: user_identifier_key}.compact ) @@ -101,7 +101,7 @@ def off(device_id:, sync: nil, wait_for_action_attempt: nil) action_attempt = request_seam_object( :post, "/thermostats/off", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {device_id: device_id, sync: sync}.compact ) @@ -123,7 +123,7 @@ def set_fan_mode(device_id:, fan_mode: nil, fan_mode_setting: nil, sync: nil, wa action_attempt = request_seam_object( :post, "/thermostats/set_fan_mode", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {device_id: device_id, fan_mode: fan_mode, fan_mode_setting: fan_mode_setting, sync: sync}.compact ) diff --git a/lib/seam/routes/clients/thermostats_schedules.rb b/lib/seam/routes/clients/thermostats_schedules.rb index c0983a8..6b24a58 100644 --- a/lib/seam/routes/clients/thermostats_schedules.rb +++ b/lib/seam/routes/clients/thermostats_schedules.rb @@ -7,7 +7,7 @@ def create(climate_preset_key:, device_id:, ends_at:, starts_at:, max_override_p request_seam_object( :post, "/thermostats/schedules/create", - Seam::ThermostatSchedule, + Seam::Resources::ThermostatSchedule, "thermostat_schedule", body: {climate_preset_key: climate_preset_key, device_id: device_id, ends_at: ends_at, starts_at: starts_at, max_override_period_minutes: max_override_period_minutes, name: name}.compact ) @@ -27,7 +27,7 @@ def get(thermostat_schedule_id:) request_seam_object( :post, "/thermostats/schedules/get", - Seam::ThermostatSchedule, + Seam::Resources::ThermostatSchedule, "thermostat_schedule", body: {thermostat_schedule_id: thermostat_schedule_id}.compact ) @@ -37,7 +37,7 @@ def list(device_id:, user_identifier_key: nil) request_seam_object( :post, "/thermostats/schedules/list", - Seam::ThermostatSchedule, + Seam::Resources::ThermostatSchedule, "thermostat_schedules", body: {device_id: device_id, user_identifier_key: user_identifier_key}.compact ) diff --git a/lib/seam/routes/clients/user_identities.rb b/lib/seam/routes/clients/user_identities.rb index 0194e6f..246a907 100644 --- a/lib/seam/routes/clients/user_identities.rb +++ b/lib/seam/routes/clients/user_identities.rb @@ -21,7 +21,7 @@ def create(email_address: nil, full_name: nil, phone_number: nil, user_identity_ request_seam_object( :post, "/user_identities/create", - Seam::UserIdentity, + Seam::Resources::UserIdentity, "user_identity", body: {email_address: email_address, full_name: full_name, phone_number: phone_number, user_identity_key: user_identity_key}.compact ) @@ -41,7 +41,7 @@ def get(user_identity_id: nil, user_identity_key: nil) request_seam_object( :post, "/user_identities/get", - Seam::UserIdentity, + Seam::Resources::UserIdentity, "user_identity", body: {user_identity_id: user_identity_id, user_identity_key: user_identity_key}.compact ) @@ -61,7 +61,7 @@ def list(credential_manager_acs_system_id: nil) request_seam_object( :post, "/user_identities/list", - Seam::UserIdentity, + Seam::Resources::UserIdentity, "user_identities", body: {credential_manager_acs_system_id: credential_manager_acs_system_id}.compact ) @@ -71,7 +71,7 @@ def list_accessible_devices(user_identity_id:) request_seam_object( :post, "/user_identities/list_accessible_devices", - Seam::Device, + Seam::Resources::Device, "devices", body: {user_identity_id: user_identity_id}.compact ) @@ -81,7 +81,7 @@ def list_acs_systems(user_identity_id:) request_seam_object( :post, "/user_identities/list_acs_systems", - Seam::AcsSystem, + Seam::Resources::AcsSystem, "acs_systems", body: {user_identity_id: user_identity_id}.compact ) @@ -91,7 +91,7 @@ def list_acs_users(user_identity_id:) request_seam_object( :post, "/user_identities/list_acs_users", - Seam::AcsUser, + Seam::Resources::AcsUser, "acs_users", body: {user_identity_id: user_identity_id}.compact ) diff --git a/lib/seam/routes/clients/user_identities_enrollment_automations.rb b/lib/seam/routes/clients/user_identities_enrollment_automations.rb index 038422c..d7caf2e 100644 --- a/lib/seam/routes/clients/user_identities_enrollment_automations.rb +++ b/lib/seam/routes/clients/user_identities_enrollment_automations.rb @@ -17,7 +17,7 @@ def get(enrollment_automation_id:) request_seam_object( :post, "/user_identities/enrollment_automations/get", - Seam::EnrollmentAutomation, + Seam::Resources::EnrollmentAutomation, "enrollment_automation", body: {enrollment_automation_id: enrollment_automation_id}.compact ) @@ -37,7 +37,7 @@ def list(user_identity_id:) request_seam_object( :post, "/user_identities/enrollment_automations/list", - Seam::EnrollmentAutomation, + Seam::Resources::EnrollmentAutomation, "enrollment_automations", body: {user_identity_id: user_identity_id}.compact ) diff --git a/lib/seam/routes/clients/webhooks.rb b/lib/seam/routes/clients/webhooks.rb index 4bb585e..d7e4e89 100644 --- a/lib/seam/routes/clients/webhooks.rb +++ b/lib/seam/routes/clients/webhooks.rb @@ -7,7 +7,7 @@ def create(url:, event_types: nil) request_seam_object( :post, "/webhooks/create", - Seam::Webhook, + Seam::Resources::Webhook, "webhook", body: {url: url, event_types: event_types}.compact ) @@ -27,7 +27,7 @@ def get(webhook_id:) request_seam_object( :post, "/webhooks/get", - Seam::Webhook, + Seam::Resources::Webhook, "webhook", body: {webhook_id: webhook_id}.compact ) @@ -37,7 +37,7 @@ def list request_seam_object( :post, "/webhooks/list", - Seam::Webhook, + Seam::Resources::Webhook, "webhooks", body: {}.compact ) diff --git a/lib/seam/routes/clients/workspaces.rb b/lib/seam/routes/clients/workspaces.rb index 9493226..91267cf 100644 --- a/lib/seam/routes/clients/workspaces.rb +++ b/lib/seam/routes/clients/workspaces.rb @@ -9,7 +9,7 @@ def create(name:, company_name: nil, connect_partner_name: nil, is_sandbox: nil, request_seam_object( :post, "/workspaces/create", - Seam::Workspace, + Seam::Resources::Workspace, "workspace", body: {name: name, company_name: company_name, connect_partner_name: connect_partner_name, is_sandbox: is_sandbox, webview_logo_shape: webview_logo_shape, webview_primary_button_color: webview_primary_button_color}.compact ) @@ -19,7 +19,7 @@ def get request_seam_object( :post, "/workspaces/get", - Seam::Workspace, + Seam::Resources::Workspace, "workspace", body: {}.compact ) @@ -29,7 +29,7 @@ def list request_seam_object( :post, "/workspaces/list", - Seam::Workspace, + Seam::Resources::Workspace, "workspaces", body: {}.compact ) @@ -39,7 +39,7 @@ def reset_sandbox(wait_for_action_attempt: nil) action_attempt = request_seam_object( :post, "/workspaces/reset_sandbox", - Seam::ActionAttempt, + Seam::Resources::ActionAttempt, "action_attempt", body: {}.compact ) diff --git a/lib/seam/routes/resources/access_code.rb b/lib/seam/routes/resources/access_code.rb index 1f5ef01..b34e4b0 100644 --- a/lib/seam/routes/resources/access_code.rb +++ b/lib/seam/routes/resources/access_code.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class AccessCode < BaseResource - attr_accessor :access_code_id, :code, :common_code_key, :device_id, :is_backup, :is_backup_access_code_available, :is_external_modification_allowed, :is_managed, :is_offline_access_code, :is_one_time_use, :is_scheduled_on_device, :is_waiting_for_code_assignment, :name, :pulled_backup_access_code_id, :status, :type + module Resources + class AccessCode < BaseResource + attr_accessor :access_code_id, :code, :common_code_key, :device_id, :is_backup, :is_backup_access_code_available, :is_external_modification_allowed, :is_managed, :is_offline_access_code, :is_one_time_use, :is_scheduled_on_device, :is_waiting_for_code_assignment, :name, :pulled_backup_access_code_id, :status, :type - date_accessor :created_at, :ends_at, :starts_at + date_accessor :created_at, :ends_at, :starts_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/acs_access_group.rb b/lib/seam/routes/resources/acs_access_group.rb index 23ffc5b..d797da9 100644 --- a/lib/seam/routes/resources/acs_access_group.rb +++ b/lib/seam/routes/resources/acs_access_group.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class AcsAccessGroup < BaseResource - attr_accessor :access_group_type, :access_group_type_display_name, :acs_access_group_id, :acs_system_id, :display_name, :external_type, :external_type_display_name, :is_managed, :name, :workspace_id + module Resources + class AcsAccessGroup < BaseResource + attr_accessor :access_group_type, :access_group_type_display_name, :acs_access_group_id, :acs_system_id, :display_name, :external_type, :external_type_display_name, :is_managed, :name, :workspace_id - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/acs_credential.rb b/lib/seam/routes/resources/acs_credential.rb index 844403f..1dde327 100644 --- a/lib/seam/routes/resources/acs_credential.rb +++ b/lib/seam/routes/resources/acs_credential.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class AcsCredential < BaseResource - attr_accessor :access_method, :acs_credential_id, :acs_credential_pool_id, :acs_system_id, :acs_user_id, :code, :display_name, :ends_at, :external_type, :external_type_display_name, :is_latest_desired_state_synced_with_provider, :is_managed, :is_multi_phone_sync_credential, :parent_acs_credential_id, :starts_at, :visionline_metadata, :workspace_id + module Resources + class AcsCredential < BaseResource + attr_accessor :access_method, :acs_credential_id, :acs_credential_pool_id, :acs_system_id, :acs_user_id, :code, :display_name, :ends_at, :external_type, :external_type_display_name, :is_latest_desired_state_synced_with_provider, :is_managed, :is_multi_phone_sync_credential, :parent_acs_credential_id, :starts_at, :visionline_metadata, :workspace_id - date_accessor :created_at, :latest_desired_state_synced_with_provider_at + date_accessor :created_at, :latest_desired_state_synced_with_provider_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/acs_credential_pool.rb b/lib/seam/routes/resources/acs_credential_pool.rb index b7e6816..3c5586d 100644 --- a/lib/seam/routes/resources/acs_credential_pool.rb +++ b/lib/seam/routes/resources/acs_credential_pool.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class AcsCredentialPool < BaseResource - attr_accessor :acs_credential_pool_id, :acs_system_id, :display_name, :external_type, :external_type_display_name, :workspace_id + module Resources + class AcsCredentialPool < BaseResource + attr_accessor :acs_credential_pool_id, :acs_system_id, :display_name, :external_type, :external_type_display_name, :workspace_id - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/acs_credential_provisioning_automation.rb b/lib/seam/routes/resources/acs_credential_provisioning_automation.rb index 43e0d5b..ac0a2e1 100644 --- a/lib/seam/routes/resources/acs_credential_provisioning_automation.rb +++ b/lib/seam/routes/resources/acs_credential_provisioning_automation.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class AcsCredentialProvisioningAutomation < BaseResource - attr_accessor :acs_credential_provisioning_automation_id, :credential_manager_acs_system_id, :user_identity_id, :workspace_id + module Resources + class AcsCredentialProvisioningAutomation < BaseResource + attr_accessor :acs_credential_provisioning_automation_id, :credential_manager_acs_system_id, :user_identity_id, :workspace_id - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/acs_entrance.rb b/lib/seam/routes/resources/acs_entrance.rb index 9a2e87d..2a45730 100644 --- a/lib/seam/routes/resources/acs_entrance.rb +++ b/lib/seam/routes/resources/acs_entrance.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true module Seam - class AcsEntrance < BaseResource - attr_accessor :acs_entrance_id, :acs_system_id, :display_name, :latch_metadata, :visionline_metadata + module Resources + class AcsEntrance < BaseResource + attr_accessor :acs_entrance_id, :acs_system_id, :display_name, :latch_metadata, :visionline_metadata - date_accessor :created_at + date_accessor :created_at - include Seam::ResourceErrorsSupport + include Seam::Resources::ResourceErrorsSupport + end end end diff --git a/lib/seam/routes/resources/acs_system.rb b/lib/seam/routes/resources/acs_system.rb index a141959..79253b5 100644 --- a/lib/seam/routes/resources/acs_system.rb +++ b/lib/seam/routes/resources/acs_system.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class AcsSystem < BaseResource - attr_accessor :acs_system_id, :can_add_acs_users_to_acs_access_groups, :can_automate_enrollment, :can_create_acs_access_groups, :can_remove_acs_users_from_acs_access_groups, :connected_account_ids, :external_type, :external_type_display_name, :image_alt_text, :image_url, :name, :system_type, :system_type_display_name, :visionline_metadata, :workspace_id + module Resources + class AcsSystem < BaseResource + attr_accessor :acs_system_id, :can_add_acs_users_to_acs_access_groups, :can_automate_enrollment, :can_create_acs_access_groups, :can_remove_acs_users_from_acs_access_groups, :connected_account_ids, :external_type, :external_type_display_name, :image_alt_text, :image_url, :name, :system_type, :system_type_display_name, :visionline_metadata, :workspace_id - date_accessor :created_at + date_accessor :created_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/acs_user.rb b/lib/seam/routes/resources/acs_user.rb index 4f78d6e..ef9c2a2 100644 --- a/lib/seam/routes/resources/acs_user.rb +++ b/lib/seam/routes/resources/acs_user.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class AcsUser < BaseResource - attr_accessor :access_schedule, :acs_system_id, :acs_user_id, :display_name, :email, :email_address, :external_type, :external_type_display_name, :full_name, :hid_acs_system_id, :is_latest_desired_state_synced_with_provider, :is_managed, :is_suspended, :phone_number, :user_identity_email_address, :user_identity_full_name, :user_identity_id, :user_identity_phone_number, :workspace_id + module Resources + class AcsUser < BaseResource + attr_accessor :access_schedule, :acs_system_id, :acs_user_id, :display_name, :email, :email_address, :external_type, :external_type_display_name, :full_name, :hid_acs_system_id, :is_latest_desired_state_synced_with_provider, :is_managed, :is_suspended, :phone_number, :user_identity_email_address, :user_identity_full_name, :user_identity_id, :user_identity_phone_number, :workspace_id - date_accessor :created_at, :latest_desired_state_synced_with_provider_at + date_accessor :created_at, :latest_desired_state_synced_with_provider_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/action_attempt.rb b/lib/seam/routes/resources/action_attempt.rb index 0f2ace8..58f3278 100644 --- a/lib/seam/routes/resources/action_attempt.rb +++ b/lib/seam/routes/resources/action_attempt.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true module Seam - class ActionAttempt < BaseResource - attr_accessor :action_attempt_id, :action_type, :error, :result, :status + module Resources + class ActionAttempt < BaseResource + attr_accessor :action_attempt_id, :action_type, :error, :result, :status + end end end diff --git a/lib/seam/routes/resources/client_session.rb b/lib/seam/routes/resources/client_session.rb index a4b09b3..ff34b6b 100644 --- a/lib/seam/routes/resources/client_session.rb +++ b/lib/seam/routes/resources/client_session.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class ClientSession < BaseResource - attr_accessor :client_session_id, :connect_webview_ids, :connected_account_ids, :device_count, :token, :user_identifier_key, :user_identity_ids, :workspace_id + module Resources + class ClientSession < BaseResource + attr_accessor :client_session_id, :connect_webview_ids, :connected_account_ids, :device_count, :token, :user_identifier_key, :user_identity_ids, :workspace_id - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/connect_webview.rb b/lib/seam/routes/resources/connect_webview.rb index b9e06d3..563f8ea 100644 --- a/lib/seam/routes/resources/connect_webview.rb +++ b/lib/seam/routes/resources/connect_webview.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class ConnectWebview < BaseResource - attr_accessor :accepted_devices, :accepted_providers, :any_device_allowed, :any_provider_allowed, :automatically_manage_new_devices, :connect_webview_id, :connected_account_id, :custom_metadata, :custom_redirect_failure_url, :custom_redirect_url, :device_selection_mode, :login_successful, :selected_provider, :status, :url, :wait_for_device_creation, :workspace_id + module Resources + class ConnectWebview < BaseResource + attr_accessor :accepted_devices, :accepted_providers, :any_device_allowed, :any_provider_allowed, :automatically_manage_new_devices, :connect_webview_id, :connected_account_id, :custom_metadata, :custom_redirect_failure_url, :custom_redirect_url, :device_selection_mode, :login_successful, :selected_provider, :status, :url, :wait_for_device_creation, :workspace_id - date_accessor :authorized_at, :created_at + date_accessor :authorized_at, :created_at + end end end diff --git a/lib/seam/routes/resources/connected_account.rb b/lib/seam/routes/resources/connected_account.rb index e4d1f86..2593f37 100644 --- a/lib/seam/routes/resources/connected_account.rb +++ b/lib/seam/routes/resources/connected_account.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class ConnectedAccount < BaseResource - attr_accessor :account_type, :account_type_display_name, :automatically_manage_new_devices, :connected_account_id, :custom_metadata, :user_identifier + module Resources + class ConnectedAccount < BaseResource + attr_accessor :account_type, :account_type_display_name, :automatically_manage_new_devices, :connected_account_id, :custom_metadata, :user_identifier - date_accessor :created_at + date_accessor :created_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/device.rb b/lib/seam/routes/resources/device.rb index 3eb943b..72a6f12 100644 --- a/lib/seam/routes/resources/device.rb +++ b/lib/seam/routes/resources/device.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class Device < BaseResource - attr_accessor :can_hvac_cool, :can_hvac_heat, :can_hvac_heat_cool, :can_program_offline_access_codes, :can_program_online_access_codes, :can_remotely_lock, :can_remotely_unlock, :can_simulate_connection, :can_simulate_disconnection, :can_simulate_removal, :can_turn_off_hvac, :capabilities_supported, :connected_account_id, :custom_metadata, :device_id, :device_type, :display_name, :is_managed, :location, :nickname, :properties, :workspace_id + module Resources + class Device < BaseResource + attr_accessor :can_hvac_cool, :can_hvac_heat, :can_hvac_heat_cool, :can_program_offline_access_codes, :can_program_online_access_codes, :can_remotely_lock, :can_remotely_unlock, :can_simulate_connection, :can_simulate_disconnection, :can_simulate_removal, :can_turn_off_hvac, :capabilities_supported, :connected_account_id, :custom_metadata, :device_id, :device_type, :display_name, :is_managed, :location, :nickname, :properties, :workspace_id - date_accessor :created_at + date_accessor :created_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/device_provider.rb b/lib/seam/routes/resources/device_provider.rb index 9990f9c..7b2bdd9 100644 --- a/lib/seam/routes/resources/device_provider.rb +++ b/lib/seam/routes/resources/device_provider.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true module Seam - class DeviceProvider < BaseResource - attr_accessor :can_hvac_cool, :can_hvac_heat, :can_hvac_heat_cool, :can_program_offline_access_codes, :can_program_online_access_codes, :can_remotely_lock, :can_remotely_unlock, :can_simulate_connection, :can_simulate_disconnection, :can_simulate_removal, :can_turn_off_hvac, :device_provider_name, :display_name, :image_url, :provider_categories + module Resources + class DeviceProvider < BaseResource + attr_accessor :can_hvac_cool, :can_hvac_heat, :can_hvac_heat_cool, :can_program_offline_access_codes, :can_program_online_access_codes, :can_remotely_lock, :can_remotely_unlock, :can_simulate_connection, :can_simulate_disconnection, :can_simulate_removal, :can_turn_off_hvac, :device_provider_name, :display_name, :image_url, :provider_categories + end end end diff --git a/lib/seam/routes/resources/enrollment_automation.rb b/lib/seam/routes/resources/enrollment_automation.rb index 3fba969..91ed104 100644 --- a/lib/seam/routes/resources/enrollment_automation.rb +++ b/lib/seam/routes/resources/enrollment_automation.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class EnrollmentAutomation < BaseResource - attr_accessor :credential_manager_acs_system_id, :enrollment_automation_id, :user_identity_id, :workspace_id + module Resources + class EnrollmentAutomation < BaseResource + attr_accessor :credential_manager_acs_system_id, :enrollment_automation_id, :user_identity_id, :workspace_id - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/event.rb b/lib/seam/routes/resources/event.rb index bbf7200..3cb47ba 100644 --- a/lib/seam/routes/resources/event.rb +++ b/lib/seam/routes/resources/event.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class SeamEvent < BaseResource - attr_accessor :acs_credential_id, :acs_system_id, :acs_user_id, :action_attempt_id, :client_session_id, :device_id, :enrollment_automation_id, :event_description, :event_id, :event_type, :workspace_id + module Resources + class SeamEvent < BaseResource + attr_accessor :acs_credential_id, :acs_system_id, :acs_user_id, :action_attempt_id, :client_session_id, :device_id, :enrollment_automation_id, :event_description, :event_id, :event_type, :workspace_id - date_accessor :created_at, :occurred_at + date_accessor :created_at, :occurred_at + end end end diff --git a/lib/seam/routes/resources/network.rb b/lib/seam/routes/resources/network.rb index 343a602..08ba313 100644 --- a/lib/seam/routes/resources/network.rb +++ b/lib/seam/routes/resources/network.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class Network < BaseResource - attr_accessor :display_name, :network_id, :workspace_id + module Resources + class Network < BaseResource + attr_accessor :display_name, :network_id, :workspace_id - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/noise_threshold.rb b/lib/seam/routes/resources/noise_threshold.rb index 8a8ad13..16f7737 100644 --- a/lib/seam/routes/resources/noise_threshold.rb +++ b/lib/seam/routes/resources/noise_threshold.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true module Seam - class NoiseThreshold < BaseResource - attr_accessor :device_id, :ends_daily_at, :name, :noise_threshold_decibels, :noise_threshold_id, :noise_threshold_nrs, :starts_daily_at + module Resources + class NoiseThreshold < BaseResource + attr_accessor :device_id, :ends_daily_at, :name, :noise_threshold_decibels, :noise_threshold_id, :noise_threshold_nrs, :starts_daily_at + end end end diff --git a/lib/seam/routes/resources/phone.rb b/lib/seam/routes/resources/phone.rb index 319ea4c..327152e 100644 --- a/lib/seam/routes/resources/phone.rb +++ b/lib/seam/routes/resources/phone.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class Phone < BaseResource - attr_accessor :can_hvac_cool, :can_hvac_heat, :can_hvac_heat_cool, :can_program_offline_access_codes, :can_program_online_access_codes, :can_remotely_lock, :can_remotely_unlock, :can_simulate_connection, :can_simulate_disconnection, :can_simulate_removal, :can_turn_off_hvac, :capabilities_supported, :custom_metadata, :device_id, :device_type, :display_name, :is_managed, :location, :nickname, :properties, :workspace_id + module Resources + class Phone < BaseResource + attr_accessor :can_hvac_cool, :can_hvac_heat, :can_hvac_heat_cool, :can_program_offline_access_codes, :can_program_online_access_codes, :can_remotely_lock, :can_remotely_unlock, :can_simulate_connection, :can_simulate_disconnection, :can_simulate_removal, :can_turn_off_hvac, :capabilities_supported, :custom_metadata, :device_id, :device_type, :display_name, :is_managed, :location, :nickname, :properties, :workspace_id - date_accessor :created_at + date_accessor :created_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/resource_error.rb b/lib/seam/routes/resources/resource_error.rb index 412927b..fc8239b 100644 --- a/lib/seam/routes/resources/resource_error.rb +++ b/lib/seam/routes/resources/resource_error.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class ResourceError < BaseResource - attr_accessor :error_code, :message + module Resources + class ResourceError < BaseResource + attr_accessor :error_code, :message - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/resource_errors_support.rb b/lib/seam/routes/resources/resource_errors_support.rb index cfd89cb..5c54054 100644 --- a/lib/seam/routes/resources/resource_errors_support.rb +++ b/lib/seam/routes/resources/resource_errors_support.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - module ResourceErrorsSupport - def errors - @errors_converted ||= @errors.is_a?(Array) ? Seam::ResourceError.load_from_response(@errors) : [] + module Resources + module ResourceErrorsSupport + def errors + @errors_converted ||= @errors.is_a?(Array) ? Seam::Resources::ResourceError.load_from_response(@errors) : [] + end end end end diff --git a/lib/seam/routes/resources/resource_warning.rb b/lib/seam/routes/resources/resource_warning.rb index e822cab..05e4ce9 100644 --- a/lib/seam/routes/resources/resource_warning.rb +++ b/lib/seam/routes/resources/resource_warning.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class ResourceWarning < BaseResource - attr_accessor :warning_code, :message + module Resources + class ResourceWarning < BaseResource + attr_accessor :warning_code, :message - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/resource_warnings_support.rb b/lib/seam/routes/resources/resource_warnings_support.rb index 765eb78..3efcc76 100644 --- a/lib/seam/routes/resources/resource_warnings_support.rb +++ b/lib/seam/routes/resources/resource_warnings_support.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - module ResourceWarningsSupport - def warnings - @warnings_converted ||= @warnings.is_a?(Array) ? Seam::ResourceWarning.load_from_response(@warnings) : [] + module Resources + module ResourceWarningsSupport + def warnings + @warnings_converted ||= @warnings.is_a?(Array) ? Seam::Resources::ResourceWarning.load_from_response(@warnings) : [] + end end end end diff --git a/lib/seam/routes/resources/service_health.rb b/lib/seam/routes/resources/service_health.rb index b0480e9..235d7c1 100644 --- a/lib/seam/routes/resources/service_health.rb +++ b/lib/seam/routes/resources/service_health.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true module Seam - class ServiceHealth < BaseResource - attr_accessor :description, :service, :status + module Resources + class ServiceHealth < BaseResource + attr_accessor :description, :service, :status + end end end diff --git a/lib/seam/routes/resources/thermostat_schedule.rb b/lib/seam/routes/resources/thermostat_schedule.rb index b9a23b8..a871110 100644 --- a/lib/seam/routes/resources/thermostat_schedule.rb +++ b/lib/seam/routes/resources/thermostat_schedule.rb @@ -1,11 +1,13 @@ # frozen_string_literal: true module Seam - class ThermostatSchedule < BaseResource - attr_accessor :climate_preset_key, :device_id, :max_override_period_minutes, :name, :thermostat_schedule_id + module Resources + class ThermostatSchedule < BaseResource + attr_accessor :climate_preset_key, :device_id, :max_override_period_minutes, :name, :thermostat_schedule_id - date_accessor :created_at, :ends_at, :starts_at + date_accessor :created_at, :ends_at, :starts_at - include Seam::ResourceErrorsSupport + include Seam::Resources::ResourceErrorsSupport + end end end diff --git a/lib/seam/routes/resources/unmanaged_access_code.rb b/lib/seam/routes/resources/unmanaged_access_code.rb index be46405..5bd5d14 100644 --- a/lib/seam/routes/resources/unmanaged_access_code.rb +++ b/lib/seam/routes/resources/unmanaged_access_code.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class UnmanagedAccessCode < BaseResource - attr_accessor :access_code_id, :code, :device_id, :is_managed, :name, :status, :type + module Resources + class UnmanagedAccessCode < BaseResource + attr_accessor :access_code_id, :code, :device_id, :is_managed, :name, :status, :type - date_accessor :created_at, :ends_at, :starts_at + date_accessor :created_at, :ends_at, :starts_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/unmanaged_device.rb b/lib/seam/routes/resources/unmanaged_device.rb index d15f360..a29a1af 100644 --- a/lib/seam/routes/resources/unmanaged_device.rb +++ b/lib/seam/routes/resources/unmanaged_device.rb @@ -1,12 +1,14 @@ # frozen_string_literal: true module Seam - class UnmanagedDevice < BaseResource - attr_accessor :can_hvac_cool, :can_hvac_heat, :can_hvac_heat_cool, :can_program_offline_access_codes, :can_program_online_access_codes, :can_remotely_lock, :can_remotely_unlock, :can_simulate_connection, :can_simulate_disconnection, :can_simulate_removal, :can_turn_off_hvac, :capabilities_supported, :connected_account_id, :device_id, :device_type, :is_managed, :location, :properties, :workspace_id + module Resources + class UnmanagedDevice < BaseResource + attr_accessor :can_hvac_cool, :can_hvac_heat, :can_hvac_heat_cool, :can_program_offline_access_codes, :can_program_online_access_codes, :can_remotely_lock, :can_remotely_unlock, :can_simulate_connection, :can_simulate_disconnection, :can_simulate_removal, :can_turn_off_hvac, :capabilities_supported, :connected_account_id, :device_id, :device_type, :is_managed, :location, :properties, :workspace_id - date_accessor :created_at + date_accessor :created_at - include Seam::ResourceErrorsSupport - include Seam::ResourceWarningsSupport + include Seam::Resources::ResourceErrorsSupport + include Seam::Resources::ResourceWarningsSupport + end end end diff --git a/lib/seam/routes/resources/user_identity.rb b/lib/seam/routes/resources/user_identity.rb index 0424719..e8e54d0 100644 --- a/lib/seam/routes/resources/user_identity.rb +++ b/lib/seam/routes/resources/user_identity.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true module Seam - class UserIdentity < BaseResource - attr_accessor :display_name, :email_address, :full_name, :phone_number, :user_identity_id, :user_identity_key, :workspace_id + module Resources + class UserIdentity < BaseResource + attr_accessor :display_name, :email_address, :full_name, :phone_number, :user_identity_id, :user_identity_key, :workspace_id - date_accessor :created_at + date_accessor :created_at + end end end diff --git a/lib/seam/routes/resources/webhook.rb b/lib/seam/routes/resources/webhook.rb index 86fc582..3e26abb 100644 --- a/lib/seam/routes/resources/webhook.rb +++ b/lib/seam/routes/resources/webhook.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true module Seam - class Webhook < BaseResource - attr_accessor :event_types, :secret, :url, :webhook_id + module Resources + class Webhook < BaseResource + attr_accessor :event_types, :secret, :url, :webhook_id + end end end diff --git a/lib/seam/routes/resources/workspace.rb b/lib/seam/routes/resources/workspace.rb index 8693bb2..da015bc 100644 --- a/lib/seam/routes/resources/workspace.rb +++ b/lib/seam/routes/resources/workspace.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true module Seam - class Workspace < BaseResource - attr_accessor :company_name, :connect_partner_name, :is_sandbox, :name, :workspace_id + module Resources + class Workspace < BaseResource + attr_accessor :company_name, :connect_partner_name, :is_sandbox, :name, :workspace_id + end end end diff --git a/package-lock.json b/package-lock.json index 231aa5b..874f143 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "@seamapi/ruby", "devDependencies": { - "@seamapi/nextlove-sdk-generator": "1.14.4", + "@seamapi/nextlove-sdk-generator": "1.14.5", "@seamapi/types": "1.243.0", "del": "^7.1.0", "prettier": "^3.2.5" @@ -416,10 +416,11 @@ } }, "node_modules/@seamapi/nextlove-sdk-generator": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/@seamapi/nextlove-sdk-generator/-/nextlove-sdk-generator-1.14.4.tgz", - "integrity": "sha512-kL7lyKEOh/kp5HgEzNYVGZZGYo9Li8LPU/QSGKNLx8chupHt9Prar3d+JEykeOhIcvIFLIWcJicTXhtoY+vYYg==", + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/@seamapi/nextlove-sdk-generator/-/nextlove-sdk-generator-1.14.5.tgz", + "integrity": "sha512-B+9au4emxfit1tjRGdExQiyfF7P9uwY3LcFGKpIAtxGnIJLscA/4TgDmjG5OGpMWxCq21a+JnVXVuGj82lxgQg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.walk": "^2.0.0", "axios": "^1.5.0", diff --git a/package.json b/package.json index b90c6b0..34addc9 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "format": "prettier --write --ignore-path .gitignore ." }, "devDependencies": { - "@seamapi/nextlove-sdk-generator": "1.14.4", + "@seamapi/nextlove-sdk-generator": "1.14.5", "@seamapi/types": "1.243.0", "del": "^7.1.0", "prettier": "^3.2.5" diff --git a/spec/clients/access_codes_spec.rb b/spec/clients/access_codes_spec.rb index ea90749..415f5ae 100644 --- a/spec/clients/access_codes_spec.rb +++ b/spec/clients/access_codes_spec.rb @@ -21,7 +21,7 @@ it "returns a list of Access codes" do expect(access_codes).to be_a(Array) - expect(access_codes.first).to be_a(Seam::AccessCode) + expect(access_codes.first).to be_a(Seam::Resources::AccessCode) expect(access_codes.first.access_code_id).to be_a(String) end end @@ -38,7 +38,7 @@ it "returns a list of Access codes" do expect(access_codes).to be_a(Array) - expect(access_codes.first).to be_a(Seam::AccessCode) + expect(access_codes.first).to be_a(Seam::Resources::AccessCode) expect(access_codes.first.access_code_id).to be_a(String) end end @@ -64,7 +64,7 @@ let(:result) { client.access_codes.get(access_code_id: access_code_id) } it "returns an Access Code" do - expect(result).to be_a(Seam::AccessCode) + expect(result).to be_a(Seam::Resources::AccessCode) end it "returns access code errors" do @@ -88,7 +88,7 @@ let(:result) { client.access_codes.create(**access_code_hash) } it "returns an Access Code" do - expect(result).to be_a(Seam::AccessCode) + expect(result).to be_a(Seam::Resources::AccessCode) end end @@ -165,7 +165,7 @@ let(:result) { client.access_codes.pull_backup_access_code(access_code_id: access_code_id) } it "returns an backup Access Code" do - expect(result).to be_a(Seam::AccessCode) + expect(result).to be_a(Seam::Resources::AccessCode) end end end diff --git a/spec/clients/action_attempts_spec.rb b/spec/clients/action_attempts_spec.rb index 863f59f..5514472 100644 --- a/spec/clients/action_attempts_spec.rb +++ b/spec/clients/action_attempts_spec.rb @@ -16,7 +16,7 @@ let(:result) { client.action_attempts.get(action_attempt_id: action_attempt_id) } it "returns a Device" do - expect(result).to be_a(Seam::ActionAttempt) + expect(result).to be_a(Seam::Resources::ActionAttempt) end end end diff --git a/spec/clients/connect_webviews_spec.rb b/spec/clients/connect_webviews_spec.rb index 8e6086a..6d3de61 100644 --- a/spec/clients/connect_webviews_spec.rb +++ b/spec/clients/connect_webviews_spec.rb @@ -15,7 +15,7 @@ it "returns a list of Devices" do expect(connect_webviews).to be_a(Array) - expect(connect_webviews.first).to be_a(Seam::ConnectWebview) + expect(connect_webviews.first).to be_a(Seam::Resources::ConnectWebview) expect(connect_webviews.first.connect_webview_id).to be_a(String) end end @@ -33,7 +33,7 @@ let(:result) { client.connect_webviews.get(connect_webview_id: connect_webview_id) } it "returns a Device" do - expect(result).to be_a(Seam::ConnectWebview) + expect(result).to be_a(Seam::Resources::ConnectWebview) end end @@ -70,7 +70,7 @@ end it "returns a ConnectWebview" do - expect(result).to be_a(Seam::ConnectWebview) + expect(result).to be_a(Seam::Resources::ConnectWebview) end end end diff --git a/spec/clients/connected_accounts_spec.rb b/spec/clients/connected_accounts_spec.rb index 462b359..0ba41dd 100644 --- a/spec/clients/connected_accounts_spec.rb +++ b/spec/clients/connected_accounts_spec.rb @@ -17,7 +17,7 @@ let(:result) { client.connected_accounts.get(connected_account_id: connected_account_id) } it "returns a ConnectedAccount" do - expect(result).to be_a(Seam::ConnectedAccount) + expect(result).to be_a(Seam::Resources::ConnectedAccount) end end @@ -33,7 +33,7 @@ let(:result) { client.connected_accounts.get(email: email) } it "returns a ConnectedAccount" do - expect(result).to be_a(Seam::ConnectedAccount) + expect(result).to be_a(Seam::Resources::ConnectedAccount) end end @@ -75,7 +75,7 @@ it "returns a ConnectedAccount Array" do expect(result).to be_a(Array) - expect(result.first).to be_a(Seam::ConnectedAccount) + expect(result.first).to be_a(Seam::Resources::ConnectedAccount) end end end diff --git a/spec/clients/devices_spec.rb b/spec/clients/devices_spec.rb index ffadc74..81faca2 100644 --- a/spec/clients/devices_spec.rb +++ b/spec/clients/devices_spec.rb @@ -14,7 +14,7 @@ it "returns a list of Devices" do expect(devices).to be_a(Array) - expect(devices.first).to be_a(Seam::Device) + expect(devices.first).to be_a(Seam::Resources::Device) expect(devices.first.device_id).to be_a(String) end end @@ -33,7 +33,7 @@ let(:result) { client.devices.get(device_id: device_id) } it "returns a Device" do - expect(result).to be_a(Seam::Device) + expect(result).to be_a(Seam::Resources::Device) expect(result.properties.manufacturer).to eq("august") end end @@ -51,7 +51,7 @@ let(:result) { client.devices.get(name: name) } it "returns a Device" do - expect(result).to be_a(Seam::Device) + expect(result).to be_a(Seam::Resources::Device) end end end @@ -74,7 +74,7 @@ let(:result) { client.devices.get(device_id: device_id) } it "returns a Device" do - expect(result).to be_a(Seam::Device) + expect(result).to be_a(Seam::Resources::Device) end it "returns device errors" do @@ -112,7 +112,7 @@ it "returns a list of stable Device Providers" do expect(device_providers).to be_a(Array) expect(device_providers.length).to eq(2) - expect(device_providers.first).to be_a(Seam::DeviceProvider) + expect(device_providers.first).to be_a(Seam::Resources::DeviceProvider) expect(device_providers.first.device_provider_name).to be_a(String) expect(device_providers.first.display_name).to be_a(String) expect(device_providers.first.provider_categories).to be_a(Array) @@ -132,7 +132,7 @@ expect(device_providers).to be_a(Array) expect(device_providers.length).to eq(1) - expect(device_providers.first).to be_a(Seam::DeviceProvider) + expect(device_providers.first).to be_a(Seam::Resources::DeviceProvider) expect(device_providers.first.device_provider_name).to be_a(String) expect(device_providers.first.display_name).to be_a(String) expect(device_providers.first.provider_categories).to be_a(Array) diff --git a/spec/clients/events_spec.rb b/spec/clients/events_spec.rb index 36ad5c1..7301507 100644 --- a/spec/clients/events_spec.rb +++ b/spec/clients/events_spec.rb @@ -16,7 +16,7 @@ it "returns a list of Events" do expect(events).to be_a(Array) - expect(events.first).to be_a(Seam::SeamEvent) + expect(events.first).to be_a(Seam::Resources::SeamEvent) expect(events.first.event_id).to be_a(String) end end @@ -34,7 +34,7 @@ let(:result) { client.events.get(event_id: event_id) } it "returns an Event" do - expect(result).to be_a(Seam::SeamEvent) + expect(result).to be_a(Seam::Resources::SeamEvent) end end end diff --git a/spec/clients/locks_spec.rb b/spec/clients/locks_spec.rb index 50c8c90..8a85895 100644 --- a/spec/clients/locks_spec.rb +++ b/spec/clients/locks_spec.rb @@ -14,7 +14,7 @@ it "returns a list of Devices" do expect(devices).to be_a(Array) - expect(devices.first).to be_a(Seam::Device) + expect(devices.first).to be_a(Seam::Resources::Device) expect(devices.first.device_id).to be_a(String) end end @@ -32,7 +32,7 @@ let(:lock) { client.locks.get(device_id: device_id) } it "returns a list of Devices" do - expect(lock).to be_a(Seam::Device) + expect(lock).to be_a(Seam::Resources::Device) expect(lock.device_id).to be_a(String) end end @@ -67,7 +67,7 @@ let(:result) { client.locks.unlock_door(device_id: device_id) } it "returns an action attempt" do - expect(result).to be_a(Seam::ActionAttempt) + expect(result).to be_a(Seam::Resources::ActionAttempt) end end end @@ -79,7 +79,7 @@ let(:result) { client.locks.lock_door(device_id: device_id) } it "returns an action attempt" do - expect(result).to be_a(Seam::ActionAttempt) + expect(result).to be_a(Seam::Resources::ActionAttempt) end end end diff --git a/spec/clients/unmanaged_access_codes_spec.rb b/spec/clients/unmanaged_access_codes_spec.rb index efcd0ce..cd1eec2 100644 --- a/spec/clients/unmanaged_access_codes_spec.rb +++ b/spec/clients/unmanaged_access_codes_spec.rb @@ -16,7 +16,7 @@ let(:result) { client.unmanaged_access_codes.get(access_code_id: access_code_id) } it "returns an unmanaged Access Code" do - expect(result).to be_a(Seam::UnmanagedAccessCode) + expect(result).to be_a(Seam::Resources::UnmanagedAccessCode) end end @@ -35,7 +35,7 @@ it "returns a list of unmanaged Access Codes" do expect(unmanaged_access_codes).to be_a(Array) - expect(unmanaged_access_codes.first).to be_a(Seam::UnmanagedAccessCode) + expect(unmanaged_access_codes.first).to be_a(Seam::Resources::UnmanagedAccessCode) expect(unmanaged_access_codes.first.access_code_id).to be_a(String) end end diff --git a/spec/clients/unmanaged_devices_spec.rb b/spec/clients/unmanaged_devices_spec.rb index 3670760..f272e20 100644 --- a/spec/clients/unmanaged_devices_spec.rb +++ b/spec/clients/unmanaged_devices_spec.rb @@ -17,7 +17,7 @@ let(:result) { client.unmanaged_devices.get(device_id: device_id) } it "returns an unmanaged Device" do - expect(result).to be_a(Seam::UnmanagedDevice) + expect(result).to be_a(Seam::Resources::UnmanagedDevice) end end @@ -34,7 +34,7 @@ let(:result) { client.unmanaged_devices.get(name: name) } it "returns an unmanaged Device" do - expect(result).to be_a(Seam::UnmanagedDevice) + expect(result).to be_a(Seam::Resources::UnmanagedDevice) end end end @@ -50,7 +50,7 @@ it "returns a list of unmanaged Devices" do expect(unmanaged_devices).to be_a(Array) - expect(unmanaged_devices.first).to be_a(Seam::UnmanagedDevice) + expect(unmanaged_devices.first).to be_a(Seam::Resources::UnmanagedDevice) expect(unmanaged_devices.first.device_id).to be_a(String) end end diff --git a/spec/clients/workspaces_spec.rb b/spec/clients/workspaces_spec.rb index 464a58c..12c2d9b 100644 --- a/spec/clients/workspaces_spec.rb +++ b/spec/clients/workspaces_spec.rb @@ -14,7 +14,7 @@ it "returns a list of Workspaces" do expect(workspaces).to be_a(Array) - expect(workspaces.first).to be_a(Seam::Workspace) + expect(workspaces.first).to be_a(Seam::Resources::Workspace) expect(workspaces.first.workspace_id).to be_a(String) end end @@ -32,7 +32,7 @@ let(:result) { client.workspaces.get } it "returns a Device" do - expect(result).to be_a(Seam::Workspace) + expect(result).to be_a(Seam::Resources::Workspace) end end @@ -50,7 +50,7 @@ let(:result) { client.workspaces.reset_sandbox } it "returns a Resets the Workspace" do - expect(result).to be_a(Seam::ActionAttempt) + expect(result).to be_a(Seam::Resources::ActionAttempt) end end end diff --git a/spec/resources/action_attempt_spec.rb b/spec/resources/action_attempt_spec.rb index 85082b6..ac1bc7f 100644 --- a/spec/resources/action_attempt_spec.rb +++ b/spec/resources/action_attempt_spec.rb @@ -14,7 +14,7 @@ result: {} } end - let(:action_attempt) { Seam::ActionAttempt.new(action_attempt_hash, client) } + let(:action_attempt) { Seam::Resources::ActionAttempt.new(action_attempt_hash, client) } describe ".decide_and_wait" do context "when wait_for_action_attempt is true" do @@ -73,7 +73,7 @@ it "returns an updated ActionAttempt" do expect(result.status).to eq(finished_status) - expect(result).to be_a(Seam::ActionAttempt) + expect(result).to be_a(Seam::Resources::ActionAttempt) end end diff --git a/spec/resources/base_resource_spec.rb b/spec/resources/base_resource_spec.rb index fc89d74..0285009 100644 --- a/spec/resources/base_resource_spec.rb +++ b/spec/resources/base_resource_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe Seam::BaseResource do +RSpec.describe Seam::Resources::BaseResource do let(:client) { Seam.new(api_key: "seam_some_api_key") } let(:device_hash) do { @@ -8,7 +8,7 @@ created_at: "2022-06-07T22:34:14.488Z" } end - let(:device) { Seam::Device.new(device_hash) } + let(:device) { Seam::Resources::Device.new(device_hash) } describe ".date_accessor" do it "parses a date string" do diff --git a/spec/seam_client/client_multi_workspace_spec.rb b/spec/seam_client/client_multi_workspace_spec.rb index bbaa704..8150869 100644 --- a/spec/seam_client/client_multi_workspace_spec.rb +++ b/spec/seam_client/client_multi_workspace_spec.rb @@ -32,7 +32,7 @@ is_sandbox: true ) - expect(workspace).to be_a(Seam::Workspace) + expect(workspace).to be_a(Seam::Resources::Workspace) expect(workspace.workspace_id).to eq("ws_123456") end end From aafc34f6b2a874f6d24a7576c8daa9f41dc4656f Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 3 Oct 2024 14:00:57 +0200 Subject: [PATCH 19/25] Alias factory methods --- lib/seam.rb | 4 ++-- lib/seam/http.rb | 8 ++++++++ lib/seam/http_single_workspace.rb | 8 ++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/seam.rb b/lib/seam.rb index 1e52767..ac0576f 100644 --- a/lib/seam.rb +++ b/lib/seam.rb @@ -21,11 +21,11 @@ def self.new(**args) end def self.from_api_key(api_key, endpoint: nil, wait_for_action_attempt: false, debug: false) - new(api_key: api_key, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) + Http.from_api_key(api_key, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) end def self.from_personal_access_token(personal_access_token, workspace_id, endpoint: nil, wait_for_action_attempt: false, debug: false) - new(personal_access_token: personal_access_token, workspace_id: workspace_id, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) + Http.from_personal_access_token(personal_access_token, workspace_id, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) end def self.lts_version diff --git a/lib/seam/http.rb b/lib/seam/http.rb index a08811e..5ded4d4 100644 --- a/lib/seam/http.rb +++ b/lib/seam/http.rb @@ -8,6 +8,14 @@ def self.new(**args) Http::SingleWorkspace.new(**args) end + def self.from_api_key(api_key, endpoint: nil, wait_for_action_attempt: false, debug: false) + Http::SingleWorkspace.from_api_key(api_key, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) + end + + def self.from_personal_access_token(personal_access_token, workspace_id, endpoint: nil, wait_for_action_attempt: false, debug: false) + Http::SingleWorkspace.from_personal_access_token(personal_access_token, workspace_id, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) + end + class HttpApiError < StandardError attr_reader :code, :status_code, :request_id, :data diff --git a/lib/seam/http_single_workspace.rb b/lib/seam/http_single_workspace.rb index 99c96a8..66ce7aa 100644 --- a/lib/seam/http_single_workspace.rb +++ b/lib/seam/http_single_workspace.rb @@ -24,6 +24,14 @@ def lts_version Seam::LTS_VERSION end + def self.from_api_key(api_key, endpoint: nil, wait_for_action_attempt: false, debug: false) + new(api_key: api_key, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) + end + + def self.from_personal_access_token(personal_access_token, workspace_id, endpoint: nil, wait_for_action_attempt: false, debug: false) + new(personal_access_token: personal_access_token, workspace_id: workspace_id, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) + end + def request_seam_object(method, path, klass, inner_object, config = {}) response = request_seam(method, path, config) From 2d3558f59e0d4ae7e65a4d3ec2d0e6314c8762ad Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 3 Oct 2024 14:19:55 +0200 Subject: [PATCH 20/25] Clean up public exports --- lib/seam.rb | 8 -------- lib/seam/http_multi_workspace.rb | 1 + lib/seam/http_single_workspace.rb | 1 + lib/seam/options.rb | 2 ++ spec/spec_helper.rb | 3 +++ 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/seam.rb b/lib/seam.rb index ac0576f..f37a1db 100644 --- a/lib/seam.rb +++ b/lib/seam.rb @@ -1,20 +1,12 @@ # frozen_string_literal: true -require_relative "seam/version" -require_relative "seam/lts_version" -require_relative "seam/default_endpoint" -require_relative "seam/request" require_relative "seam/logger" require_relative "seam/http" -require_relative "seam/http_multi_workspace" require_relative "seam/base_client" require_relative "seam/base_resource" require_relative "seam/errors" require_relative "seam/webhook" -require_relative "seam/routes/resources/index" -require_relative "seam/routes/clients/index" - module Seam def self.new(**args) Http.new(**args) diff --git a/lib/seam/http_multi_workspace.rb b/lib/seam/http_multi_workspace.rb index dba3408..f912a95 100644 --- a/lib/seam/http_multi_workspace.rb +++ b/lib/seam/http_multi_workspace.rb @@ -3,6 +3,7 @@ require_relative "parse_options" require_relative "lts_version" require_relative "auth" +require_relative "request" module Seam module Http diff --git a/lib/seam/http_single_workspace.rb b/lib/seam/http_single_workspace.rb index 66ce7aa..3ddd5f4 100644 --- a/lib/seam/http_single_workspace.rb +++ b/lib/seam/http_single_workspace.rb @@ -2,6 +2,7 @@ require_relative "parse_options" require_relative "routes/routes" +require_relative "request" module Seam module Http diff --git a/lib/seam/options.rb b/lib/seam/options.rb index c9ab412..2e0464d 100644 --- a/lib/seam/options.rb +++ b/lib/seam/options.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require_relative "default_endpoint" + module SeamOptions def self.get_endpoint(endpoint = nil) endpoint || get_endpoint_from_env || Seam::DEFAULT_ENDPOINT diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d80e139..bf8a056 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -7,6 +7,9 @@ require "seam" require "seam/deep_hash_accessor" +require "seam/routes/resources/index" +require "seam/routes/clients/index" +require "seam/http_multi_workspace" require "webmock/rspec" require "support/helpers" From 8f192d308c10d99393c24a116eecb9543fa4dd59 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 3 Oct 2024 15:15:13 +0200 Subject: [PATCH 21/25] Bump generator to include base client and resource imports in the routes --- lib/seam.rb | 2 -- lib/seam/routes/clients/index.rb | 1 + lib/seam/routes/resources/index.rb | 1 + package-lock.json | 8 ++++---- package.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/seam.rb b/lib/seam.rb index f37a1db..ae5205b 100644 --- a/lib/seam.rb +++ b/lib/seam.rb @@ -2,8 +2,6 @@ require_relative "seam/logger" require_relative "seam/http" -require_relative "seam/base_client" -require_relative "seam/base_resource" require_relative "seam/errors" require_relative "seam/webhook" diff --git a/lib/seam/routes/clients/index.rb b/lib/seam/routes/clients/index.rb index fcc5d68..ecfe11e 100644 --- a/lib/seam/routes/clients/index.rb +++ b/lib/seam/routes/clients/index.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require "seam/base_client" require_relative "access_codes" require_relative "access_codes_simulate" require_relative "access_codes_unmanaged" diff --git a/lib/seam/routes/resources/index.rb b/lib/seam/routes/resources/index.rb index c894805..c06af56 100644 --- a/lib/seam/routes/resources/index.rb +++ b/lib/seam/routes/resources/index.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require "seam/base_resource" require_relative "resource_error" require_relative "resource_warning" require_relative "resource_errors_support" diff --git a/package-lock.json b/package-lock.json index 874f143..df0de9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "@seamapi/ruby", "devDependencies": { - "@seamapi/nextlove-sdk-generator": "1.14.5", + "@seamapi/nextlove-sdk-generator": "1.14.6", "@seamapi/types": "1.243.0", "del": "^7.1.0", "prettier": "^3.2.5" @@ -416,9 +416,9 @@ } }, "node_modules/@seamapi/nextlove-sdk-generator": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/@seamapi/nextlove-sdk-generator/-/nextlove-sdk-generator-1.14.5.tgz", - "integrity": "sha512-B+9au4emxfit1tjRGdExQiyfF7P9uwY3LcFGKpIAtxGnIJLscA/4TgDmjG5OGpMWxCq21a+JnVXVuGj82lxgQg==", + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/@seamapi/nextlove-sdk-generator/-/nextlove-sdk-generator-1.14.6.tgz", + "integrity": "sha512-SGOGUUZ+bzdm2xPzkbBc/a+t9Zlhee/nLF61rHcqGpljugKUTzyyoyT6iGdtFqO0zJiUtljakS1od6AJtONOow==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 34addc9..966df88 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "format": "prettier --write --ignore-path .gitignore ." }, "devDependencies": { - "@seamapi/nextlove-sdk-generator": "1.14.5", + "@seamapi/nextlove-sdk-generator": "1.14.6", "@seamapi/types": "1.243.0", "del": "^7.1.0", "prettier": "^3.2.5" From 5e105cea05a933a5e57e4c8e2cc9f52885678cc2 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 3 Oct 2024 15:22:57 +0200 Subject: [PATCH 22/25] Move action attempt errors under WaitForActionAttempt module --- lib/seam.rb | 2 +- lib/seam/errors.rb | 34 ------------------ lib/seam/helpers/action_attempt.rb | 4 +-- lib/seam/wait_for_action_attempt.rb | 36 +++++++++++++++++++ .../wait_for_action_attepmt_spec.rb | 6 ++-- 5 files changed, 42 insertions(+), 40 deletions(-) delete mode 100644 lib/seam/errors.rb create mode 100644 lib/seam/wait_for_action_attempt.rb diff --git a/lib/seam.rb b/lib/seam.rb index ae5205b..a2a5928 100644 --- a/lib/seam.rb +++ b/lib/seam.rb @@ -2,7 +2,7 @@ require_relative "seam/logger" require_relative "seam/http" -require_relative "seam/errors" +require_relative "seam/wait_for_action_attempt" require_relative "seam/webhook" module Seam diff --git a/lib/seam/errors.rb b/lib/seam/errors.rb deleted file mode 100644 index c9a6a24..0000000 --- a/lib/seam/errors.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -module Seam - module Errors - class ActionAttemptError < StandardError - attr_reader :action_attempt - - def initialize(message, action_attempt) - super(message) - @action_attempt = action_attempt - end - - def name - self.class.name - end - end - - class ActionAttemptFailedError < ActionAttemptError - attr_reader :code - - def initialize(action_attempt) - super(action_attempt.error.message, action_attempt) - @code = action_attempt.error.type - end - end - - class ActionAttemptTimeoutError < ActionAttemptError - def initialize(action_attempt, timeout) - message = "Timed out waiting for action attempt after #{timeout}s" - super(message, action_attempt) - end - end - end -end diff --git a/lib/seam/helpers/action_attempt.rb b/lib/seam/helpers/action_attempt.rb index 439491e..bdd8c0a 100644 --- a/lib/seam/helpers/action_attempt.rb +++ b/lib/seam/helpers/action_attempt.rb @@ -26,12 +26,12 @@ def self.wait_until_finished(action_attempt, client, timeout: nil, polling_inter sleep(polling_interval) time_waiting += polling_interval - raise Errors::ActionAttemptTimeoutError.new(action_attempt, timeout) if time_waiting > timeout + raise Seam::Http::WaitForActionAttempt::TimeoutError.new(action_attempt, timeout) if time_waiting > timeout action_attempt = update_action_attempt(action_attempt, client) end - raise Errors::ActionAttemptFailedError.new(action_attempt) if action_attempt.status == "error" + raise Seam::Http::WaitForActionAttempt::FailedError.new(action_attempt) if action_attempt.status == "error" action_attempt end diff --git a/lib/seam/wait_for_action_attempt.rb b/lib/seam/wait_for_action_attempt.rb new file mode 100644 index 0000000..2eacd83 --- /dev/null +++ b/lib/seam/wait_for_action_attempt.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module Seam + module Http + module WaitForActionAttempt + class ActionAttemptError < StandardError + attr_reader :action_attempt + + def initialize(message, action_attempt) + super(message) + @action_attempt = action_attempt + end + + def name + self.class.name + end + end + + class FailedError < ActionAttemptError + attr_reader :code + + def initialize(action_attempt) + super(action_attempt.error.message, action_attempt) + @code = action_attempt.error.type + end + end + + class TimeoutError < ActionAttemptError + def initialize(action_attempt, timeout) + message = "Timed out waiting for action attempt after #{timeout}s" + super(message, action_attempt) + end + end + end + end +end diff --git a/spec/seam_client/wait_for_action_attepmt_spec.rb b/spec/seam_client/wait_for_action_attepmt_spec.rb index bfba54d..cec3109 100644 --- a/spec/seam_client/wait_for_action_attepmt_spec.rb +++ b/spec/seam_client/wait_for_action_attepmt_spec.rb @@ -119,7 +119,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.1} ) - end.to raise_error(Seam::Errors::ActionAttemptTimeoutError) do |error| + end.to raise_error(Seam::Http::WaitForActionAttempt::TimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end @@ -142,7 +142,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: true ) - end.to raise_error(Seam::Errors::ActionAttemptFailedError) do |error| + end.to raise_error(Seam::Http::WaitForActionAttempt::FailedError) do |error| expect(error.message).to include("Failed") expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq("error") @@ -167,7 +167,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.5, polling_interval: 3} ) - end.to raise_error(Seam::Errors::ActionAttemptTimeoutError) do |error| + end.to raise_error(Seam::Http::WaitForActionAttempt::TimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end From 644f08b05e12b770cb29375192e943de65a7633e Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 10 Oct 2024 14:35:20 +0200 Subject: [PATCH 23/25] Remove Http prefix from http errors --- lib/seam/http.rb | 12 +++++++----- lib/seam/request.rb | 4 ++-- spec/request_spec.rb | 4 ++-- spec/seam_client/request_spec.rb | 8 ++++---- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/seam/http.rb b/lib/seam/http.rb index 5ded4d4..cdbd2cf 100644 --- a/lib/seam/http.rb +++ b/lib/seam/http.rb @@ -9,14 +9,16 @@ def self.new(**args) end def self.from_api_key(api_key, endpoint: nil, wait_for_action_attempt: false, debug: false) - Http::SingleWorkspace.from_api_key(api_key, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) + Http::SingleWorkspace.from_api_key(api_key, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, + debug: debug) end def self.from_personal_access_token(personal_access_token, workspace_id, endpoint: nil, wait_for_action_attempt: false, debug: false) - Http::SingleWorkspace.from_personal_access_token(personal_access_token, workspace_id, endpoint: endpoint, wait_for_action_attempt: wait_for_action_attempt, debug: debug) + Http::SingleWorkspace.from_personal_access_token(personal_access_token, workspace_id, endpoint: endpoint, + wait_for_action_attempt: wait_for_action_attempt, debug: debug) end - class HttpApiError < StandardError + class ApiError < StandardError attr_reader :code, :status_code, :request_id, :data def initialize(error, status_code, request_id) @@ -28,13 +30,13 @@ def initialize(error, status_code, request_id) end end - class HttpUnauthorizedError < HttpApiError + class UnauthorizedError < ApiError def initialize(request_id) super({type: "unauthorized", message: "Unauthorized"}, 401, request_id) end end - class InvalidInputError < HttpApiError + class InvalidInputError < ApiError attr_reader :validation_errors def initialize(error, status_code, request_id) diff --git a/lib/seam/request.rb b/lib/seam/request.rb index c861516..de4b3cd 100644 --- a/lib/seam/request.rb +++ b/lib/seam/request.rb @@ -34,7 +34,7 @@ def handle_error_response(response, _method, _uri) status_code = response.status.code request_id = response.headers["seam-request-id"] - raise Http::HttpUnauthorizedError.new(request_id) if status_code == 401 + raise Http::UnauthorizedError.new(request_id) if status_code == 401 error = response.parse["error"] || {} error_type = error["type"] || "unknown_error" @@ -52,7 +52,7 @@ def handle_error_response(response, _method, _uri) ) end - raise Http::HttpApiError.new(error_details, status_code, request_id) + raise Http::ApiError.new(error_details, status_code, request_id) end def build_url(uri) diff --git a/spec/request_spec.rb b/spec/request_spec.rb index 86970de..c0099e4 100644 --- a/spec/request_spec.rb +++ b/spec/request_spec.rb @@ -22,7 +22,7 @@ it "parses the error" do expect { client.health }.to raise_error do |error| - expect(error).to be_a(Seam::Http::HttpApiError) + expect(error).to be_a(Seam::Http::ApiError) expect(error.message).to eq(message) expect(error.code).to eq(type) expect(error.request_id).to eq(request_id) @@ -48,7 +48,7 @@ it "parses the error" do expect { client.health }.to raise_error do |error| - expect(error).to be_a(Seam::Http::HttpApiError) + expect(error).to be_a(Seam::Http::ApiError) expect(error.message).to eq(message) expect(error.code).to eq(type) expect(error.request_id).to eq(request_id) diff --git a/spec/seam_client/request_spec.rb b/spec/seam_client/request_spec.rb index 9306c9c..9fa48fb 100644 --- a/spec/seam_client/request_spec.rb +++ b/spec/seam_client/request_spec.rb @@ -11,8 +11,8 @@ .to_return(status: 401, headers: {"seam-request-id" => request_id}) end - it "raises HttpUnauthorizedError" do - expect { seam.devices.list }.to raise_error(Seam::Http::HttpUnauthorizedError) do |error| + it "raises UnauthorizedError" do + expect { seam.devices.list }.to raise_error(Seam::Http::UnauthorizedError) do |error| expect(error.message).to eq("Unauthorized") expect(error.request_id).to eq(request_id) end @@ -67,8 +67,8 @@ "seam-request-id" => request_id}) end - it "raises HttpApiError with the correct details" do - expect { seam.devices.list }.to raise_error(Seam::Http::HttpApiError) do |error| + it "raises ApiError with the correct details" do + expect { seam.devices.list }.to raise_error(Seam::Http::ApiError) do |error| expect(error.message).to eq(error_message) expect(error.status_code).to eq(error_status) expect(error.request_id).to eq(request_id) From 781f22b36a4386cfa8687f004b7412e9d79641cf Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 10 Oct 2024 14:38:43 +0200 Subject: [PATCH 24/25] Reduce nesting of wait for action attempt errors --- lib/seam/helpers/action_attempt.rb | 4 +- lib/seam/wait_for_action_attempt.rb | 46 +++++++++---------- .../wait_for_action_attepmt_spec.rb | 6 +-- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/lib/seam/helpers/action_attempt.rb b/lib/seam/helpers/action_attempt.rb index bdd8c0a..5b499e9 100644 --- a/lib/seam/helpers/action_attempt.rb +++ b/lib/seam/helpers/action_attempt.rb @@ -26,12 +26,12 @@ def self.wait_until_finished(action_attempt, client, timeout: nil, polling_inter sleep(polling_interval) time_waiting += polling_interval - raise Seam::Http::WaitForActionAttempt::TimeoutError.new(action_attempt, timeout) if time_waiting > timeout + raise Seam::ActionAttemptTimeoutError.new(action_attempt, timeout) if time_waiting > timeout action_attempt = update_action_attempt(action_attempt, client) end - raise Seam::Http::WaitForActionAttempt::FailedError.new(action_attempt) if action_attempt.status == "error" + raise Seam::ActionAttemptFailedError.new(action_attempt) if action_attempt.status == "error" action_attempt end diff --git a/lib/seam/wait_for_action_attempt.rb b/lib/seam/wait_for_action_attempt.rb index 2eacd83..1f3f68f 100644 --- a/lib/seam/wait_for_action_attempt.rb +++ b/lib/seam/wait_for_action_attempt.rb @@ -1,36 +1,32 @@ # frozen_string_literal: true module Seam - module Http - module WaitForActionAttempt - class ActionAttemptError < StandardError - attr_reader :action_attempt + class ActionAttemptError < StandardError + attr_reader :action_attempt - def initialize(message, action_attempt) - super(message) - @action_attempt = action_attempt - end + def initialize(message, action_attempt) + super(message) + @action_attempt = action_attempt + end - def name - self.class.name - end - end + def name + self.class.name + end + end - class FailedError < ActionAttemptError - attr_reader :code + class ActionAttemptFailedError < ActionAttemptError + attr_reader :code - def initialize(action_attempt) - super(action_attempt.error.message, action_attempt) - @code = action_attempt.error.type - end - end + def initialize(action_attempt) + super(action_attempt.error.message, action_attempt) + @code = action_attempt.error.type + end + end - class TimeoutError < ActionAttemptError - def initialize(action_attempt, timeout) - message = "Timed out waiting for action attempt after #{timeout}s" - super(message, action_attempt) - end - end + class ActionAttemptTimeoutError < ActionAttemptError + def initialize(action_attempt, timeout) + message = "Timed out waiting for action attempt after #{timeout}s" + super(message, action_attempt) end end end diff --git a/spec/seam_client/wait_for_action_attepmt_spec.rb b/spec/seam_client/wait_for_action_attepmt_spec.rb index cec3109..00103bc 100644 --- a/spec/seam_client/wait_for_action_attepmt_spec.rb +++ b/spec/seam_client/wait_for_action_attepmt_spec.rb @@ -119,7 +119,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.1} ) - end.to raise_error(Seam::Http::WaitForActionAttempt::TimeoutError) do |error| + end.to raise_error(Seam::ActionAttemptTimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end @@ -142,7 +142,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: true ) - end.to raise_error(Seam::Http::WaitForActionAttempt::FailedError) do |error| + end.to raise_error(Seam::ActionAttemptFailedError) do |error| expect(error.message).to include("Failed") expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq("error") @@ -167,7 +167,7 @@ action_attempt_id: action_attempt.action_attempt_id, wait_for_action_attempt: {timeout: 0.5, polling_interval: 3} ) - end.to raise_error(Seam::Http::WaitForActionAttempt::TimeoutError) do |error| + end.to raise_error(Seam::ActionAttemptTimeoutError) do |error| expect(error.action_attempt.action_attempt_id).to eq(action_attempt.action_attempt_id) expect(error.action_attempt.status).to eq(action_attempt.status) end From fc69841c2c111964dad0a64c02cce82e07e7d689 Mon Sep 17 00:00:00 2001 From: Andrii Balitskyi <10balian10@gmail.com> Date: Thu, 10 Oct 2024 14:50:18 +0200 Subject: [PATCH 25/25] Refactor SeamOptions and SeamAuth --- lib/seam/auth.rb | 216 +++++++++--------- lib/seam/http_multi_workspace.rb | 4 +- lib/seam/http_single_workspace.rb | 2 +- lib/seam/options.rb | 88 +++---- lib/seam/parse_options.rb | 24 +- lib/seam/token.rb | 70 +++--- spec/seam_client/api_key_spec.rb | 8 +- .../client_multi_workspace_spec.rb | 10 +- spec/seam_client/env_spec.rb | 2 +- .../seam_client/personal_access_token_spec.rb | 8 +- 10 files changed, 225 insertions(+), 207 deletions(-) diff --git a/lib/seam/auth.rb b/lib/seam/auth.rb index 5f30814..e4c256a 100644 --- a/lib/seam/auth.rb +++ b/lib/seam/auth.rb @@ -3,112 +3,116 @@ require_relative "options" require_relative "token" -module SeamAuth - class SeamInvalidTokenError < StandardError - def initialize(message) - super("Seam received an invalid token: #{message}") +module Seam + module Http + module Auth + class SeamInvalidTokenError < StandardError + def initialize(message) + super("Seam received an invalid token: #{message}") + end + end + + def self.get_auth_headers(api_key: nil, personal_access_token: nil, workspace_id: nil) + if Http::Options.seam_http_options_with_api_key?(api_key: api_key, personal_access_token: personal_access_token) + return get_auth_headers_for_api_key(api_key) + end + + if Http::Options.seam_http_options_with_personal_access_token?(personal_access_token: personal_access_token, api_key: api_key, + workspace_id: workspace_id) + return get_auth_headers_for_personal_access_token(personal_access_token, workspace_id) + end + + raise Http::Options::SeamInvalidOptionsError.new( + "Must specify an api_key or personal_access_token. " \ + "Attempted reading configuration from the environment, " \ + "but the environment variable SEAM_API_KEY is not set." + ) + end + + def self.get_auth_headers_for_api_key(api_key) + if Auth.client_session_token?(api_key) + raise SeamInvalidTokenError.new( + "A Client Session Token cannot be used as an api_key" + ) + end + + raise SeamInvalidTokenError.new("A JWT cannot be used as an api_key") if Auth.jwt?(api_key) + + raise SeamInvalidTokenError.new("An Access Token cannot be used as an api_key") if Auth.access_token?(api_key) + + if Auth.publishable_key?(api_key) + raise SeamInvalidTokenError.new( + "A Publishable Key cannot be used as an api_key" + ) + end + + unless Auth.seam_token?(api_key) + raise SeamInvalidTokenError.new( + "Unknown or invalid api_key format, expected token to start with #{Auth::TOKEN_PREFIX}" + ) + end + + {"authorization" => "Bearer #{api_key}"} + end + + def self.get_auth_headers_for_personal_access_token(personal_access_token, workspace_id) + if Auth.jwt?(personal_access_token) + raise SeamInvalidTokenError.new( + "A JWT cannot be used as a personal_access_token" + ) + end + + if Auth.client_session_token?(personal_access_token) + raise SeamInvalidTokenError.new( + "A Client Session Token cannot be used as a personal_access_token" + ) + end + + if Auth.publishable_key?(personal_access_token) + raise SeamInvalidTokenError.new( + "A Publishable Key cannot be used as a personal_access_token" + ) + end + + unless Auth.access_token?(personal_access_token) + raise SeamInvalidTokenError.new( + "Unknown or invalid personal_access_token format, expected token to start with #{Auth::ACCESS_TOKEN_PREFIX}" + ) + end + + { + "authorization" => "Bearer #{personal_access_token}", + "seam-workspace" => workspace_id + } + end + + def self.get_auth_headers_for_multi_workspace_personal_access_token(personal_access_token) + if Auth.jwt?(personal_access_token) + raise SeamInvalidTokenError.new( + "A JWT cannot be used as a personal_access_token" + ) + end + + if Auth.client_session_token?(personal_access_token) + raise SeamInvalidTokenError.new( + "A Client Session Token cannot be used as a personal_access_token" + ) + end + + if Auth.publishable_key?(personal_access_token) + raise SeamInvalidTokenError.new( + "A Publishable Key cannot be used as a personal_access_token" + ) + end + + unless Auth.access_token?(personal_access_token) + raise SeamInvalidTokenError.new( + "Unknown or invalid personal_access_token format, expected token to start with #{Auth::ACCESS_TOKEN_PREFIX}" + ) + end + + {"authorization" => "Bearer #{personal_access_token}"} + end end end - - def self.get_auth_headers(api_key: nil, personal_access_token: nil, workspace_id: nil) - if SeamOptions.seam_http_options_with_api_key?(api_key: api_key, personal_access_token: personal_access_token) - return get_auth_headers_for_api_key(api_key) - end - - if SeamOptions.seam_http_options_with_personal_access_token?(personal_access_token: personal_access_token, api_key: api_key, - workspace_id: workspace_id) - return get_auth_headers_for_personal_access_token(personal_access_token, workspace_id) - end - - raise SeamOptions::SeamInvalidOptionsError.new( - "Must specify an api_key or personal_access_token. " \ - "Attempted reading configuration from the environment, " \ - "but the environment variable SEAM_API_KEY is not set." - ) - end - - def self.get_auth_headers_for_api_key(api_key) - if SeamAuth.client_session_token?(api_key) - raise SeamInvalidTokenError.new( - "A Client Session Token cannot be used as an api_key" - ) - end - - raise SeamInvalidTokenError.new("A JWT cannot be used as an api_key") if SeamAuth.jwt?(api_key) - - raise SeamInvalidTokenError.new("An Access Token cannot be used as an api_key") if SeamAuth.access_token?(api_key) - - if SeamAuth.publishable_key?(api_key) - raise SeamInvalidTokenError.new( - "A Publishable Key cannot be used as an api_key" - ) - end - - unless SeamAuth.seam_token?(api_key) - raise SeamInvalidTokenError.new( - "Unknown or invalid api_key format, expected token to start with #{SeamAuth::TOKEN_PREFIX}" - ) - end - - {"authorization" => "Bearer #{api_key}"} - end - - def self.get_auth_headers_for_personal_access_token(personal_access_token, workspace_id) - if SeamAuth.jwt?(personal_access_token) - raise SeamInvalidTokenError.new( - "A JWT cannot be used as a personal_access_token" - ) - end - - if SeamAuth.client_session_token?(personal_access_token) - raise SeamInvalidTokenError.new( - "A Client Session Token cannot be used as a personal_access_token" - ) - end - - if SeamAuth.publishable_key?(personal_access_token) - raise SeamInvalidTokenError.new( - "A Publishable Key cannot be used as a personal_access_token" - ) - end - - unless SeamAuth.access_token?(personal_access_token) - raise SeamInvalidTokenError.new( - "Unknown or invalid personal_access_token format, expected token to start with #{SeamAuth::ACCESS_TOKEN_PREFIX}" - ) - end - - { - "authorization" => "Bearer #{personal_access_token}", - "seam-workspace" => workspace_id - } - end - - def self.get_auth_headers_for_multi_workspace_personal_access_token(personal_access_token) - if SeamAuth.jwt?(personal_access_token) - raise SeamInvalidTokenError.new( - "A JWT cannot be used as a personal_access_token" - ) - end - - if SeamAuth.client_session_token?(personal_access_token) - raise SeamInvalidTokenError.new( - "A Client Session Token cannot be used as a personal_access_token" - ) - end - - if SeamAuth.publishable_key?(personal_access_token) - raise SeamInvalidTokenError.new( - "A Publishable Key cannot be used as a personal_access_token" - ) - end - - unless SeamAuth.access_token?(personal_access_token) - raise SeamInvalidTokenError.new( - "Unknown or invalid personal_access_token format, expected token to start with #{SeamAuth::ACCESS_TOKEN_PREFIX}" - ) - end - - {"authorization" => "Bearer #{personal_access_token}"} - end end diff --git a/lib/seam/http_multi_workspace.rb b/lib/seam/http_multi_workspace.rb index f912a95..36c3441 100644 --- a/lib/seam/http_multi_workspace.rb +++ b/lib/seam/http_multi_workspace.rb @@ -13,8 +13,8 @@ class MultiWorkspace def initialize(personal_access_token:, endpoint: nil, wait_for_action_attempt: true) @wait_for_action_attempt = wait_for_action_attempt @defaults = {"wait_for_action_attempt" => wait_for_action_attempt} - @endpoint = SeamOptions.get_endpoint(endpoint) - @auth_headers = SeamAuth.get_auth_headers_for_multi_workspace_personal_access_token(personal_access_token) + @endpoint = Http::Options.get_endpoint(endpoint) + @auth_headers = Http::Auth.get_auth_headers_for_multi_workspace_personal_access_token(personal_access_token) end def self.lts_version diff --git a/lib/seam/http_single_workspace.rb b/lib/seam/http_single_workspace.rb index 3ddd5f4..f17d5d7 100644 --- a/lib/seam/http_single_workspace.rb +++ b/lib/seam/http_single_workspace.rb @@ -13,7 +13,7 @@ class SingleWorkspace def initialize(api_key: nil, personal_access_token: nil, workspace_id: nil, endpoint: nil, wait_for_action_attempt: true, debug: false) - options = SeamOptions.parse_options(api_key: api_key, personal_access_token: personal_access_token, workspace_id: workspace_id, endpoint: endpoint) + options = Http::Options.parse_options(api_key: api_key, personal_access_token: personal_access_token, workspace_id: workspace_id, endpoint: endpoint) @endpoint = options[:endpoint] @auth_headers = options[:auth_headers] @debug = debug diff --git a/lib/seam/options.rb b/lib/seam/options.rb index 2e0464d..4a1821c 100644 --- a/lib/seam/options.rb +++ b/lib/seam/options.rb @@ -2,59 +2,63 @@ require_relative "default_endpoint" -module SeamOptions - def self.get_endpoint(endpoint = nil) - endpoint || get_endpoint_from_env || Seam::DEFAULT_ENDPOINT - end +module Seam + module Http + module Options + def self.get_endpoint(endpoint = nil) + endpoint || get_endpoint_from_env || Seam::DEFAULT_ENDPOINT + end - def self.get_endpoint_from_env - seam_api_url = ENV["SEAM_API_URL"] - seam_endpoint = ENV["SEAM_ENDPOINT"] + def self.get_endpoint_from_env + seam_api_url = ENV["SEAM_API_URL"] + seam_endpoint = ENV["SEAM_ENDPOINT"] - if seam_api_url - warn "\033[93mUsing the SEAM_API_URL environment variable is deprecated. Support will be removed in a later major version. Use SEAM_ENDPOINT instead.\033[0m" - end + if seam_api_url + warn "\033[93mUsing the SEAM_API_URL environment variable is deprecated. Support will be removed in a later major version. Use SEAM_ENDPOINT instead.\033[0m" + end - if seam_api_url && seam_endpoint - warn "\033[93mDetected both the SEAM_API_URL and SEAM_ENDPOINT environment variables. Using SEAM_ENDPOINT.\033[0m" - end + if seam_api_url && seam_endpoint + warn "\033[93mDetected both the SEAM_API_URL and SEAM_ENDPOINT environment variables. Using SEAM_ENDPOINT.\033[0m" + end - seam_endpoint || seam_api_url - end + seam_endpoint || seam_api_url + end - class SeamInvalidOptionsError < StandardError - def initialize(message) - super("Seam received invalid options: #{message}") - end - end + class SeamInvalidOptionsError < StandardError + def initialize(message) + super("Seam received invalid options: #{message}") + end + end - def self.seam_http_options_with_api_key?(api_key: nil, personal_access_token: nil) - return false if api_key.nil? + def self.seam_http_options_with_api_key?(api_key: nil, personal_access_token: nil) + return false if api_key.nil? - if personal_access_token - raise SeamInvalidOptionsError.new( - "The personal_access_token option cannot be used with the api_key option" - ) - end + if personal_access_token + raise SeamInvalidOptionsError.new( + "The personal_access_token option cannot be used with the api_key option" + ) + end - true - end + true + end - def self.seam_http_options_with_personal_access_token?(personal_access_token: nil, api_key: nil, workspace_id: nil) - return false if personal_access_token.nil? + def self.seam_http_options_with_personal_access_token?(personal_access_token: nil, api_key: nil, workspace_id: nil) + return false if personal_access_token.nil? - if api_key - raise SeamInvalidOptionsError.new( - "The api_key option cannot be used with the personal_access_token option" - ) - end + if api_key + raise SeamInvalidOptionsError.new( + "The api_key option cannot be used with the personal_access_token option" + ) + end - if workspace_id.nil? - raise SeamInvalidOptionsError.new( - "Must pass a workspace_id when using a personal_access_token" - ) - end + if workspace_id.nil? + raise SeamInvalidOptionsError.new( + "Must pass a workspace_id when using a personal_access_token" + ) + end - true + true + end + end end end diff --git a/lib/seam/parse_options.rb b/lib/seam/parse_options.rb index 9f5efa2..cfa5e85 100644 --- a/lib/seam/parse_options.rb +++ b/lib/seam/parse_options.rb @@ -3,17 +3,21 @@ require_relative "auth" require_relative "options" -module SeamOptions - def self.parse_options(api_key: nil, personal_access_token: nil, workspace_id: nil, endpoint: nil) - api_key ||= ENV["SEAM_API_KEY"] if personal_access_token.nil? +module Seam + module Http + module Options + def self.parse_options(api_key: nil, personal_access_token: nil, workspace_id: nil, endpoint: nil) + api_key ||= ENV["SEAM_API_KEY"] if personal_access_token.nil? - auth_headers = SeamAuth.get_auth_headers( - api_key: api_key, - personal_access_token: personal_access_token, - workspace_id: workspace_id - ) - endpoint = SeamOptions.get_endpoint(endpoint) + auth_headers = Http::Auth.get_auth_headers( + api_key: api_key, + personal_access_token: personal_access_token, + workspace_id: workspace_id + ) + endpoint = Http::Options.get_endpoint(endpoint) - {auth_headers: auth_headers, endpoint: endpoint} + {auth_headers: auth_headers, endpoint: endpoint} + end + end end end diff --git a/lib/seam/token.rb b/lib/seam/token.rb index 872c7fe..b2f1d47 100644 --- a/lib/seam/token.rb +++ b/lib/seam/token.rb @@ -1,49 +1,53 @@ # frozen_string_literal: true -module SeamAuth - TOKEN_PREFIX = "seam_" +module Seam + module Http + module Auth + TOKEN_PREFIX = "seam_" - ACCESS_TOKEN_PREFIX = "seam_at" + ACCESS_TOKEN_PREFIX = "seam_at" - JWT_PREFIX = "ey" + JWT_PREFIX = "ey" - CLIENT_SESSION_TOKEN_PREFIX = "seam_cst" + CLIENT_SESSION_TOKEN_PREFIX = "seam_cst" - PUBLISHABLE_KEY_TOKEN_PREFIX = "seam_pk" + PUBLISHABLE_KEY_TOKEN_PREFIX = "seam_pk" - def self.access_token?(token) - token.start_with?(ACCESS_TOKEN_PREFIX) - end + def self.access_token?(token) + token.start_with?(ACCESS_TOKEN_PREFIX) + end - def self.jwt?(token) - token.start_with?(JWT_PREFIX) - end + def self.jwt?(token) + token.start_with?(JWT_PREFIX) + end - def self.seam_token?(token) - token.start_with?(TOKEN_PREFIX) - end + def self.seam_token?(token) + token.start_with?(TOKEN_PREFIX) + end - def self.api_key?(token) - !client_session_token?(token) && - !jwt?(token) && - !access_token?(token) && - !publishable_key?(token) && - seam_token?(token) - end + def self.api_key?(token) + !client_session_token?(token) && + !jwt?(token) && + !access_token?(token) && + !publishable_key?(token) && + seam_token?(token) + end - def self.client_session_token?(token) - token.start_with?(CLIENT_SESSION_TOKEN_PREFIX) - end + def self.client_session_token?(token) + token.start_with?(CLIENT_SESSION_TOKEN_PREFIX) + end - def self.publishable_key?(token) - token.start_with?(PUBLISHABLE_KEY_TOKEN_PREFIX) - end + def self.publishable_key?(token) + token.start_with?(PUBLISHABLE_KEY_TOKEN_PREFIX) + end - def self.console_session_token?(token) - jwt?(token) - end + def self.console_session_token?(token) + jwt?(token) + end - def self.personal_access_token?(token) - access_token?(token) + def self.personal_access_token?(token) + access_token?(token) + end + end end end diff --git a/spec/seam_client/api_key_spec.rb b/spec/seam_client/api_key_spec.rb index 2aec3dd..668a61f 100644 --- a/spec/seam_client/api_key_spec.rb +++ b/spec/seam_client/api_key_spec.rb @@ -24,19 +24,19 @@ it "checks api key format" do expect do Seam.from_api_key("some-invalid-key-format") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Unknown/) expect do Seam.from_api_key("ey") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /JWT/) expect do Seam.from_api_key("seam_cst_token") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Client Session Token/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Client Session Token/) expect do Seam.from_api_key("seam_at") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Access Token/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Access Token/) end end end diff --git a/spec/seam_client/client_multi_workspace_spec.rb b/spec/seam_client/client_multi_workspace_spec.rb index 8150869..481e034 100644 --- a/spec/seam_client/client_multi_workspace_spec.rb +++ b/spec/seam_client/client_multi_workspace_spec.rb @@ -41,16 +41,18 @@ it "raises SeamInvalidTokenError for invalid token formats" do expect do described_class.from_personal_access_token("invalid_token") - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Unknown/) expect do described_class.from_personal_access_token("seam_apikey_token") - end.to raise_error(SeamAuth::SeamInvalidTokenError, + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Unknown/) expect do described_class.from_personal_access_token("seam_cst") - end.to raise_error(SeamAuth::SeamInvalidTokenError, + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Client Session Token/) - expect { described_class.from_personal_access_token("ey") }.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) + expect do + described_class.from_personal_access_token("ey") + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /JWT/) end end end diff --git a/spec/seam_client/env_spec.rb b/spec/seam_client/env_spec.rb index 1c1baec..3041c97 100644 --- a/spec/seam_client/env_spec.rb +++ b/spec/seam_client/env_spec.rb @@ -39,7 +39,7 @@ def cleanup_env it "requires api_key when passed no argument" do expect do Seam.new - end.to raise_error(SeamOptions::SeamInvalidOptionsError, /api_key/) + end.to raise_error(Seam::Http::Options::SeamInvalidOptionsError, /api_key/) end it "uses SEAM_ENDPOINT environment variable first" do diff --git a/spec/seam_client/personal_access_token_spec.rb b/spec/seam_client/personal_access_token_spec.rb index 1bfe738..8ea8c8f 100644 --- a/spec/seam_client/personal_access_token_spec.rb +++ b/spec/seam_client/personal_access_token_spec.rb @@ -7,19 +7,19 @@ it "raises error for invalid personal access token formats" do expect do Seam.from_personal_access_token("some-invalid-key-format", workspace_id) - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Unknown/) expect do Seam.from_personal_access_token("seam_apikey_token", workspace_id) - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Unknown/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Unknown/) expect do Seam.from_personal_access_token("seam_cst", workspace_id) - end.to raise_error(SeamAuth::SeamInvalidTokenError, /Client Session Token/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /Client Session Token/) expect do Seam.from_personal_access_token("ey", workspace_id) - end.to raise_error(SeamAuth::SeamInvalidTokenError, /JWT/) + end.to raise_error(Seam::Http::Auth::SeamInvalidTokenError, /JWT/) end end end