showoff 0.15.4 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1365af2ab2a7098157389c2b50e549f2d142db0
4
- data.tar.gz: 483b890328201a844ea2f69ae1f4123bfae6ecc2
3
+ metadata.gz: edfa1cf6d1dfe2553c4f396f2e9a9045d6057a82
4
+ data.tar.gz: f17838ab1a2bfc0d72d19e4a3f6605bf10da9a97
5
5
  SHA512:
6
- metadata.gz: c65507cec293d851664342e4db7aae7e9d57dda4f47fb8ef132b3637f1454dd7ca47e33b267f33b579ab614818f31beab24415475dc5bcc78610bf5085a80883
7
- data.tar.gz: 6f72ce0aa88793fe127dabb72c1373d0b0fd02b4371d672e773b2fa3fc4c5c1ffb84eb6c234e2be57c163efbc27589e06ec3203a2821d3334286e6d3aa7a776b
6
+ metadata.gz: d19829d0084d9748e6afca84fd8c135462a1322224da66e7ee712db13ce21f9937e9b57e4eb9f68baf07c1a1f257ce3577b971ba7cbcb3c2a17dcb7c51751b70
7
+ data.tar.gz: 9bdb3c83be7a45818cb5f2389c0e2bb2d35eaeaf3242b54f681e813c3ee1c0ee3914c1b0ddc12881e63a183434f36f385d40bbf6eb24ce96b382438f2311e2d0
data/bin/showoff CHANGED
@@ -6,227 +6,241 @@ require 'showoff/version'
6
6
  require 'rubygems'
7
7
  require 'gli'
8
8
 
9
- # Support GLI and GLI2
10
- if GLI::VERSION.to_f > 1
9
+ # See https://github.com/davetron5000/gli/issues/196 for rationale for this silly wrapper
10
+ module Wrapper
11
11
  include GLI::App
12
- else
13
- include GLI
14
- end
12
+ extend self
15
13
 
16
- version SHOWOFF_VERSION
17
- program_desc <<-desc
18
- A web based presentation engine with awesome interaction features.
14
+ version SHOWOFF_VERSION
15
+ program_desc <<-desc
16
+ A web based presentation engine with awesome interaction features.
19
17
 
20
- ShowOff uses Markdown files with a few custom extensions to generate slides
21
- that are served locally for presentation via web browser. Your audience can
22
- view presentations directly as well, and interact with you in many ways.
18
+ ShowOff uses Markdown files with a few custom extensions to generate slides
19
+ that are served locally for presentation via web browser. Your audience can
20
+ view presentations directly as well, and interact with you in many ways.
23
21
 
24
- Showoff can optionally use the PDFKit gem to autogenerate PDF files on demand.
25
- Viewers can access the /pdf endpoint to download a generated PDF file. This
26
- functionality is likely to be deprecated, since it is simpler and easier to
27
- just print the /print endpoint directly from your browser.
22
+ Showoff can optionally use the PDFKit gem to autogenerate PDF files on demand.
23
+ Viewers can access the /pdf endpoint to download a generated PDF file. This
24
+ functionality is likely to be deprecated, since it is simpler and easier to
25
+ just print the /print endpoint directly from your browser.
28
26
 
29
- The simplest use case is to run `showoff serve` from the directory containing
30
- the showoff.json file.
31
- desc
27
+ The simplest use case is to run `showoff serve` from the directory containing
28
+ the showoff.json file.
29
+ desc
32
30
 
33
31
 
34
- desc 'Create new showoff presentation'
35
- long_desc 'This command helps start a new showoff presentation by setting up the proper directory structure for you. It takes the directory name you would like showoff to create for you.'
36
- command [:create,:init] do |c|
32
+ desc 'Create new showoff presentation'
33
+ long_desc 'This command helps start a new showoff presentation by setting up the proper directory structure for you. It takes the directory name you would like showoff to create for you.'
34
+ command [:create,:init] do |c|
37
35
 
38
- c.desc 'Don''t create sample slides'
39
- c.switch [:n,:nosamples]
36
+ c.desc 'Don''t create sample slides'
37
+ c.switch [:n,:nosamples]
40
38
 
