class EdgycircleToolbox::CQRS::CommandBuilder

Public Class Methods

new() click to toggle source
# File lib/edgycircle_toolbox/cqrs/command_builder.rb, line 15
def initialize
  @command_container = Dry::Container.new
  @decorator_container = DecoratorContainer.new
end

Public Instance Methods

build(valid_parameters, context = nil) click to toggle source
# File lib/edgycircle_toolbox/cqrs/command_builder.rb, line 29
def build(valid_parameters, context = nil)
  command_class = @command_container.resolve(valid_parameters[:name])
  decorator_classes = @decorator_container.resolve(command_class)
  command = command_class.new(valid_parameters)
  decorator_classes.inject(command) { |command, decorator_class| decorator_class.new(command, context) }
end
decorate(command_class, decorator_class) click to toggle source
# File lib/edgycircle_toolbox/cqrs/command_builder.rb, line 25
def decorate(command_class, decorator_class)
  @decorator_container.register(command_class, decorator_class)
end
register(command_class) click to toggle source
# File lib/edgycircle_toolbox/cqrs/command_builder.rb, line 20
def register(command_class)
  key = command_class.name.split("::").last.gsub("Command", "")
  @command_container.register(key, command_class)
end
validate(original_parameters) click to toggle source
# File lib/edgycircle_toolbox/cqrs/command_builder.rb, line 36
def validate(original_parameters)
  command_class = @command_container.resolve(original_parameters[:name])
  command_class.schema.call(original_parameters)
end