Class: EacCli::DocoptRunner

Inherits:
Object show all
Extended by:
ClassMethods
Includes:
Context, EacRubyUtils::SettingsProvider
Defined in:
lib/eac_cli/docopt_runner.rb,
lib/eac_cli/docopt_runner/_doc.rb,
lib/eac_cli/docopt_runner/context.rb,
lib/eac_cli/docopt_runner/_settings.rb,
lib/eac_cli/docopt_runner/_subcommands.rb,
lib/eac_cli/docopt_runner/class_methods.rb

Defined Under Namespace

Modules: ClassMethods, Context, SubcommandsSupport

Constant Summary collapse

PROGRAM_MACRO =
'__PROGRAM__'
SUBCOMMAND_ARG =
'<subcommand>'
SUBCOMMAND_ARGS_ARG =
'<subcommand-args>'
SUBCOMMANDS_MACRO =
'__SUBCOMMANDS__'

Constants included from ClassMethods

ClassMethods::DOCOPT_ERROR_EXIT_CODE

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ClassMethods

run

Methods included from Context

#context

Constructor Details

#initialize(settings = {}) ⇒ DocoptRunner

Returns a new instance of DocoptRunner.



20
21
22
23
# File 'lib/eac_cli/docopt_runner.rb', line 20

def initialize(settings = {})
  @settings = settings.with_indifferent_access.freeze
  check_subcommands
end

Instance Attribute Details

#settingsObject (readonly)

Returns the value of attribute settings.



18
19
20
# File 'lib/eac_cli/docopt_runner.rb', line 18

def settings
  @settings
end

Class Method Details

.create(settings = {}) ⇒ Object



13
14
15
# File 'lib/eac_cli/docopt_runner.rb', line 13

def create(settings = {})
  new(settings)
end

Instance Method Details

#check_subcommandsObject



16
17
18
19
20
21
22
23
24
# File 'lib/eac_cli/docopt_runner/_subcommands.rb', line 16

def check_subcommands
  return unless subcommands?

  singleton_class.include(SubcommandsSupport)
  check_subcommands_arg
  return if singleton_class.method_defined?(:run)

  singleton_class.send(:alias_method, :run, :run_with_subcommand)
end

#optionsObject



25
26
27
# File 'lib/eac_cli/docopt_runner.rb', line 25

def options
  @options ||= ::Docopt.docopt(target_doc, docopt_options)
end

#parentObject



29
30
31
# File 'lib/eac_cli/docopt_runner.rb', line 29

def parent
  settings[:parent]
end

#source_docObject



7
8
9
# File 'lib/eac_cli/docopt_runner/_doc.rb', line 7

def source_doc
  setting_value(:doc)
end

#source_program_nameObject



15
16
17
# File 'lib/eac_cli/docopt_runner/_doc.rb', line 15

def source_program_name
  setting_value(:program_name, false)
end

#subcommands?Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/eac_cli/docopt_runner/_subcommands.rb', line 12

def subcommands?
  source_doc.include?(SUBCOMMANDS_MACRO)
end

#target_docObject



11
12
13
# File 'lib/eac_cli/docopt_runner/_doc.rb', line 11

def target_doc
  source_doc.gsub(PROGRAM_MACRO, target_program_name).strip + "\n"
end

#target_program_nameObject



19
20
21
# File 'lib/eac_cli/docopt_runner/_doc.rb', line 19

def target_program_name
  [source_program_name, ENV['PROGRAM_NAME'], $PROGRAM_NAME].find(&:present?)
end