Skip to content
This repository was archived by the owner on Jan 14, 2025. It is now read-only.

Commit 72f05e0

Browse files
feat: Add appearance and allow_external_modification to access code API + add unmanaged access code API (#65)
* Add appearance and allow_external_modification to access code API + add unmanaged access code API * Fix UnmanagedAccessCode's attributes * Rename allow_external_modification to is_external_modification_allowed
1 parent 4d3d6c9 commit 72f05e0

File tree

7 files changed

+142
-5
lines changed

7 files changed

+142
-5
lines changed

lib/seam/client.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ def access_codes
3636
@access_codes ||= Seam::Clients::AccessCodes.new(self)
3737
end
3838

39+
def unmanaged_access_codes
40+
@unmanaged_access_codes ||= Seam::Clients::UnmanagedAccessCodes.new(self)
41+
end
42+
3943
def connect_webviews
4044
@connect_webviews ||= Seam::Clients::ConnectWebviews.new(self)
4145
end

lib/seam/clients/access_codes.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ def list(device_or_id = nil, access_code_ids: nil)
2525
)
2626
end
2727

28-
def create(device_id: nil, name: nil, code: nil, starts_at: nil, ends_at: nil, use_backup_access_code_pool: nil)
28+
def create(device_id: nil, name: nil, code: nil, starts_at: nil, ends_at: nil, use_backup_access_code_pool: nil, allow_external_modification: nil)
2929
action_attempt = request_seam_object(
3030
:post,
3131
"/access_codes/create",
3232
Seam::ActionAttempt,
3333
"action_attempt",
3434
body: {device_id: device_id, code: code, starts_at: starts_at, ends_at: ends_at, name: name,
35-
use_backup_access_code_pool: use_backup_access_code_pool}.compact
35+
use_backup_access_code_pool: use_backup_access_code_pool, allow_external_modification: allow_external_modification}.compact
3636
)
3737
action_attempt.wait_until_finished
3838
# TODO: check if failed
@@ -51,7 +51,7 @@ def delete(access_code_id)
5151
action_attempt
5252
end
5353

54-
def update(access_code_id: nil, name: nil, code: nil, starts_at: nil, ends_at: nil, type: nil)
54+
def update(access_code_id: nil, name: nil, code: nil, starts_at: nil, ends_at: nil, type: nil, allow_external_modification: nil)
5555
action_attempt = request_seam_object(
5656
:post,
5757
"/access_codes/update",
@@ -63,7 +63,8 @@ def update(access_code_id: nil, name: nil, code: nil, starts_at: nil, ends_at: n
6363
code: code,
6464
starts_at: starts_at,
6565
ends_at: ends_at,
66-
type: type
66+
type: type,
67+
allow_external_modification: allow_external_modification
6768
}.compact
6869
)
6970
action_attempt.wait_until_finished
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# frozen_string_literal: true
2+
3+
module Seam
4+
module Clients
5+
class UnmanagedAccessCodes < BaseClient
6+
def get(access_code_id = nil, device_id: nil, code: nil)
7+
request_seam_object(
8+
:get,
9+
"/access_codes/unmanaged/get",
10+
Seam::UnmanagedAccessCode,
11+
"access_code",
12+
params: {
13+
device_id: device_id,
14+
access_code_id: access_code_id,
15+
code: code
16+
}.compact
17+
)
18+
end
19+
20+
def list(device_id)
21+
request_seam_object(
22+
:get,
23+
"/access_codes/unmanaged/list",
24+
Seam::UnmanagedAccessCode,
25+
"access_codes",
26+
params: {device_id: device_id}
27+
)
28+
end
29+
30+
def convert_to_managed(access_code_id, allow_external_modification: nil)
31+
action_attempt = request_seam_object(
32+
:post,
33+
"/access_codes/unmanaged/convert_to_managed",
34+
Seam::ActionAttempt,
35+
"action_attempt",
36+
body: {
37+
access_code_id: access_code_id,
38+
allow_external_modification: allow_external_modification
39+
}.compact
40+
)
41+
action_attempt.wait_until_finished
42+
action_attempt
43+
end
44+
end
45+
end
46+
end

