class RSpec::GoldenFiles::GoldenFilesMatcher

Public Class Methods

new(filename, file_reader_type, template_vars) click to toggle source
# File lib/rspec-golden-files.rb, line 57
def initialize(filename, file_reader_type, template_vars)
  @filename = filename
  @file_reader_type = file_reader_type
  @template_vars = template_vars
end

Public Instance Methods

actual() click to toggle source
# File lib/rspec-golden-files.rb, line 93
def actual
  @value
end
description() click to toggle source
# File lib/rspec-golden-files.rb, line 101
def description
  "be matching golden file with name #{@filename}"
end
diffable?() click to toggle source
# File lib/rspec-golden-files.rb, line 105
def diffable?
  true
end
expected() click to toggle source
# File lib/rspec-golden-files.rb, line 97
def expected
  @expected_value
end
failure_message() click to toggle source
# File lib/rspec-golden-files.rb, line 109
def failure_message
  "expected #{@value.inspect} does not match golden file '#{@filename}'"
end
failure_message_when_negated() click to toggle source
# File lib/rspec-golden-files.rb, line 113
def failure_message_when_negated
  "expected #{@value.inspect} matches golden file '#{@filename}'"
end
matches?(value) click to toggle source
# File lib/rspec-golden-files.rb, line 63
def matches?(value)
  unless File.exist?(@filename)
    raise ArgumentError, "golden file '#{@filename}' not found"
  end

  @value = value

  actual_tmpfile = Tempfile.new('actual')
  actual_tmpfile.write(value.to_s)
  actual_tmpfile.close(false)

  file_reader = case @file_reader_type.to_sym
                when :simple
                  SimpleFileReader.new(@filename)
                when :erb
                  ErbFileReader.new(@filename, @template_vars)
                else
                  raise ArgumentError, "unknown file reader type #{@file_reader_type}. `simple` and `erb` are supported"
                end

  @expected_value = file_reader.expected_value
  system("diff #{actual_tmpfile.path} #{file_reader.filename} > /dev/null")
  is_successful = $CHILD_STATUS.to_i.zero?

  file_reader.close
  actual_tmpfile.delete

  is_successful
end