Class: RoadForest::TraceFormatter::Grouper

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/roadforest/test-support/trace-formatter.rb

Instance Method Summary collapse

Constructor Details

#initialize(trace) ⇒ Grouper

Returns a new instance of Grouper.



73
74
75
# File 'lib/roadforest/test-support/trace-formatter.rb', line 73

def initialize(trace)
  @trace = trace
end

Instance Method Details

#eachObject



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/roadforest/test-support/trace-formatter.rb', line 110

def each
  enum = @trace.each

  group = []
  loop do
    begin
      item = enum.next
      case item[:type]
      when :request
        yield format_request(item)
      when :response
        yield format_response(item)
      when :attempt
        group << item
      when :result
        group << item
        yield format_attempt(group)
        group = []
      when :decision
        yield format_decision(item)
      else
        raise "Don't know trace entry type: #{item.inspect}"
      end
    rescue StopIteration
      break
    end
  end
end

#format_attempt(attempt) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/roadforest/test-support/trace-formatter.rb', line 77

def format_attempt(attempt)
  unless attempt.length == 2 and
    attempt[0][:type] == :attempt and
    attempt[1][:type] == :result
    raise "Can't format attempt: #{attempt.inspect}"
  end
  name= attempt[0][:name]
  source= attempt[0][:source]
  result= attempt[1][:value]

  if source.nil?
    "  #{name} => #{result.inspect}"
  else
    "\n  #{name}\n  #{source}\n    => #{result.inspect}"
  end
end

#format_decision(item) ⇒ Object



106
107
108
# File 'lib/roadforest/test-support/trace-formatter.rb', line 106

def format_decision(item)
  "\nDecision: #{DECISION_NAMES[item[:decision]]} (#{item[:decision]})"
end

#format_request(request) ⇒ Object



94
95
96
97
98
# File 'lib/roadforest/test-support/trace-formatter.rb', line 94

def format_request(request)
  "\nRequest:\n  #{request[:method]} #{request[:path]}\n#{request[:headers].map do |name, value|
    "  #{name}: #{value}"
  end.join("\n")}#{request[:body].empty? ? "" : "\n\n  #{request[:body]}"}\n.\n"
end

#format_response(response) ⇒ Object



100
101
102
103
104
# File 'lib/roadforest/test-support/trace-formatter.rb', line 100

def format_response(response)
  "\nResponse:\n  #{response[:code]}\n#{response[:headers].map do |name, value|
    "  #{name}: #{value}"
  end.join("\n")}#{response[:body].empty? ? "" : "\n\n  #{response[:body]}"}\n.\n"
end