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



128
129
130
# File 'lib/gli/app_support.rb', line 128

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

Instance Method Details

#acceptsObject

:nodoc:



101
102
103
104
# File 'lib/gli/app_support.rb', line 101

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

end

#argument_handling_strategyObject



208
209
210
# File 'lib/gli/app_support.rb', line 208

def argument_handling_strategy
  @argument_handling_strategy || :loose
end

#around_blocksObject



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

def around_blocks
  @around_blocks || []
end

#autocompleteObject



216
217
218
# File 'lib/gli/app_support.rb', line 216

def autocomplete
  @autocomplete.nil? ? true : @autocomplete
end

#clear_nextsObject

:nodoc:



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

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

#commandsObject

:nodoc:



140
141
142
143
144
145
146
147
148
# File 'lib/gli/app_support.rb', line 140

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



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

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



98
99
100
# File 'lib/gli/app_support.rb', line 98

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

#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

#exe_nameObject



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

def exe_name
  File.basename($0)
end

#flagsObject

:nodoc:



132
133
134
# File 'lib/gli/app_support.rb', line 132

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

#get_default_commandObject

Get the default command for the entire app



51
52
53
# File 'lib/gli/app_support.rb', line 51

def get_default_command
  @default_command
end

#help_sort_typeObject



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

def help_sort_type
  @help_sort_type || :alpha
end

#help_text_wrap_typeObject



169
170
171
# File 'lib/gli/app_support.rb', line 169

def help_text_wrap_type
  @help_text_wrap_type || :to_terminal
end

#override_command_defaults(command_list, config) ⇒ Object



185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
# File 'lib/gli/app_support.rb', line 185

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] || {}

    if @subcommand_option_handling_strategy == :legacy
      override_default(command.topmost_ancestor.flags,command_config)
      override_default(command.topmost_ancestor.switches,command_config)
    else
      override_default(command.flags,command_config)
      override_default(command.switches,command_config)
    end

    override_command_defaults(command.commands,command_config)
  end
end

#override_default(tokens, config) ⇒ Object



202
203
204
205
206
# File 'lib/gli/app_support.rb', line 202

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

#override_defaults_based_on_config(config) ⇒ Object

Sets the default values for flags based on the configuration



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

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

  override_command_defaults(commands,config)
end

#parse_configObject

:nodoc:



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

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



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

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

#pre_blockObject



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

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
32
33
34
# 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
  @autocomplete = false
  @around_block = nil
  @subcommand_option_handling_strategy = :legacy
  @argument_handling_strategy = :loose
  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



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/gli/app_support.rb', line 60

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

    add_help_switch_if_needed(self)

    gli_option_parser = GLIOptionParser.new(commands,
                                            flags,
                                            switches,
                                            accepts,
                                            :default_command => @default_command,
                                            :autocomplete => autocomplete,
                                            :subcommand_option_handling_strategy => subcommand_option_handling_strategy,
                                            :argument_handling_strategy => argument_handling_strategy)

    parsing_result = gli_option_parser.parse_options(args)
    parsing_result.convert_to_openstruct! if @use_openstruct

    the_command = parsing_result.command

    if proceed?(parsing_result)
      call_command(parsing_result) 
      0
    else
      raise PreconditionFailed, "preconditions failed"
    end
  rescue Exception => ex
    if the_command.nil? && ex.respond_to?(:command_in_context)
      the_command = ex.command_in_context
    end
    handle_exception(ex,the_command)
  end
end

#stderrObject



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

def stderr
  @stderr ||= STDERR
end

#subcommand_option_handling_strategyObject



212
213
214
# File 'lib/gli/app_support.rb', line 212

def subcommand_option_handling_strategy
  @subcommand_option_handling_strategy || :legacy
end

#switchesObject

:nodoc:



136
137
138
# File 'lib/gli/app_support.rb', line 136

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

#synopsis_format_typeObject



173
174
175
# File 'lib/gli/app_support.rb', line 173

def synopsis_format_type
  @synopsis_format_type || :full
end

#version_stringObject

Get the version string



46
47
48
# File 'lib/gli/app_support.rb', line 46

def version_string #:nodoc:
  @version
end