Completed
Pull Request — master (#6)
by Marcelo
02:43
created

CommandBuilder   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 35
Duplicated Lines 0 %
Metric Value
wmc 4
dl 0
loc 35
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A build_commands() 0 6 1
A from_config() 0 9 1
A build_grups() 0 5 1
A inject_command_into_class() 0 8 1
1
require "thor/core_ext/hash_with_indifferent_access"
2
3
module Carrasco
4
  class CommandBuilder
5
    def from_config(config)
6
      config = Thor::CoreExt::HashWithIndifferentAccess.new(config)
7
      klass = Class.new(Thor)
8
9
      build_commands(config[:commands] || [], klass)
10
      build_grups(config[:groups] || [], klass)
11
12
      klass
13
    end
14
15
    def inject_command_into_class(command, klass)
16
      klass.desc(command.help, command.description)
17
      klass.class_eval do
18
        define_method(command.command_name) do
19
          execute_command(command)
20
        end
21
      end
22
    end
23
24
    private
25
26
    def build_commands(commands, klass)
27
      commands.each do |method, options|
28
        command = Command.new(method, options)
29
        inject_command_into_class(command, klass)
30
      end
31
    end
32
33
    def build_grups(groups, klass)
34
      groups.each do |group_name, options|
35
        Group.new(group_name, options).inject_into_class(klass)
36
      end
37
    end
38
  end
39
end
40