highline 2.0.0.pre.develop.9 → 2.0.0.pre.develop.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +59 -5
  3. data/.travis.yml +9 -4
  4. data/Changelog.md +11 -0
  5. data/Gemfile +12 -19
  6. data/Rakefile +5 -11
  7. data/examples/ansi_colors.rb +6 -11
  8. data/examples/asking_for_arrays.rb +4 -3
  9. data/examples/basic_usage.rb +29 -22
  10. data/examples/color_scheme.rb +11 -10
  11. data/examples/get_character.rb +6 -5
  12. data/examples/limit.rb +2 -1
  13. data/examples/menus.rb +11 -11
  14. data/examples/overwrite.rb +7 -6
  15. data/examples/page_and_wrap.rb +5 -4
  16. data/examples/password.rb +2 -1
  17. data/examples/repeat_entry.rb +7 -5
  18. data/examples/trapping_eof.rb +2 -1
  19. data/examples/using_readline.rb +2 -1
  20. data/highline.gemspec +25 -25
  21. data/lib/highline.rb +103 -111
  22. data/lib/highline/builtin_styles.rb +45 -41
  23. data/lib/highline/color_scheme.rb +32 -28
  24. data/lib/highline/compatibility.rb +3 -3
  25. data/lib/highline/custom_errors.rb +2 -1
  26. data/lib/highline/import.rb +8 -11
  27. data/lib/highline/list.rb +4 -8
  28. data/lib/highline/list_renderer.rb +207 -201
  29. data/lib/highline/menu.rb +75 -63
  30. data/lib/highline/menu/item.rb +2 -0
  31. data/lib/highline/paginator.rb +5 -6
  32. data/lib/highline/question.rb +38 -36
  33. data/lib/highline/question/answer_converter.rb +2 -2
  34. data/lib/highline/question_asker.rb +15 -17
  35. data/lib/highline/simulate.rb +11 -13
  36. data/lib/highline/statement.rb +12 -10
  37. data/lib/highline/string.rb +9 -8
  38. data/lib/highline/string_extensions.rb +30 -14
  39. data/lib/highline/style.rb +68 -45
  40. data/lib/highline/template_renderer.rb +5 -5
  41. data/lib/highline/terminal.rb +24 -31
  42. data/lib/highline/terminal/io_console.rb +2 -2
  43. data/lib/highline/terminal/ncurses.rb +4 -3
  44. data/lib/highline/terminal/unix_stty.rb +12 -9
  45. data/lib/highline/version.rb +1 -1
  46. data/lib/highline/wrapper.rb +12 -11
  47. metadata +34 -43
  48. data/test/acceptance/acceptance.rb +0 -62
  49. data/test/acceptance/acceptance_test.rb +0 -69
  50. data/test/acceptance/at_color_output_using_erb_templates.rb +0 -17
  51. data/test/acceptance/at_echo_false.rb +0 -23
  52. data/test/acceptance/at_readline.rb +0 -37
  53. data/test/io_console_compatible.rb +0 -37
  54. data/test/string_methods.rb +0 -35
  55. data/test/test_answer_converter.rb +0 -26
  56. data/test/test_color_scheme.rb +0 -94
  57. data/test/test_helper.rb +0 -22
  58. data/test/test_highline.rb +0 -1627
  59. data/test/test_import.rb +0 -55
  60. data/test/test_list.rb +0 -60
  61. data/test/test_menu.rb +0 -749
  62. data/test/test_paginator.rb +0 -73
  63. data/test/test_question_asker.rb +0 -20
  64. data/test/test_simulator.rb +0 -24
  65. data/test/test_string_extension.rb +0 -72
  66. data/test/test_string_highline.rb +0 -42
  67. data/test/test_style.rb +0 -613
  68. data/test/test_wrapper.rb +0 -188
data/lib/highline/menu.rb CHANGED
@@ -13,7 +13,8 @@ require "highline/menu/item"
13
13
 
14
14
  class HighLine
15
15
  #
16
- # Menu objects encapsulate all the details of a call to {HighLine#choose HighLine#choose}.
16
+ # Menu objects encapsulate all the details of a call to
17
+ # {HighLine#choose HighLine#choose}.
17
18
  # Using the accessors and {Menu#choice} and {Menu#choices}, the block passed
18
19
  # to {HighLine#choose} can detail all aspects of menu display and control.
