Module: Comodule::CustomizeClass
- Defined in:
- lib/comodule.rb,
lib/comodule/customize_class.rb
Defined Under Namespace
Modules: StringCustom Classes: CustomizeClassError
Class Method Summary collapse
-
.customize ⇒ Object
customize_classディレクトリにあるクラスで既存のクラスを拡張する。 モジュールのパブリックメソッドとClassMethodsをチェックし、 フレームワークに影響がないように、既に存在するメソッドのオーバーライドは許可しない。.
Class Method Details
.customize ⇒ Object
customize_classディレクトリにあるクラスで既存のクラスを拡張する。 モジュールのパブリックメソッドとClassMethodsをチェックし、 フレームワークに影響がないように、既に存在するメソッドのオーバーライドは許可しない。
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/comodule/customize_class.rb', line 12 def customize Dir.glob(File.('../customize_class/*', __FILE__)).each do |path| name = File.basename(path, "_custom.rb").classify mod = "Comodule::CustomizeClass::#{name}Custom".constantize klass = name.constantize # パブリックメソッドのチェック mod.public_instance_methods.each do |sym| if klass.public_method_defined? sym raise CustomizeClassError, "RubyまたはRailsで定義されている#{klass.name}##{sym}をオーバーライドしようとしています。" end end klass.send :include, mod # クラスメソッドのチェック if mod.constants.member?(:ClassMethods) class_methods = "#{mod.name}::ClassMethods".constantize class_methods.public_instance_methods.each do |sym| if klass.singleton_methods.member?(sym) raise CustomizeClassError, "RubyまたはRailsで定義されている#{klass.name}.#{sym}をオーバーライドしようとしています。" end end klass.extend class_methods end end end |