class VCR::Cassette::ERBRenderer

@private

Public Class Methods

new(raw_template, erb, cassette_name=nil) click to toggle source
# File lib/vcr/cassette/erb_renderer.rb, line 7
def initialize(raw_template, erb, cassette_name=nil)
  @raw_template, @erb, @cassette_name = raw_template, erb, cassette_name
end

Public Instance Methods

render() click to toggle source
# File lib/vcr/cassette/erb_renderer.rb, line 11
def render
  return @raw_template if @raw_template.nil? || !use_erb?
  binding = binding_for_variables if erb_variables
  template.result(binding)
rescue NameError => e
  handle_name_error(e)
end

Private Instance Methods

binding_for_variables() click to toggle source
# File lib/vcr/cassette/erb_renderer.rb, line 50
def binding_for_variables
  @binding_for_variables ||= variables_object.instance_eval { binding }
end
erb_variables() click to toggle source
# File lib/vcr/cassette/erb_renderer.rb, line 34
def erb_variables
  @erb if @erb.is_a?(Hash)
end
handle_name_error(e) click to toggle source
# File lib/vcr/cassette/erb_renderer.rb, line 21
def handle_name_error(e)
  example_hash = (erb_variables || {}).merge(e.name => 'some value')

  raise Errors::MissingERBVariableError.new(
    "The ERB in the #{@cassette_name} cassette file references undefined variable #{e.name}.  " +
    "Pass it to the cassette using :erb => #{ example_hash.inspect }."
  )
end
template() click to toggle source
# File lib/vcr/cassette/erb_renderer.rb, line 38
def template
  @template ||= ERB.new(@raw_template)
end
use_erb?() click to toggle source
# File lib/vcr/cassette/erb_renderer.rb, line 30
def use_erb?
  !!@erb
end
variables_object() click to toggle source
# File lib/vcr/cassette/erb_renderer.rb, line 46
def variables_object
  @variables_object ||= @@struct_cache[erb_variables.keys].new(*erb_variables.values)
end