No release in over a year
TTY Prompt plugin for your service objects for your application logic
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

ServiceActor::Promptable

Easily add a TTY prompt to your Service Actors!

Project bundle add service_actor-promptable
1️⃣ name, license, docs, standards RubyGems.org License: MIT RubyDoc.info SemVer 2.0.0 Keep-A-Changelog 1.0.0
2️⃣ version & activity Gem Version Total Downloads Download Rank Source Code Open PRs Closed PRs
3️⃣ maintanence & linting Maintainability Helpers Depfu Contributors Style Kloc Roll
4️⃣ testing Open Issues Closed Issues Supported Heads Unofficial Support
5️⃣ coverage & security CodeClimate CodeCov Coveralls Security Policy CodeQL Code Coverage
6️⃣ resources Discussion Get help on Codementor Chat Blog Wiki
7️⃣ spread 💖 Liberapay Patrons Sponsor Me Tweet @ Peter 🌏 👼 💻

Installation

Install the gem and add to the application's Gemfile by executing:

$ bundle add service_actor-promptable

If bundler is not being used to manage dependencies, install the gem by executing:

$ gem install service_actor-promptable

Usage

This example uses tty-prompt, but you can use any prompt library.

In your Gemfile:

gem 'service_actor-promptable'
gem 'tty-prompt'

Create an actor that will use a prompt:

require "tty/prompt"

class ShouldContinue < Actor
  include ServiceActor::Promptable

  prompt_with TTY::Prompt.new
  output :answer, type: String
  # or
  # output :answer, type: [TrueClass, FalseClass]

  def call
    self.answer = prompt.ask("What is the capital of Assyria?", default: "Uh, I don't know that")
    # or for a Yes/No query:
    # 
  end
end

If you have an actor that may be run unattended, and thus want to skip the prompts:

require "tty/prompt"

class ShouldContinue < Actor
  include ServiceActor::Promptable

  prompt_with TTY::Prompt.new, unattended_options: { prompt_toggle: :unattended, answer_with: true}
  output :answer, type: String

  def call
    # When not running unattended, this will prompt as normal.
    # When running unattended it will use the `answer_with` value.
    self.answer = prompt.yes?("Do it?")
  end
end

# Run unattended:
ShouldContinue.call(unattended: true) # will not prompt, and `answer` will be `true`!

# Run the same class, no code changes, but attended:
ShouldContinue.call(unattended: false) # will prompt!

# Attended (unattended: false) is the default for classes that include ServiceActor::Promptable (obviously!)
ShouldContinue.call # will prompt!

How to test

Let's say you have the ShouldContinue class above, how do you provide user input to test the Actor?

require "tty/prompt"
require "tty/prompt/test"

describe ShouldContinue do
  around do |example|
    original = ShouldContinue.prompt
    ShouldContinue.prompt = TTY::Prompt::Test.new
    # Prepare a response from the user
    ShouldContinue.prompt.input << "New Jack City\n"
    # or for a Yes/No response:
    # ShouldContinue.prompt.input << "Y\n"
    ShouldContinue.prompt.input.rewind
    example.run
    ShouldContinue.prompt = original
  end
end

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

See CONTRIBUTING.md

Contributors

Contributors

Made with contributors-img.

Versioning

This library aims to adhere to Semantic Versioning 2.0.0. Violations of this scheme should be reported as bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new major versions.

As a result of this policy, you can (and should) specify a dependency on this gem using the Pessimistic Version Constraint with two digits of precision.

For example:

spec.add_dependency 'service_actor-promptable', '~> 1.0'

License

The gem is available as open source under the terms of the MIT License License: MIT. See LICENSE for the official Copyright Notice.

Code of Conduct

Everyone interacting in the ServiceActor::Promptable project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.

Security

See SECURITY.md.