41
- c.desc 'Comma separated list of initial slide directory name(s).'
42
- c.default_value 'one'
43
- c.flag [:d,:slidedir]
39
+ c.desc 'Comma separated list of initial slide directory name(s).'
40
+ c.default_value 'one'
41
+ c.flag [:d,:slidedir]
44
42
 
45
- c.action do |global_options,options,args|
46
- dir_name = args.first || '.'
47
- ShowOffUtils.create(dir_name,!options[:n],options[:d])
48
- if options[:n]
49
- puts "Add slides and update #{dir_name}/#{ShowOffUtils.presentation_config_file}"
50
- end
51
- if args.empty?
52
- puts "Run 'showoff serve' to see your new slideshow"
53
- else
54
- puts "Run 'showoff serve' in the #{dir_name} directory to see your new slideshow"
43
+ c.action do |global_options,options,args|
44
+ dir_name = args.first || '.'
45
+ ShowOffUtils.create(dir_name,!options[:n],options[:d])
46
+ if options[:n]
47
+ puts "Add slides and update #{dir_name}/#{ShowOffUtils.presentation_config_file}"
48
+ end
49
+ if args.empty?
50
+ puts "Run 'showoff serve' to see your new slideshow"
51
+ else
52
+ puts "Run 'showoff serve' in the #{dir_name} directory to see your new slideshow"
53
+ end
55
54
  end
56
55
  end
57
- end
58
56
 
59
- desc 'Build a showoff presentation from a showoff.json outline'
60
- long_desc 'This command helps start a new showoff presentation by creating each slide listing in the showoff.json file.'
61
- command [:skeleton] do |c|
57
+ desc 'Build a showoff presentation from a showoff.json outline'
58
+ long_desc 'This command helps start a new showoff presentation by creating each slide listing in the showoff.json file.'
59
+ command [:skeleton] do |c|
62
60
 
63
- c.desc 'alternate json filename'
64
- c.flag [:f,:file]
61
+ c.desc 'alternate json filename'
62
+ c.flag [:f,:file]
65
63
 
66
- c.action do |global_options,options,args|
67
- ShowOffUtils.skeleton(options[:f])
68
- puts "done. run 'showoff serve' to see your slideshow"
64
+ c.action do |global_options,options,args|
65
+ ShowOffUtils.skeleton(options[:f])
66
+ puts "done. run 'showoff serve' to see your slideshow"
67
+ end
69
68
  end
70
- end
71
69
 
72
- desc 'Validate the consistency of your presentation.'
73
- long_desc 'This ensures that each file listed in showoff.json exists and validates code blocks on each slide.'
74
- command [:validate] do |c|
70
+ desc 'Validate the consistency of your presentation.'
71
+ long_desc 'This ensures that each file listed in showoff.json exists and validates code blocks on each slide.'
72
+ command [:validate] do |c|
75
73
 
76
- c.desc 'alternate json filename'
77
- c.flag [:f,:file]
74
+ c.desc 'alternate json filename'
75
+ c.flag [:f,:file]
78
76
 
79
- c.action do |global_options,options,args|
80
- ShowOffUtils.validate(options[:f])
77
+ c.action do |global_options,options,args|
78
+ ShowOffUtils.validate(options[:f])
79
+ end
81
80
  end
82
- end
83
81
 
84
- desc 'Puts your showoff presentation into a gh-pages branch'
85
- long_desc 'Generates a static version of your presentation into your gh-pages branch for publishing to GitHub Pages'
86
- command :github do |c|
87
- c.action do |global_options,options,args|
88
- puts "Generating static content"
89
- ShowOffUtils.github
90
- puts "I've updated your 'gh-pages' branch with the static version of your presentation."
91
- puts "Push it to GitHub to publish it. Probably something like:"
92
- puts
93
- puts " git push origin gh-pages"
94
- puts
82
+ desc 'Puts your showoff presentation into a gh-pages branch'
83
+ long_desc 'Generates a static version of your presentation into your gh-pages branch for publishing to GitHub Pages'
84
+ command :github do |c|
85
+ c.action do |global_options,options,args|
86
+ puts "Generating static content"
87
+ ShowOffUtils.github
88
+ puts "I've updated your 'gh-pages' branch with the static version of your presentation."
89
+ puts "Push it to GitHub to publish it. Probably something like:"
90
+ puts
91
+ puts " git push origin gh-pages"
92
+ puts
93
+ end
95
94
  end
96
- end
97
95
 
