tty-prompt 0.21.0 → 0.22.0

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.
@@ -7,9 +7,9 @@ module TTY
7
7
  #
8
8
  # @api public
9
9
  class Slider
10
- HELP = '(Use arrow keys, press Enter to select)'.freeze
10
+ HELP = "(Use %s arrow keys, press Enter to select)"
11
11
 
12
- FORMAT = ':slider %d'.freeze
12
+ FORMAT = ":slider %d"
13
13
 
14
14
  # Initailize a Slider
15
15
  #
@@ -33,6 +33,9 @@ module TTY
33
33
  @active_color = options.fetch(:active_color) { @prompt.active_color }
34
34
  @help_color = options.fetch(:help_color) { @prompt.help_color }
35
35
  @format = options.fetch(:format) { FORMAT }
36
+ @quiet = options.fetch(:quiet) { @prompt.quiet }
37
+ @help = options[:help]
38
+ @show_help = options.fetch(:show_help) { :start }
36
39
  @symbols = @prompt.symbols.merge(options.fetch(:symbols, {}))
37
40
  @first_render = true
38
41
  @done = false
@@ -46,6 +49,7 @@ module TTY
46
49
  # @api public
47
50
  def symbols(new_symbols = (not_set = true))
48
51
  return @symbols if not_set
52
+
49
53
  @symbols.merge!(new_symbols)
50
54
  end
51
55
 
@@ -62,11 +66,39 @@ module TTY
62
66
  end
63
67
  end
64
68
 
69
+ # Default help text
70
+ #
71
+ # @api public
72
+ def default_help
73
+ arrows = @symbols[:arrow_left] + "/" + @symbols[:arrow_right]
74
+ sprintf(HELP, arrows)
75
+ end
76
+
77
+ # Set help text
78
+ #
79
+ # @param [String] text
80
+ #
81
+ # @api private
82
+ def help(text = (not_set = true))
83
+ return @help if !@help.nil? && not_set
84
+
85
+ @help = (@help.nil? && not_set) ? default_help : text
86
+ end
87
+
88
+ # Change when help is displayed
89
+ #
90
+ # @api public
91
+ def show_help(value = (not_set = true))
92
+ return @show_ehlp if not_set
93
+
94
+ @show_help = value
95
+ end
96
+
65
97
  # Range of numbers to render
66
98
  #
67
99
  # @return [Array[Integer]]
68
100
  #
69
- # @apip private
101
+ # @api private
70
102
  def range
71
103
  (@min..@max).step(@step).to_a
72
104
  end
@@ -95,6 +127,13 @@ module TTY
95
127
  @format = value
96
128
  end
97
129
 
130
+ # Set quiet mode.
131
+ #
132
+ # @api public
133
+ def quiet(value)
134
+ @quiet = value
135
+ end
136
+
98
137
  # Call the slider by passing question
99
138
  #
100
139
  # @param [String] question
@@ -128,6 +167,20 @@ module TTY
128
167
 
129
168
  private
130
169
 
170
+ # Check if help is shown only on start
171
+ #
172
+ # @api private
173
+ def help_start?
174
+ @show_help =~ /start/i
175
+ end
176
+
177
+ # Check if help is always displayed
178
+ #
179
+ # @api private
180
+ def help_always?
181
+ @show_help =~ /always/i
182
+ end
183
+
131
184
  # Render an interactive range slider.
132
185
  #
133
186
  # @api private
@@ -139,7 +192,7 @@ module TTY
139
192
  @prompt.read_keypress
140
193
  refresh(question.lines.count)
141
194
  end
142
- @prompt.print(render_question)
195
+ @prompt.print(render_question) unless @quiet
143
196
  answer
144
197
  ensure
145
198
  @prompt.print(@prompt.show)
@@ -175,8 +228,9 @@ module TTY
175
228
  else
176
229
  header << render_slider
177
230
  end
178
- if @first_render
179
- header << "\n" + @prompt.decorate(HELP, @help_color)
231
+ if @first_render && (help_start? || help_always?) ||
232
+ (help_always? && !@done)
233
+ header << "\n" + @prompt.decorate(help, @help_color)
180
234
  @first_render = false
181
235
  end
182
236
  header.join
@@ -191,8 +245,13 @@ module TTY
191
245
  slider = (@symbols[:line] * @active) +
192
246
  @prompt.decorate(@symbols[:bullet], @active_color) +
193
247
  (@symbols[:line] * (range.size - @active - 1))
194
- value = " #{range[@active]}"
195
- @format.gsub(':slider', slider) % [value]
248
+ value = range[@active]
249
+ case @format
250
+ when Proc
251
+ @format.call(slider, value)
252
+ else
253
+ @format.gsub(":slider", slider) % [value]
254
+ end
196
255
  end
197
256
  end # Slider
198
257
  end # Prompt