19
20
  #
@@ -21,16 +22,16 @@ class HighLine
21
22
  # Pass +false+ to _color_ to turn off HighLine::Menu's
22
23
  # index coloring.
23
24
  # Pass a color and the Menu's indices will be colored.
24
- def self.index_color=(color = :rgb_77bbff)
25
- @index_color = color
25
+ class << self
26
+ attr_writer :index_color
26
27
  end
27
28
 
28
29
  # Initialize it
29
30
  self.index_color = false
30
31
 
31
32
  # Returns color used for coloring Menu's indices
32
- def self.index_color
33
- @index_color
33
+ class << self
34
+ attr_reader :index_color
34
35
  end
35
36
 
36
37
  #
@@ -53,10 +54,10 @@ class HighLine
53
54
  # Initialize Question objects with ignored values, we'll
54
55
  # adjust ours as needed.
55
56
  #
56
- super("Ignored", [ ], &nil) # avoiding passing the block along
57
+ super("Ignored", [], &nil) # avoiding passing the block along
57
58
 
58
- @items = [ ]
59
- @hidden_items = [ ]
59
+ @items = []
60
+ @hidden_items = []
60
61
  @help = Hash.new("There's no help for that topic.")
61
62
 
62
63
  @index = :number
@@ -75,13 +76,13 @@ class HighLine
75
76
  @index_color = self.class.index_color
76
77
 
77
78
  # Override Questions responses, we'll set our own.
78
- @responses = { }
79
+ @responses = {}
79
80
  # Context for action code.
80
81
  @highline = nil
81
82
 
82
83
  yield self if block_given?
83
84
 
84
- init_help if @shell and not @help.empty?
85
+ init_help if @shell && !@help.empty?
85
86
  end
86
87
 
87
88
  #
@@ -179,26 +180,27 @@ class HighLine
179
180
  # cli.choose do |menu|
180
181
  # menu.shell = true
181
182
  #
182
- # menu.choice(:load, text: 'Load a file', help: "Load a file using your favourite editor.")
183
+ # menu.choice(:load, text: 'Load a file',
184
+ # help: "Load a file using your favourite editor.")
183
185
  # menu.choice(:save, help: "Save data in file.")
184
186
  # menu.choice(:quit, help: "Exit program.")
185
187
  #
186
188
  # menu.help("rules", "The rules of this system are as follows...")
187
189
  # end
188
190
 
189
- def choice( name, help = nil, text = nil, &action )
191
+ def choice(name, help = nil, text = nil, &action)
190
192
  item = Menu::Item.new(name, text: text, help: help, action: action)
191
193
  @items << item
192
194
  @help.merge!(item.item_help)
193
- update_responses # rebuild responses based on our settings
195
+ update_responses # rebuild responses based on our settings
194
196
  end
195
197
 
196
198
  #
197
- # This method helps reduce the namespaces in the original call, which would look
198
- # like this: HighLine::Menu::Item.new(...)
199
+ # This method helps reduce the namespaces in the original call,
200
+ # which would look like this: HighLine::Menu::Item.new(...)
199
201
  # With #build_item, it looks like this: menu.build_item(...)
200
- # @param *args splat args, the same args you would pass to an initialization of
201
- # HighLine::Menu::Item
202
+ # @param *args splat args, the same args you would pass to an
203
+ # initialization of HighLine::Menu::Item
202
204
  # @return [HighLine::Menu::Item] the menu item
203
205
 
204
206
  def build_item(*args)
@@ -206,8 +208,8 @@ class HighLine
206
208
  end
207
209
 
208
210
  #
209
- # Adds an item directly to the menu. If you want more configuraiton or options,
210
- # use this method
211
+ # Adds an item directly to the menu. If you want more configuration
212
+ # or options, use this method
211
213
  #
212
214
  # @param item [Menu::Item] item containing choice fields and more
213
215
  # @return [void]
@@ -223,7 +225,8 @@ class HighLine
223
225
  # warned:</b> An _action_ set here will apply to *all* provided
224
226
  # _names_. This is considered to be a feature, so you can easily
225
227
  # hand-off interface processing to a different chunk of code.
226
- # @param names [Array<#to_s>] menu item titles/headers/names to be displayed.
228
+ # @param names [Array<#to_s>] menu item titles/headers/names to be
229
+ # displayed.
227
230
  # @param action (see #choice)
