module RSpecParam::ClassMethods

Public Instance Methods

included(klass) click to toggle source
Calls superclass method
# File lib/rspec_param.rb, line 57
def included(klass)
  super
  klass.extend ClassMethods
end
param(name, default=nil, accumulate: false, &block) click to toggle source
Calls superclass method
# File lib/rspec_param.rb, line 32
def param(name, default=nil, accumulate: false, &block)
  raise "One of a default param or block is required" unless default || block || accumulate
  block ||= lambda { accumulate ? (default || []) : default }
  # Create the let variable.
  let(name, &block)
  # Define the helper method.
  define_singleton_method(name) do |value=nil, &inner_block|
    raise "One of a value param or block is required" unless value || inner_block
    let_block = if accumulate
      # Accumulate values into an ivar to handle multiple calls in the
      # same context level.
      ivar = "@param_context_#{name}"
      existing_values = instance_variable_get(ivar) || []
      existing_values << [value, inner_block]
      instance_variable_set(ivar, existing_values)
      lambda do
        super() + existing_values.map {|v, b|  b ? instance_eval(&b) : v }
      end
    else
      inner_block || lambda { value }
    end
    let(name, &let_block)
  end
end