@@ -28,10 +28,10 @@ module TTY
28
28
  # change the message display to color
29
29
  #
30
30
  # @api public
31
- def initialize(prompt, options = {})
31
+ def initialize(prompt, newline: true, color: false)
32
32
  @prompt = prompt
33
- @newline = options.fetch(:newline) { true }
34
- @color = options.fetch(:color) { false }
33
+ @newline = newline
34
+ @color = color
35
35
  end
36
36
 
37
37
  # Output the message to the prompt
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'distance'
3
+ require_relative "distance"
4
4
 
5
5
  module TTY
6
6
  # A class responsible for terminal prompt interactions.
@@ -11,9 +11,9 @@ module TTY
11
11
  class Suggestion
12
12
  DEFAULT_INDENT = 8
13
13
 
14
- SINGLE_TEXT = 'Did you mean this?'
14
+ SINGLE_TEXT = "Did you mean this?"
15
15
 
16
- PLURAL_TEXT = 'Did you mean one of these?'
16
+ PLURAL_TEXT = "Did you mean one of these?"
17
17
 
18
18
  # Number of spaces
19
19
  #
@@ -97,14 +97,14 @@ module TTY
97
97
 
98
98
  # @api private
99
99
  def build_single_suggestion
100
- single_text + "\n" + (' ' * indent) + @suggestions.first
100
+ single_text + "\n" + (" " * indent) + @suggestions.first
101
101
  end
102
102
 
103
103
  # @api private
104
104
  def build_multiple_suggestions
105
105
  plural_text + "\n" +
106
106
  @suggestions.map do |sugest|
107
- ' ' * indent + sugest
107
+ " " * indent + sugest
108
108
  end.join("\n")
109
109
  end
110
110
  end # Suggestion
@@ -7,67 +7,67 @@ module TTY
7
7
  # @api public
8
8
  module Symbols
9
9
  KEYS = {
10
- tick: '',
11
- cross: '',
12
- star: '',
13
- square: '',
14
- square_empty: '',
15
- dot: '',
16
- bullet: '',
17
- bullet_empty: '',
18
- marker: '',
19
- line: '',
20
- pipe: '|',
21
- ellipsis: '',
22
- radio_on: '',
23
- radio_off: '',
24
- checkbox_on: '',
25
- checkbox_off: '',
26
- circle: '',
27
- circle_on: '',
28
- circle_off: '',
29
- arrow_up: '',
30
- arrow_down: '',
31
- arrow_up_down: '',
32
- arrow_left: '',
33
- arrow_right: '',
34
- arrow_left_right: '',
35
- heart: '',
36
- diamond: '',
37
- club: '',
38
- spade: ''
10
+ tick: "",
11
+ cross: "",
12
+ star: "",
13
+ square: "",
14
+ square_empty: "",
15
+ dot: "",
16
+ bullet: "",
17
+ bullet_empty: "",
18
+ marker: "",
19
+ line: "",
20
+ pipe: "|",
21
+ ellipsis: "",
22
+ radio_on: "",
23
+ radio_off: "",
24
+ checkbox_on: "",
25
+ checkbox_off: "",
26
+ circle: "",
27
+ circle_on: "",
28
+ circle_off: "",
29
+ arrow_up: "",
30
+ arrow_down: "",
31
+ arrow_up_down: "",
32
+ arrow_left: "",
33
+ arrow_right: "",
34
+ arrow_left_right: "",
35
+ heart: "",
36
+ diamond: "",
37
+ club: "",
38
+ spade: ""
39
39
  }.freeze
40
40
 
41
41
  WIN_KEYS = {
42
- tick: '',
43
- cross: 'x',
44
- star: '*',
45
- square: '[█]',
46
- square_empty: '[ ]',
47
- dot: '.',
48
- bullet: 'O',
49
- bullet_empty: '',
50
- marker: '>',
51
- line: '-',
52
- pipe: '|',
53
- ellipsis: '...',
54
- radio_on: '(*)',
55
- radio_off: '( )',
56
- checkbox_on: '[×]',
57
- checkbox_off: '[ ]',
58
- circle: '( )',
59
- circle_on: '(x)',
60
- circle_off: '( )',
61
- arrow_up: '',
62
- arrow_down: '',
63
- arrow_up_down: '',
64
- arrow_left: '',
65
- arrow_right: '',
66
- arrow_left_right: '',
67
- heart: '',
68
- diamond: '',
69
- club: '',
70
- spade: ''
42
+ tick: "",
43
+ cross: "x",
44
+ star: "*",
45
+ square: "[█]",
46
+ square_empty: "[ ]",
47
+ dot: ".",
48
+ bullet: "O",
49
+ bullet_empty: "",
50
+ marker: ">",
51
+ line: "-",
52
+ pipe: "|",
53
+ ellipsis: "...",
54
+ radio_on: "(*)",
55
+ radio_off: "( )",
56
+ checkbox_on: "[×]",
57
+ checkbox_off: "[ ]",
58
+ circle: "( )",
59
+ circle_on: "(x)",
60
+ circle_off: "( )",
61
+ arrow_up: "",
62
+ arrow_down: "",
63
+ arrow_up_down: "",
64
+ arrow_left: "",
65
+ arrow_right: "",
66
+ arrow_left_right: "",
67
+ heart: "",
68
+ diamond: "",
69
+ club: "",
70
+ spade: ""
71
71
  }.freeze
