Я написал следующий код и целый день пытался реорганизовать методы класса в отдельный модуль, чтобы поделиться функциональностью со всеми моими классами моделей.
Код (http://pastie.org/974847):
class Merchant
include DataMapper::Resource
property :id, Serial
[...]
class << self
@allowed_properties = [:id,:vendor_id, :identifier]
alias_method :old_get, :get
def get *args
[...]
end
def first_or_create_or_update attr_hash
[...]
end
end
end
Я бы хотел заархивировать что-то вроде:
class Merchant
include DataMapper::Resource
include MyClassFunctions
[...]
end
module MyClassFunctions
def get [...]
def first_or_create_or_update[...]
end
=> Merchant.allowed_properties = [:id]
=> Merchant.get( :id=> 1 )
Но, к сожалению, мои навыки рубина плохие. Я много читаю (например, здесь ) и теперь я еще больше запутался. Я наткнулся на следующие два момента:
alias_method
не удастся, потому что он будет динамически определен в модуле DataMapper::Resource
. - Как получить метод класса
allowed_properties
из-за наличия модуля?
Что такое рубиновый путь?
Большое спасибо заранее.