class Tailor::RakeTask

This class lets you define Rake tasks to drive tailor. Specifying options is similar to specifying options in a configuration file.

@example Use Tailor CLI Options

Tailor::RakeTask.new do |task|
  task.tailor_opts = %w(--no-color --max-line-length=100)
end

@example A task specifically for features

Tailor::RakeTask.new(:tailor_features) do |task|
  task.file_set 'features/**/*.rb', :features do |style|
    style.max_line_length 100, level: :warn
    style.trailing_newlines 2
  end
end

@example Use a configuration file

Tailor::RakeTask.new do |task|
  task.config_file = 'hardcore_stylin.rb'
end

Note that prior to 1.1.4, you could use the config_file option and specify file_sets or recursive_file_sets; this caused problems (and confusion), so the combination of these was removed in 1.2.0. If you use config_file, then all file_sets and recursive_file_sets that you specify in the Rake task will be ignored; only those specified in the given config file will be used.

Attributes

config_file[RW]

Use a specific configuration file. If you have a .tailor file, your RakeTask will automatically use that.

@return [String] The path to the configuration file.

formatters[RW]

@return [Array] The list of formatters to use. (not really used yet)

tailor_opts[RW]

Specify any extra options (CLI options). These will override any options set in your config file.

Public Class Methods

new(name = 'tailor', desc = 'Check style') { |self| ... } click to toggle source

@param [String] name The task name. @param [String] desc Description of the task.

# File lib/tailor/rake_task.rb, line 63
def initialize(name = 'tailor', desc = 'Check style')
  @name, @desc = name, desc
  @tailor_opts = []
  @file_sets = []
  @recursive_file_sets = []
  @config_file = nil

  yield self if block_given?

  define_task
end

Public Instance Methods

file_set(file_expression, label=:default, &block) click to toggle source

Add a file set to critique, just like you would in a config file.

@param [String] file_expression @param [Symbol] label

# File lib/tailor/rake_task.rb, line 79
def file_set(file_expression, label=:default, &block)
  @file_sets << [file_expression, label, block]
end
recursive_file_set(file_expression, label=:default, &block) click to toggle source

Add a recursive file set to critique, just like you would in a config file.

@param [String] file_expression @param [Symbol] label

# File lib/tailor/rake_task.rb, line 88
def recursive_file_set(file_expression, label=:default, &block)
  @recursive_file_sets << [file_expression, label, block]
end

Private Instance Methods

create_config() click to toggle source

@return [Tailor::Configuration]

# File lib/tailor/rake_task.rb, line 123
def create_config
  configuration = Tailor::Configuration.new([],
    Tailor::CLI::Options.parse!(@tailor_opts))
  configuration.load!

  unless formatters.nil? || formatters.empty?
    configuration.formatters(formatters)
  end

  configuration
end
create_file_sets_for(config) click to toggle source

@param [Tailor::Configuration] config

# File lib/tailor/rake_task.rb, line 145
def create_file_sets_for(config)
  unless @file_sets.empty?
    @file_sets.each { |fs| config.file_set(fs[0], fs[1], &fs[2]) }
  end
end
create_recursive_file_sets_for(config) click to toggle source

@param [Tailor::Configuration] config

# File lib/tailor/rake_task.rb, line 136
def create_recursive_file_sets_for(config)
  unless @recursive_file_sets.empty?
    @recursive_file_sets.each do |fs|
      config.recursive_file_set(fs[0], fs[1], &fs[2])
    end
  end
end
define_task() click to toggle source
# File lib/tailor/rake_task.rb, line 94
def define_task
  desc @desc
  task @name do
    if config_file
      @tailor_opts.concat %W(--config-file=#{config_file})
    end

    cli = Tailor::CLI.new(@tailor_opts)
    cli.configuration.file_sets
    create_file_sets_for cli.configuration
    create_recursive_file_sets_for cli.configuration

    begin
      failure = cli.execute!
      exit(1) if failure
    rescue Tailor::RuntimeError => ex
      STDERR.puts ex.message
      STDERR.puts ex.backtrace.join("\n")
    rescue SystemExit => ex
      exit(ex.status)
    rescue Exception => ex
      STDERR.puts("#{ex.message} (#{ex.class})")
      STDERR.puts(ex.backtrace.join("\n"))
      exit(1)
    end
  end
end