228
231
  # @return [void]
229
232
  # @example (see HighLine::Menu#initialize)
@@ -231,7 +234,7 @@ class HighLine
231
234
  # choice has more options available to you, like longer text or help (and
232
235
  # of course, individual actions)
233
236
  #
234
- def choices( *names, &action )
237
+ def choices(*names, &action)
235
238
  names.each { |n| choice(n, &action) }
236
239
  end
237
240
 
@@ -242,7 +245,7 @@ class HighLine
242
245
  # @param action (see #choice)
243
246
  # @return (see #choice)
244
247
 
245
- def hidden( name, help = nil, &action )
248
+ def hidden(name, help = nil, &action)
246
249
  item = Menu::Item.new(name, text: name, help: help, action: action)
247
250
  @hidden_items << item
248
251
  @help.merge!(item.item_help)
@@ -263,31 +266,36 @@ class HighLine
263
266
  # _index_suffix_ to a single space and _select_by_ to <tt>:name</tt>.
264
267
  # Because of this, you should make a habit of setting the _index_ first.
265
268
  #
266
- def index=( style )
269
+ def index=(style)
267
270
  @index = style
268
271
 
272
+ return unless @index == :none || @index.is_a?(::String)
273
+
269
274
  # Default settings.
270
- if @index == :none or @index.is_a?(::String)
271
- @index_suffix = " "
272
- @select_by = :name
273
- end
275
+ @index_suffix = " "
276
+ @select_by = :name
274
277
  end
275
278
 
276
279
  #
277
280
  # Initializes the help system by adding a <tt>:help</tt> choice, some
278
281
  # action code, and the default help listing.
279
282
  #
280
- def init_help( )
283
+ def init_help
281
284
  return if @items.include?(:help)
282
285
 
283
286
  topics = @help.keys.sort
284
- help_help = @help.include?("help") ? @help["help"] :
285
- "This command will display helpful messages about " +
286
- "functionality, like this one. To see the help for " +
287
- "a specific topic enter:\n\thelp [TOPIC]\nTry asking " +
288
- "for help on any of the following:\n\n" +
289
- "<%= list(#{topics.inspect}, :columns_across) %>"
290
- choice(:help, help_help) do |command, topic|
287
+ help_help =
288
+ if @help.include?("help")
289
+ @help["help"]
290
+ else
291
+ "This command will display helpful messages about " \
292
+ "functionality, like this one. To see the help for " \
293
+ "a specific topic enter:\n\thelp [TOPIC]\nTry asking " \
294
+ "for help on any of the following:\n\n" \
295
+ "<%= list(#{topics.inspect}, :columns_across) %>"
296
+ end
297
+
298
+ choice(:help, help_help) do |_command, topic|
291
299
  topic.strip!
292
300
  topic.downcase!
293
301
  if topic.empty?
@@ -302,11 +310,11 @@ class HighLine
302
310
  # Used to set help for arbitrary topics. Use the topic <tt>"help"</tt>
303
311
  # to override the default message. Mainly for internal use.
304
312
  #
305
- # @param topic [String] the menu item header/title/name to be associated with
306
- # a help message.
313
+ # @param topic [String] the menu item header/title/name to be associated
314
+ # with a help message.
307
315
  # @param help [String] the help message to be associated with the menu
308
316
  # item/title/name.
309
- def help( topic, help )
317
+ def help(topic, help)
310
318
  @help[topic] = help
311
319
  end
312
320
 
@@ -339,14 +347,14 @@ class HighLine
339
347
  # will default to <tt>:none</tt> and _flow_ will default to
340
348
  # <tt>:inline</tt>.
341
349
  #
342
- def layout=( new_layout )
350
+ def layout=(new_layout)
343
351
  @layout = new_layout
344
352
 
345
353
  # Default settings.
346
354
  case @layout
347
355
  when :one_line, :menu_only
348
356
  self.index = :none
349
- @flow = :inline
357
+ @flow = :inline
350
358
  end
351
359
  end
352
360
 
@@ -387,12 +395,14 @@ class HighLine
387
395
  # rules for this Menu object. If an action was provided for the
388
396
  # selection, it will be executed as described in {#choice}.
389
397
  #
