module Journeyman::Definition

Internal: Contains all the factory method definition logic.

Public Instance Methods

define(name, options={}, &config) click to toggle source

Public: Defines a new factory for Journeyman, which consists in a build and create method, and may optionally include finder and default methods.

Returns Builder for debug purposes.

# File lib/journeyman/definition.rb, line 11
def define(name, options={}, &config)
  finder, default = options.delete(:include_finder), options.delete(:include_default)

  Builder.new(name, options, config).tap do |builder|
    define_find_method(name, builder) unless finder == false
    define_build_method(name, builder)
    define_create_method(name, builder)
    define_default_method(name) if default
  end
end

Private Instance Methods

define_build_method(name, builder) click to toggle source

Internal: Defines the builder method.

# File lib/journeyman/definition.rb, line 32
def define_build_method(name, builder)
  define_helper "build_#{name}", ->(attrs={}) { builder.build(attrs) }
end
define_create_method(name, builder) click to toggle source

Internal: Defines the create method.

# File lib/journeyman/definition.rb, line 37
def define_create_method(name, builder)
  define_helper "create_#{name}", ->(attrs={}) { builder.create(attrs) }
end
define_default_method(name) click to toggle source

Internal: Defines the default method.

# File lib/journeyman/definition.rb, line 42
    def define_default_method(name)
      @helpers.send :class_eval, <<-EVAL
        def default_#{name}
          @#{name} ||= Journeyman.create(:'#{name}')
        end
      EVAL
    end
define_find_method(name, builder) click to toggle source

Internal: Defines the finder method.

# File lib/journeyman/definition.rb, line 27
def define_find_method(name, builder)
  define_helper "find_#{name}", ->(id) { builder.find(id) }
end
define_helper(name, proc) click to toggle source

Internal: Syntax sugar to define a method in the helpers module.

# File lib/journeyman/definition.rb, line 51
def define_helper(name, proc)
  @helpers.send :define_method, name, proc
end