seam 1.1.3 → 2.0.0a2

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.
Files changed (92) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +4 -2
  3. data/Gemfile.lock +137 -0
  4. data/LICENSE.txt +16 -18
  5. data/README.md +118 -115
  6. data/Rakefile +23 -0
  7. data/lib/seam/client.rb +129 -0
  8. data/lib/seam/clients/access_codes.rb +95 -0
  9. data/lib/seam/clients/access_codes_simulate.rb +17 -0
  10. data/lib/seam/clients/access_codes_unmanaged.rb +57 -0
  11. data/lib/seam/clients/acs.rb +35 -0
  12. data/lib/seam/clients/acs_access_groups.rb +57 -0
  13. data/lib/seam/clients/acs_credential_pools.rb +17 -0
  14. data/lib/seam/clients/acs_credential_provisioning_automations.rb +17 -0
  15. data/lib/seam/clients/acs_credentials.rb +77 -0
  16. data/lib/seam/clients/acs_entrances.rb +47 -0
  17. data/lib/seam/clients/acs_systems.rb +27 -0
  18. data/lib/seam/clients/acs_users.rb +117 -0
  19. data/lib/seam/clients/action_attempts.rb +30 -0
  20. data/lib/seam/clients/base_client.rb +21 -0
  21. data/lib/seam/clients/client_sessions.rb +77 -0
  22. data/lib/seam/clients/connect_webviews.rb +47 -0
  23. data/lib/seam/clients/connected_accounts.rb +47 -0
  24. data/lib/seam/clients/devices.rb +65 -0
  25. data/lib/seam/clients/devices_simulate.rb +17 -0
  26. data/lib/seam/clients/devices_unmanaged.rb +37 -0
  27. data/lib/seam/clients/events.rb +27 -0
  28. data/lib/seam/clients/locks.rb +53 -0
  29. data/lib/seam/clients/networks.rb +27 -0
  30. data/lib/seam/clients/noise_sensors.rb +15 -0
  31. data/lib/seam/clients/noise_sensors_noise_thresholds.rb +57 -0
  32. data/lib/seam/clients/noise_sensors_simulate.rb +17 -0
  33. data/lib/seam/clients/phones.rb +31 -0
  34. data/lib/seam/clients/phones_simulate.rb +17 -0
  35. data/lib/seam/clients/thermostats.rb +106 -0
  36. data/lib/seam/clients/thermostats_climate_setting_schedules.rb +57 -0
  37. data/lib/seam/clients/user_identities.rb +131 -0
  38. data/lib/seam/clients/user_identities_enrollment_automations.rb +47 -0
  39. data/lib/seam/clients/webhooks.rb +57 -0
  40. data/lib/seam/clients/workspaces.rb +50 -0
  41. data/lib/seam/logger.rb +12 -0
  42. data/lib/seam/lts_version.rb +5 -0
  43. data/lib/seam/request.rb +73 -0
  44. data/lib/seam/resources/access_code.rb +12 -0
  45. data/lib/seam/resources/acs_access_group.rb +9 -0
  46. data/lib/seam/resources/acs_credential.rb +12 -0
  47. data/lib/seam/resources/acs_credential_pool.rb +9 -0
  48. data/lib/seam/resources/acs_credential_provisioning_automation.rb +9 -0
  49. data/lib/seam/resources/acs_entrance.rb +9 -0
  50. data/lib/seam/resources/acs_system.rb +9 -0
  51. data/lib/seam/resources/acs_user.rb +9 -0
  52. data/lib/seam/resources/action_attempt.rb +46 -0
  53. data/lib/seam/resources/base_resource.rb +58 -0
  54. data/lib/seam/resources/client_session.rb +9 -0
  55. data/lib/seam/resources/climate_setting_schedule.rb +11 -0
  56. data/lib/seam/resources/connect_webview.rb +9 -0
  57. data/lib/seam/resources/connected_account.rb +12 -0
  58. data/lib/seam/resources/device.rb +12 -0
  59. data/lib/seam/resources/device_provider.rb +7 -0
  60. data/lib/seam/resources/enrollment_automation.rb +9 -0
  61. data/lib/seam/resources/event.rb +9 -0
  62. data/lib/seam/resources/network.rb +9 -0
  63. data/lib/seam/resources/noise_threshold.rb +7 -0
  64. data/lib/seam/resources/phone.rb +12 -0
  65. data/lib/seam/resources/resource_error.rb +9 -0
  66. data/lib/seam/resources/resource_errors_support.rb +9 -0
  67. data/lib/seam/resources/resource_warning.rb +9 -0
  68. data/lib/seam/resources/resource_warnings_support.rb +9 -0
  69. data/lib/seam/resources/service_health.rb +7 -0
  70. data/lib/seam/resources/unmanaged_access_code.rb +12 -0
  71. data/lib/seam/resources/unmanaged_device.rb +12 -0
  72. data/lib/seam/resources/user_identity.rb +9 -0
  73. data/lib/seam/resources/webhook.rb +7 -0
  74. data/lib/seam/resources/workspace.rb +7 -0
  75. data/lib/seam/version.rb +3 -1
  76. data/lib/seam.rb +71 -13
  77. metadata +147 -82
  78. data/.gitignore +0 -18
  79. data/lib/seam/effort.rb +0 -86
  80. data/lib/seam/flow.rb +0 -53
  81. data/lib/seam/in_memory.rb +0 -13
  82. data/lib/seam/persistence.rb +0 -43
  83. data/lib/seam/step.rb +0 -33
  84. data/lib/seam/wait_worker.rb +0 -30
  85. data/lib/seam/worker.rb +0 -166
  86. data/seam.gemspec +0 -30
  87. data/spec/seam/effort_spec.rb +0 -43
  88. data/spec/seam/flow_spec.rb +0 -173
  89. data/spec/seam/step_spec.rb +0 -34
  90. data/spec/seam/wait_worker_spec.rb +0 -179
  91. data/spec/seam/worker_spec.rb +0 -973
  92. data/spec/spec_helper.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 00d1bdc3f04b6886794f6d9b8947ed665f36841e