390
- # @param highline_context [HighLine] a HighLine instance to be used as context.
391
- # @param selection [String, Integer] index or title of the selected menu item.
398
+ # @param highline_context [HighLine] a HighLine instance to be used
399
+ # as context.
400
+ # @param selection [String, Integer] index or title of the selected
401
+ # menu item.
392
402
  # @param details additional parameter to be passed when in shell mode.
393
403
  # @return [nil, Object] if @nil_on_handled is set it returns +nil+,
394
404
  # else it returns the action return value.
395
- def select( highline_context, selection, details = nil )
405
+ def select(highline_context, selection, details = nil)
396
406
  # add in any hidden menu commands
397
407
  items = all_items
398
408
 
@@ -423,18 +433,20 @@ class HighLine
423
433
  def get_item_by_letter(items, selection)
424
434
  item = items.find { |i| i.name == selection }
425
435
  return item if item
426
- l_index = "`" # character before the letter "a"
427
- index = items.map { "#{l_index.succ!}" }.index(selection)
436
+
437
+ # 97 is the "a" letter at ascii table
438
+ # Ex: For "a" it will return 0, and for "c" it will return 2
439
+ index = selection.ord - 97
428
440
  items[index]
429
441
  end
430
442
 
431
443
  def value_for_selected_item(item, details)
432
444
  if item.action
433
- if @shell
434
- result = item.action.call(item.name, details)
435
- else
436
- result = item.action.call(item.name)
437
- end
445
+ result = if @shell
446
+ item.action.call(item.name, details)
447
+ else
448
+ item.action.call(item.name)
449
+ end
438
450
  @nil_on_handled ? nil : result
439
451
  else
440
452
  item.name
@@ -451,7 +463,7 @@ class HighLine
451
463
  elsif selections.is_a?(Hash)
452
464
  value_for_hash_selections(items, selections, details)
453
465
  else
454
- fail ArgumentError, 'selections must be either Array or Hash'
466
+ raise ArgumentError, "selections must be either Array or Hash"
455
467
  end
456
468
  end
457
469
 
@@ -512,23 +524,23 @@ class HighLine
512
524
  # Allows Menu to behave as a String, just like Question. Returns the
513
525
  # _layout_ to be rendered, which is used by HighLine.say().
514
526
  #
515
- def to_s( )
527
+ def to_s
516
528
  case @layout
517
529
  when :list
518
530
  %(<%= header ? "#{header}:\n" : '' %>) +
519
- parse_list +
520
- show_default_if_any +
521
- "<%= prompt %>"
531
+ parse_list +
532
+ show_default_if_any +
533
+ "<%= prompt %>"
522
534
  when :one_line
523
535
  %(<%= header ? "#{header}: " : '' %>) +
524
- "<%= prompt %>" +
525
- "(" + parse_list + ")" +
526
- show_default_if_any +
527
- "<%= prompt[/\s*$/] %>"
536
+ "<%= prompt %>" \
537
+ "(" + parse_list + ")" +
538
+ show_default_if_any +
539
+ "<%= prompt[/\s*$/] %>"
528
540
  when :menu_only
529
541
  parse_list +
530
- show_default_if_any +
531
- "<%= prompt %>"
542
+ show_default_if_any +
543
+ "<%= prompt %>"
532
544
  else
533
545
  @layout
534
546
  end
@@ -536,11 +548,11 @@ class HighLine
536
548
 
537
549
  def parse_list
538
550
  "<%= list( menu, #{@flow.inspect},
539
- #{@list_option.inspect} ) %>"
551
+ #{@list_option.inspect} ) %>"
540
552
  end
541
553
 
542
554
  def show_default_if_any
543
- return default.to_s.empty? ? "" : "(#{default}) "
555
+ default.to_s.empty? ? "" : "(#{default}) "
544
556
  end
545
557
 
546
558
  #
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  class HighLine
2
4
  class Menu < Question
3
5
  # Represents an Item of a HighLine::Menu.
@@ -3,7 +3,6 @@
3
3
  class HighLine
4
4
  # Take the task of paginating some piece of text given a HighLine context
5
5
  class Paginator
6
-
7
6
  # @return [HighLine] HighLine context
8
7
  attr_reader :highline
9
8
 
@@ -36,18 +35,18 @@ class HighLine
36
35
  # Return last line if user wants to abort paging
37
36
  return "...\n#{lines.last}" unless continue_paging?
38
37
  end