98
- desc 'Serves the showoff presentation in the current directory'
99
- desc 'Setup your presentation to serve on Heroku'
100
- arg_name 'heroku_name'
101
- long_desc 'Creates the Gemfile and config.ru file needed to push a showoff pres to heroku. It will then run ''heroku create'' for you to register the new project on heroku and add the remote for you. Then all you need to do is commit the new created files and run ''git push heroku'' to deploy.'
102
- command :heroku do |c|
103
-
104
- c.desc 'add password protection to your heroku site'
105
- c.flag [:p,:password]
106
-
107
- c.desc 'force overwrite of existing Gemfile/.gems and config.ru files if they exist'
108
- c.switch [:f,:force]
109
-
110
- c.desc 'Use older-style .gems file instead of bundler-style Gemfile'
111
- c.switch [:g,:dotgems]
112
-
113
- c.action do |global_options,options,args|
114
- raise "heroku_name is required" if args.empty?
115
- if ShowOffUtils.heroku(args[0],options[:f],options[:p],options[:g])
116
- puts "herokuized. run something like this to launch your heroku presentation:
117
-
118
- heroku create #{args[0]}"
119
-
120
- if options[:g]
121
- puts " git add .gems config.ru"
122
- else
123
- puts " bundle install"
124
- puts " git add Gemfile Gemfile.lock config.ru"
96
+ desc 'Serves the showoff presentation in the current directory'
97
+ desc 'Setup your presentation to serve on Heroku'
98
+ arg_name 'heroku_name'
99
+ long_desc 'Creates the configuration files needed to Herokuize a Showoff presentation and then deploys it for you.'
100
+ command :heroku do |c|
101
+
102
+ c.desc 'add password protection to your heroku site'
103
+ c.flag [:p,:password]
104
+
105
+ c.desc 'force overwrite of existing Gemfile/.gems and config.ru files if they exist'
106
+ c.switch [:f,:force]
107
+
108
+ c.action do |global_options,options,args|
109
+ raise "heroku_name is required" if args.empty?
110
+ raise "Name must start with a letter and can only contain lowercase letters, numbers, and dashes." unless args.first =~ /^[a-z][a-z1-9-]*$/
111
+
112
+ unless system('git remote get-url heroku')
113
+ ShowOffUtils.command("heroku create #{args[0]}", "Please ensure that the heroku gem is installed and you're logged in.")
125
114
  end
126
- puts " git commit -m 'herokuized'
127
- git push heroku master
128
- "
129
-
130
- if options[:p]
131
- puts "CAREFUL: you are commiting your access password - anyone with read access to the repo can access the preso\n\n"
115
+
116
+ if ShowOffUtils.heroku(args[0],options[:f],options[:p])
117
+ ShowOffUtils.command('bundle install', 'Please ensure that the bundler gem is installed.')
118
+
119
+ begin
120
+ ShowOffUtils.command('git add Procfile Gemfile Gemfile.lock config.ru')
121
+ ShowOffUtils.command('git commit -m "Herokuized by Showoff"')
122
+ ShowOffUtils.command('git push heroku master')
123
+ rescue => e
124
+ puts 'Git operations failed. Please correct issues, then manually commit the following files:'
125
+ puts ' * Procfile'
126
+ puts ' * Gemfile'
127
+ puts ' * Gemfile.lock'
128
+ puts ' * config.ru'
129
+ puts
130
+ puts 'When done, please run "git push heroku master"'
131
+ end
132
+
133
+ if options[:p]
134
+ puts "CAREFUL: you are commiting your access password - anyone with read access to the repo can access the preso\n\n"
135
+ end
136
+
137
+ puts 'Your presentation has been Herokuized. Run `heroku open` to see it.'
132
138
  end
133
139
  end
134
140
  end
135
- end
136
141
 
137
- desc 'Serves the showoff presentation in the specified (or current) directory'
138
- arg_name "[pres_dir]"
139
- default_value "."
140
- command :serve do |c|
142
+ desc 'Serves the showoff presentation in the specified (or current) directory'
143
+ arg_name "[pres_dir]"
144
+ default_value "."
145
+ command :serve do |c|
141
146
 
142
- c.desc 'Show verbose messaging'
143
- c.switch [:v, :verbose]
147
+ c.desc 'Show verbose messaging'
148
+ c.switch [:v, :verbose]
144
149
 
