class VG::SO::GenerateIncludableModule::Action
Attributes
desired_method_name[R]
so_module_name[RW]
Public Instance Methods
call(so_module_name, as: nil)
click to toggle source
# File lib/vg/s_o/generate_includable_module.rb, line 13 def call(so_module_name, as: nil) self.desired_method_name = as self.so_module_name = so_module_name find_or_define_module end
Private Instance Methods
define_module()
click to toggle source
# File lib/vg/s_o/generate_includable_module.rb, line 35 def define_module instance_eval <<~RUBY module #{module_name} def self.included(base) InjectRegistrationMethods.call(base) base.register_service_object(:#{method_name}, ::#{so_module_name}) end def #{method_name}_fn self.class.registered_service_objects[:#{method_name}].callable end def #{method_name}(...) send("#{method_name}_fn").call(...) end def #{method_name}!(...) result = send("#{method_name}_fn").call(...) return result unless result.respond_to?(:error) && result.respond_to?(:value) raise result.error if result.error result.value end def self.extended(_base) raise "Do not extend ::#{so_module_name}, use include!" end end RUBY Object.const_get(module_name) end
desired_method_name=(name)
click to toggle source
# File lib/vg/s_o/generate_includable_module.rb, line 24 def desired_method_name=(name) # TODO: ensure name is a string in snake case; no bangs; @desired_method_name = name.to_s end
find_or_define_module()
click to toggle source
# File lib/vg/s_o/generate_includable_module.rb, line 29 def find_or_define_module return Object.const_get(module_name) if Object.const_defined?(module_name) define_module end
method_name()
click to toggle source
# File lib/vg/s_o/generate_includable_module.rb, line 66 def method_name @method_name ||= desired_method_name || GenerateSlugFromModuleName.call(so_module_name) end
module_name()
click to toggle source
# File lib/vg/s_o/generate_includable_module.rb, line 70 def module_name "::#{so_module_name}::IncludableAs%sMethod" % ( desired_method_name \ ? GenerateCamelizedName.call(desired_method_name) : GetModuleNameWithoutNamespace.call(so_module_name) ) end