tty 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +45 -115
  4. data/lib/tty.rb +3 -31
  5. data/lib/tty/plugins/plugin.rb +2 -2
  6. data/lib/tty/terminal.rb +2 -58
  7. data/lib/tty/terminal/home.rb +27 -9
  8. data/lib/tty/version.rb +1 -1
  9. data/spec/tty/plugins/plugin/load_spec.rb +10 -18
  10. data/spec/tty/system/editor/open_spec.rb +1 -1
  11. data/spec/tty/terminal/home_spec.rb +18 -26
  12. data/spec/tty/tty_spec.rb +1 -1
  13. data/spec/tty/vector/new_spec.rb +1 -1
  14. metadata +2 -83
  15. data/lib/tty/shell.rb +0 -211
  16. data/lib/tty/shell/distance.rb +0 -49
  17. data/lib/tty/shell/question.rb +0 -335
  18. data/lib/tty/shell/question/modifier.rb +0 -93
  19. data/lib/tty/shell/question/validation.rb +0 -92
  20. data/lib/tty/shell/reader.rb +0 -110
  21. data/lib/tty/shell/response.rb +0 -249
  22. data/lib/tty/shell/response_delegation.rb +0 -55
  23. data/lib/tty/shell/statement.rb +0 -60
  24. data/lib/tty/shell/suggestion.rb +0 -126
  25. data/lib/tty/support/utils.rb +0 -16
  26. data/lib/tty/terminal/echo.rb +0 -38
  27. data/lib/tty/terminal/raw.rb +0 -38
  28. data/spec/tty/shell/ask_spec.rb +0 -77
  29. data/spec/tty/shell/distance/distance_spec.rb +0 -75
  30. data/spec/tty/shell/distance/initialize_spec.rb +0 -14
  31. data/spec/tty/shell/error_spec.rb +0 -30
  32. data/spec/tty/shell/print_table_spec.rb +0 -24
  33. data/spec/tty/shell/question/argument_spec.rb +0 -30
  34. data/spec/tty/shell/question/character_spec.rb +0 -24
  35. data/spec/tty/shell/question/default_spec.rb +0 -25
  36. data/spec/tty/shell/question/in_spec.rb +0 -23
  37. data/spec/tty/shell/question/initialize_spec.rb +0 -24
  38. data/spec/tty/shell/question/modifier/apply_to_spec.rb +0 -34
  39. data/spec/tty/shell/question/modifier/letter_case_spec.rb +0 -27
  40. data/spec/tty/shell/question/modifier/whitespace_spec.rb +0 -33
  41. data/spec/tty/shell/question/modify_spec.rb +0 -44
  42. data/spec/tty/shell/question/valid_spec.rb +0 -46
  43. data/spec/tty/shell/question/validate_spec.rb +0 -30
  44. data/spec/tty/shell/question/validation/coerce_spec.rb +0 -24
  45. data/spec/tty/shell/question/validation/valid_value_spec.rb +0 -28
  46. data/spec/tty/shell/reader/getc_spec.rb +0 -42
  47. data/spec/tty/shell/response/read_bool_spec.rb +0 -40
  48. data/spec/tty/shell/response/read_char_spec.rb +0 -16
  49. data/spec/tty/shell/response/read_date_spec.rb +0 -20
  50. data/spec/tty/shell/response/read_email_spec.rb +0 -42
  51. data/spec/tty/shell/response/read_multiple_spec.rb +0 -23
  52. data/spec/tty/shell/response/read_number_spec.rb +0 -28
  53. data/spec/tty/shell/response/read_range_spec.rb +0 -31
  54. data/spec/tty/shell/response/read_spec.rb +0 -68
  55. data/spec/tty/shell/response/read_string_spec.rb +0 -19
  56. data/spec/tty/shell/say_spec.rb +0 -67
  57. data/spec/tty/shell/statement/initialize_spec.rb +0 -15
  58. data/spec/tty/shell/suggest_spec.rb +0 -50
  59. data/spec/tty/shell/warn_spec.rb +0 -30
  60. data/spec/tty/terminal/color_spec.rb +0 -16
  61. data/spec/tty/terminal/echo_spec.rb +0 -21
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module TTY
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  end # TTY
@@ -5,28 +5,20 @@ require 'spec_helper'
5
5
  describe TTY::Plugin, '#load!' do
6
6
  let(:gem) { Gem::Specification.new('tty-console', '3.1.3')}
7
7
  let(:name) { 'console'}