lib/seam/resources/access_code.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
module Seam
44
class AccessCode < BaseResource
5-
attr_reader :access_code_id, :name, :type, :code, :is_managed, :status, :device_id, :is_scheduled_on_device, :is_waiting_for_code_assignment, :pulled_backup_access_code_id, :is_backup_access_code_available, :is_backup
5+
attr_reader :access_code_id, :name, :type, :code, :is_managed, :status, :device_id, :is_scheduled_on_device, :is_waiting_for_code_assignment, :pulled_backup_access_code_id, :is_backup_access_code_available, :is_backup, :appearance, :is_external_modification_allowed
66

77
date_accessor :starts_at, :ends_at, :created_at
88

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# frozen_string_literal: true
2+
3+
module Seam
4+
class UnmanagedAccessCode < BaseResource
5+
attr_accessor :access_code_id, :device_id, :type, :name, :code, :is_managed, :status
6+
7+
date_accessor :created_at, :starts_at, :ends_at
8+
9+
include Seam::ResourceErrorsSupport
10+
include Seam::ResourceWarningsSupport
11+
end
12+
end

lib/seamapi.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
require_relative "seam/clients/connect_webviews"
1313
require_relative "seam/clients/connected_accounts"
1414
require_relative "seam/clients/access_codes"
15+
require_relative "seam/clients/unmanaged_access_codes"
1516
require_relative "seam/clients/action_attempts"
1617
require_relative "seam/clients/events"
1718
require_relative "seam/resources/base_resource"
@@ -23,6 +24,7 @@
2324
require_relative "seam/resources/unmanaged_device"
2425
require_relative "seam/resources/device_provider"
2526
require_relative "seam/resources/access_code"
27+
require_relative "seam/resources/unmanaged_access_code"
2628
require_relative "seam/resources/action_attempt"
2729
require_relative "seam/resources/connect_webview"
2830
require_relative "seam/resources/connected_account"
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# frozen_string_literal: true
2+
3+
RSpec.describe Seam::Clients::UnmanagedAccessCodes do
4+
let(:client) { Seam::Client.new(api_key: "some_api_key") }
5+
6+
describe "#get" do
7+
let(:access_code_id) { "123" }
8+
let(:unmanaged_access_code_hash) { {access_code_id: access_code_id} }
9+
10+
before do
11+
stub_seam_request(
12+
:get, "/access_codes/unmanaged/get", {access_code: unmanaged_access_code_hash}
13+
).with(
14+
query: {access_code_id: access_code_id}
15+
)
16+
end
17+
18+
let(:result) { client.unmanaged_access_codes.get(access_code_id) }
19+
20+
it "returns an unmanaged Access Code" do
21+
expect(result).to be_a(Seam::UnmanagedAccessCode)
22+
end
23+
end
24+
25+
describe "#list" do
26+
let(:device_id) { "456" }
27+
let(:unmanaged_access_code_hash) { {access_code_id: "123", device_id: device_id} }
28+
29+
before do
30+
stub_seam_request(:get, "/access_codes/unmanaged/list", {access_codes: [unmanaged_access_code_hash]}).with(
31+
query: {device_id: device_id}
32+
)
33+
end
34+
35+
let(:unmanaged_access_codes) { client.unmanaged_access_codes.list(device_id) }
36+
37+
it "returns a list of unmanaged Access Codes" do
38+
expect(unmanaged_access_codes).to be_a(Array)
39+
expect(unmanaged_access_codes.first).to be_a(Seam::UnmanagedAccessCode)
40+
expect(unmanaged_access_codes.first.access_code_id).to be_a(String)
41+
end
42+
end
43+
44+
describe "#convert_to_managed" do
45+
let(:access_code_id) { "access_code_1234" }
46+
let(:action_attempt_hash) { {action_attempt_id: "1234", status: "pending"} }
47+
48+
before do
49+
stub_seam_request(
50+
:post, "/access_codes/unmanaged/convert_to_managed", {action_attempt: action_attempt_hash}
51+
).with do |req|
52+
req.body.source == {access_code_id: access_code_id}.to_json
53+
end
54+
55+
stub_seam_request(
56+
:get,
57+
"/action_attempts/get",
58+
{
59+
action_attempt: {
60+
status: "success"
61+
}
62+
}
63+
).with(query: {action_attempt_id: action_attempt_hash[:action_attempt_id]})
64+
end
65+
66+
let(:result) { client.unmanaged_access_codes.convert_to_managed(access_code_id) }
67+
68+
it "returns an Action Attempt" do
69+
expect(result).to be_a(Seam::ActionAttempt)
70+
end
71+
end
72+
end

0 commit comments

Comments
 (0)