module RSpec::NonDeterministicLet::Helpers::ClassMethods

Public Instance Methods

__nd_let_state_name(nd_let_name) click to toggle source
# File lib/rspec/non_deterministic_let/helpers.rb, line 67
def __nd_let_state_name(nd_let_name)
  "__nd_let_state_#{nd_let_name.to_s}".to_sym
end
__update_let_state(nd_let_name, description, let_block, is_exclamation) click to toggle source
# File lib/rspec/non_deterministic_let/helpers.rb, line 47
def __update_let_state(nd_let_name, description, let_block, is_exclamation)
  nd_let = 'nd_let'
  nd_let += '!' if is_exclamation

  nd_let_state_name = __nd_let_state_name(nd_let_name)

  begin
    let_blocks = send(nd_let_state_name)
    description ||= "#{nd_let}:#{nd_let_name} \##{let_blocks.size + 1}"
    self.define_singleton_method(nd_let_state_name) do ||
      let_blocks + [{block: let_block, description: description, is_exclamation: is_exclamation}]
    end
  rescue NoMethodError
    description ||= "#{nd_let}:#{nd_let_name} \##{1}"
    self.define_singleton_method(nd_let_state_name) do ||
      [{block: let_block, description: description, is_exclamation: is_exclamation}]
    end
  end
end
nd_let(nd_let_name, description=nil, &let_block) click to toggle source
# File lib/rspec/non_deterministic_let/helpers.rb, line 24
def nd_let(nd_let_name, description=nil, &let_block)
  begin
    let_blocks = send(nd_let_name)
    description ||= "nd_let:#{nd_let_name} \##{let_blocks.size + 1}"
    self.define_singleton_method(nd_let_name) do ||
      let_blocks + [{block: let_block, description: description}]
    end
  rescue NoMethodError
    description ||= "nd_let:#{nd_let_name} \##{1}"
    self.define_singleton_method(nd_let_name) do ||
      [{block: let_block, description: description}]
    end
  end
end
nd_let!(nd_let_name, description=nil, &let_block) click to toggle source
# File lib/rspec/non_deterministic_let/helpers.rb, line 43
def nd_let!(nd_let_name, description=nil, &let_block)
  __update_let_state(nd_let_name, description, let_block, true)
end
nd_let_context(*args, &example_group_block) click to toggle source
# File lib/rspec/non_deterministic_let/helpers.rb, line 5
def nd_let_context(*args, &example_group_block)
  nd_let_name = args.shift
  return :end unless nd_let_name.is_a?(Symbol)
  send(__nd_let_state_name(nd_let_name)).each do |let_options|
    context(let_options[:description], *args) do
      if let_options[:is_exclamation]
        let!(nd_let_name, &let_options[:block])
      else
        let(nd_let_name, &let_options[:block])
      end
      # HACK: create nest using by recursive call.
      if nd_let_context(*args, &example_group_block) == :end 
        self.module_exec(&example_group_block)
      end
    end
  end
  return nil
end