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
- #plugins/your_plugin_name/lib/enum_attr.rb
- moduleEnumAttr
- moduleMixin
- defenum_attr(attr,enums)
- attr=attr.to_s
- self.class_eval(%Q{
- ENUMS_#{attr.upcase}=enums
- validates_inclusion_ofattr,:in=>enums.map{|e|e[1]},:allow_nil=>true
- def#{attr}_name
- ENUMS_#{attr.upcase}.find{|option|option[1]==#{attr}}[0]unless#{attr}.nil?
- end
- })
- end
- end
- end
- #plugins/your_plugin_name/init.rb
- require'enum_attr'
- Object.send:include,EnumAttr::Mixin