service_actor-promptable 1.0.1 → 1.0.2
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 +4 -4
- data/CHANGELOG.md +6 -1
- data/README.md +28 -1
- data/lib/service_actor/promptable/unattended.rb +17 -0
- data/lib/service_actor/promptable/version.rb +1 -1
- data/lib/service_actor/promptable.rb +50 -6
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86c769e2c2f536f08cf0ee375bdad88b01e06b130a657aaa2cd6c179939a5214
|
4
|
+
data.tar.gz: d406cd55a3c94872c88beb19ad894291ac45f89818afeafd8417c07721c6bbdb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6bdca3a3d7ff922ab88f83eb89535e98deefb6cbf25e8a3df8a25af84367dd253e9b87e4a1ede9c29f513b9db6a65bcce37661d03b23f9341f7aa6dfc8fcb82
|
7
|
+
data.tar.gz: 035e23cc95bbb9385bcedf3def851c80e19c2cc469aaf8978257f527a2791602cb0f71a0ad4664101a53d6487771985b2b04de4ddb71eacd651ab578b5b0039b
|
data/CHANGELOG.md
CHANGED
@@ -13,6 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
13
13
|
|
14
14
|
### Removed
|
15
15
|
|
16
|
+
## [1.0.2] - 2022-07-03
|
17
|
+
### Added
|
18
|
+
- Supports running unattended, with configurable toggle
|
19
|
+
|
16
20
|
## [1.0.1] - 2022-06-30
|
17
21
|
### Added
|
18
22
|
- Introspectable Version module
|
@@ -26,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
26
30
|
- DSL => `prompt_with`
|
27
31
|
- Class attribute => `prompt`
|
28
32
|
|
29
|
-
[Unreleased]: https://github.com/pboling/service_actor-promptable/compare/v1.0.
|
33
|
+
[Unreleased]: https://github.com/pboling/service_actor-promptable/compare/v1.0.2...HEAD
|
34
|
+
[1.0.2]: https://github.com/pboling/service_actor-promptable/compare/1.0.1...v1.0.2
|
30
35
|
[1.0.1]: https://github.com/pboling/service_actor-promptable/compare/1.0.0...v1.0.1
|
31
36
|
[1.0.0]: https://github.com/pboling/service_actor-promptable/compare/3079772bb43c02ebfca364d27d062e573acdb091...v1.0.0
|
data/README.md
CHANGED
@@ -167,11 +167,38 @@ class ShouldContinue < Actor
|
|
167
167
|
def call
|
168
168
|
self.answer = prompt.ask("What is the capital of Assyria?", default: "Uh, I don't know that")
|
169
169
|
# or for a Yes/No query:
|
170
|
-
#
|
170
|
+
#
|
171
171
|
end
|
172
172
|
end
|
173
173
|
```
|
174
174
|
|
175
|
+
If you have an actor that may be run unattended, and thus want to skip the prompts:
|
176
|
+
```rb
|
177
|
+
require "tty/prompt"
|
178
|
+
|
179
|
+
class ShouldContinue < Actor
|
180
|
+
include ServiceActor::Promptable
|
181
|
+
|
182
|
+
prompt_with TTY::Prompt.new, unattended_options: { prompt_toggle: :unattended, answer_with: true}
|
183
|
+
output :answer, type: String
|
184
|
+
|
185
|
+
def call
|
186
|
+
# When not running unattended, this will prompt as normal.
|
187
|
+
# When running unattended it will use the `answer_with` value.
|
188
|
+
self.answer = prompt.yes?("Do it?")
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
# Run unattended:
|
193
|
+
ShouldContinue.call(unattended: true) # will not prompt, and `answer` will be `true`!
|
194
|
+
|
195
|
+
# Run the same class, no code changes, but attended:
|
196
|
+
ShouldContinue.call(unattended: false) # will prompt!
|
197
|
+
|
198
|
+
# Attended (unattended: false) is the default for classes that include ServiceActor::Promptable (obviously!)
|
199
|
+
ShouldContinue.call # will prompt!
|
200
|
+
```
|
201
|
+
|
175
202
|
### How to test
|
176
203
|
|
177
204
|
Let's say you have the `ShouldContinue` class above, how do you provide user input to test the Actor?
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ServiceActor
|
4
|
+
module Promptable
|
5
|
+
# Sometimes a Service Actor should be able to run unattended or attended
|
6
|
+
class Unattended < BasicObject
|
7
|
+
def initialize(answer_with)
|
8
|
+
@answer_with = answer_with
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing(_name, *_args)
|
12
|
+
::Kernel.puts "Prompt is NoOp. Running unattended!"
|
13
|
+
@answer_with
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -6,11 +6,26 @@ require "version_gem"
|
|
6
6
|
# This library
|
7
7
|
require "service_actor"
|
8
8
|
require "service_actor/promptable/version"
|
9
|
+
require "service_actor/promptable/unattended"
|
9
10
|
|
10
11
|
module ServiceActor
|
11
|
-
#
|
12
|
+
# Adds the `prompt_with` DSL to actors. This allows you to set a prompt interface.
|
13
|
+
# It is suggested to use the `tty-prompt` gem, but any prompt tool should work.
|
14
|
+
# Then you are able to call `.prompt` and manipulate the prompt during a play.
|
15
|
+
#
|
16
|
+
# class PromptableActor < Actor
|
17
|
+
# prompt_with TTY::Prompt.new
|
18
|
+
# # or alternatively
|
19
|
+
# def call
|
20
|
+
# super
|
21
|
+
# self.prompt = TTY::Prompt.new
|
22
|
+
# end
|
23
|
+
# end
|
12
24
|
module Promptable
|
13
|
-
|
25
|
+
UNATTENDED_DEFAULTS = {
|
26
|
+
prompt_toggle: :unattended,
|
27
|
+
answer_with: true
|
28
|
+
}.freeze
|
14
29
|
|
15
30
|
def self.included(base)
|
16
31
|
base.extend(ClassMethods)
|
@@ -21,11 +36,20 @@ module ServiceActor
|
|
21
36
|
def inherited(child)
|
22
37
|
super
|
23
38
|
|
24
|
-
child.
|
39
|
+
child.prompt_with(
|
40
|
+
prompt,
|
41
|
+
unattended_options: ServiceActor::Promptable::UNATTENDED_DEFAULTS.merge(unattended_options).dup
|
42
|
+
)
|
25
43
|
end
|
26
44
|
|
27
|
-
def prompt_with(prompter)
|
28
|
-
|
45
|
+
def prompt_with(prompter, unattended_options: {})
|
46
|
+
unattended_options = ServiceActor::Promptable::UNATTENDED_DEFAULTS.merge(unattended_options)
|
47
|
+
self.prompt = prompter
|
48
|
+
self.unattended_options = unattended_options
|
49
|
+
return unless unattended_options.key?(:prompt_toggle) && unattended_options[:prompt_toggle].is_a?(Symbol)
|
50
|
+
|
51
|
+
# Create an Actor input :unattended (default) which must be either true or false
|
52
|
+
input unattended_options[:prompt_toggle], in: [true, false], allow_nil: false, default: false
|
29
53
|
end
|
30
54
|
|
31
55
|
def prompt
|
@@ -35,15 +59,35 @@ module ServiceActor
|
|
35
59
|
def prompt=(prompter)
|
36
60
|
@prompt = prompter
|
37
61
|
end
|
62
|
+
|
63
|
+
def unattended_options
|
64
|
+
@unattended_options
|
65
|
+
end
|
66
|
+
|
67
|
+
def unattended_options=(unattended_options)
|
68
|
+
@unattended_options = unattended_options
|
69
|
+
end
|
38
70
|
end
|
39
71
|
|
40
72
|
def prompt
|
41
|
-
self.class.
|
73
|
+
if self.class.unattended_options[:prompt_toggle] && send(self.class.unattended_options[:prompt_toggle])
|
74
|
+
Unattended.new(self.class.unattended_options[:answer_with])
|
75
|
+
else
|
76
|
+
self.class.prompt
|
77
|
+
end
|
42
78
|
end
|
43
79
|
|
44
80
|
def prompt=(prompter)
|
45
81
|
self.class.prompt = prompter
|
46
82
|
end
|
83
|
+
|
84
|
+
def unattended_options
|
85
|
+
self.class.unattended_options
|
86
|
+
end
|
87
|
+
|
88
|
+
def unattended_options=(unattended_options)
|
89
|
+
self.class.unattended_options = unattended_options
|
90
|
+
end
|
47
91
|
end
|
48
92
|
end
|
49
93
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: service_actor-promptable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Boling
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: service_actor
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- README.md
|
199
199
|
- SECURITY.md
|
200
200
|
- lib/service_actor/promptable.rb
|
201
|
+
- lib/service_actor/promptable/unattended.rb
|
201
202
|
- lib/service_actor/promptable/version.rb
|
202
203
|
- sig/service_actor/promptable.rbs
|
203
204
|
homepage: https://github.com/pboling/service_actor-promptable
|
@@ -205,10 +206,10 @@ licenses:
|
|
205
206
|
- MIT
|
206
207
|
metadata:
|
207
208
|
homepage_uri: https://github.com/pboling/service_actor-promptable
|
208
|
-
source_code_uri: https://github.com/pboling/service_actor-promptable/tree/v1.0.
|
209
|
-
changelog_uri: https://github.com/pboling/service_actor-promptable/blob/v1.0.
|
209
|
+
source_code_uri: https://github.com/pboling/service_actor-promptable/tree/v1.0.2
|
210
|
+
changelog_uri: https://github.com/pboling/service_actor-promptable/blob/v1.0.2/CHANGELOG.md
|
210
211
|
bug_tracker_uri: https://github.com/pboling/service_actor-promptable/issues
|
211
|
-
documentation_uri: https://www.rubydoc.info/gems/service_actor-promptable/1.0.
|
212
|
+
documentation_uri: https://www.rubydoc.info/gems/service_actor-promptable/1.0.2
|
212
213
|
wiki_uri: https://github.com/pboling/service_actor-promptable/wiki
|
213
214
|
rubygems_mfa_required: 'true'
|
214
215
|
post_install_message:
|