Module: Inclusive::Class
- Defined in:
- lib/inclusive.rb
Overview
This will extend your class by default if you include Inclusive, but if for some reason you
don't want the packages instance method in your class, you can simply
extend Inclusive::Class
Instance Method Summary collapse
-
#packages(method_name) ⇒ void
(also: #public_packages)
Use this as a decorator for an instance method which you will use to access your package imports.
Instance Method Details
#packages(method_name) ⇒ void Also known as: public_packages
This method returns an undefined value.
Use this as a decorator for an instance method which you will use to access your package imports.
This new method will be set to private, unless you use public_packages instead of packages.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/inclusive.rb', line 84 def packages(method_name) old_method_name = :"__old_#{method_name}__" ivar_name = :"@_#{method_name}" alias_method old_method_name, method_name define_method method_name do return instance_variable_get(ivar_name) if instance_variable_defined?(ivar_name) packages_to_extend = send(old_method_name) ModuleWithPackages.dup.tap do |mod| mod.module_eval do def self.name = "ModuleWithPackages" # preserve module name end packages_to_extend.each { |package| mod.extend_with_package(package) } instance_variable_set(ivar_name, mod) end end private method_name unless __callee__ == :public_packages end |