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