class YSI::Plugin

Attributes

err[RW]
out[RW]

Public Class Methods

new(path) click to toggle source
# File lib/yes_ship_it/plugin.rb, line 5
def initialize(path)
  @plugin_dir = File.join(path, "yes_ship_it", "assertions")

  @out = STDOUT
  @err = STDERR
end

Public Instance Methods

generate(name, display_name) click to toggle source
# File lib/yes_ship_it/plugin.rb, line 46
def generate(name, display_name)
  plugin_path = File.join(@plugin_dir, name + ".rb")

  if File.exist?(plugin_path)
    err.puts "Can't generate plugin. Plugin already exists at `#{plugin_path}`."
    exit 1
  end

  FileUtils.mkdir_p(@plugin_dir)

  File.open(plugin_path, "w") do |f|
    f.puts "module YSI"
    f.puts "  class #{YSI::Assertion.class_name(name)} < Assertion"
    f.puts "    def self.display_name"
    f.puts "      \"#{display_name}\""
    f.puts "    end"
    f.puts
    f.puts "    def check"
    f.puts "    end"
    f.puts
    f.puts "    def assert(executor)"
    f.puts "      \"help me to do it\""
    f.puts "    end"
    f.puts "  end"
    f.puts "end"
  end

  out.puts "Generated assertion plugin at `#{plugin_path}`."
end
list() click to toggle source
# File lib/yes_ship_it/plugin.rb, line 28
def list
  plugins = load

  if plugins.empty?
    out.puts "There are no local plugins."
    out.puts
    out.puts "Create one with `yes_ship_it plugin init MyAssertion`."
    out.puts
    out.puts "Documentation about how to write plugins can be found at"
    out.puts
    out.puts "    https://github.com/cornelius/yes_ship_it/wiki/plugins"
  else
    plugins.each do |plugin_name, plugin_class|
      out.puts "#{plugin_name}: #{plugin_class.display_name}"
    end
  end
end
load() click to toggle source
# File lib/yes_ship_it/plugin.rb, line 12
def load
  plugin_paths = []
  if File.exist?(@plugin_dir)
    plugin_paths = Dir.glob("#{@plugin_dir}/*.rb").sort
  end

  plugins = {}
  plugin_paths.each do |plugin_path|
    plugin_name = File.basename(plugin_path, ".rb")
    require plugin_path
    plugins[plugin_name] = YSI::Assertion.class_for_name(plugin_name)
  end

  plugins
end