Sha256: 14567d2c27ce4465287da5737bd835ddd686ad19035df0c374f95201679c207f
Contents?: true
Size: 1.34 KB
Versions: 1
Compression:
Stored size: 1.34 KB
Contents
module Fabricators class Proxy include Callbacks def initialize(fabricator, &block) @fabricator = fabricator @attributes = [] instance_eval &block end def attributes {}.tap do |hash| if @fabricator.parent hash.merge! @fabricator.parent.proxy.attributes end @attributes.each do |name| hash[name] = send(name) end end end def method_missing(name, *args, &block) unless name == :fabricator options = args.extract_options! strategy = options.delete(:strategy) || :build if block_given? logic = block elsif fabricator = Fabricators.definitions.find(name, :fabricator) rescue nil logic = -> { fabricator.send(strategy, options) } elsif fabricator = Fabricators.definitions.find(name.to_s.singularize.to_sym, :fabricator) rescue nil logic = -> { fabricator.send(strategy, (args.first || 1), options) } elsif generator = Fabricators.definitions.find(name, :generator) rescue nil logic = -> { generator.generate } elsif args.any? logic = -> { args.first } end if defined? logic @attributes.send (block_given? ? :push : :unshift), name class_eval { define_method(name, logic) } end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
fabricators-0.0.1 | lib/fabricators/proxy.rb |