Sha256: 36c58c409d6a349e7c14d395d123dd42346f8d386ee8552661651f86d107ff25

Contents?: true

Size: 1.7 KB

Versions: 4

Compression:

Stored size: 1.7 KB

Contents

# coding: utf-8
require 'tilt'
require 'childprocess'
require 'guard/jasmine'
require 'guard/jasmine/util'

# Tilt template to generate coverage instrumented
# Jasmine specs files.
#
class JasmineCoverage < Tilt::Template
  extend ::Guard::Jasmine::Util

  def prepare
  end

  # Returns a coverage instrumented JavaScript file
  #
  def evaluate(context, locals)
    return data if !ENV['IGNORE_INSTRUMENTATION'].to_s.empty? && file =~ Regexp.new(ENV['IGNORE_INSTRUMENTATION'])
    return data unless JasmineCoverage.coverage_bin
    return data unless file.include?(JasmineCoverage.app_asset_path)

    Dir.mktmpdir do |path|
      filename = File.basename(file)
      input    = File.join(path, filename).sub /\.js.+/, '.js'

      File.write input, data

      result = %x[#{JasmineCoverage.coverage_bin} instrument --embed-source #{input.shellescape}]

      raise "Could not generate coverage instrumented file for #{ file }" unless $?.exitstatus == 0

      result.gsub input, file

    end
  end

  private

  # Get the absolute path to the projects assets path `/app/assets`.
  #
  # @return [String] the path to the Rails assets
  #
  def self.app_asset_path
    @app_asset_path ||= File.join(Rails.root, 'app', 'assets')
  end

  # Returns the coverage executable path.
  #
  # @return [String] the path
  #
  def self.coverage_bin
    @coverage_bin ||= which 'istanbul'
  end

end

if ENV['COVERAGE'] == 'true' and defined?(Rails)

  # Guard::Jasmine engine to register coverage instrumented
  # Jasmine spec files.
  #
  class GuardJasmineCoverageEngine < ::Rails::Engine
    initializer 'guard-jasmine.initialize' do |app|
      app.assets.register_postprocessor 'application/javascript', JasmineCoverage
    end
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
guard-jasmine-2.0.0 lib/guard/jasmine/coverage.rb
guard-jasmine-2.0.0beta1 lib/guard/jasmine/coverage.rb
guard-jasmine-1.19.2 lib/guard/jasmine/coverage.rb
guard-jasmine-1.19.1 lib/guard/jasmine/coverage.rb