Sha256: b4c02b40e7c9e5634676d742d63e01dea081dc29de45481667f8b0d0d50b20e2
Contents?: true
Size: 1.9 KB
Versions: 1
Compression:
Stored size: 1.9 KB
Contents
module Makers module Dsl class Maker def initialize(name, options={}, &block) @name = name @options = options.reverse_merge(class_name: name.to_s.classify) @class = @options[:class_name].constantize @assignments = {} if block_given? instance_eval &block end Makers.definitions.add( [@name] + Array(@options[:aliases]), @options, @assignments ) end def maker(name, overrides={}, &block) options = @options.dup options.delete :aliases options.merge! overrides options.merge! parent: @name Dsl::Maker.new name, options, &block end def sequence(name, &block) index = 0 if block_given? @assignments[name] = -> { index += 1 instance_exec index, &block } else @assignments[name] = -> { index += 1 } end end def association(name, *args) options = args.extract_options! name = (options[:maker] || name) strategy = (options[:strategy] || :build) case @class.reflections[name.to_s].macro when :belongs_to,:has_one @assignments[name] = -> { maker = Makers.definitions.find(name) maker.send strategy } when :has_many @assignments[name] = -> { maker = Makers.definitions.find(name.to_s.singularize.to_sym) (args.first || 1).times.map do maker.send strategy end } end end def method_missing(name, *args, &block) if @class.reflections.has_key?(name.to_s) association name, *args elsif block_given? @assignments[name] = block elsif args.size > 0 @assignments[name] = -> { args.first } end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
makers-4.0.0.0 | lib/makers/dsl/maker.rb |