Class: Relevance::Tarantula::Result

Inherits:
Object
  • Object
show all
Includes:
Relevance::Tarantula, HtmlReportHelper
Defined in:
lib/relevance/tarantula/result.rb

Constant Summary collapse

HASHABLE_ATTRS =
[:success, :method, :url, :response, :referrer, :data, :description, :log, :test_name]
DEFAULT_LOCALHOST =
"http://localhost:3000"
ALLOW_NNN_FOR =
/^allow_(\d\d\d)_for$/

Constants included from Relevance::Tarantula

VERSION

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from HtmlReportHelper

#textmate_url, #wrap_in_line_number_table_row, #wrap_stack_trace_line

Methods included from Relevance::Tarantula

#log, #rails_root, #tarantula_home, #verbose

Constructor Details

#initialize(hash) ⇒ Result

Returns a new instance of Result.



11
12
13
14
15
16
# File 'lib/relevance/tarantula/result.rb', line 11

def initialize(hash)
  hash.each do |k,v|
    raise ArgumentError, k unless HASHABLE_ATTRS.member?(k)
    self.instance_variable_set("@#{k}", v)
  end
end

Class Attribute Details

.allow_errors_forObject

allow_errors_for is a hash

k=error code,
v=array of matchers for urls that can skip said error


61
62
63
# File 'lib/relevance/tarantula/result.rb', line 61

def allow_errors_for
  @allow_errors_for
end

.next_numberObject

Returns the value of attribute next_number.



45
46
47
# File 'lib/relevance/tarantula/result.rb', line 45

def next_number
  @next_number
end

Class Method Details

.can_skip_error?(result) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
65
66
# File 'lib/relevance/tarantula/result.rb', line 62

def can_skip_error?(result)
  coll = allow_errors_for[result.code]
  return false unless coll
  coll.any? {|item| item === result.url}
end

.handle(result) ⇒ Object



47
48
49
50
51
52
# File 'lib/relevance/tarantula/result.rb', line 47

def handle(result)
  retval = result.dup
  retval.success = successful?(result.response) || can_skip_error?(result)
  retval.description = "Bad HTTP Response" unless retval.success
  retval
end

.method_missing(meth, *args) ⇒ Object



72
73
74
75
# File 'lib/relevance/tarantula/result.rb', line 72

def method_missing(meth, *args)  
  super unless ALLOW_NNN_FOR =~ meth.to_s
  (allow_errors_for[$1] ||= []).push(*args)
end

.success_codesObject



54
55
56
# File 'lib/relevance/tarantula/result.rb', line 54

def success_codes 
  %w{200 201 302 401}
end

.successful?(response) ⇒ Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/relevance/tarantula/result.rb', line 68

def successful?(response)
  success_codes.member?(response.code)
end

Instance Method Details

#bodyObject



34
35
36
# File 'lib/relevance/tarantula/result.rb', line 34

def body
  response && response.body
end

#codeObject



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

def code
  response && response.code
end

#file_nameObject



26
27
28
# File 'lib/relevance/tarantula/result.rb', line 26

def file_name
  "#{sequence_number}.html"
end

#full_urlObject



38
39
40
# File 'lib/relevance/tarantula/result.rb', line 38

def full_url
  "#{DEFAULT_LOCALHOST}#{url}"
end

#sequence_numberObject



22
23
24
# File 'lib/relevance/tarantula/result.rb', line 22

def sequence_number
  @sequence_number ||= (self.class.next_number += 1)
end

#short_descriptionObject



18
19
20
# File 'lib/relevance/tarantula/result.rb', line 18

def short_description
  [method,url].join(" ")
end