145
- c.desc 'Enable code review'
146
- c.switch [:r, :review]
150
+ c.desc 'Enable code review'
151
+ c.switch [:r, :review]
147
152
 
148
- c.desc 'Enable remote code execution'
149
- c.switch [:x, :execute, :executecode]
153
+ c.desc 'Enable remote code execution'
154
+ c.switch [:x, :execute, :executecode]
150
155
 
151
- c.desc 'Run in standalone mode, with no audience interaction'
152
- c.switch [:S, :standalone]
156
+ c.desc 'Run in standalone mode, with no audience interaction'
157
+ c.switch [:S, :standalone]
153
158
 
154
- c.desc 'Disable content caching'
155
- c.switch :nocache
159
+ c.desc 'Disable content caching'
160
+ c.switch :nocache
156
161
 
157
- c.desc 'Port on which to run'
158
- c.default_value "9090"
159
- c.flag [:p, :port]
162
+ c.desc 'Port on which to run'
163
+ c.default_value "9090"
164
+ c.flag [:p, :port]
160
165
 
161
- c.desc 'Host or ip to run on'
162
- c.default_value "0.0.0.0"
163
- c.flag [:h, :host]
166
+ c.desc 'Host or ip to run on'
167
+ c.default_value "0.0.0.0"
168
+ c.flag [:h, :host]
164
169
 
165
- c.desc 'Run via HTTPS'
166
- c.switch [:s, :ssl]
170
+ c.desc 'Run via HTTPS'
171
+ c.switch [:s, :ssl]
167
172
 
168
- c.desc 'Path to SSL certificate. Showoff will generate one automatically if unset.'
169
- c.flag :ssl_certificate
173
+ c.desc 'Path to SSL certificate. Showoff will generate one automatically if unset.'
174
+ c.flag :ssl_certificate
170
175
 
171
- c.desc 'Path to SSL private key. Showoff will generate one automatically if unset.'
172
- c.flag :ssl_private_key
176
+ c.desc 'Path to SSL private key. Showoff will generate one automatically if unset.'
177
+ c.flag :ssl_private_key
173
178
 
174
- c.desc 'JSON file used to describe presentation'
175
- c.default_value "showoff.json"
176
- c.flag [:f, :file, :pres_file]
179
+ c.desc 'JSON file used to describe presentation'
180
+ c.default_value "showoff.json"
181
+ c.flag [:f, :file, :pres_file]
177
182
 
178
- c.desc 'Git URL to a repository containing the presentation'
179
- c.flag [:u, :url, :git_url]
183
+ c.desc 'Git URL to a repository containing the presentation'
184
+ c.flag [:u, :url, :git_url]
180
185
 
181
- c.desc 'Branch of the git repository to use'
182
- c.flag [:git_branch]
186
+ c.desc 'Branch of the git repository to use'
187
+ c.flag [:git_branch]
183
188
 
184
- c.desc 'Path of the presentation within the git repository'
185
- c.flag [:git_path]
189
+ c.desc 'Path of the presentation within the git repository'
190
+ c.flag [:git_path]
186
191
 
187
- c.action do |global_options,options,args|
192
+ c.action do |global_options,options,args|
188
193
 
189
- # This is gross. A serious revamp in config file parsing is due.
190
- config = JSON.parse(File.read(options[:f])) rescue {}
191
- if Gem::Version.new(config['version']) > Gem::Version.new(SHOWOFF_VERSION) then
192
- raise "This presentation requires Showoff version #{config['version']} or greater."
193
- end
194
+ # This is gross. A serious revamp in config file parsing is due.
195
+ config = JSON.parse(File.read(options[:f])) rescue {}
196
+ if Gem::Version.new(config['version']) > Gem::Version.new(SHOWOFF_VERSION) then
197
+ raise "This presentation requires Showoff version #{config['version']} or greater."
198
+ end
199
+
200
+ options[:host] ||= config['host']
201
+ options[:port] ||= config['port']
202
+ options[:ssl] ||= config['ssl']
203
+ options[:ssl_certificate] ||= config['ssl_certificate']
204
+ options[:ssl_private_key] ||= config['ssl_private_key']
205
+ options[:standalone] ||= config['standalone']
194
206
 