8
- let(:input) { StringIO.new }
9
- let(:output) { StringIO.new }
10
8
 
11
9
  subject(:plugin) { described_class.new(name, gem) }
12
10
 
13
- context 'when gem unsuccessfully loaded' do
14
- before { allow(Kernel).to receive(:require) { raise LoadError } }
15
-
16
- it 'fails to load the gem' do
17
- allow(TTY.shell).to receive(:error)
18
- subject.load!
19
- expect(TTY.shell).to have_received(:error).with(/Unable to load plugin tty-console./)
20
- end
11
+ it 'fails to load the gem' do
12
+ allow(Kernel).to receive(:require) { raise LoadError }
13
+ expect {
14
+ plugin.load!
15
+ }.to output(/Unable to load plugin tty-console./).to_stdout
21
16
  end
22
17
 
23
- context 'when gem unsuccessfully required' do
24
- before { allow(Kernel).to receive(:require) { raise StandardError } }
25
-
26
- it 'fails to require the gem' do
27
- allow(TTY.shell).to receive(:error)
28
- subject.load!
29
- expect(TTY.shell).to have_received(:error).with(/Unable to load plugin tty-console./)
30
- end
18
+ it 'fails to require the gem' do
19
+ allow(Kernel).to receive(:require) { raise StandardError }
20
+ expect {
21
+ plugin.load!
22
+ }.to output(/Unable to load plugin tty-console./).to_stdout
31
23
  end
32
24
  end
@@ -21,7 +21,7 @@ describe TTY::System::Editor, '#open' do
21
21
  before { allow(editor).to receive(:command).and_return('vim') }
22
22
 
23
23
  it 'invokes editor' do
24
- invocable = double(:invocable, :invoke => nil)
24
+ invocable = double(:invocable, invoke: nil)
25
25
  expect(subject).to receive(:new).with(file).and_return(invocable)
26
26
  editor.open(file)
27
27
  end
@@ -2,34 +2,26 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe TTY::Terminal, '#home' do
6
- subject(:terminal) { described_class.new }
7
-
8
- before { allow(ENV).to receive(:[]) }
9
-
10
- after { terminal.instance_variable_set(:@home, nil) }
11
-
12
- it 'expands user home path if HOME environemnt not set' do
13
- allow(File).to receive(:expand_path).and_return('/home/user')
14
- expect(terminal.home).to eql('/home/user')
15
- end
16
-
17
- it 'defaults to user HOME environment' do
18
- allow(ENV).to receive(:[]).with('HOME').and_return('/home/user')
19
- expect(terminal.home).to eq('/home/user')
20
- end
21
-
22
- context 'when failed to expand' do
23
- before { allow(File).to receive(:expand_path).and_raise(RuntimeError) }
24
-
25
- it 'returns C:/ on windows' do
26
- allow(TTY::System).to receive(:windows?).and_return(true)
27
- expect(terminal.home).to eql("C:/")
5
+ RSpec.describe TTY::Terminal::Home, '#find_home' do
6
+ context 'on unix' do
7
+ it "finds home" do
8
+ platform = spy(:windows? => false)
9
+ home = described_class.new(platform)
10
+ allow(home).to receive(:unix_home).and_return('/users/piotr')
11
+ allow(File).to receive(:expand_path).and_return('/users/piotr')
12
+ expect(home.find_home).to eq('/users/piotr')
13
+ expect(home).to have_received(:unix_home)
28
14
  end
15
+ end
29
16
 
30
- it 'returns root on unix' do
31
- allow(TTY::System).to receive(:windows?).and_return(false)
32
- expect(terminal.home).to eql("/")
17
+ context 'on windows' do
18
+ it "finds home" do
19
+ platform = spy(:windows? => true)
20
+ home = described_class.new(platform)
21
+ allow(home).to receive(:windows_home).and_return('C:\Users\Piotr')
22
+ allow(File).to receive(:expand_path).and_return('C:\Users\Piotr')
23
+ expect(home.find_home).to eq('C:\Users\Piotr')
24
+ expect(home).to have_received(:windows_home)
33
25
  end
34
26
  end
35
27
  end
@@ -7,7 +7,7 @@ describe TTY do
7
7
 
8
8
  it { expect(object.terminal).to be_instance_of(TTY::Terminal) }
9
9
 
10
- it { expect(object.shell).to be_instance_of(TTY::Shell) }
10
+ #it { expect(object.shell).to be_instance_of(TTY::Shell) }
11
11
 
12
12
  it { expect(object.system).to be(TTY::System) }
13
13
 