4
- data.tar.gz: c75f378c4ed3a3baf11f68e5b121ff9065fc42b1
2
+ SHA256:
3
+ metadata.gz: 3bb7a5a7828d18d2b54017d76ed325d0e7e25c482de942eca0330da40f7e1105
4
+ data.tar.gz: 8a86ca467008bb6f8d2b76394f9f773a938f072a384a29dc78dc16e430917bb3
5
5
  SHA512:
6
- metadata.gz: 2ddef0ab3b75439ee35ed29d1f59b98cfa8f1d61662c91bcd075481640e6b0d7ef0bcff566ee2f373f2964598633c7f552015b711cec69e4fde100c0bf408bc6
7
- data.tar.gz: b1c82553a5849831d45b2876ebe9e68a7e74b938c3efdd6be6e9a8e1f971e86154b00fc6a7b077615715f253cd17c5c2a6651a3b3311310e8d4200e4ee13b32c
6
+ metadata.gz: 138e121c4bc2482ca27d3a74df486effb52d749de8e1af57fa95ec20600c109e7b2779794e2724fbe8436192ce3a40481e693857ca19b99a320ca96fe4623fe6
7
+ data.tar.gz: 4ae84ca5a842777f890f5df0cbff9252fa22d9658f7d03422abcb992a1412e1a272a538019c0f436290bb0064dea0344292690a919a4aa305ec7b3d84e96a30b
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
2
 
3
- # Specify your gem's dependencies in seam.gemspec
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in seam.gemspec.
4
6
  gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,137 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ seam (2.0.0a2)
