ruby/datamapper: Refactor class methods to module
        Posted  
        
            by DeSchleib
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by DeSchleib
        
        
        
        Published on 2010-05-24T18:17:36Z
        Indexed on 
            2010/05/24
            18:21 UTC
        
        
        Read the original article
        Hit count: 355
        
Hello, i've the following code and tried the whole day to refactor the class methods to a sperate module to share the functionality with all of my model classes.
Code (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     
I'd like to archive something like:
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 )
But unfortunately, my ruby skills are to bad. I read a lot of stuff (e.g. here) and now i'm even more confused. I stumbled over the following two points:
- alias_methodwill fail, because it will dynamically defined in the- DataMapper::Resourcemodule.
- How to get a class method allowed_propertiesdue including a module?
What's the ruby way to go?
Many thanks in advance.
© Stack Overflow or respective owner