@@ -24,7 +24,7 @@ describe TTY::Vector, '#new' do
24
24
  end
25
25
 
26
26
  context 'with an argument that is a hash' do
27
- let(:argument) { {:value => 'Piotr'} }
27
+ let(:argument) { {value: 'Piotr'} }
28
28
 
29
29
  it 'sets elements' do
30
30
  expect(vector.to_a).to eq([[:value, 'Piotr']])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.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: 2015-09-20 00:00:00.000000000 Z
11
+ date: 2015-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-pager
@@ -188,26 +188,13 @@ files:
188
188
  - lib/tty/logger.rb
189
189
  - lib/tty/plugins.rb
190
190
  - lib/tty/plugins/plugin.rb
191
- - lib/tty/shell.rb
192
- - lib/tty/shell/distance.rb
193
- - lib/tty/shell/question.rb
194
- - lib/tty/shell/question/modifier.rb
195
- - lib/tty/shell/question/validation.rb
196
- - lib/tty/shell/reader.rb
197
- - lib/tty/shell/response.rb
198
- - lib/tty/shell/response_delegation.rb
199
- - lib/tty/shell/statement.rb
200
- - lib/tty/shell/suggestion.rb
201
191
  - lib/tty/support/coercion.rb
202
192
  - lib/tty/support/delegatable.rb
203
193
  - lib/tty/support/unicode.rb
204
- - lib/tty/support/utils.rb
205
194
  - lib/tty/system.rb
206
195
  - lib/tty/system/editor.rb
207
196
  - lib/tty/terminal.rb
208
- - lib/tty/terminal/echo.rb
209
197
  - lib/tty/terminal/home.rb
210
- - lib/tty/terminal/raw.rb
211
198
  - lib/tty/vector.rb
212
199
  - lib/tty/version.rb
213
200
  - spec/spec_helper.rb
@@ -218,38 +205,6 @@ files:
218
205
  - spec/tty/plugins/load_spec.rb
219
206
  - spec/tty/plugins/plugin/load_spec.rb
220
207
  - spec/tty/plugins/plugin/new_spec.rb
221
- - spec/tty/shell/ask_spec.rb
222
- - spec/tty/shell/distance/distance_spec.rb
223
- - spec/tty/shell/distance/initialize_spec.rb
224
- - spec/tty/shell/error_spec.rb
225
- - spec/tty/shell/print_table_spec.rb
226
- - spec/tty/shell/question/argument_spec.rb
227
- - spec/tty/shell/question/character_spec.rb
228
- - spec/tty/shell/question/default_spec.rb
229
- - spec/tty/shell/question/in_spec.rb
230
- - spec/tty/shell/question/initialize_spec.rb
231
- - spec/tty/shell/question/modifier/apply_to_spec.rb
232
- - spec/tty/shell/question/modifier/letter_case_spec.rb
233
- - spec/tty/shell/question/modifier/whitespace_spec.rb
234
- - spec/tty/shell/question/modify_spec.rb
235
- - spec/tty/shell/question/valid_spec.rb
236
- - spec/tty/shell/question/validate_spec.rb
237
- - spec/tty/shell/question/validation/coerce_spec.rb
238
- - spec/tty/shell/question/validation/valid_value_spec.rb
239
- - spec/tty/shell/reader/getc_spec.rb
240
- - spec/tty/shell/response/read_bool_spec.rb
241
- - spec/tty/shell/response/read_char_spec.rb
242
- - spec/tty/shell/response/read_date_spec.rb
243
- - spec/tty/shell/response/read_email_spec.rb
244
- - spec/tty/shell/response/read_multiple_spec.rb
245
- - spec/tty/shell/response/read_number_spec.rb
246
- - spec/tty/shell/response/read_range_spec.rb
247
- - spec/tty/shell/response/read_spec.rb
248
- - spec/tty/shell/response/read_string_spec.rb
249
- - spec/tty/shell/say_spec.rb
250
- - spec/tty/shell/statement/initialize_spec.rb
251
- - spec/tty/shell/suggest_spec.rb
252
- - spec/tty/shell/warn_spec.rb
253
208
  - spec/tty/support/coercion_spec.rb
254
209
  - spec/tty/support/delegatable_spec.rb
255
210
  - spec/tty/support/fixtures/classes.rb
@@ -259,8 +214,6 @@ files:
259
214
  - spec/tty/system/editor/executables_spec.rb
260
215
  - spec/tty/system/editor/invoke_spec.rb
