Class: Relevance::Tarantula::RailsIntegrationProxy

Inherits:
Object
  • Object
show all
Extended by:
Forwardable, Relevance::Tarantula
Includes:
Relevance::Tarantula
Defined in:
lib/relevance/tarantula/rails_integration_proxy.rb

Constant Summary

Constants included from Relevance::Tarantula

VERSION

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Relevance::Tarantula

log, rails_root, tarantula_home, verbose

Constructor Details

#initialize(integration_test) ⇒ RailsIntegrationProxy

Returns a new instance of RailsIntegrationProxy.



29
30
31
32
# File 'lib/relevance/tarantula/rails_integration_proxy.rb', line 29

def initialize(integration_test)
  @integration_test = integration_test
  @integration_test.meta.attr_accessor :response
end

Instance Attribute Details

#integration_testObject

Returns the value of attribute integration_test.



10
11
12
# File 'lib/relevance/tarantula/rails_integration_proxy.rb', line 10

def integration_test
  @integration_test
end

Class Method Details

.rails_integration_test(integration_test, options = {}) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/relevance/tarantula/rails_integration_proxy.rb', line 12

def self.rails_integration_test(integration_test, options = {})
  t = Crawler.new
  t.max_url_length = options[:max_url_length] if options[:max_url_length]
  t.proxy = RailsIntegrationProxy.new(integration_test)
  t.handlers << HtmlDocumentHandler.new(t)
  t.handlers << InvalidHtmlHandler.new
  t.log_grabber = Relevance::Tarantula::LogGrabber.new(File.join(rails_root, "log/test.log"))
  t.skip_uri_patterns << /logout$/
    t.transform_url_patterns += [
      [/\?\d+$/, ''],                               # strip trailing numbers for assets
      [/^http:\/\/#{integration_test.host}/, '']    # strip full path down to relative
  ]
  t.test_name = t.proxy.integration_test.method_name
  t.reporters << Relevance::Tarantula::HtmlReporter.new(t.report_dir)
  t
end

Instance Method Details

#alter_response(response, code, body) ⇒ Object



52
53
54
55
56
57
# File 'lib/relevance/tarantula/rails_integration_proxy.rb', line 52

def alter_response(response, code, body)
  response.meta.attr_accessor :code
  response.code = code
  response.body = body
  response
end

#patch_response(url, response) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/relevance/tarantula/rails_integration_proxy.rb', line 59

def patch_response(url, response)
  if response.code == '404'
    if File.exist?(static_content_path(url))
      case ext = File.extension(url)
      when /html|te?xt|css|js|jpe?g|gif|psd|png|eps|pdf|ico/
        response.headers["type"] = "text/#{ext}"  # readable as response.content_type
        alter_response(response, '200', static_content_file(url))
      else
        log "Skipping unknown type #{url}"
      end
    end
  end
  # don't count on metaclass taking block, e.g.
  # http://relevancellc.com/2008/2/12/how-should-metaclass-work
  response.metaclass.class_eval do
    include Relevance::CoreExtensions::Response
  end
end

#static_content_file(url) ⇒ Object



79
80
81
# File 'lib/relevance/tarantula/rails_integration_proxy.rb', line 79

def static_content_file(url)
  File.read(static_content_path(url))
end

#static_content_path(url) ⇒ Object



83
84
85
# File 'lib/relevance/tarantula/rails_integration_proxy.rb', line 83

def static_content_path(url)
  File.expand_path(File.join(rails_root, "public", url))
end