Class: Eco::CLI::Config::OptionsSet

Inherits:
Object
  • Object
show all
Includes:
Help
Defined in:
lib/eco/cli/config/options_set.rb

Defined Under Namespace

Classes: OptConfig

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(core_config:) ⇒ OptionsSet

Returns a new instance of OptionsSet.



11
12
13
14
# File 'lib/eco/cli/config/options_set.rb', line 11

def initialize(core_config:)
  @core_config = core_config
  @sets        = {}
end

Instance Attribute Details

#core_configObject (readonly)

Returns the value of attribute core_config.



6
7
8
# File 'lib/eco/cli/config/options_set.rb', line 6

def core_config
  @core_config
end

Instance Method Details

#active_namespacesObject



99
100
101
102
103
104
105
# File 'lib/eco/cli/config/options_set.rb', line 99

def active_namespaces
  @active_namespaces ||= [].tap do |active|
    active << :general
    other = (namespaces - [:general]).select {|nm| SCR.arg?(nm)}
    active.concat(other)
  end
end

#active_optionsObject



73
74
75
76
77
78
79
80
81
# File 'lib/eco/cli/config/options_set.rb', line 73

def active_options
  @active_options ||= sets.select do |namespace, opts_set|
    active_namespace?(namespace)
  end.each_with_object([]) do |(namespace, opts_set), options|
    opts_set.each do |arg, option|
      options << option if active_option?(arg, namespace)
    end
  end
end

#add(option, desc = nil, namespace: :general) ⇒ Object

Parameters:

  • option (String, Array<String>)

    the command line option(s).

  • namespace (String) (defaults to: :general)

    preceding command(s) argument that enables this option.

  • desc (String) (defaults to: nil)

    description of the option.



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/eco/cli/config/options_set.rb', line 47

def add(option, desc = nil, namespace: :general)
  raise "Missing block to define the options builder" unless block_given?

  opts = [option].flatten.compact
  unless opts.empty?
    callback = Proc.new
    opts.each do |opt|
      puts "Overriding option '#{option}' in '#{namespace}' namespace" if option_exists?(opt, namespace)
      options_set(namespace)[opt] = OptConfig.new(opt, namespace, desc, callback)
    end
  end
  self
end

#all_optionsObject



83
84
85
86
87
# File 'lib/eco/cli/config/options_set.rb', line 83

def all_options
  sets.each_with_object([]) do |(namespace, opts_set), options|
    options << opts_set.values
  end
end

#any_non_general_space_active?Boolean

Returns:

  • (Boolean)


95
96
97
# File 'lib/eco/cli/config/options_set.rb', line 95

def any_non_general_space_active?
  (active_namespaces - [:general]).length > 0
end

#help(refine: nil) ⇒ String

Returns summary of the options.

Returns:

  • (String)

    summary of the options.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/eco/cli/config/options_set.rb', line 17

def help(refine: nil)
  indent = 2
  spaces = any_non_general_space_active? ? active_namespaces : namespaces
  refinement = refine.is_a?(String)? " (containing: '#{refine}')" : ""
  ["The following are the available options#{refinement}:"].yield_self do |lines|
    max_len = keys_max_len(options_args(spaces)) + indent
    spaces.each do |namespace|
      is_general = (namespace == :general)
      str_indent = is_general ? "" : " " * indent
      lines << help_line(namespace, "", max_len) unless is_general
      options_set(namespace).select do |arg, option|
        !refine.is_a?(String) || option.name.include?(refine)
      end.each do |arg, option|
        lines << help_line(" " * indent + "#{option.name}", option.description, max_len)
      end
    end
    lines
  end.join("\n")
end

#options_args(namespaces) ⇒ Array<String>

Returns all the argument of the options in namespaces.

Returns:

  • (Array<String>)

    all the argument of the options in namespaces



38
39
40
41
42
# File 'lib/eco/cli/config/options_set.rb', line 38

def options_args(namespaces)
  namespaces.each_with_object([]) do |space, args|
    args.concat(options_set(space).keys)
  end.uniq
end

#process(io:) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
# File 'lib/eco/cli/config/options_set.rb', line 61

def process(io:)
  unless io && io.is_a?(Eco::API::UseCases::BaseIO)
    raise "You need to provide Eco::API::UseCases::BaseIO object. Given: #{io.class}"
  end

  active_options.each do |option|
    option.callback.call(io.options, io.session)
  end

  io.options
end