class Stairs::Step
Attributes
groups[R]
options[R]
step_description[W]
step_title[W]
Public Class Methods
description(description)
click to toggle source
# File lib/stairs/step.rb, line 26 def self.description(description) self.step_description = description end
new(*args)
click to toggle source
# File lib/stairs/step.rb, line 5 def initialize(*args) options = args.extract_options! @options = options.reverse_merge required: true @groups = args.first end
title(title)
click to toggle source
# File lib/stairs/step.rb, line 22 def self.title(title) self.step_title = title end
Public Instance Methods
choice(*args, &block)
click to toggle source
Prompt user to make a choice
# File lib/stairs/step.rb, line 53 def choice(*args, &block) Choice.new(*args, &block).run end
env(name, value)
click to toggle source
Set or update env var
# File lib/stairs/step.rb, line 64 def env(name, value) ENV[name] = value if value Stairs.configuration.env_adapter.set name, value else Stairs.configuration.env_adapter.unset name end end
finish(message)
click to toggle source
# File lib/stairs/step.rb, line 103 def finish(message) puts '== All done!'.green puts message.green end
group(*names) { || ... }
click to toggle source
# File lib/stairs/step.rb, line 99 def group(*names) yield if !groups || (names & groups).any? end
provide(prompt, options = {})
click to toggle source
Prompt user to provide input
# File lib/stairs/step.rb, line 39 def provide(prompt, options = {}) options.reverse_merge! required: true, default: nil required = options[:required] && !options[:default] prompt = "#{defaulted_prompt(prompt, options[:default])}: " if Stairs.configuration.use_defaults && options[:default] options[:default] else Stairs::Util::CLI.collect(prompt.blue, required: required) || options[:default] end end
rake(task)
click to toggle source
# File lib/stairs/step.rb, line 57 def rake(task) stairs_info "== Running #{task}" system "rake #{task}" stairs_info "== Completed #{task}" end
run!()
click to toggle source
# File lib/stairs/step.rb, line 12 def run! stairs_info "== Running #{step_title}" run if run_step? stairs_info "== Completed #{step_title}" end
setup(step_name, options = {}, &block)
click to toggle source
Embed a step where step_name is a symbol that can be resolved to a class in Stairs::Steps
or a block is provided to be executed in an instance of Step
# File lib/stairs/step.rb, line 87 def setup(step_name, options = {}, &block) if block_given? Step.new(groups, options).tap do |step| step.define_singleton_method :run, &block step.step_title = step_name.to_s.titleize end.run! else klass = "Stairs::Steps::#{step_name.to_s.camelize}".constantize klass.new(groups, options).run! end end
stairs_info(message)
click to toggle source
# File lib/stairs/step.rb, line 108 def stairs_info(message) puts message.light_black end
step_description()
click to toggle source
# File lib/stairs/step.rb, line 34 def step_description @step_description || self.class.step_description end
step_title()
click to toggle source
# File lib/stairs/step.rb, line 30 def step_title @step_title || self.class.step_title end
write(string, filename)
click to toggle source
Replace contents of file
# File lib/stairs/step.rb, line 75 def write(string, filename) Util::FileMutation.write(string, filename) end
write_line(string, filename)
click to toggle source
Append line to file
# File lib/stairs/step.rb, line 80 def write_line(string, filename) Util::FileMutation.write_line(string, filename) end
Private Instance Methods
defaulted_prompt(prompt, default = nil)
click to toggle source
# File lib/stairs/step.rb, line 119 def defaulted_prompt(prompt, default = nil) return prompt if default.nil? "#{prompt} (leave blank for #{default})" end
run_step?()
click to toggle source
# File lib/stairs/step.rb, line 114 def run_step? return true if options[:required] choice 'This step is optional, would you like to perform it?' end