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