Class: EdgycircleToolbox::CQRS::CommandBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/edgycircle_toolbox/cqrs/command_builder.rb

Defined Under Namespace

Classes: DecoratorContainer

Instance Method Summary collapse

Constructor Details

#initializeCommandBuilder

Returns a new instance of CommandBuilder.



15
16
17
18
# File 'lib/edgycircle_toolbox/cqrs/command_builder.rb', line 15

def initialize
  @command_container = Dry::Container.new
  @decorator_container = DecoratorContainer.new
end

Instance Method Details

#build(valid_parameters, context = nil) ⇒ Object



29
30
31
32
33
34
# 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) ⇒ Object



25
26
27
# 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) ⇒ Object



20
21
22
23
# 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) ⇒ Object



36
37
38
39
# 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