module Eco class CLI class Config attr_reader :cli def initialize(cli:) @cli = cli end def options cli.options end def args cli.args end # All the available known option args that can be used in the CLI def available_option_args [ usecases.available(keys: true), options_set.available(keys: true), people_filters.available(keys: true), input_filters.available(keys: true) ].flatten.uniq end def options_set @opions_set ||= Eco::CLI::Config::OptionsSet.new(core_config: self) @opions_set.tap do |opts_set| yield(opts_set, options) if block_given? end end def input(default_option: nil, &block) @input ||= Eco::CLI::Config::Input.new(core_config: self, default_option: default_option) return @input unless block_given? @input.define(&block) self end def people(io: nil, &block) if block_given? @people_load = block self else msg = "There is no definition on how to load people" raise msg unless instance_variable_defined?(:@people_load) && @people_load msg = "You need to provide Eco::API::UseCases::BaseIO object. Given: #{io.class}" raise msg unless io.is_a?(Eco::API::UseCases::BaseIO) io = io.new(type: :import, input: io.input || []) @people_load.call(*io.params) end end def people_filters @people_filters ||= Eco::CLI::Config::Filters::PeopleFilters.new(core_config: self) @people_filters.tap do |filters| yield(filters) if block_given? end end def input_filters @input_filters ||= Eco::CLI::Config::Filters::InputFilters.new(core_config: self) @input_filters.tap do |filters| yield(filters) if block_given? end end def usecases @usecases ||= Eco::CLI::Config::UseCases.new(core_config: self) @usecases.tap do |cases| yield(cases) if block_given? end end end end end require_relative 'config/help' require_relative 'config/options_set' require_relative 'config/input' require_relative 'config/filters' require_relative 'config/use_cases'