39
- return lines.join
38
+ lines.join
40
39
  end
41
40
 
42
41
  #
43
- # Ask user if they wish to continue paging output. Allows them to type "q" to
44
- # cancel the paging process.
42
+ # Ask user if they wish to continue paging output. Allows them to
43
+ # type "q" to cancel the paging process.
45
44
  #
46
45
  def continue_paging?
47
46
  command = highline.new_scope.ask(
48
47
  "-- press enter/return to continue or q to stop -- "
49
48
  ) { |q| q.character = true }
50
- command !~ /\A[qQ]\Z/ # Only continue paging if Q was not hit.
49
+ command !~ /\A[qQ]\Z/ # Only continue paging if Q was not hit.
51
50
  end
52
51
  end
53
- end
52
+ end
@@ -8,6 +8,7 @@
8
8
  #
9
9
  # This is Free Software. See LICENSE and COPYING for details.
10
10
 
11
+ require "English"
11
12
  require "optparse"
12
13
  require "date"
13
14
  require "pathname"
@@ -59,11 +60,11 @@ class HighLine
59
60
  @case = nil
60
61
  @in = nil
61
62
  @first_answer = nil
62
- @directory = Pathname.new(File.expand_path(File.dirname($0)))
63
63
  @glob = "*"
64
- @user_responses = Hash.new
65
- @internal_responses = default_responses_hash
66
64
  @overwrite = false
65
+ @user_responses = {}
66
+ @internal_responses = default_responses_hash
67
+ @directory = Pathname.new(File.expand_path(File.dirname($PROGRAM_NAME)))
67
68
 
68
69
  # allow block to override settings
69
70
  yield self if block_given?
@@ -148,11 +149,11 @@ class HighLine
148
149
  #
149
150
  # Asks a yes or no confirmation question, to ensure a user knows what
150
151
  # they have just agreed to. The confirm attribute can be set to :
151
- # +true+ : In this case the question will be, "Are you sure?".
152
- # Proc : The Proc is yielded the answer given. The Proc must
153
- # output a string which is then used as the confirm
154
- # question.
155
- # String : The String must use ERB syntax. The String is
152
+ # +true+ : In this case the question will be, "Are you sure?".
153
+ # Proc : The Proc is yielded the answer given. The Proc must
154
+ # output a string which is then used as the confirm
155
+ # question.
156
+ # String : The String must use ERB syntax. The String is
156
157
  # evaluated with access to question and answer and
157
158
  # is then used as the confirm question.
158
159
  # When set to +false+ or +nil+ (the default), answers are not confirmed.
@@ -261,8 +262,8 @@ class HighLine
261
262
 
262
263
  def default_responses_hash
263
264
  {
264
- :ask_on_error => "? ",
265
- :mismatch => "Your entries didn't match."
265
+ ask_on_error: "? ",
266
+ mismatch: "Your entries didn't match."
266
267
  }
267
268
  end
268
269
 
@@ -270,15 +271,15 @@ class HighLine
270
271
  # @param message_source (see #build_responses)
271
272
  # @return [Hash] responses hash
272
273
  def build_responses_new_hash(message_source)
273
- { :ambiguous_completion => "Ambiguous choice. Please choose one of " +
274
- choice_error_str(message_source) + '.',
275
- :invalid_type => "You must enter a valid #{message_source}.",
276
- :no_completion => "You must choose one of " +
277
- choice_error_str(message_source) + '.',
278
- :not_in_range => "Your answer isn't within the expected range " +
279
- "(#{expected_range}).",
280
- :not_valid => "Your answer isn't valid (must match " +
281
- "#{validate.inspect})." }
274
+ { ambiguous_completion: "Ambiguous choice. Please choose one of " +
275
+ choice_error_str(message_source) + ".",
276
+ invalid_type: "You must enter a valid #{message_source}.",
277
+ no_completion: "You must choose one of " +
278
+ choice_error_str(message_source) + ".",
279
+ not_in_range: "Your answer isn't within the expected range " \
280
+ "(#{expected_range}).",
281
+ not_valid: "Your answer isn't valid (must match " \
282
+ "#{validate.inspect})." }
282
283
  end
283
284
 
284
285
  # This is the actual responses hash that gets used in determining output
@@ -369,7 +370,7 @@ class HighLine
369
370
 
370
371
  # Returns an English explanation of the current range settings.
