Module: Trax::Core::NamedModule
- Defined in:
- lib/trax/core/named_module.rb
Class Method Summary collapse
-
.new(_name, *_extensions, **options, &block) ⇒ Object
examples: (by default, any module args passed after the name of the module will be applied via extend) With Args: Trax::Core::NamedModule.new(“Ecommerce::ItemExtensions”, ::Ecommerce::PricingExtension, Ecommerce::ShippingExtension) With :extensions keyword Trax::Core::NamedModule.new(“Ecommerce::ItemExtensions”, :extensions => [::Ecommerce::PricingExtension]) With :includes keyword Trax::Core::NamedModule.new(“Ecommerce::ItemExtensions”, :includes => [::Ecommerce::ShippingExtension]).
Class Method Details
.new(_name, *_extensions, **options, &block) ⇒ Object
examples: (by default, any module args passed after the name of the module will be applied via extend) With Args: Trax::Core::NamedModule.new(“Ecommerce::ItemExtensions”, ::Ecommerce::PricingExtension, Ecommerce::ShippingExtension) With :extensions keyword Trax::Core::NamedModule.new(“Ecommerce::ItemExtensions”, :extensions => [::Ecommerce::PricingExtension]) With :includes keyword Trax::Core::NamedModule.new(“Ecommerce::ItemExtensions”, :includes => [::Ecommerce::ShippingExtension])
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/trax/core/named_module.rb', line 12 def self.new(_name, *_extensions, **, &block) module_object = ::Object.set_fully_qualified_constant(_name, ::Module.new do define_singleton_method(:name) do _name end end) .each_pair do |k,v| module_object.instance_variable_set("@#{k}", v) module_object.singleton_class.__send__(:attr_reader, k) end unless .blank? module_object.module_eval(&block) if block_given? includes = [.extract!(:includes).fetch(:includes) { nil }].compact.flatten extensions = [.extract!(:extensions).fetch(:extensions) { nil }, _extensions].compact.flatten extensions.each_with_object(module_object) { |ext, mod| mod.extend(ext) } if extensions.length includes.each_with_object(module_object){ |ext, mod| mod.include(ext) } if includes.length module_object end |