Sha256: 198ef6cd9562f966b8fe8c0ab31e953735565223a2e855535be93ec7379da430
Contents?: true
Size: 1.94 KB
Versions: 2
Compression:
Stored size: 1.94 KB
Contents
require "sprockets/environment" module Teabag class Instrumentation extend Teabag::Utility def self.executable @executable ||= which("istanbul") end def self.add?(response, env) ( executable.present? && # we have an executable env["QUERY_STRING"].to_s =~ /instrument=(1|true)/ && # the instrument param was provided response[0] == 200 && # the status is 200 response[1]["Content-Type"].to_s == "application/javascript" && # the format is something that we care about response[2].respond_to?(:source) # it looks like an asset ) end def self.add_to(response, env) return response unless add?(response, env) Teabag::Instrumentation.new(response) response end def initialize(response) status, headers, @asset = response headers, @asset = [headers.clone, @asset.clone] result = process_and_instrument length = result.length.to_s headers["Content-Length"] = length @asset.instance_variable_set(:@source, result) @asset.instance_variable_set(:@length, length) response.replace([status, headers, @asset]) end private def process_and_instrument file = @asset.pathname.to_s Dir.mktmpdir do |path| filename = File.basename(file) input = File.join(path, filename).sub(/\.js.+/, ".js") File.write(input, @asset.source) instrument(input).gsub(input, file) end end def instrument(input) result = %x{#{Teabag::Instrumentation.executable} instrument --embed-source #{input.shellescape}} raise "Could not generate instrumentation for #{File.basename(input)}" unless $?.exitstatus == 0 result end end module SprocketsInstrumentation def call(env) Teabag::Instrumentation.add_to(super, env) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
teabag-0.7.0 | lib/teabag/instrumentation.rb |
teabag-0.6.0 | lib/teabag/instrumentation.rb |