5
+ http (~> 5.2)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ addressable (2.8.6)
11
+ public_suffix (>= 2.0.2, < 6.0)
12
+ ansi (1.5.0)
13
+ ast (2.4.2)
14
+ base64 (0.2.0)
15
+ bigdecimal (3.1.7)
16
+ crack (1.0.0)
17
+ bigdecimal
18
+ rexml
19
+ diff-lcs (1.5.1)
20
+ docile (1.4.0)
21
+ domain_name (0.6.20240107)
22
+ ffi (1.16.3)
23
+ ffi-compiler (1.3.2)
24
+ ffi (>= 1.15.5)
25
+ rake
26
+ gem-release (2.2.2)
27
+ hashdiff (1.1.0)
28
+ http (5.2.0)
29
+ addressable (~> 2.8)
30
+ base64 (~> 0.1)
31
+ http-cookie (~> 1.0)
32
+ http-form_data (~> 2.2)
33
+ llhttp-ffi (~> 0.5.0)
34
+ http-cookie (1.0.5)
35
+ domain_name (~> 0.5)
36
+ http-form_data (2.3.0)
37
+ json (2.7.2)
38
+ language_server-protocol (3.17.0.3)
39
+ lint_roller (1.1.0)
40
+ llhttp-ffi (0.5.0)
41
+ ffi-compiler (~> 1.0)
42
+ rake (~> 13.0)
43
+ multi_json (1.15.0)
44
+ parallel (1.24.0)
45
+ parse_gemspec (1.0.0)
46
+ parse_gemspec-cli (1.0.0)
47
+ multi_json
48
+ parse_gemspec
49
+ thor
50
+ parser (3.3.0.5)
51
+ ast (~> 2.4.1)
52
+ racc
53
+ public_suffix (5.0.5)
54
+ racc (1.7.3)
55
+ rainbow (3.1.1)
56
+ rake (13.2.1)
57
+ regexp_parser (2.9.0)
58
+ rexml (3.2.6)
59
+ rspec (3.13.0)
60
+ rspec-core (~> 3.13.0)
61
+ rspec-expectations (~> 3.13.0)
62
+ rspec-mocks (~> 3.13.0)
63
+ rspec-core (3.13.0)
64
+ rspec-support (~> 3.13.0)
65
+ rspec-expectations (3.13.0)
66
+ diff-lcs (>= 1.2.0, < 2.0)
67
+ rspec-support (~> 3.13.0)
68
+ rspec-mocks (3.13.0)
69
+ diff-lcs (>= 1.2.0, < 2.0)
70
+ rspec-support (~> 3.13.0)
71
+ rspec-support (3.13.1)
72
+ rubocop (1.62.1)
73
+ json (~> 2.3)
74
+ language_server-protocol (>= 3.17.0)
75
+ parallel (~> 1.10)
76
+ parser (>= 3.3.0.2)
77
+ rainbow (>= 2.2.2, < 4.0)
78
+ regexp_parser (>= 1.8, < 3.0)
79
+ rexml (>= 3.2.5, < 4.0)
80
+ rubocop-ast (>= 1.31.1, < 2.0)
81
+ ruby-progressbar (~> 1.7)
82
+ unicode-display_width (>= 2.4.0, < 3.0)
83
+ rubocop-ast (1.31.2)
84
+ parser (>= 3.3.0.4)
85
+ rubocop-performance (1.20.2)
86
+ rubocop (>= 1.48.1, < 2.0)
87
+ rubocop-ast (>= 1.30.0, < 2.0)
88
+ ruby-progressbar (1.13.0)
89
+ simplecov (0.22.0)
90
+ docile (~> 1.1)
91
+ simplecov-html (~> 0.11)
92
+ simplecov_json_formatter (~> 0.1)
93
+ simplecov-console (0.9.1)
94
+ ansi
95
+ simplecov
96
+ terminal-table
97
+ simplecov-html (0.12.3)
98
+ simplecov_json_formatter (0.1.4)
99
+ standard (1.35.1)
100
+ language_server-protocol (~> 3.17.0.2)
101
+ lint_roller (~> 1.0)
102
+ rubocop (~> 1.62.0)
103
+ standard-custom (~> 1.0.0)
104
+ standard-performance (~> 1.3)
105
+ standard-custom (1.0.2)
106
+ lint_roller (~> 1.0)
107
+ rubocop (~> 1.50)
108
+ standard-performance (1.3.1)
109
+ lint_roller (~> 1.1)
110
+ rubocop-performance (~> 1.20.2)
111
+ terminal-table (3.0.2)
112
+ unicode-display_width (>= 1.1.1, < 3)
113
+ thor (1.3.1)
114
+ unicode-display_width (2.5.0)
115
+ webmock (3.0.1)
116
+ addressable (>= 2.3.6)
117
+ crack (>= 0.3.2)
118
+ hashdiff
119
+
120
+ PLATFORMS
121
+ ruby
122
+ x86_64-linux
123
+
124
+ DEPENDENCIES
125
+ bundler (~> 2.0)
126
+ gem-release (~> 2.2)
127
+ parse_gemspec-cli (~> 1.0)
128
+ rake (~> 13.0)
129
+ rspec (~> 3.0)
130
+ seam!
131
+ simplecov (~> 0.21)
132
+ simplecov-console (~> 0.9)
133
+ standard (~> 1.3)
134
+ webmock (~> 3.0.0)
135
+
136
+ BUNDLED WITH
137
+ 2.4.19
data/LICENSE.txt CHANGED
@@ -1,22 +1,20 @@
1
- Copyright (c) 2013 Darren Cauthon
1
+ The MIT License (MIT)
2
2
 
