回调方法应用 及 引入到模块方法应用

本文介绍了一种使用 Ruby 实现模块混入的方法,并展示了如何通过 class_eval 动态定义对象属性及其实现细节。此外还提供了一个枚举属性的实现案例,包括验证和获取枚举名称的功能。

1: http://ruby-china.org/topics/413

module YourPlugin
  module Mixin
 def xxx_attr(attr)
      attr = attr.to_s
      self.class_eval(%Q{
def #{attr}
  #...
end

def #{attr}=(value)
   #...
end
        }
      )
    end
  end
end

class Post
  include YourPlugin::Mixin
  xxx_attr :tag_list
end



2. http://quake.iteye.com/blog/448235

  1. #plugins/your_plugin_name/lib/enum_attr.rb  
  2. module EnumAttr  
  3.   module Mixin  
  4.     def enum_attr(attr, enums)  
  5.       attr = attr.to_s  
  6.       self.class_eval(%Q{  
  7. ENUMS_#{attr.upcase} = enums  
  8. validates_inclusion_of attr, :in => enums.map{|e| e[1]}, :allow_nil => true  
  9. def #{attr}_name  
  10.   ENUMS_#{attr.upcase}.find{|option| option[1] == #{attr}}[0] unless #{attr}.nil?  
  11. end  
  12.         })  
  13.     end  
  14.   end  
  15. end  
  16.   
  17. #plugins/your_plugin_name/init.rb  
  18. require 'enum_attr'  
  19. Object.send :include, EnumAttr::Mixin 


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值