class Docspec::Example

Attributes

before[R]
code[R]
type[R]

Public Class Methods

new(type:, code:, before: nil) click to toggle source
# File lib/docspec/example.rb, line 8
def initialize(type:, code:, before: nil)
  @code, @type, @before = code, type, before
end

Public Instance Methods

actual() click to toggle source
# File lib/docspec/example.rb, line 12
def actual
  @actual ||= actual!
end
consider_failed?() click to toggle source
# File lib/docspec/example.rb, line 16
def consider_failed?
  failed? and !ignore_failure?
end
diff() click to toggle source
# File lib/docspec/example.rb, line 20
def diff
  @diff ||= Diffy::Diff.new("#{expected}\n", "#{actual}\n", context: 2).to_s :color
end
empty?() click to toggle source
# File lib/docspec/example.rb, line 24
def empty?
  expected.empty?
end
expected() click to toggle source
# File lib/docspec/example.rb, line 28
def expected
  @expected ||= code.scan(/#=> *(.*)/).map { |match| match.first.strip }.join "\n"
end
failed?() click to toggle source
# File lib/docspec/example.rb, line 32
def failed?
  !success? && !empty?
end
first_line() click to toggle source
# File lib/docspec/example.rb, line 36
def first_line
  @first_line ||= code.split("\n").first
end
flags() click to toggle source
# File lib/docspec/example.rb, line 40
def flags
  @flags ||= first_line.scan(/\[:(.+?)\]/).map { |f| f.first.to_sym }
end
full_code() click to toggle source
# File lib/docspec/example.rb, line 44
def full_code
  @full_code ||= full_code!
end
ignore_failure?() click to toggle source
# File lib/docspec/example.rb, line 48
def ignore_failure?
  flags.include? :ignore_failure
end
label() click to toggle source
# File lib/docspec/example.rb, line 52
def label
  @label ||= label!
end
skip?() click to toggle source
# File lib/docspec/example.rb, line 56
def skip?
  flags.include? :skip
end
success?() click to toggle source
# File lib/docspec/example.rb, line 60
def success?
  actual == expected
end

Protected Instance Methods

actual!() click to toggle source
# File lib/docspec/example.rb, line 66
def actual!
  capture_output do
    case type
    when 'ruby'
      eval full_code
    when 'shell'
      puts `#{full_code}`
    end
  end.strip
end
full_code!() click to toggle source
# File lib/docspec/example.rb, line 77
def full_code!
  return code unless before
  [before.join("\n\n"), code].join "\n"
end
label!() click to toggle source
# File lib/docspec/example.rb, line 82
def label!
  first_line.gsub(/^#\s*/, '').strip
end