3
- MIT License
3
+ Copyright (c) 2021-2024 Seam Labs, Inc.
4
4
 
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
12
11
 
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
15
14
 
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,166 +1,169 @@
1
- # Seam
1
+ # Seam Ruby SDK
2
2
 
3
- Simple workflows in Ruby.
3
+ [![RubyGems.org](https://img.shields.io/gem/v/seam)](https://rubygems.org/gems/seam)
4
+ [![GitHub Actions](https://github.com/seamapi/ruby-next/actions/workflows/check.yml/badge.svg)](https://github.com/seamapi/ruby-next/actions/workflows/check.yml)
4
5
 
5
- ## Usage
6
+ SDK for the Seam API written in Ruby.
6
7
 
7
- Seam is meant for situations where you want to take some entity (user, order, ec.) through a long-running process that is comprised of multiple steps.
8
+ ## Description
8
9
 
9
- For example, if you want every new user a "hello" email after signup, then wait a few days, and then send a "gone so soon?" email if they haven't signed in again.
10
+ TODO
10
11
 
11
- This gem provides some simple tools for building and executing this process.
12
- It provides a way to define the process, break it up into separate components, and then send entities through the process.
13
-
14
- ####Define a workflow####
12
+ ## Installation
15
13
 
16
- To start, define a workflow.
14
+ Add this as a dependency to your project using [Bundler] with
17
15
 
18
- ````
19
- flow = Seam::Flow.new
20
- flow.send_order_to_warehouse
21
- flow.wait_for_order_to_be_shipped wait_up_to: 7.days
22
- flow.send_shipping_email email_template: 'shipping_7'
23
- flow.mark_order_as_fulfilled
24
- ````
16
+ ```
17
+ $ bundle add seam
18
+ ```
25
19
 
26
- A flow will convert any method call you make into a step that has to be completed.
20
+ [bundler]: https://bundler.io/
27
21
 
28
- You can also pass a hash to the method, which will be saved for later.
22
+ ## Development and Testing
29
23
 
30
- ````
31
- flow.wait_for_order_to_be_shipped wait_up_to: 7.days
32
- ````
24
+ ### Quickstart
33
25
 
34
- ####Starting an instance of the flow####
26
+ ```
27
+ $ git clone https://github.com/seamapi/ruby-next.git
28
+ $ cd ruby-next
29
+ $ bundle install
30
+ ```
35
31
 
36
- Starting an instance of the flow is done with "start":
32
+ Run the command below
37
33
 
38
- ````
39
- flow.start order_id: '1234'
40
- ````
34
+ ```
35
+ $ bundle exec rake
36
+ ```
41
37
 
42
- An instance of this effort was created and saved in whatever persistence is being used (in-memory by default).
38
+ Open an interactive ruby console with
43
39
 
44
- This effort will start at the first step (send_order_to_warehouse) and then progress through the steps as they are completed.
40
+ ```
41
+ $ bundle exec rake
42
+ ```
45
43
 
46
- "start" also returns the effort that was created, and it will look like this:
44
+ Primary development tasks are defined as [rake] tasks in the `Rakefile`
45
+ and available via `rake`.
46
+ View them with
47
47
 
48
- ````
49
- <Seam::Effort
50
- @completed_steps=[],
51
- @history=[],
52
- @complete=false,
53
- @id="1ecc4cbe-16af-45f6-8532-7f37493ec11c",
54
- @created_at=2013-08-20 22:58:07 -0500,
55
- @next_execute_at=2013-08-20 22:58:07 -0500,
56
- @next_step="send_order_to_warehouse",
57
- @flow={"steps"=>[{"name"=>"send_order_to_warehouse", "type"=>"do", "arguments"=>{}}, {"name"=>"wait_for_order_to_be_shipped", "type"=>"do", "arguments"=>{}}, {"name"=>"send_shipping_email", "type"=>"do", "arguments"=>{}}, {"name"=>"mark_order_as_fulfilled", "type"=>"do", "arguments"=>{}}]},
58
- @data={"order_id"=>"1234"}>
59
- ````
48
+ ```
49
+ $ bundle exec rake -T
50
+ ```
60
51
 
61
- So we have a unique instance of this flow and the instance has been saved in the database. The first step to be executed for this instance is "send_order_to_warehouse", so let's create a worker for this step.
52
+ [rake]: https://ruby.github.io/rake/
62
53
 
63
- ####Defining workers for each step####
54
+ ### Source code
64
55
 
65
- A workflow is comprised of steps, and each step needs a worker. Each worker will execute whatever it was meant to do, and then either:
56
+ The [source code] is hosted on GitHub.
57
+ Clone the project with
66
58
 
67
- 1. Pass the workflow instance to the next step on the process, or
68
- 2. Delay the step execution for a later date, or
69
- 3. End the entire workflow process for the instance.
59
+ ```
60
+ $ git clone git@github.com:seamapi/ruby-next.git
61
+ ```
70
62
 
71
- Since send_order_to_warehouse is the first step in this workflow, let's build the worker for it first:
63
+ [source code]: https://github.com/seamapi/ruby-next
72
64
 
73
- ````
74
- class SendOrderToWarehouseWorker < Seam::Worker
75
- def process
76
- # the current workflow instance is available as "effort"
77
- order = Order.find effort.data['order_id']
78
- warehouse_service.send order
65
+ ### Requirements
79
66
 
80
- # by default, if this worker completes with no error the workflow instance will be sent to the next step
81
- end
82
- end
83
- ````
67
+ You will need [Ruby] with [Bundler] and [Node.js] with [npm].
84
68
 
85
- If you name your class as a camel-case version of the step, Seam will automatically bind up the worker to the step.
69
+ Be sure that all commands run under the correct Ruby version, e.g.,
70
+ if using [rbenv], install the correct version with
86
71
 
87
- To execute the worker, use:
72
+ ```
73
+ $ rbenv install
74
+ $ npm install
75
+ ```
88
76
 
89
- ````
90
- SendOrderToWarehouse.execute_all
91
- ````
77
+ Install the development dependencies with
92
78
 
93
- This method will look for all workflow instances that are currently ready for the step in question.
79
+ ```
80
+ $ bundle install
81
+ ```
94
82
 
95
- ####Progressing through the workflow####
83
+ [bundler]: https://bundler.io/
84
+ [Node.js]: https://nodejs.org/
85
+ [npm]: https://www.npmjs.com/
86
+ [ruby]: https://www.ruby-lang.org/
87
+ [rbenv]: https://github.com/rbenv/rbenv
96
88
 
97
- By default, steps are considered as being completed when the worker completes successfully. There might be times where you don't want to go quickly, like the next step in this example:
89
+ ### Publishing
98
90
 
99
- ````
100
- class WaitForOrderToBeShippedWorker < Seam::Worker
101
- def process
102
- effort.data["shipping_status"] = # some method that returns the shipping status
103
- unless effort.data["shipping_status"] == "shipped"
104
- try_again_in 4.hours
105
- end
106
- end
107
- end
108
- ````
91
+ New versions are created with [gem release].
109
92
 
110
- "try_again_in" can be used to signal that the step has not been completed and should be retried later.
93
+ #### Automatic
111
94
 
112
- "eject" can also be used to signify that the entire workflow should be stopped, like so:
95
+ New versions are released automatically with [semantic-release]
96
+ as long as commits follow the [Angular Commit Message Conventions].
113
97
 
114
- ````
115
- class WaitForOrderToBeShippedWorker < Seam::Worker
116
- def process
117
- effort.data["shipping_status"] = # some method that returns the shipping status
118
- if effort.data["shipping_status"] == "cancelled"
119
- eject # no need to continue!
120
- end
121
- end
122
- end
123
- ````
98
+ [Angular Commit Message Conventions]: https://semantic-release.gitbook.io/semantic-release/#commit-message-format
99
+ [semantic-release]: https://semantic-release.gitbook.io/
124
100
 
125
- ####History####
101
+ #### Manual
126
102
 
127
- As workflow instances progress through each step, the history of every operation will be stored. A history of the "data" block before and after each step run is also stored.
103
+ Publish a new version by triggering a [version workflow_dispatch on GitHub Actions].
104
+ The `version` input will be passed to the `--version` option of `gem bump`.
128
105
 
129
- The history is available through:
106
+ This may be done on the web or using the [GitHub CLI] with
130
107
 
131
- ````
132
- effort.history
133
- ````
108
+ ```
109
+ $ gh workflow run version.yml --raw-field version=<version>
110
+ ```
134
111
 
135
- ####Waiting####
112
+ [gem release]: https://github.com/svenfuchs/gem-release
113
+ [GitHub CLI]: https://cli.github.com/
114
+ [version workflow_dispatch on GitHub Actions]: https://github.com/seamapi/ruby-next/actions?query=workflow%3Aversion
136
115
 
137
- Seam comes with a default worker for waiting. It can be defined by calling "wait" on a flow, like this.
116
+ ## GitHub Actions
138
117
 
139
- ````
140
- flow = Seam::Flow.new
141
- flow.send_order_to_warehouse
142
- flow.wait 2.days
143
- flow.check_if_the_order_has_been_fulfilled
144
- ````
118
+ _GitHub Actions should already be configured: this section is for reference only._
145
119
 
146
- ## Installation
120
+ The following repository secrets must be set on [GitHub Actions]:
147
121
 
148
- Add this line to your application's Gemfile:
122
+ - `RUBYGEMS_API_KEY`: RubyGems.org token for publishing gems.
149
123
 
150
- gem 'seam'
124
+ These must be set manually.
151
125
 
152
- And then execute:
126
+ ### Secrets for Optional GitHub Actions
153
127
 
154
- $ bundle
128
+ The version, format, generate, and semantic-release GitHub actions
129
+ require a user with write access to the repository.
130
+ Set these additional secrets to enable the action:
155
131
 
156
- Or install it yourself as:
132
+ - `GH_TOKEN`: A personal access token for the user.
133
+ - `GIT_USER_NAME`: The GitHub user's real name.
134
+ - `GIT_USER_EMAIL`: The GitHub user's email.
135
+ - `GPG_PRIVATE_KEY`: The GitHub user's [GPG private key].
136
+ - `GPG_PASSPHRASE`: The GitHub user's GPG passphrase.
157
137
 
158
- $ gem install seam
138
+ [github actions]: https://github.com/features/actions
139
+ [gpg private key]: https://github.com/marketplace/actions/import-gpg#prerequisites
159
140
 
160
141
  ## Contributing
161
142
 
162
- 1. Fork it
163
- 2. Create your feature branch (`git checkout -b my-new-feature`)
164
- 3. Commit your changes (`git commit -am 'Add some feature'`)
165
- 4. Push to the branch (`git push origin my-new-feature`)
166
- 5. Create new Pull Request
143
+ Please submit and comment on bug reports and feature requests.
144
+
145
+ To submit a patch:
146
+
147
+ 1. Fork it (https://github.com/seamapi/ruby-next/fork).
148
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
149
+ 3. Make changes.
150
+ 4. Commit your changes (`git commit -am 'Add some feature'`).
151
+ 5. Push to the branch (`git push origin my-new-feature`).
152
+ 6. Create a new Pull Request.
153
+
154
+ ## License
155
+
156
+ This Ruby gem is licensed under the MIT license.
157
+
158
+ ## Warranty
159
+
160
+ This software is provided by the copyright holders and contributors "as is" and
161
+ any express or implied warranties, including, but not limited to, the implied
162
+ warranties of merchantability and fitness for a particular purpose are
163
+ disclaimed. In no event shall the copyright holder or contributors be liable for
164
+ any direct, indirect, incidental, special, exemplary, or consequential damages
165
+ (including, but not limited to, procurement of substitute goods or services;
166
+ loss of use, data, or profits; or business interruption) however caused and on
167
+ any theory of liability, whether in contract, strict liability, or tort
168
+ (including negligence or otherwise) arising in any way out of the use of this
169
+ software, even if advised of the possibility of such damage.
data/Rakefile CHANGED
@@ -1 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+ require "standard/rake"
6
+
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
+ t.rspec_opts = "--pattern spec/**/*_spec.rb"
9
+ end
10
+
11
+ task default: %i[lint test]
12
+
13
+ task test: "spec"
14
+ task lint: "standard"
15
+ task format: "standard:fix"
16
+
17
+ desc "Open an interactive ruby console"
18
+ task :console do
19
+ require "irb"
20
+ require "bundler/setup"
21
+ require "seam"
22
+ ARGV.clear
23
+ IRB.start
24
+ end
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Seam
4
+ class Client
5
+ attr_accessor :api_key, :base_uri, :debug, :wait_for_action_attempt
6
+
7
+ def self.lts_version
8
+ Seam::LTS_VERSION
9
+ end
10
+
11
+ def initialize(api_key: nil, base_uri: nil, wait_for_action_attempt: false, debug: false)
12
+ @api_key = api_key || ENV["SEAM_API_KEY"]
13
+ @base_uri = base_uri || ENV["SEAM_API_URL"] || ENV["SEAM_ENDPOINT"] || "https://connect.getseam.com"
14
+ @debug = debug
15
+ @wait_for_action_attempt = wait_for_action_attempt
16
+
17
+ raise ArgumentError, "SEAM_API_KEY not found in environment, and api_key not provided" if @api_key.to_s.empty?
18
+
19
+ if ENV["SEAM_API_URL"]
20
+ warn "Using the SEAM_API_URL environment variable is deprecated. " \
21
+ "Support will be removed in a later major version. Use SEAM_ENDPOINT instead."
22
+ end
23
+ end
24
+
25
+ def lts_version
26
+ Seam::LTS_VERSION
27
+ end
28
+
29
+ def access_codes
30
+ @access_codes ||= Seam::Clients::AccessCodes.new(self)
31
+ end
32
+
33
+ def acs
34
+ @acs ||= Seam::Clients::Acs.new(self)
35
+ end
36
+
37
+ def action_attempts
38
+ @action_attempts ||= Seam::Clients::ActionAttempts.new(self)
39
+ end
40
+
41
+ def client_sessions
42
+ @client_sessions ||= Seam::Clients::ClientSessions.new(self)
43
+ end
44
+
45
+ def connect_webviews
46
+ @connect_webviews ||= Seam::Clients::ConnectWebviews.new(self)
47
+ end
48
+
49
+ def connected_accounts
50
+ @connected_accounts ||= Seam::Clients::ConnectedAccounts.new(self)
51
+ end
52
+
53
+ def devices
54
+ @devices ||= Seam::Clients::Devices.new(self)
55
+ end
56
+
57
+ def events
58
+ @events ||= Seam::Clients::Events.new(self)
59
+ end
60
+
61
+ def locks
62
+ @locks ||= Seam::Clients::Locks.new(self)
63
+ end
64
+
65
+ def networks
66
+ @networks ||= Seam::Clients::Networks.new(self)
67
+ end
68
+
69
+ def noise_sensors
70
+ @noise_sensors ||= Seam::Clients::NoiseSensors.new(self)
71
+ end
72
+
73
+ def phones
74
+ @phones ||= Seam::Clients::Phones.new(self)
75
+ end
76
+
77
+ def thermostats
78
+ @thermostats ||= Seam::Clients::Thermostats.new(self)
79
+ end
80
+
81
+ def user_identities
82
+ @user_identities ||= Seam::Clients::UserIdentities.new(self)
83
+ end
84
+
85
+ def webhooks
86
+ @webhooks ||= Seam::Clients::Webhooks.new(self)
87
+ end
88
+
89
+ def workspaces
90
+ @workspaces ||= Seam::Clients::Workspaces.new(self)
91
+ end
92
+
93
+ def health
94
+ request_seam(:get, "/health")
95
+ end
96
+
97
+ # @deprecated Please use {#devices.unmanaged} instead.
98
+ def unmanaged_devices
99
+ warn "[DEPRECATION] 'unmanaged_devices' is deprecated. Please use 'devices.unmanaged' instead."
100
+
101
+ @unmanaged_devices ||= Seam::Clients::DevicesUnmanaged.new(self)
102
+ end
103
+
104
+ # @deprecated Please use {#access_codes.unmanaged} instead.
105
+ def unmanaged_access_codes
106
+ warn "[DEPRECATION] 'unmanaged_access_codes' is deprecated. Please use 'access_codes.unmanaged' instead."
107
+
108
+ @unmanaged_access_codes ||= Seam::Clients::AccessCodesUnmanaged.new(self)
109
+ end
110
+
111
+ def request_seam_object(method, path, klass, inner_object, config = {})
112
+ response = request_seam(method, path, config)
113
+
114
+ data = response[inner_object]
115
+
116
+ klass.load_from_response(data, self)
117
+ end
118
+
119
+ def request_seam(method, path, config = {})
120
+ Seam::Request.new(
121
+ api_key: api_key,
122
+ base_uri: base_uri,
123
+ debug: debug
124
+ ).perform(
125
+ method, path, config
126
+ )
127
+ end
128
+ end
129
+ end