371
372
  def expected_range
372
- expected = [ ]
373
+ expected = []
373
374
 
374
375
  expected << "above #{above}" if above
375
376
  expected << "below #{below}" if below
@@ -392,7 +393,7 @@ class HighLine
392
393
 
393
394
  # Returns true if _first_answer_ is set.
394
395
  def first_answer?
395
- !!@first_answer
396
+ true if @first_answer
396
397
  end
397
398
 
398
399
  #
@@ -402,9 +403,9 @@ class HighLine
402
403
  # are not checked.
403
404
  #
404
405
  def in_range?
405
- (!above or answer > above) and
406
- (!below or answer < below) and
407
- (!@in or @in.include?(answer))
406
+ (!above || answer > above) &&
407
+ (!below || answer < below) &&
408
+ (!@in || @in.include?(answer))
408
409
  end
409
410
 
410
411
  #
@@ -468,7 +469,7 @@ class HighLine
468
469
  File.basename(file)
469
470
  end
470
471
  else
471
- [ ]
472
+ []
472
473
  end
473
474
  end
474
475
 
@@ -485,9 +486,9 @@ class HighLine
485
486
  # and case handling.
486
487
  #
487
488
  def valid_answer?
488
- !validate or
489
- (validate.is_a?(Regexp) and answer =~ validate) or
490
- (validate.is_a?(Proc) and validate[answer])
489
+ !validate ||
490
+ (validate.is_a?(Regexp) && answer =~ validate) ||
491
+ (validate.is_a?(Proc) && validate[answer])
491
492
  end
492
493
 
493
494
  #
@@ -534,11 +535,11 @@ class HighLine
534
535
  if confirm == true
535
536
  "Are you sure? "
536
537
  elsif confirm.is_a?(Proc)
537
- confirm.call(self.answer)
538
+ confirm.call(answer)
538
539
  else
539
540
  # evaluate ERb under initial scope, so it will have
540
541
  # access to question and answer
541
- template = ERB.new(confirm, nil, "%")
542
+ template = ERB.new(confirm, nil, "%")
542
543
  template_renderer = TemplateRenderer.new(template, self, highline)
543
544
  template_renderer.render
544
545
  end
@@ -547,7 +548,8 @@ class HighLine
547
548
  # Provides the String to be asked when at an error situation.
548
549
  # It may be just the question itself (repeat on error).
549
550
  # @return [self] if :ask_on_error on responses Hash is set to :question
550
- # @return [String] if :ask_on_error on responses Hash is set to something else
551
+ # @return [String] if :ask_on_error on responses Hash is set to
552
+ # something else
551
553
  def ask_on_error_msg
552
554
  if final_responses[:ask_on_error] == :question
553
555
  self
@@ -564,7 +566,7 @@ class HighLine
564
566
  # @param highline [HighLine] context
565
567
  # @return [void]
566
568
  def show_question(highline)
567
- highline.say(self) unless (readline && (echo == true && !limit))
569
+ highline.say(self) unless readline && (echo == true && !limit)
568
570
  end
569
571
 
570
572
  # Returns an echo string that is adequate for this Question settings.
@@ -577,7 +579,7 @@ class HighLine
577
579
  if echo == true
578
580
  response
579
581
  # any truethy value, probably a String
580
- elsif !!echo
582
+ elsif echo
581
583
  echo
582
584
  # any falsy value, false or nil
583
585
  else
@@ -594,11 +596,11 @@ class HighLine
594
596
  #
595
597
  def append_default
596
598
  if template =~ /([\t ]+)\Z/
597
- template << "|#{default}|#{$1}"
599
+ template << "|#{default}|#{Regexp.last_match(1)}"
598
600
  elsif template == ""
599
601
  template << "|#{default}| "
600
602
  elsif template[-1, 1] == "\n"
601
- template[-2, 0] = " |#{default}|"
603
+ template[-2, 0] = " |#{default}|"
602
604
  else
603
605
  template << " |#{default}|"
604
606
  end
@@ -606,7 +608,7 @@ class HighLine
606
608
 
607
609
  def choice_error_str(message_source)
608
610
  if message_source.is_a? Array
609
- '[' + message_source.join(', ') + ']'
611
+ "[" + message_source.join(", ") + "]"
610
612
  else
611
613
  message_source.inspect
612
614
  end