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



117
118
119
# File 'lib/gli/app_support.rb', line 117

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

Instance Method Details

#acceptsObject

:nodoc:



83
84
85
# File 'lib/gli/app_support.rb', line 83

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

#around_blocksObject



150
151
152
# File 'lib/gli/app_support.rb', line 150

def around_blocks
  @around_blocks || []
end

#clear_nextsObject

:nodoc:



106
107
108
109
110
111
# File 'lib/gli/app_support.rb', line 106

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

#commandsObject

:nodoc:



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

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



34
35
36
# File 'lib/gli/app_support.rb', line 34

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



79
80
81
# File 'lib/gli/app_support.rb', line 79

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



90
91
92
93
# File 'lib/gli/app_support.rb', line 90

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:



121
122
123
# File 'lib/gli/app_support.rb', line 121

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

#get_default_commandObject

Get the default command for the entire app



44
45
46
# File 'lib/gli/app_support.rb', line 44

def get_default_command
  @default_command
end

#help_sort_typeObject



154
155
156
# File 'lib/gli/app_support.rb', line 154

def help_sort_type
  @help_sort_type || :alpha
end

#help_text_wrap_typeObject



158
159
160
# File 'lib/gli/app_support.rb', line 158

def help_text_wrap_type
  @help_text_wrap_type || :to_terminal
end

#override_command_defaults(command_list, config) ⇒ Object



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

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



182
183
184
185
186
# File 'lib/gli/app_support.rb', line 182

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



163
164
165
166
167
168
# File 'lib/gli/app_support.rb', line 163

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

  override_command_defaults(commands,config)
end

#parse_configObject

:nodoc:



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

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



145
146
147
148
# File 'lib/gli/app_support.rb', line 145

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

#pre_blockObject



139
140
141
142
143
# File 'lib/gli/app_support.rb', line 139

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
30
31
# File 'lib/gli/app_support.rb', line 14

def reset # :nodoc:
  switches.clear
  flags.clear
  @commands = nil
  @commands_declaration_order = []
  @flags_declaration_order = []
  @switches_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



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

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



113
114
115
# File 'lib/gli/app_support.rb', line 113

def stderr
  @stderr ||= STDERR
end

#switchesObject

:nodoc:



125
126
127
# File 'lib/gli/app_support.rb', line 125

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

#version_stringObject

Get the version string



39
40
41
# File 'lib/gli/app_support.rb', line 39

def version_string #:nodoc:
  @version
end