261
216
  - spec/tty/system/editor/open_spec.rb
262
- - spec/tty/terminal/color_spec.rb
263
- - spec/tty/terminal/echo_spec.rb
264
217
  - spec/tty/terminal/home_spec.rb
265
218
  - spec/tty/tty_spec.rb
266
219
  - spec/tty/vector/new_spec.rb
@@ -306,38 +259,6 @@ test_files:
306
259
  - spec/tty/plugins/load_spec.rb
307
260
  - spec/tty/plugins/plugin/load_spec.rb
308
261
  - spec/tty/plugins/plugin/new_spec.rb
309
- - spec/tty/shell/ask_spec.rb
310
- - spec/tty/shell/distance/distance_spec.rb
311
- - spec/tty/shell/distance/initialize_spec.rb
312
- - spec/tty/shell/error_spec.rb
313
- - spec/tty/shell/print_table_spec.rb
314
- - spec/tty/shell/question/argument_spec.rb
315
- - spec/tty/shell/question/character_spec.rb
316
- - spec/tty/shell/question/default_spec.rb
317
- - spec/tty/shell/question/in_spec.rb
318
- - spec/tty/shell/question/initialize_spec.rb
319
- - spec/tty/shell/question/modifier/apply_to_spec.rb
320
- - spec/tty/shell/question/modifier/letter_case_spec.rb
321
- - spec/tty/shell/question/modifier/whitespace_spec.rb
322
- - spec/tty/shell/question/modify_spec.rb
323
- - spec/tty/shell/question/valid_spec.rb
324
- - spec/tty/shell/question/validate_spec.rb
325
- - spec/tty/shell/question/validation/coerce_spec.rb
326
- - spec/tty/shell/question/validation/valid_value_spec.rb
327
- - spec/tty/shell/reader/getc_spec.rb
328
- - spec/tty/shell/response/read_bool_spec.rb
329
- - spec/tty/shell/response/read_char_spec.rb
330
- - spec/tty/shell/response/read_date_spec.rb
331
- - spec/tty/shell/response/read_email_spec.rb
332
- - spec/tty/shell/response/read_multiple_spec.rb
333
- - spec/tty/shell/response/read_number_spec.rb
334
- - spec/tty/shell/response/read_range_spec.rb
335
- - spec/tty/shell/response/read_spec.rb
336
- - spec/tty/shell/response/read_string_spec.rb
337
- - spec/tty/shell/say_spec.rb
338
- - spec/tty/shell/statement/initialize_spec.rb
339
- - spec/tty/shell/suggest_spec.rb
340
- - spec/tty/shell/warn_spec.rb
341
262
  - spec/tty/support/coercion_spec.rb
342
263
  - spec/tty/support/delegatable_spec.rb
343
264
  - spec/tty/support/fixtures/classes.rb
@@ -347,8 +268,6 @@ test_files:
347
268
  - spec/tty/system/editor/executables_spec.rb
348
269
  - spec/tty/system/editor/invoke_spec.rb
349
270
  - spec/tty/system/editor/open_spec.rb
350
- - spec/tty/terminal/color_spec.rb
351
- - spec/tty/terminal/echo_spec.rb
352
271
  - spec/tty/terminal/home_spec.rb
353
272
  - spec/tty/tty_spec.rb
354
273
  - spec/tty/vector/new_spec.rb