195
- options[:host] ||= config['host']
196
- options[:port] ||= config['port']
197
- options[:ssl] ||= config['ssl']
198
- options[:ssl_certificate] ||= config['ssl_certificate']
199
- options[:ssl_private_key] ||= config['ssl_private_key']
200
- options[:standalone] ||= config['standalone']
207
+ options[:pres_dir] = args[0]
208
+ options[:port] = options[:port].to_i
209
+ options[:bind] = options[:host]
201
210
 
202
- options[:pres_dir] = args[0]
203
- options[:port] = options[:port].to_i
204
- options[:bind] = options[:host]
211
+ ssl_options = {
212
+ :cert_chain_file => options[:ssl_certificate],
213
+ :private_key_file => options[:ssl_private_key],
214
+ :verify_peer => false,
215
+ }
205
216
 
206
- ssl_options = {
207
- :cert_chain_file => options[:ssl_certificate],
208
- :private_key_file => options[:ssl_private_key],
209
- :verify_peer => false,
210
- }
217
+ protocol = options[:ssl] ? 'https' : 'http'
218
+ host = options[:host] == '0.0.0.0' ? 'localhost' : options[:host]
219
+ url = "#{protocol}://#{host}:#{options[:p].to_i}"
220
+ puts "
221
+ -------------------------
211
222
 
212
- protocol = options[:ssl] ? 'https' : 'http'
213
- host = options[:host] == '0.0.0.0' ? 'localhost' : options[:host]
214
- url = "#{protocol}://#{host}:#{options[:p].to_i}"
215
- puts "
216
- -------------------------
223
+ Your ShowOff presentation is now starting up.
217
224
 
