Sha256: f1f717a41b311b55337a111fcde68fc74223d772deff3edd9d42d178f85aac44

Contents?: true

Size: 1.67 KB

Versions: 1

Compression:

Stored size: 1.67 KB

Contents

require File.expand_path("#{File.dirname(__FILE__)}/../require")
Require.lib!

module Mover
  module Base
    def self.included(base)
      unless base.included_modules.include?(Included)
        base.extend ClassMethods
        base.send :include, Included
      end
    end
  
    module ClassMethods
      def is_movable(*types)
        @movable_types = types
        
        self.class_eval do
          attr_accessor :movable_id
          class <<self
            attr_reader :movable_types
          end
        end
        
        types.each do |type|
          eval <<-RUBY
            class ::#{self.name}#{type.to_s.classify} < ActiveRecord::Base
              include Mover::Base::Record::InstanceMethods
              
              self.table_name = "#{self.table_name}_#{type}"
              
              def self.movable_type
                #{type.inspect}
              end
              
              def moved_from_class
                #{self.name}
              end
            end
          RUBY
        end
        
        extend Table
        extend Record::ClassMethods
        include Record::InstanceMethods
      end
    end
  end
  
  module Migration
    def self.included(base)
      unless base.included_modules.include?(Included)
        base.extend Migrator
        base.send :include, Included
        base.class_eval do
          class <<self
            alias_method :method_missing_without_mover, :method_missing
            alias_method :method_missing, :method_missing_with_mover
          end
        end
      end
    end
  end
  
  module Included
  end
end

ActiveRecord::Base.send(:include, Mover::Base)
ActiveRecord::Migration.send(:include, Mover::Migration)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mover-0.1.1 lib/mover.rb