seamapi 1.2.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
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