lib/teaspoon/suite.rb in teaspoon-1.1.5 vs lib/teaspoon/suite.rb in teaspoon-1.2.0

- old
+ new

@@ -40,80 +40,91 @@ false end protected - def specs - files = specs_from_file - return files unless files.empty? - glob.map { |file| asset_from_file(file) } - end + def specs + files = specs_from_file + return files unless files.empty? + glob.map { |file| asset_from_file(file) } + end - def asset_tree(sources) - sources.flat_map do |source| - asset = @env.find_asset(source) + 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) - assets = config.expand_assets ? asset.to_a : [asset] - assets.map { |a| asset_url(a) } + 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 + + 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 + + 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 - source.blank? ? [] : [source] + [asset] end - end.compact.uniq - end + end - def asset_url(asset) - params = [] - params << "body=1" if config.expand_assets - params << "instrument=1" if instrument_file?(asset.pathname.to_s) - url = asset.logical_path - url += "?#{params.join("&")}" if params.any? - url - end + def instrument_file?(file) + return false unless coverage_requested? + return false if matched_spec_file?(file) + true + end - def instrument_file?(file) - return false unless coverage_requested? - return false if matched_spec_file?(file) - true - end + def coverage_requested? + @options[:coverage] || Teaspoon.configuration.use_coverage + end - def coverage_requested? - @options[:coverage] || Teaspoon.configuration.use_coverage - end + def matched_spec_file?(file) + glob.include?(file) + end - def matched_spec_file?(file) - glob.include?(file) - end + 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 - def asset_from_file(original) - filename = original - Rails.application.config.assets.paths.each do |path| - filename = filename.gsub(%r(^#{Regexp.escape(path.to_s)}[\/|\\]), "") + raise Teaspoon::AssetNotServableError.new(filename: filename) if filename == original + normalize_js_extension(filename) end - raise Teaspoon::AssetNotServableError.new(filename: filename) if filename == original - normalize_js_extension(filename) - end + 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 - 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") + def glob + @glob ||= Dir[config.matcher.present? ? Teaspoon.configuration.root.join(config.matcher) : ""].sort! end - end - def glob - @glob ||= Dir[config.matcher.present? ? Teaspoon.configuration.root.join(config.matcher) : ""].sort! - end + 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 - 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 - - def specs_from_file - Array(@options[:file]).map do |filename| - asset_from_file(File.expand_path(Teaspoon.configuration.root.join(filename))) + def specs_from_file + Array(@options[:file]).map do |filename| + asset_from_file(File.expand_path(Teaspoon.configuration.root.join(filename))) + end end - end end end