Module: GLI::AppSupport

Included in:
App
Defined in:
lib/gli/app_support.rb

Overview

Internals for make App work

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



115
116
117
# File 'lib/gli/app_support.rb', line 115

def self.included(klass)
  @stderr = $stderr
end

Instance Method Details

#acceptsObject

:nodoc:



81
82
83
# File 'lib/gli/app_support.rb', line 81

def accepts #:nodoc:
  @accepts ||= {}
end

#around_blocksObject



148
149
150
# File 'lib/gli/app_support.rb', line 148

def around_blocks
  @around_blocks || []
end

#clear_nextsObject

:nodoc:



104
105
106
107
108
109
# File 'lib/gli/app_support.rb', line 104

def clear_nexts # :nodoc:
  super
  @skips_post = false
  @skips_pre = false
  @skips_around = false
end

#commandsObject

:nodoc:



127
128
129
130
131
132
133
134
135
# File 'lib/gli/app_support.rb', line 127

def commands # :nodoc:
  if !@commands
    @commands = { :help => GLI::Commands::Help.new(self), :_doc => GLI::Commands::Doc.new(self) }
    @commands_declaration_order ||= []
    @commands_declaration_order << @commands[:help]
    @commands_declaration_order << @commands[:_doc]
  end
  @commands
end

#commands_declaration_orderObject

Get an array of commands, ordered by when they were declared



32
33
34
# File 'lib/gli/app_support.rb', line 32

def commands_declaration_order # :nodoc:
  @commands_declaration_order
end

#config_file_nameObject

Return the name of the config file; mostly useful for generating help docs



77
78
79
# File 'lib/gli/app_support.rb', line 77

def config_file_name #:nodoc:
  @config_file
end

#context_descriptionObject



9
10
11
# File 'lib/gli/app_support.rb', line 9

def context_description
  "in global context"
end

#copy_options_to_aliased_versions(global_options, command, options) ⇒ Object

Copies all options in both global_options and options to keys for the aliases of those flags. For example, if a flag works with either -f or –flag, this will copy the value from [:f] to [:flag] to allow the user to access the options by any alias



88
89
90
91
# File 'lib/gli/app_support.rb', line 88

def copy_options_to_aliased_versions(global_options,command,options) # :nodoc:
  copy_options_to_aliases(global_options)
  command.copy_options_to_aliases(options)
end

#error_device=(e) ⇒ Object

Override the device of stderr; exposed only for testing



5
6
7
# File 'lib/gli/app_support.rb', line 5

def error_device=(e) #:nodoc:
  @stderr = e
end

#flagsObject

:nodoc:



119
120
121
# File 'lib/gli/app_support.rb', line 119

def flags # :nodoc:
  @flags ||= {}
end

#get_default_commandObject

Get the default command for the entire app



42
43
44
# File 'lib/gli/app_support.rb', line 42

def get_default_command
  @default_command
end

#help_sort_typeObject



152
153
154
# File 'lib/gli/app_support.rb', line 152

def help_sort_type
  @help_sort_type || :alpha
end

#help_text_wrap_typeObject



156
157
158
# File 'lib/gli/app_support.rb', line 156

def help_text_wrap_type
  @help_text_wrap_type || :to_terminal
end

#override_command_defaults(command_list, config) ⇒ Object



168
169
170
171
172
173
174
175
176
177
178
# File 'lib/gli/app_support.rb', line 168

def override_command_defaults(command_list,config)
  command_list.each do |command_name,command|
    next if command_name == :initconfig || command.nil?
    command_config = (config['commands'] || {})[command_name] || {}

    override_default(command.topmost_ancestor.flags,command_config)
    override_default(command.topmost_ancestor.switches,command_config)

    override_command_defaults(command.commands,command_config)
  end
end

#override_default(tokens, config) ⇒ Object



180
181
182
183
184
# File 'lib/gli/app_support.rb', line 180

def override_default(tokens,config)
  tokens.each do |name,token|
    token.default_value=config[name] if config[name]
  end
end

#override_defaults_based_on_config(config) ⇒ Object

Sets the default values for flags based on the configuration



161
162
163
164
165
166
# File 'lib/gli/app_support.rb', line 161

def override_defaults_based_on_config(config)
  override_default(flags,config)
  override_default(switches,config)

  override_command_defaults(commands,config)
end

#parse_configObject

:nodoc:



93
94
95
96
97
98
99
100
101
102
# File 'lib/gli/app_support.rb', line 93

def parse_config # :nodoc:
  config = {
    'commands' => {},
  }
  if @config_file && File.exist?(@config_file)
    require 'yaml'
    config.merge!(File.open(@config_file) { |file| YAML::load(file) })
  end
  config
end

#post_blockObject



143
144
145
146
# File 'lib/gli/app_support.rb', line 143

def post_block
  @post_block ||= Proc.new do
  end
end

#pre_blockObject



137
138
139
140
141
# File 'lib/gli/app_support.rb', line 137

def pre_block
  @pre_block ||= Proc.new do
    true
  end
end

#resetObject

Reset the GLI module internal data structures; mostly useful for testing



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/gli/app_support.rb', line 14

def reset # :nodoc:
  switches.clear
  flags.clear
  @commands = nil
  @commands_declaration_order = []
  @version = nil
  @config_file = nil
  @use_openstruct = false
  @prog_desc = nil
  @error_block = false
  @pre_block = false
  @post_block = false
  @default_command = :help
  @around_block = nil
  clear_nexts
end

#run(args) ⇒ Object

Runs whatever command is needed based on the arguments.

args

the command line ARGV array

Returns a number that would be a reasonable exit code



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/gli/app_support.rb', line 51

def run(args) #:nodoc:
  args = args.dup if @preserve_argv
  command = nil
  begin
    override_defaults_based_on_config(parse_config)

    add_help_switch_if_needed(switches)

    global_options,command,options,arguments = GLIOptionParser.new(commands,flags,switches,accepts,@default_command).parse_options(args)

    copy_options_to_aliased_versions(global_options,command,options)

    global_options = convert_to_openstruct_if_needed(global_options)
    options        = convert_to_openstruct_if_needed(options)

    if proceed?(global_options,command,options,arguments)
      call_command(command,global_options,options,arguments)
    end
    0
  rescue Exception => ex
    handle_exception(ex,command)
  end
end

#stderrObject



111
112
113
# File 'lib/gli/app_support.rb', line 111

def stderr
  @stderr ||= STDERR
end

#switchesObject

:nodoc:



123
124
125
# File 'lib/gli/app_support.rb', line 123

def switches # :nodoc:
  @switches ||= {}
end

#version_stringObject

Get the version string



37
38
39
# File 'lib/gli/app_support.rb', line 37

def version_string #:nodoc:
  @version
end