72
72
 
73
73
  def symbols
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "stringio"
4
+
5
+ require_relative "../prompt"
6
+
7
+ module TTY
8
+ # Used for initializing test cases
9
+ class Prompt
10
+ module StringIOExtensions
11
+ def wait_readable(*)
12
+ true
13
+ end
14
+
15
+ def ioctl(*)
16
+ 80
17
+ end
18
+ end
19
+
20
+ class Test < TTY::Prompt
21
+ def initialize(**options)
22
+ @input = StringIO.new
23
+ @input.extend(StringIOExtensions)
24
+ @output = StringIO.new
25
+
26
+ options.merge!({
27
+ input: @input,
28
+ output: @output,
29
+ env: { "TTY_TEST" => true },
30
+ enable_color: options.fetch(:enable_color) { true }
31
+ })
32
+ super(**options)
33
+ end
34
+ end # Test
35
+ end # Prompt
36
+ end # TTY
@@ -29,9 +29,7 @@ module TTY
29
29
  #
30
30
  # @api public
31
31
  def blank?(value)
32
- value.nil? ||
33
- value.respond_to?(:empty?) && value.empty? ||
34
- BLANK_REGEX === value
32
+ value.nil? || BLANK_REGEX === value
35
33
  end
36
34
 
37
35
  # Deep copy object
@@ -2,6 +2,6 @@
2
2
 
3
3
  module TTY
4
4
  class Prompt
5
- VERSION = "0.21.0"
5
+ VERSION = "0.22.0"
6
6
  end # Prompt
7
7
  end # TTY
metadata CHANGED
@@ -1,57 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tty-prompt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Murach
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-08 00:00:00.000000000 Z
11
+ date: 2020-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: necromancer
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 0.5.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 0.5.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: pastel
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: 0.7.0
19
+ version: '0.8'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: 0.7.0
26
+ version: '0.8'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: tty-reader
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: 0.7.0
33
+ version: '0.8'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: 0.7.0
40
+ version: '0.8'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,14 +56,14 @@ dependencies:
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - "~>"
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
61
  version: '3.0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - "~>"
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '3.0'
83
69
  description: A beautiful and powerful interactive command line prompt with a robust
@@ -101,17 +87,18 @@ files:
101
87
  - lib/tty/prompt/choice.rb
102
88
  - lib/tty/prompt/choices.rb
103
89
  - lib/tty/prompt/confirm_question.rb
90
+ - lib/tty/prompt/const.rb
104
91
  - lib/tty/prompt/converter_dsl.rb
105
92
  - lib/tty/prompt/converter_registry.rb
106
93
  - lib/tty/prompt/converters.rb
107
94
  - lib/tty/prompt/distance.rb
108
95
  - lib/tty/prompt/enum_list.rb
96
+ - lib/tty/prompt/errors.rb
109
97
  - lib/tty/prompt/evaluator.rb
110
98
  - lib/tty/prompt/expander.rb
111
99
  - lib/tty/prompt/keypress.rb
112
100
  - lib/tty/prompt/list.rb
113
101
  - lib/tty/prompt/mask_question.rb
114
- - lib/tty/prompt/messages.rb
115
102
  - lib/tty/prompt/multi_list.rb
116
103
  - lib/tty/prompt/multiline.rb
117
104
  - lib/tty/prompt/paginator.rb
@@ -120,14 +107,15 @@ files:
120
107
  - lib/tty/prompt/question/modifier.rb
121
108
  - lib/tty/prompt/question/validation.rb
122
109
  - lib/tty/prompt/result.rb
110
+ - lib/tty/prompt/selected_choices.rb
123
111
  - lib/tty/prompt/slider.rb
124
112
  - lib/tty/prompt/statement.rb
125
113
  - lib/tty/prompt/suggestion.rb
126
114
  - lib/tty/prompt/symbols.rb
115
+ - lib/tty/prompt/test.rb
127
116
  - lib/tty/prompt/timer.rb
128
117
  - lib/tty/prompt/utils.rb
129
118
  - lib/tty/prompt/version.rb
130
- - lib/tty/test_prompt.rb
131
119
  homepage: https://ttytoolkit.org
132
120
  licenses:
133
121
  - MIT