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

Group.inject_into_class()   A

Complexity

Conditions 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 9
rs 9.6667
cc 1
1
require "thor/core_ext/hash_with_indifferent_access"
2
3
module Carrasco
4
  class Group
5
    InvalidGroupError = Class.new(StandardError)
6
7
    attr_reader :command_name, :commands, :description, :help
8
9
    def initialize(group_name, options = {})
10
      options = Thor::CoreExt::HashWithIndifferentAccess.new(options)
11
      @command_name  = group_name
12
      @help        = options[:help] || command_name
13
      @description = options[:description] || "description not given"
14
      @commands    = options.fetch('commands') do
15
        raise InvalidGroupError, "Commands not provided for group '#{group_name}'"
16
      end
17
    end
18
19
    def inject_into_class(klass)
20
      group = self
21
      klass.desc(help, description)
22
      klass.class_eval do
23
        define_method(group.command_name) do
24
          execute_commands(group.commands)
25
        end
26
      end
27
    end
28
  end
29
end
30