seamapi 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c482430d7a10dda3c715ba9d02a82f6a5be2bb5f7ae842fab31ef3ffa34c596c
4
- data.tar.gz: a82f3c59221478295809af1c8573eef3618fb782a6874166d6674d6da7b9bad4
3
+ metadata.gz: b1201d5f8298e96925130f8e386e4df34a3d0bef7a17aa0152844755e23e0ba7
4
+ data.tar.gz: e9696958ff2d4456fe2189b84cf595dc1dab166894d46e40f39f3b5cf0957d41
5
5
  SHA512:
6
- metadata.gz: 484070fa50f932bc4a0779ef2f7bbcda82ed9590a6724b3cb35ad0eaf15f2fe63651de0c86596abab6699627620f55b7e5870bd5112d8b868f4e9ed9571bb13d
7
- data.tar.gz: b31182797acb6350387bf3dd9284a8a7adca3238b044c539cbfaa2beb7f3887a9299a5ca683af192ffc1d267273de714fae79c3ec1969653af24fe2422554235
6
+ metadata.gz: 96a1fa6d22023d1552a05a99e375879ca046297b6d66a95d2652d5c494040f15f35e529bf81391cdb848b16a833043806ba71a559b65997e1383cfe268118a67
7
+ data.tar.gz: cb3a6158e31b084aaf11117b3cc4fc9f45028bf48cd975e4a1093c1b08f6563958e31fc6477af8fd3020927e76fd713671f024281e960586d7e58d1791305b97
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- seamapi (1.2.0)
4
+ seamapi (1.3.1)
5
5
  http (~> 5.0.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -16,7 +16,7 @@ This library includes:
16
16
 
17
17
  - A predefined set of classes for API resources that
18
18
  initialize themselves dynamically from API responses.
19
- - Methods for all [Seam API endpoints].
19
+ - Methods for all [Seam API endpoints](https://docs.seam.co/latest/api-clients/overview).
20
20
  - Simplified asynchronous flows, e.g., listening for events or actions to finish.
21
21
 
22
22
  [Seam API endpoints]: https://docs.seam.co/latest/api-endpoints/overview
data/lib/seam/client.rb CHANGED
@@ -44,6 +44,10 @@ module Seam
44
44
  @workspaces ||= Seam::Clients::Workspaces.new(self)
45
45
  end
46
46
 
47
+ def events
48
+ @events ||= Seam::Clients::Events.new(self)
49
+ end
50
+
47
51
  def request_seam_object(method, path, klass, inner_object, config = {})
48
52
  response = request_seam(method, path, config)
49
53
 
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class AccessCodes < BaseClient
6
+ def get(access_code_id)
7
+ request_seam_object(
8
+ :get,
9
+ "/access_codes/get",
10
+ Seam::AccessCode,
11
+ "access_code",
12
+ params: {access_code_id: access_code_id}
13
+ )
14
+ end
15
+
16
+ def list(device_or_id)
17
+ device_id = device_or_id.is_a?(Seam::Device) ? device_or_id.device_id : device_or_id
18
+
19
+ request_seam_object(
20
+ :get,
21
+ "/access_codes/list",
22
+ Seam::AccessCode,
23
+ "access_codes",
24
+ params: {device_id: device_id}
25
+ )
26
+ end
27
+
28
+ def create(device_id: nil, name: nil, code: nil, starts_at: nil, ends_at: nil)
29
+ action_attempt = request_seam_object(
30
+ :post,
31
+ "/access_codes/create",
32
+ Seam::ActionAttempt,
33
+ "action_attempt",
34
+ body: {device_id: device_id, code: code, starts_at: starts_at, ends_at: ends_at, name: name}.compact
35
+ )
36
+ action_attempt.wait_until_finished
37
+ # TODO: check if failed
38
+ Seam::AccessCode.new(action_attempt.result["access_code"], @client)
39
+ end
40
+
41
+ def delete(access_code_id)
42
+ action_attempt = request_seam_object(
43
+ :post,
44
+ "/access_codes/delete",
45
+ Seam::ActionAttempt,
46
+ "action_attempt",
47
+ body: {access_code_id: access_code_id}
48
+ )
49
+ action_attempt.wait_until_finished
50
+ action_attempt
51
+ end
52
+
53
+ def update(access_code_id: nil, name: nil, code: nil, starts_at: nil, ends_at: nil)
54
+ action_attempt = request_seam_object(
55
+ :post,
56
+ "/access_codes/update",
57
+ Seam::ActionAttempt,
58
+ "action_attempt",
59
+ body: {
60
+ access_code_id: access_code_id,
61
+ name: name,
62
+ code: code,
63
+ starts_at: starts_at,
64
+ ends_at: ends_at
65
+ }.compact
66
+ )
67
+ action_attempt.wait_until_finished
68
+ action_attempt
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class ActionAttempts < BaseClient
6
+ def get(action_attempt_id)
7
+ request_seam_object(
8
+ :get,
9
+ "/action_attempts/get",
10
+ Seam::ActionAttempt,
11
+ "action_attempt",
12
+ params: {action_attempt_id: action_attempt_id}
13
+ )
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class ConnectWebviews < BaseClient
6
+ def get(connect_webview_id = nil)
7
+ request_seam_object(
8
+ :get,
9
+ "/connect_webviews/get",
10
+ Seam::ConnectWebview,
11
+ "connect_webview",
12
+ params: {connect_webview_id: connect_webview_id}
13
+ )
14
+ end
15
+
16
+ def list
17
+ request_seam_object(
18
+ :get,
19
+ "/connect_webviews/list",
20
+ Seam::ConnectWebview,
21
+ "connect_webviews",
22
+ params: {}
23
+ )
24
+ end
25
+
26
+ def create(accepted_providers: nil)
27
+ request_seam_object(
28
+ :post,
29
+ "/connect_webviews/create",
30
+ Seam::ConnectWebview,
31
+ "connect_webview",
32
+ body: {accepted_providers: accepted_providers}
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class ConnectedAccounts < BaseClient
6
+ def get(connected_account_id_or_params)
7
+ params = if connected_account_id_or_params.is_a?(String)
8
+ {connected_account_id: connected_account_id_or_params}
9
+ else
10
+ connected_account_id_or_params
11
+ end
12
+
13
+ request_seam_object(
14
+ :get,
15
+ "/connected_accounts/get",
16
+ Seam::ConnectedAccount,
17
+ "connected_account",
18
+ params: params
19
+ )
20
+ end
21
+
22
+ def list(params = {})
23
+ request_seam_object(
24
+ :get,
25
+ "/connected_accounts/list",
26
+ Seam::ConnectedAccount,
27
+ "connected_accounts",
28
+ params: params
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class Devices < BaseClient
6
+ def list(params = {})
7
+ request_seam_object(
8
+ :get,
9
+ "/devices/list",
10
+ Seam::Device,
11
+ "devices",
12
+ params: params
13
+ )
14
+ end
15
+
16
+ def get(device_id)
17
+ request_seam_object(
18
+ :get,
19
+ "/devices/get",
20
+ Seam::Device,
21
+ "device",
22
+ params: {device_id: device_id}
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class Events < BaseClient
6
+ def get(event_id: nil, event_type: nil, device_id: nil)
7
+ request_seam_object(
8
+ :get,
9
+ "/events/get",
10
+ Seam::Event,
11
+ "event",
12
+ params: {event_id: event_id, event_type: event_type, device_id: device_id}.compact
13
+ )
14
+ end
15
+
16
+ def list(since: str, event_type: nil, event_types: nil, device_id: nil, device_ids: nil)
17
+ request_seam_object(
18
+ :get,
19
+ "/events/list",
20
+ Seam::Event,
21
+ "events",
22
+ params: {event_type: event_type, event_types: event_types, device_id: device_id,
23
+ device_ids: device_ids, since: since}.compact
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class Locks < BaseClient
6
+ # Unlocks a door
7
+ #
8
+ # @param [String] device_id
9
+ # @return [Seam::ActionAttempt]
10
+ def unlock_door(device_or_id)
11
+ request_seam_object(
12
+ :post,
13
+ "/locks/unlock_door",
14
+ Seam::ActionAttempt,
15
+ "action_attempt",
16
+ body: {
17
+ device_id: device_id(device_or_id)
18
+ }
19
+ )
20
+ end
21
+
22
+ # Locks a door
23
+ #
24
+ # @param [String] device_id
25
+ # @return [Seam::ActionAttempt]
26
+ def lock_door(device_or_id)
27
+ request_seam_object(
28
+ :post,
29
+ "/locks/lock_door",
30
+ Seam::ActionAttempt,
31
+ "action_attempt",
32
+ body: {
33
+ device_id: device_id(device_or_id)
34
+ }
35
+ )
36
+ end
37
+
38
+ def list(params = {})
39
+ request_seam_object(
40
+ :get,
41
+ "/locks/list",
42
+ Seam::Device,
43
+ "locks",
44
+ params: params
45
+ )
46
+ end
47
+
48
+ def get(device_or_id)
49
+ request_seam_object(
50
+ :get,
51
+ "/locks/get",
52
+ Seam::Device,
53
+ "lock",
54
+ params: {
55
+ device_id: device_id(device_or_id)
56
+ }
57
+ )
58
+ end
59
+
60
+ protected
61
+
62
+ def device_id(device_or_id)
63
+ device_or_id.is_a?(Seam::Device) ? device_or_id.device_id : device_or_id
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class Workspaces < BaseClient
6
+ def get(workspace_id = nil)
7
+ request_seam_object(
8
+ :get,
9
+ "/workspaces/get",
10
+ Seam::Workspace,
11
+ "workspace",
12
+ params: {workspace_id: workspace_id}
13
+ )
14
+ end
15
+
16
+ def list
17
+ request_seam_object(
18
+ :get,
19
+ "/workspaces/list",
20
+ Seam::Workspace,
21
+ "workspaces",
22
+ params: {}
23
+ )
24
+ end
25
+
26
+ def reset_sandbox(workspace_id)
27
+ request_seam(
28
+ :post,
29
+ "/workspaces/reset_sandbox",
30
+ params: {workspace_id: workspace_id}
31
+ )
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ class AccessCode < BaseResource
5
+ attr_reader :access_code_id, :name, :type, :code
6
+
7
+ date_accessor :starts_at, :ends_at
8
+
9
+ include Seam::ResourceErrorsSupport
10
+ include Seam::ResourceWarningsSupport
11
+ end
12
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ class BaseResource
5
+ attr_accessor :data, :client
6
+
7
+ def initialize(data, client = nil)
8
+ @data = data
9
+ @client = client
10
+
11
+ @data.each do |key, value|
12
+ instance_variable_set("@#{key}", value)
13
+ end
14
+ end
15
+
16
+ def update_from_response(data)
17
+ @data = data
18
+ @data.each do |key, value|
19
+ instance_variable_set("@#{key}", value)
20
+ end
21
+ end
22
+
23
+ def self.load_from_response(data, client = nil)
24
+ if data.is_a?(Array)
25
+ data.map { |d| new(d, client) }
26
+ else
27
+ new(data, client)
28
+ end
29
+ end
30
+
31
+ def inspect
32
+ "<#{self.class.name}:#{"0x00%x" % (object_id << 1)}\n" + # rubocop:disable Style/StringConcatenation, Style/FormatString
33
+ instance_variables
34
+ .map { |k| k.to_s.sub("@", "") }
35
+ .filter { |k| k != "data" and k != "client" and respond_to? k }
36
+ .map { |k| " #{k}=#{send(k).inspect}" }
37
+ .join("\n") + ">"
38
+ end
39
+
40
+ def self.date_accessor(*attrs)
41
+ attrs.each do |attr|
42
+ define_method(attr) do
43
+ value = instance_variable_get("@#{attr}")
44
+
45
+ raise "No value for #{attr} set" if value.nil?
46
+
47
+ parse_datetime(value)
48
+ end
49
+ end
50
+ end
51
+
52
+ protected
53
+
54
+ def parse_datetime(value)
55
+ Time.parse(value)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ class Device < BaseResource
5
+ attr_accessor :device_id, :device_type, :properties
6
+
7
+ date_accessor :created_at
8
+
9
+ include Seam::ResourceErrorsSupport
10
+ include Seam::ResourceWarningsSupport
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ class Event < BaseResource
5
+ attr_accessor :event_id, :event_type, :payload, :workspace_id, :device_id
6
+
7
+ date_accessor :created_at
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ class Workspace < BaseResource
5
+ attr_accessor :workspace_id, :name, :connect_partner_name, :is_sandbox
6
+ end
7
+ end
data/lib/seam/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Seam
4
- VERSION = "1.2.0"
4
+ VERSION = "1.3.1"
5
5
  end
data/lib/seamapi.rb CHANGED
@@ -12,6 +12,7 @@ require_relative "seam/clients/connect_webviews"
12
12
  require_relative "seam/clients/connected_accounts"
13
13
  require_relative "seam/clients/access_codes"
14
14
  require_relative "seam/clients/action_attempts"
15
+ require_relative "seam/clients/events"
15
16
  require_relative "seam/resources/base_resource"
16
17
  require_relative "seam/resources/resource_warning"
17
18
  require_relative "seam/resources/resource_error"
@@ -23,6 +24,7 @@ require_relative "seam/resources/action_attempt"
23
24
  require_relative "seam/resources/connect_webview"
24
25
  require_relative "seam/resources/connected_account"
25
26
  require_relative "seam/resources/workspace"
27
+ require_relative "seam/resources/event"
26
28
 
27
29
  module Seam
28
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seamapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seam Labs, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-02 00:00:00.000000000 Z
11
+ date: 2022-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -162,16 +162,29 @@ files:
162
162
  - README.md
163
163
  - Rakefile
164
164
  - lib/seam/client.rb
165
+ - lib/seam/clients/access_codes.rb
166
+ - lib/seam/clients/action_attempts.rb
165
167
  - lib/seam/clients/base_client.rb
168
+ - lib/seam/clients/connect_webviews.rb
169
+ - lib/seam/clients/connected_accounts.rb
170
+ - lib/seam/clients/devices.rb
171
+ - lib/seam/clients/events.rb
172
+ - lib/seam/clients/locks.rb
173
+ - lib/seam/clients/workspaces.rb
166
174
  - lib/seam/logger.rb
167
175
  - lib/seam/request.rb
176
+ - lib/seam/resources/access_code.rb
168
177
  - lib/seam/resources/action_attempt.rb
178
+ - lib/seam/resources/base_resource.rb
169
179
  - lib/seam/resources/connect_webview.rb
170
180
  - lib/seam/resources/connected_account.rb
181
+ - lib/seam/resources/device.rb
182
+ - lib/seam/resources/event.rb
171
183
  - lib/seam/resources/resource_error.rb
172
184
  - lib/seam/resources/resource_errors_support.rb
173
185
  - lib/seam/resources/resource_warning.rb
174
186
  - lib/seam/resources/resource_warnings_support.rb
187
+ - lib/seam/resources/workspace.rb
175
188
  - lib/seam/version.rb
176
189
  - lib/seamapi.rb
177
190
  homepage: https://github.com/seamapi/ruby