Sha256: a998ae20306fd8ff791627fa923b862665089fa163bab5a575d3aa04f301a504

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

require 'machinist'
require 'machinist/active_record'


module Machinist
  class Lathe

    attr_reader :before_make_callback, :after_make_callback
    
    def before_make(&callback)
      object.instance_variable_set(:@before_make_callback, callback)
    end

    def after_make(&callback)
      object.instance_variable_set(:@after_make_callback, callback)
    end

    class << self

      def run_with_before_make(*args)
        lathe = run_without_before_make(*args)
        if callback = lathe.object.instance_variable_get(:@before_make_callback)
          lathe.object.instance_eval(&callback)
        end
        lathe
      end

      alias_method_chain :run, :before_make

    end

  end
end


makers = []
makers << ActiveRecord::Associations::HasManyAssociation
makers << ActiveRecord::Base.send(ActiveRecord::Base.respond_to?(:metaclass) ? :metaclass : :singleton_class)

makers.each do |maker|
  maker.send :define_method, :make_with_after_make do |*args|
    object = make_without_after_make(*args)
    if callback = object.instance_variable_get(:@after_make_callback)
      object.instance_eval(&callback)
    end
    object
  end
  maker.alias_method_chain :make, :after_make
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
machinist_callbacks-0.1.2 lib/machinist_callbacks.rb
machinist_callbacks-0.1.1 lib/machinist_callbacks.rb
machinist_callbacks-0.1.0 lib/machinist_callbacks.rb