218
- Your ShowOff presentation is now starting up.
225
+ To view it plainly, visit [ #{url} ]
219
226
 
220
- To view it plainly, visit [ #{url} ]
227
+ To run it from presenter view, go to: [ #{url}/presenter ]
221
228
 
222
- To run it from presenter view, go to: [ #{url}/presenter ]
229
+ -------------------------
223
230
 
224
- -------------------------
231
+ "
225
232
 
226
- "
233
+ if options[:url]
234
+ ShowOffUtils.clone(options[:git_url], options[:git_branch], options[:git_path]) do
235
+ ShowOff.run!(options) do |server|
236
+ if options[:ssl]
237
+ server.ssl = true
238
+ server.ssl_options = ssl_options
239
+ end
240
+ end
241
+ end
227
242
 
228
- if options[:url]
229
- ShowOffUtils.clone(options[:git_url], options[:git_branch], options[:git_path]) do
243
+ else
230
244
  ShowOff.run!(options) do |server|
231
245
  if options[:ssl]
232
246
  server.ssl = true
@@ -235,90 +249,83 @@ To run it from presenter view, go to: [ #{url}/presenter ]
235
249
  end
236
250
  end
237
251
 
238
- else
239
- ShowOff.run!(options) do |server|
240
- if options[:ssl]
241
- server.ssl = true
242
- server.ssl_options = ssl_options
243
- end
244
- end
245
252
  end
246
-
247
253
  end
248
- end
249
254
 
250
- desc 'Add a new slide at the end in a given dir'
251
- arg_name '[title]'
252
- long_desc 'Outputs or creates a new slide. With -d and -n, a new slide is created in the given dir, numbered to appear as the last slide in that dir (use -u to avoid numbering). Without those, outputs the slide markdown to stdout (useful for shelling out from your editor). You may also specify a source file to use for a code slide'
253
- command [:add,:new] do |c|
254
- c.desc 'Don''t number the slide, use the given name verbatim'
255
- c.switch [:u,:nonumber]
256
-
257
- c.desc 'Include code from the given file as the slide body'
258
- c.arg_name 'path to file'
259
- c.flag [:s,:source]
260
-
261
- c.desc 'Slide Type/Style'
262
- c.arg_name 'valid showoff style/type'
263
- c.default_value 'title'
264
- c.flag [:t,:type,:style]
265
-
266
- c.desc 'Slide dir (where to put a new slide file)'
267
- c.arg_name 'dir'
268
- c.flag [:d,:dir]
269
-
270
- c.desc 'Slide name (name of the new slide file)'
271
- c.arg_name 'basename'
272
- c.flag [:n,:name]
273
-
274
- c.action do |global_options,options,args|
275
- title = args.join(" ")
276
- ShowOffUtils.add_slide(:dir => options[:d],
277
- :name => options[:n],
278
- :title => title,
279
- :number => !options[:u],
280
- :code => options[:s],
281
- :type => options[:t])
255
+ desc 'Add a new slide at the end in a given dir'
256
+ arg_name '[title]'
257
+ long_desc 'Outputs or creates a new slide. With -d and -n, a new slide is created in the given dir, numbered to appear as the last slide in that dir (use -u to avoid numbering). Without those, outputs the slide markdown to stdout (useful for shelling out from your editor). You may also specify a source file to use for a code slide'
258
+ command [:add,:new] do |c|
259
+ c.desc 'Don''t number the slide, use the given name verbatim'
260
+ c.switch [:u,:nonumber]
261
+
262
+ c.desc 'Include code from the given file as the slide body'
263
+ c.arg_name 'path to file'
264
+ c.flag [:s,:source]
265
+
266
+ c.desc 'Slide Type/Style'
267
+ c.arg_name 'valid showoff style/type'
268
+ c.default_value 'title'
269
+ c.flag [:t,:type,:style]
270
+
271
+ c.desc 'Slide dir (where to put a new slide file)'
272
+ c.arg_name 'dir'
273
+ c.flag [:d,:dir]
274
+
275
+ c.desc 'Slide name (name of the new slide file)'
276
+ c.arg_name 'basename'
277
+ c.flag [:n,:name]
278
+
279
+ c.action do |global_options,options,args|
280
+ title = args.join(" ")
281
+ ShowOffUtils.add_slide(:dir => options[:d],
282
+ :name => options[:n],
283
+ :title => title,
284
+ :number => !options[:u],
285
+ :code => options[:s],
286
+ :type => options[:t])
287
+ end
282
288
  end
283
- end
284
289
 
285
- desc 'Generate static version of presentation'
286
- arg_name 'name'
287
- long_desc 'Creates a static, one page version of the presentation as {name}.html'
288
- command [:static] do |c|
289
- c.action do |global_options,options,args|
290
- ShowOff.do_static(args)
290
+ desc 'Generate static version of presentation'
291
+ arg_name 'name'
292
+ long_desc 'Creates a static, one page version of the presentation as {name}.html'
293
+ command [:static] do |c|
294
+ c.desc 'JSON file used to describe presentation'
295
+ c.default_value "showoff.json"
296
+ c.flag [:f, :file, :pres_file]
297
+
298
+ c.action do |global_options,options,args|
299
+ ShowOff.do_static(args, options)
300
+ end
291
301
  end
292
- end
293
302
 
294
- desc 'Generate PDF version of presentation'
295
- arg_name 'name'
296
- long_desc 'Creates a PDF version of the presentation as {name}.pdf'
297
- command [:pdf] do |c|
298
- c.action do |global_options,options,args|
299
- ShowOff.do_static(['pdf'].concat args)
303
+ desc 'Generate PDF version of presentation'
304
+ arg_name 'name'
305
+ long_desc 'Creates a PDF version of the presentation as {name}.pdf'
306
+ command [:pdf] do |c|
307
+ c.action do |global_options,options,args|
308
+ ShowOff.do_static(['pdf'].concat args)
309
+ end
300
310
  end
301
- end
302
311
 
303
- pre do |global,command,options,args|
304
- # Pre logic here
305
- # Return true to proceed; false to abourt and not call the
306
- # chosen command
307
- true
308
- end
312
+ pre do |global,command,options,args|
313
+ # Pre logic here
314
+ # Return true to proceed; false to abourt and not call the
315
+ # chosen command
316
+ true
317
+ end
309
318
 
310
- post do |global,command,options,args|
311
- # Post logic here
312
- end
319
+ post do |global,command,options,args|
320
+ # Post logic here
321
+ end
313
322
 
314
- on_error do |exception|
315
- # Error logic here
316
- # return false to skip default error handling
317
- true
318
- end
323
+ on_error do |exception|
324
+ # Error logic here
325
+ # return false to skip default error handling
326
+ true
327
+ end
319
328
 
320
- if GLI::VERSION.to_f > 1
329
+ # start the application
321
330
  exit run(ARGV)
322
- else
323
- exit GLI.run(ARGV)
324
331
  end