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