class Teaspoon::Suite

Attributes

config[RW]
name[RW]

Public Class Methods

all() click to toggle source
# File lib/teaspoon/suite.rb, line 3
def self.all
  @all ||= Teaspoon.configuration.suite_configs.keys.map { |suite| Teaspoon::Suite.new(suite: suite) }
end
new(options = {}) click to toggle source
# File lib/teaspoon/suite.rb, line 19
def initialize(options = {})
  @options = options
  @name = (@options[:suite] || :default).to_s
  @config = suite_configuration
  @env = Rails.application.assets
end
resolve_spec_for(file) click to toggle source
# File lib/teaspoon/suite.rb, line 7
def self.resolve_spec_for(file)
  all.each do |suite|
    spec = suite.include_spec_for?(file)
    return { suite: suite.name, path: spec } if spec
  end
  false
end

Public Instance Methods

include_spec_for?(file) click to toggle source
# File lib/teaspoon/suite.rb, line 36
def include_spec_for?(file)
  return file if glob.include?(file)
  paths = glob.select { |path| path.include?(file) }
  return paths unless paths.empty?
  false
end
spec_assets(include_helper = true) click to toggle source
# File lib/teaspoon/suite.rb, line 30
def spec_assets(include_helper = true)
  assets = specs
  assets.unshift(helper) if include_helper && helper
  asset_tree(assets)
end
spec_files() click to toggle source
# File lib/teaspoon/suite.rb, line 26
def spec_files
  glob.map { |file| { path: file, name: asset_from_file(file) } }
end

Protected Instance Methods

asset_and_dependencies(asset) click to toggle source
# File lib/teaspoon/suite.rb, line 72
def asset_and_dependencies(asset)
  if config.expand_assets
    if asset.respond_to?(:to_a)
      asset.to_a
    else
      asset.metadata[:included].map { |uri| @env.load(uri) }
    end
  else
    [asset]
  end
end
asset_from_file(original) click to toggle source
# File lib/teaspoon/suite.rb, line 98
def asset_from_file(original)
  filename = original
  Rails.application.config.assets.paths.each do |path|
    filename = filename.gsub(%r(^#{Regexp.escape(path.to_s)}[\/|\\]), "")
  end

  raise Teaspoon::AssetNotServableError.new(filename: filename) if filename == original
  normalize_js_extension(filename)
end
asset_tree(sources) click to toggle source
# File lib/teaspoon/suite.rb, line 51
def asset_tree(sources)
  sources.flat_map do |source|
    asset = @env.find_asset(source, accept: "application/javascript", pipeline: :debug)

    if asset && asset.respond_to?(:logical_path)
      asset_and_dependencies(asset).map { |a| asset_url(a) }
    else
      source.blank? ? [] : [source]
    end
  end.compact.uniq
end
asset_url(asset) click to toggle source
# File lib/teaspoon/suite.rb, line 63
def asset_url(asset)
  params = []
  params << "body=1" if config.expand_assets
  params << "instrument=1" if instrument_file?(asset.filename)
  url = asset.logical_path
  url += "?#{params.join("&")}" if params.any?
  url
end
coverage_requested?() click to toggle source
# File lib/teaspoon/suite.rb, line 90
def coverage_requested?
  @options[:coverage] || Teaspoon.configuration.use_coverage
end
glob() click to toggle source
# File lib/teaspoon/suite.rb, line 114
def glob
  @glob ||= Dir[config.matcher.present? ? Teaspoon.configuration.root.join(config.matcher) : ""].sort!
end
instrument_file?(file) click to toggle source
# File lib/teaspoon/suite.rb, line 84
def instrument_file?(file)
  return false unless coverage_requested?
  return false if matched_spec_file?(file)
  true
end
matched_spec_file?(file) click to toggle source
# File lib/teaspoon/suite.rb, line 94
def matched_spec_file?(file)
  glob.include?(file)
end
normalize_js_extension(original_filename) click to toggle source
# File lib/teaspoon/suite.rb, line 108
def normalize_js_extension(original_filename)
  config.js_extensions.inject(original_filename.gsub(".erb", "")) do |filename, extension|
    filename.gsub(Regexp.new(extension.to_s + "$"), ".js")
  end
end
specs() click to toggle source
# File lib/teaspoon/suite.rb, line 45
def specs
  files = specs_from_file
  return files unless files.empty?
  glob.map { |file| asset_from_file(file) }
end
specs_from_file() click to toggle source
# File lib/teaspoon/suite.rb, line 124
def specs_from_file
  Array(@options[:file]).map do |filename|
    asset_from_file(File.expand_path(Teaspoon.configuration.root.join(filename)))
  end
end
suite_configuration() click to toggle source
# File lib/teaspoon/suite.rb, line 118
def suite_configuration
  config = Teaspoon.configuration.suite_configs[name]
  raise Teaspoon::UnknownSuite.new(name: name) unless config.present?
  config[:instance] ||= Teaspoon::Configuration::Suite.new(name, &config[:block])
end