module Protoboard::CircuitProxyFactory
This module is responsible to manage a proxy module that executes the circuit.
Public Class Methods
create_module(circuits, class_name)
click to toggle source
Creates the module that executes the circuit
Calls superclass method
# File lib/protoboard/circuit_proxy_factory.rb, line 11 def create_module(circuits, class_name) module_name = infer_module_name(class_name, circuits.map(&:method_name)) proxy_module = Module.new # Encapsulates instance methods in a module to be used later instance_methods = Module.new do circuits.each do |circuit| unless circuit.singleton_method? define_method(circuit.method_name) do |*args| Protoboard.config.adapter.run_circuit(circuit) { super(*args) } end end end end proxy_module.const_set('InstanceMethods', instance_methods) # Encapsulates singleton methods in a module to be used later class_methods = Module.new do circuits.each do |circuit| if circuit.singleton_method? define_method(circuit.method_name) do |*args| Protoboard.config.adapter.run_circuit(circuit) { super(*args) } end end end end proxy_module.const_set('ClassMethods', class_methods) Protoboard.const_set(module_name, proxy_module) end
Private Class Methods
infer_module_name(class_name, methods)
click to toggle source
Formats the module name
# File lib/protoboard/circuit_proxy_factory.rb, line 48 def infer_module_name(class_name, methods) methods = methods.map(&:to_s).map do |method| method.convert_special_chars_to_ordinals end methods_joined = methods.map { |method| method.camelize }.join "#{methods_joined}#{class_name.split('::').join('')}CircuitProxy" end