Sha256: 552a4d9c074751baad264033c65c21c62e71fd814020abfb15b38437068e8645

Contents?: true

Size: 1.68 KB

Versions: 7

Compression:

Stored size: 1.68 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
  # when the environment variable `JSCOVERAGE` is `true`
  # and the `jscoverage` binary is in the `$PATH`.
  #
  def evaluate(context, locals)
    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
    config.after_initialize do |app|
      app.assets.register_postprocessor 'application/javascript', JasmineCoverage
    end
  end

end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
guard-jasmine-1.18.0 lib/guard/jasmine/coverage.rb
guard-jasmine-1.17.0 lib/guard/jasmine/coverage.rb
guard-jasmine-1.16.0 lib/guard/jasmine/coverage.rb
guard-jasmine-1.15.1 lib/guard/jasmine/coverage.rb
guard-jasmine-1.15.0 lib/guard/jasmine/coverage.rb
guard-jasmine-1.14.0 lib/guard/jasmine/coverage.rb
guard-jasmine-1.13.2 lib/guard/jasmine/coverage.rb