@@ -1,211 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module TTY
4
- # A class responsible for shell prompt interactions.
5
- class Shell
6
- # @api private
7
- attr_reader :input
8
-
9
- # @api private
10
- attr_reader :output
11
-
12
- # Shell prompt prefix
13
- #
14
- # @api private
15
- attr_reader :prefix
16
-
17
- # Initialize a Shell
18
- #
19
- # @api public
20
- def initialize(input = stdin, output = stdout, options = {})
21
- @input = input
22
- @output = output
23
- @prefix = options.fetch(:prefix) { '' }
24
- end
25
-
26
- # Ask a question.
27
- #
28
- # @example
29
- # shell = TTY::Shell.new
30
- # shell.ask("What is your name?")
31
- #
32
- # @param [String] statement
33
- # string question to be asked
34
- #
35
- # @yieldparam [TTY::Question] question
36
- # further configure the question
37
- #
38
- # @yield [question]
39
- #
40
- # @return [TTY::Question]
41
- #
42
- # @api public
43
- def ask(statement, *args, &block)
44
- options = Utils.extract_options!(args)
45
-
46
- question = Question.new self, options
47
- question.instance_eval(&block) if block_given?
48
- question.prompt(statement)
49
- end
50
-
51
- # A shortcut method to ask the user positive question and return
52
- # true for 'yes' reply.
53
- #
54
- # @return [Boolean]
55
- #
56
- # @api public
57
- def yes?(statement, *args, &block)
58
- ask(statement, *args, &block).read_bool
59
- end
60
-
61
- # A shortcut method to ask the user negative question and return
62
- # true for 'no' reply.
63
- #
64
- # @return [Boolean]
65
- #
66
- # @api public
67
- def no?(statement, *args, &block)
68
- !yes?(statement, *args, &block)
69
- end
70
-
71
- # Print statement out. If the supplied message ends with a space or
72
- # tab character, a new line will not be appended.
73
- #
74
- # @example
75
- # say("Simple things.")
76
- #
77
- # @param [String] message
78
- #
79
- # @return [String]
80
- #
81
- # @api public
82
- def say(message = '', options = {})
83
- message = message.to_str
84
- return unless message.length > 0
85
-
86
- statement = Statement.new(self, options)
87
- statement.declare message
88
- end
89
-
90
- # Print statement(s) out in red green.
91
- #
92
- # @example
93
- # shell.confirm "Are you sure?"
94
- # shell.confirm "All is fine!", "This is fine too."
95
- #
96
- # @param [Array] messages
97
- #
98
- # @return [Array] messages
99
- #
100
- # @api public
101
- def confirm(*args)
102
- options = Utils.extract_options!(args)
103
- args.each { |message| say message, options.merge(color: :green) }
104
- end
105
-
106
- # Print statement(s) out in yellow color.
107
- #
108
- # @example
109
- # shell.warn "This action can have dire consequences"
110
- # shell.warn "Carefull young apprentice", "This is potentially dangerous"
111
- #
112
- # @param [Array] messages
113
- #
114
- # @return [Array] messages
115
- #
116
- # @api public
117
- def warn(*args)
118
- options = Utils.extract_options!(args)
119
- args.each { |message| say message, options.merge(color: :yellow) }
120
- end
121
-
122
- # Print statement(s) out in red color.
123
- #
124
- # @example
125
- # shell.error "Shutting down all systems!"
126
- # shell.error "Nothing is fine!", "All is broken!"
127
- #
128
- # @param [Array] messages
129
- #
130
- # @return [Array] messages
131
- #
132
- # @api public
133
- def error(*args)
134
- options = Utils.extract_options!(args)
135
- args.each { |message| say message, options.merge(color: :red) }
136
- end
137
-
138
- # Takes the string provided by the user and compare it with other possible
139
- # matches to suggest an unambigous string
140
- #
141
- # @example
142
- # shell.suggest('sta', ['status', 'stage', 'commit', 'branch'])
143
- # # => "status, stage"
144
- #
145
- # @param [String] message
146
- #
147
- # @param [Array] possibilities
148
- #
149
- # @param [Hash] options
150
- # @option options [String] :indent
151
- # The number of spaces for indentation
152
- # @option options [String] :single_text
153
- # The text for a single suggestion
154
- # @option options [String] :plural_text
155
- # The text for multiple suggestions
156
- #
157
- # @return [String]
158
- #
159
- # @api public
160
- def suggest(message, possibilities, options = {})
161
- suggestion = Suggestion.new(options)
162
- say(suggestion.suggest(message, possibilities))
163
- end
164
-
165
- # Print a table to shell.
166
- #
167
- # @example of a table with rows rendered with ascii border
168
- # rows = [[1], [2], [3]]
169
- # TTY.shell.print_table rows, renderer: :ascii
170
- #
171
- # @return [undefined]
172
- #
173
- # @api public
174
- def print_table(*args, &block)
175
- options = Utils.extract_options!(args)
176
- renderer = options.fetch(:renderer) { :basic }
177
- table = TTY::Table.new(*args, &block)
178
- say table.render(renderer, options)
179
- end
180
-
181
- # Check if outputing to shell
182
- #
183
- # @return [Boolean]
184
- #
185
- # @api public
186
- def tty?
187
- stdout.tty?
188
- end
189
-
190
- # Return standard in
191
- #
192
- # @api private
193
- def stdin
194
- $stdin
195
- end
196
-
197
- # Return standard out
198
- #
199
- # @api private
200
- def stdout
201
- $stdout
202
- end
203
-
204
- # Return standard error
205
- #
206
- # @api private
207
- def stderr
208
- $stderr
209
- end
210
- end # Shell
211
- end # TTY