class ServiceFactory::Builder

Public Class Methods

new(blocks) click to toggle source
# File lib/service_factory.rb, line 34
def initialize(blocks)
  @blocks = blocks
  @memoized_values = {}
  @memoization = false
end

Public Instance Methods

args_to_block(args, &block) click to toggle source
# File lib/service_factory.rb, line 54
def args_to_block(args, &block)
  if block_given?
    block
  elsif args.first.is_a?(Class)
    cl = args.first
    Proc.new { |*class_args| cl.new(*class_args) }
  else
    raise UnexpectedParams.new("expected class or block")
  end
end
build(&block) click to toggle source
# File lib/service_factory.rb, line 40
def build(&block)
  instance_eval(&block)
  @blocks
end
env(*environments, &block) click to toggle source
# File lib/service_factory.rb, line 65
def env(*environments, &block)
  if environments.map{|e| e.to_s}.include?(Rails.env)
    instance_eval(&block)
  end
end
memoize(&block) click to toggle source
# File lib/service_factory.rb, line 71
def memoize(&block)
  @memoization = true
  instance_eval(&block)
  @memoization = false
end
method_missing(m, *args, &block) click to toggle source
# File lib/service_factory.rb, line 45
def method_missing(m, *args, &block)
  prepared_block = args_to_block(args, &block)
  if @memoization
    @blocks[m] = Proc.new { @memoized_values[m] ||= prepared_block.call }
  else
    @blocks[m] = prepared_block
  end
end