module MotionSpec::ContextHelper::MemoizedHelpers

Attributes

__memoized[RW]

Public Instance Methods

is_expected() click to toggle source
# File lib/motion-spec/context_helper/memoized_helpers.rb, line 37
def is_expected # rubocop:disable Style/PredicateName
  expect(subject)
end
let(name, &block) click to toggle source
# File lib/motion-spec/context_helper/memoized_helpers.rb, line 6
def let(name, &block)
  fail '#let or #subject called without a block' unless block_given?

  (class << self; self; end).class_eval do
    define_method(name) do
      self.__memoized ||= {}
      __memoized.fetch(name) { __memoized[name] = block.call }
    end
  end

  # The way that nested contexts are implemented requires us to manually
  # reset any memoized values after each spec via an 'after'.
  after { reset_memoized }
end
let!(name, &block) click to toggle source
# File lib/motion-spec/context_helper/memoized_helpers.rb, line 21
def let!(name, &block)
  let(name, &block)
  before { __send__(name) }
end
reset_memoized() click to toggle source
# File lib/motion-spec/context_helper/memoized_helpers.rb, line 41
def reset_memoized
  @__memoized = nil
  parent_context.reset_memoized if respond_to?(:parent_context)
end
subject(name = nil, &block) click to toggle source
# File lib/motion-spec/context_helper/memoized_helpers.rb, line 26
def subject(name = nil, &block)
  let(name, &block) if name

  let(:subject, &block)
end
subject!(name = nil, &block) click to toggle source
# File lib/motion-spec/context_helper/memoized_helpers.rb, line 32
def subject!(name = nil, &block)
  subject(name, &block)
  before { subject }
end