tty 0.0.11 → 0.1.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.
Files changed (265) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +1 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +16 -7
  6. data/CHANGELOG.md +6 -0
  7. data/Gemfile +18 -1
  8. data/README.md +55 -28
  9. data/Rakefile +5 -9
  10. data/images/tty.png +0 -0
  11. data/lib/tty.rb +7 -1
  12. data/lib/tty/coercer/boolean.rb +6 -9
  13. data/lib/tty/coercer/float.rb +14 -17
  14. data/lib/tty/coercer/integer.rb +14 -17
  15. data/lib/tty/coercer/range.rb +6 -7
  16. data/lib/tty/logger.rb +23 -9
  17. data/lib/tty/plugins.rb +3 -6
  18. data/lib/tty/plugins/plugin.rb +4 -7
  19. data/lib/tty/shell.rb +20 -12
  20. data/lib/tty/shell/question.rb +41 -48
  21. data/lib/tty/shell/question/modifier.rb +5 -8
  22. data/lib/tty/shell/question/validation.rb +8 -7
  23. data/lib/tty/shell/reader.rb +28 -19
  24. data/lib/tty/shell/response.rb +26 -22
  25. data/lib/tty/shell/statement.rb +13 -9
  26. data/lib/tty/shell/suggestion.rb +17 -13
  27. data/lib/tty/support/coercion.rb +5 -6
  28. data/lib/tty/support/conversion.rb +7 -6
  29. data/lib/tty/support/delegatable.rb +5 -5
  30. data/lib/tty/support/unicode.rb +3 -4
  31. data/lib/tty/support/utils.rb +1 -2
  32. data/lib/tty/system.rb +13 -6
  33. data/lib/tty/system/editor.rb +21 -18
  34. data/lib/tty/system/which.rb +3 -5
  35. data/lib/tty/table.rb +18 -22
  36. data/lib/tty/table/border.rb +2 -4
  37. data/lib/tty/table/border/ascii.rb +3 -2
  38. data/lib/tty/table/border/null.rb +1 -3
  39. data/lib/tty/table/border/row_line.rb +1 -4
  40. data/lib/tty/table/border/unicode.rb +3 -2
  41. data/lib/tty/table/border_dsl.rb +21 -17
  42. data/lib/tty/table/border_options.rb +6 -5
  43. data/lib/tty/table/column_set.rb +11 -7
  44. data/lib/tty/table/columns.rb +19 -16
  45. data/lib/tty/table/error.rb +1 -3
  46. data/lib/tty/table/field.rb +30 -12
  47. data/lib/tty/table/header.rb +18 -9
  48. data/lib/tty/table/indentation.rb +1 -3
  49. data/lib/tty/table/operation/alignment.rb +8 -9
  50. data/lib/tty/table/operation/alignment_set.rb +6 -5
  51. data/lib/tty/table/operation/escape.rb +3 -3
  52. data/lib/tty/table/operation/filter.rb +3 -4
  53. data/lib/tty/table/operation/truncation.rb +3 -3
  54. data/lib/tty/table/operation/wrapped.rb +3 -4
  55. data/lib/tty/table/operations.rb +19 -22
  56. data/lib/tty/table/orientation.rb +5 -5
  57. data/lib/tty/table/orientation/horizontal.rb +9 -6
  58. data/lib/tty/table/orientation/vertical.rb +10 -7
  59. data/lib/tty/table/padder.rb +46 -8
  60. data/lib/tty/table/renderer.rb +21 -14
  61. data/lib/tty/table/renderer/ascii.rb +6 -5
  62. data/lib/tty/table/renderer/basic.rb +18 -19
  63. data/lib/tty/table/renderer/unicode.rb +11 -5
  64. data/lib/tty/table/row.rb +36 -20
  65. data/lib/tty/table/transformation.rb +6 -5
  66. data/lib/tty/table/validatable.rb +32 -17
  67. data/lib/tty/terminal.rb +26 -42
  68. data/lib/tty/terminal/color.rb +10 -12
  69. data/lib/tty/terminal/echo.rb +4 -7
  70. data/lib/tty/terminal/home.rb +3 -10
  71. data/lib/tty/terminal/pager.rb +11 -10
  72. data/lib/tty/terminal/pager/basic.rb +3 -6
  73. data/lib/tty/terminal/pager/system.rb +2 -5
  74. data/lib/tty/text.rb +7 -10
  75. data/lib/tty/text/distance.rb +2 -4
  76. data/lib/tty/text/truncation.rb +1 -3
  77. data/lib/tty/text/wrapping.rb +1 -3
  78. data/lib/tty/vector.rb +3 -5
  79. data/lib/tty/version.rb +2 -2
  80. data/spec/spec_helper.rb +4 -11
  81. data/spec/tty/coercer/boolean/coerce_spec.rb +19 -16
  82. data/spec/tty/coercer/float/coerce_spec.rb +6 -4
  83. data/spec/tty/coercer/integer/coerce_spec.rb +5 -4
  84. data/spec/tty/coercer/range/coerce_spec.rb +12 -11
  85. data/spec/tty/logger/log_spec.rb +23 -0
  86. data/spec/tty/logger/new_spec.rb +14 -14
  87. data/spec/tty/logger/valid_level_spec.rb +6 -6
  88. data/spec/tty/plugins/find_spec.rb +4 -4
  89. data/spec/tty/plugins/load_spec.rb +4 -5
  90. data/spec/tty/plugins/plugin/load_spec.rb +10 -8
  91. data/spec/tty/plugins/plugin/new_spec.rb +7 -7
  92. data/spec/tty/shell/ask_spec.rb +6 -7
  93. data/spec/tty/shell/error_spec.rb +1 -2
  94. data/spec/tty/shell/print_table_spec.rb +1 -2
  95. data/spec/tty/shell/question/argument_spec.rb +1 -1
  96. data/spec/tty/shell/question/character_spec.rb +11 -3
  97. data/spec/tty/shell/question/default_spec.rb +3 -3
  98. data/spec/tty/shell/question/in_spec.rb +1 -1
  99. data/spec/tty/shell/question/initialize_spec.rb +8 -11
  100. data/spec/tty/shell/question/modifier/apply_to_spec.rb +8 -4
  101. data/spec/tty/shell/question/modifier/letter_case_spec.rb +4 -4
  102. data/spec/tty/shell/question/modifier/whitespace_spec.rb +5 -5
  103. data/spec/tty/shell/question/modify_spec.rb +1 -1
  104. data/spec/tty/shell/question/valid_spec.rb +4 -4
  105. data/spec/tty/shell/question/validate_spec.rb +4 -4
  106. data/spec/tty/shell/question/validation/coerce_spec.rb +2 -3
  107. data/spec/tty/shell/question/validation/valid_value_spec.rb +3 -3
  108. data/spec/tty/shell/reader/getc_spec.rb +16 -14
  109. data/spec/tty/shell/response/read_bool_spec.rb +1 -1
  110. data/spec/tty/shell/response/read_char_spec.rb +1 -2
  111. data/spec/tty/shell/response/read_date_spec.rb +1 -1
  112. data/spec/tty/shell/response/read_email_spec.rb +1 -1
  113. data/spec/tty/shell/response/read_multiple_spec.rb +3 -4
  114. data/spec/tty/shell/response/read_number_spec.rb +1 -2
  115. data/spec/tty/shell/response/read_range_spec.rb +2 -2
  116. data/spec/tty/shell/response/read_spec.rb +7 -7
  117. data/spec/tty/shell/response/read_string_spec.rb +2 -2
  118. data/spec/tty/shell/say_spec.rb +1 -1
  119. data/spec/tty/shell/statement/initialize_spec.rb +3 -3
  120. data/spec/tty/shell/suggest_spec.rb +1 -1
  121. data/spec/tty/shell/warn_spec.rb +1 -2
  122. data/spec/tty/support/coercion_spec.rb +10 -10
  123. data/spec/tty/support/conversion_spec.rb +9 -9
  124. data/spec/tty/support/delegatable_spec.rb +7 -5
  125. data/spec/tty/support/equatable_spec.rb +32 -34
  126. data/spec/tty/support/fixtures/classes.rb +4 -2
  127. data/spec/tty/system/editor/available_spec.rb +12 -12
  128. data/spec/tty/system/editor/build_spec.rb +8 -16
  129. data/spec/tty/system/editor/command_spec.rb +3 -2
  130. data/spec/tty/system/editor/executables_spec.rb +3 -3
  131. data/spec/tty/system/editor/invoke_spec.rb +10 -14
  132. data/spec/tty/system/editor/open_spec.rb +9 -7
  133. data/spec/tty/system/platform_spec.rb +32 -13
  134. data/spec/tty/system/which/which_spec.rb +9 -9
  135. data/spec/tty/system/which_spec.rb +4 -4
  136. data/spec/tty/table/access_spec.rb +24 -21
  137. data/spec/tty/table/add_row_spec.rb +2 -2
  138. data/spec/tty/table/border/ascii/rendering_spec.rb +13 -13
  139. data/spec/tty/table/border/new_spec.rb +5 -4
  140. data/spec/tty/table/border/null/rendering_spec.rb +12 -12
  141. data/spec/tty/table/border/options/from_spec.rb +2 -3
  142. data/spec/tty/table/border/options/new_spec.rb +4 -5
  143. data/spec/tty/table/border/unicode/rendering_spec.rb +10 -10
  144. data/spec/tty/table/border_options/new_spec.rb +20 -0
  145. data/spec/tty/table/border_options/update_spec.rb +18 -0
  146. data/spec/tty/table/column_set/extract_widths_spec.rb +1 -1
  147. data/spec/tty/table/column_set/total_width_spec.rb +2 -2
  148. data/spec/tty/table/column_set/widths_from_spec.rb +1 -2
  149. data/spec/tty/table/columns/enforce_spec.rb +2 -2
  150. data/spec/tty/table/columns/widths_spec.rb +2 -0
  151. data/spec/tty/table/data_spec.rb +3 -3
  152. data/spec/tty/table/each_spec.rb +9 -11
  153. data/spec/tty/table/each_with_index_spec.rb +8 -9
  154. data/spec/tty/table/empty_spec.rb +3 -3
  155. data/spec/tty/table/eql_spec.rb +6 -6
  156. data/spec/tty/table/field/equality_spec.rb +11 -11
  157. data/spec/tty/table/field/length_spec.rb +4 -4
  158. data/spec/tty/table/field/lines_spec.rb +3 -3
  159. data/spec/tty/table/field/new_spec.rb +7 -7
  160. data/spec/tty/table/field/width_spec.rb +6 -4
  161. data/spec/tty/table/filter_spec.rb +3 -3
  162. data/spec/tty/table/header/call_spec.rb +3 -3
  163. data/spec/tty/table/header/height_spec.rb +1 -1
  164. data/spec/tty/table/header/new_spec.rb +5 -5
  165. data/spec/tty/table/header/set_spec.rb +9 -4
  166. data/spec/tty/table/header/to_ary_spec.rb +4 -4
  167. data/spec/tty/table/header_spec.rb +3 -4
  168. data/spec/tty/table/indentation/insert_indent_spec.rb +1 -1
  169. data/spec/tty/table/initialize_spec.rb +13 -13
  170. data/spec/tty/table/operation/alignment/format_spec.rb +5 -5
  171. data/spec/tty/table/operation/alignment/new_spec.rb +4 -4
  172. data/spec/tty/table/operation/alignment_set/call_spec.rb +11 -11
  173. data/spec/tty/table/operation/alignment_set/each_spec.rb +3 -3
  174. data/spec/tty/table/operation/alignment_set/new_spec.rb +6 -6
  175. data/spec/tty/table/operation/alignment_set/to_ary_spec.rb +4 -4
  176. data/spec/tty/table/operation/escape/call_spec.rb +1 -1
  177. data/spec/tty/table/operation/filter/call_spec.rb +1 -1
  178. data/spec/tty/table/operation/truncation/call_spec.rb +1 -1
  179. data/spec/tty/table/operation/truncation/truncate_spec.rb +4 -4
  180. data/spec/tty/table/operation/wrapped/call_spec.rb +1 -1
  181. data/spec/tty/table/operation/wrapped/wrap_spec.rb +3 -3
  182. data/spec/tty/table/operations/new_spec.rb +1 -1
  183. data/spec/tty/table/options_spec.rb +8 -8
  184. data/spec/tty/table/orientation_spec.rb +15 -13
  185. data/spec/tty/table/padder/parse_spec.rb +1 -1
  186. data/spec/tty/table/padder/to_s_spec.rb +14 -0
  187. data/spec/tty/table/padding_spec.rb +1 -1
  188. data/spec/tty/table/properties_spec.rb +9 -8
  189. data/spec/tty/table/render_spec.rb +8 -5
  190. data/spec/tty/table/render_with_spec.rb +5 -4
  191. data/spec/tty/table/renderer/ascii/indentation_spec.rb +1 -1
  192. data/spec/tty/table/renderer/ascii/padding_spec.rb +1 -1
  193. data/spec/tty/table/renderer/ascii/render_spec.rb +7 -7
  194. data/spec/tty/table/renderer/ascii/resizing_spec.rb +1 -1
  195. data/spec/tty/table/renderer/ascii/separator_spec.rb +2 -2
  196. data/spec/tty/table/renderer/basic/alignment_spec.rb +5 -5
  197. data/spec/tty/table/renderer/basic/coloring_spec.rb +1 -1
  198. data/spec/tty/table/renderer/basic/extract_column_widths_spec.rb +6 -6
  199. data/spec/tty/table/renderer/basic/filter_spec.rb +4 -4
  200. data/spec/tty/table/renderer/basic/indentation_spec.rb +5 -3
  201. data/spec/tty/table/renderer/basic/multiline_content_spec.rb +10 -10
  202. data/spec/tty/table/renderer/basic/new_spec.rb +2 -2
  203. data/spec/tty/table/renderer/basic/options_spec.rb +9 -9
  204. data/spec/tty/table/renderer/basic/padding_spec.rb +1 -1
  205. data/spec/tty/table/renderer/basic/render_spec.rb +8 -8
  206. data/spec/tty/table/renderer/basic/resizing_spec.rb +1 -1
  207. data/spec/tty/table/renderer/basic/separator_spec.rb +2 -2
  208. data/spec/tty/table/renderer/basic/truncation_spec.rb +4 -4
  209. data/spec/tty/table/renderer/basic/wrapping_spec.rb +4 -4
  210. data/spec/tty/table/renderer/border_spec.rb +21 -21
  211. data/spec/tty/table/renderer/render_spec.rb +7 -7
  212. data/spec/tty/table/renderer/select_spec.rb +4 -4
  213. data/spec/tty/table/renderer/style_spec.rb +19 -19
  214. data/spec/tty/table/renderer/unicode/indentation_spec.rb +1 -1
  215. data/spec/tty/table/renderer/unicode/padding_spec.rb +1 -1
  216. data/spec/tty/table/renderer/unicode/render_spec.rb +6 -6
  217. data/spec/tty/table/renderer/unicode/separator_spec.rb +2 -2
  218. data/spec/tty/table/renderer_spec.rb +1 -1
  219. data/spec/tty/table/rotate_spec.rb +27 -27
  220. data/spec/tty/table/row/access_spec.rb +3 -3
  221. data/spec/tty/table/row/call_spec.rb +4 -4
  222. data/spec/tty/table/row/data_spec.rb +5 -5
  223. data/spec/tty/table/row/each_spec.rb +1 -1
  224. data/spec/tty/table/row/equality_spec.rb +16 -16
  225. data/spec/tty/table/row/height_spec.rb +1 -1
  226. data/spec/tty/table/row/new_spec.rb +11 -11
  227. data/spec/tty/table/row/to_ary_spec.rb +3 -3
  228. data/spec/tty/table/to_s_spec.rb +8 -8
  229. data/spec/tty/table/validatable/validate_options_spec.rb +5 -5
  230. data/spec/tty/table/validatable_spec.rb +14 -1
  231. data/spec/tty/terminal/color/code_spec.rb +3 -3
  232. data/spec/tty/terminal/color/remove_spec.rb +8 -9
  233. data/spec/tty/terminal/color/set_spec.rb +5 -6
  234. data/spec/tty/terminal/color_spec.rb +3 -5
  235. data/spec/tty/terminal/echo_spec.rb +3 -4
  236. data/spec/tty/terminal/home_spec.rb +12 -14
  237. data/spec/tty/terminal/page_spec.rb +5 -4
  238. data/spec/tty/terminal/pager/available_spec.rb +11 -11
  239. data/spec/tty/terminal/pager/basic/page_spec.rb +8 -8
  240. data/spec/tty/terminal/pager/command_spec.rb +2 -2
  241. data/spec/tty/terminal/pager/executables_spec.rb +3 -3
  242. data/spec/tty/terminal/pager/page_spec.rb +8 -10
  243. data/spec/tty/terminal/pager/system/page_spec.rb +8 -8
  244. data/spec/tty/terminal/size_spec.rb +39 -36
  245. data/spec/tty/text/distance/distance_spec.rb +13 -13
  246. data/spec/tty/text/distance/initialize_spec.rb +4 -4
  247. data/spec/tty/text/distance_spec.rb +2 -2
  248. data/spec/tty/text/truncate_spec.rb +2 -3
  249. data/spec/tty/text/truncation/initialize_spec.rb +9 -9
  250. data/spec/tty/text/truncation/truncate_spec.rb +14 -14
  251. data/spec/tty/text/wrap_spec.rb +2 -3
  252. data/spec/tty/text/wrapping/initialize_spec.rb +7 -7
  253. data/spec/tty/text/wrapping/wrap_spec.rb +11 -11
  254. data/spec/tty/tty_spec.rb +22 -0
  255. data/spec/tty/vector/new_spec.rb +7 -7
  256. data/tasks/console.rake +10 -0
  257. data/tasks/coverage.rake +11 -0
  258. data/tasks/metrics/cane.rake +2 -0
  259. data/tasks/metrics/flog.rake +2 -0
  260. data/tasks/metrics/heckle.rake +15 -0
  261. data/tasks/metrics/reek.rake +2 -0
  262. data/tasks/spec.rake +29 -0
  263. data/tty.gemspec +5 -12
  264. metadata +34 -91
  265. data/.rvmrc +0 -34
@@ -1,12 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
3
  module TTY
4
4
  class Shell
5
5
  class Question
6
-
7
6
  # A class representing String modifications.
8
7
  class Modifier
9
-
10
8
  attr_reader :modifiers
11
9
  private :modifiers
12
10
 
@@ -27,9 +25,9 @@ module TTY
27
25
  #
28
26
  # @api private
29
27
  def apply_to(value)
30
- modifiers.inject(value) do |result, mod|
28
+ modifiers.reduce(value) do |result, mod|
31
29
  result = Modifier.letter_case mod, result
32
- result = Modifier.whitespace mod, result
30
+ Modifier.whitespace mod, result
33
31
  end
34
32
  end
35
33
 
@@ -44,7 +42,8 @@ module TTY
44
42
  # @option mod [Symbol] :uppercase change to upper case
45
43
  # @option mod [Symbol] :down change to lower case
46
44
  # @option mod [Symbol] :downcase change to lower case
47
- # @option mod [Symbol] :capitalize change all words to start with uppercase case letter
45
+ # @option mod [Symbol] :capitalize change all words to start
46
+ # with uppercase case letter
48
47
  #
49
48
  # @return [String]
50
49
  #
@@ -88,9 +87,7 @@ module TTY
88
87
  value
89
88
  end
90
89
  end
91
-
92
90
  end # Modifier
93
-
94
91
  end # Question
95
92
  end # Shell
96
93
  end # TTY
@@ -1,12 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
3
  module TTY
4
4
  class Shell
5
5
  class Question
6
-
7
6
  # A class representing question validation.
8
7
  class Validation
9
-
10
8
  # @api private
11
9
  attr_reader :validation
12
10
  private :validation
@@ -18,7 +16,7 @@ module TTY
18
16
  # @return [undefined]
19
17
  #
20
18
  # @api private
21
- def initialize(validation=nil)
19
+ def initialize(validation = nil)
22
20
  @validation = validation ? coerce(validation) : validation
23
21
  end
24
22
 
@@ -36,7 +34,7 @@ module TTY
36
34
  when Regexp, String
37
35
  Regexp.new(validation.to_s)
38
36
  else
39
- raise TTY::ValidationCoercion, "Wrong type, got #{validation.class}"
37
+ fail TTY::ValidationCoercion, "Wrong type, got #{validation.class}"
40
38
  end
41
39
  end
42
40
 
@@ -80,11 +78,14 @@ module TTY
80
78
  value = value.to_s
81
79
  if validation.is_a?(Regexp) && validation =~ value
82
80
  elsif validation.is_a?(Proc) && validation.call(value)
83
- else raise TTY::InvalidArgument, "Invalid input for #{value}"
81
+ else
82
+ fail TTY::InvalidArgument, "Invalid input for #{value}"
84
83
  end
84
+ true
85
+ else
86
+ false
85
87
  end
86
88
  end
87
-
88
89
  end # Validation
89
90
  end # Question
90
91
  end # Shell
@@ -1,11 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
3
  module TTY
4
+ # A class responsible for shell prompt interactions.
4
5
  class Shell
5
-
6
6
  # A class responsible for reading character input from STDIN
7
7
  class Reader
8
-
9
8
  # @api private
10
9
  attr_reader :shell
11
10
  private :shell
@@ -19,14 +18,20 @@ module TTY
19
18
  # Initialize a Reader
20
19
  #
21
20
  # @api public
22
- def initialize(shell=nil)
23
- @shell = shell || Shell.new
21
+ def initialize(shell = Shell.new)
22
+ @shell = shell
24
23
  end
25
24
 
26
25
  # Get input in unbuffered mode.
27
26
  #
27
+ # @example
28
+ # buffer do
29
+ # ...
30
+ # end
31
+ #
32
+ # @return [String]
28
33
  #
29
- # @api bublic
34
+ # @api public
30
35
  def buffer(&block)
31
36
  bufferring = shell.output.sync
32
37
  # Immediately flush output
@@ -48,26 +53,18 @@ module TTY
48
53
  # @return [String]
49
54
  #
50
55
  # @api public
51
- def getc(mask=(not_set=true))
52
- value = ""
53
-
56
+ def getc(mask = (not_set = true))
57
+ value = ''
54
58
  buffer do
55
59
  begin
56
- while (char = shell.input.getbyte) and
60
+ while (char = shell.input.getbyte) &&
57
61
  !(char == CARRIAGE_RETURN || char == NEWLINE)
58
-
59
- if (char == BACKSPACE || char == DELETE)
60
- value.slice!(-1, 1) unless value.empty?
61
- else
62
- print_char char, not_set, mask
63
- value << char
64
- end
62
+ value = handle_char value, char, not_set, mask
65
63
  end
66
64
  ensure
67
65
  TTY.terminal.echo_on
68
66
  end
69
67
  end
70
-
71
68
  value
72
69
  end
73
70
 
@@ -80,13 +77,25 @@ module TTY
80
77
 
81
78
  private
82
79
 
80
+ # Handle single character by appending to or removing from output
81
+ #
82
+ # @api private
83
+ def handle_char(value, char, not_set, mask)
84
+ if char == BACKSPACE || char == DELETE
85
+ value.slice!(-1, 1) unless value.empty?
86
+ else
87
+ print_char char, not_set, mask
88
+ value << char
89
+ end
90
+ value
91
+ end
92
+
83
93
  # Print out character back to shell STDOUT
84
94
  #
85
95
  # @api private
86
96
  def print_char(char, not_set, mask)
87
97
  shell.output.putc((not_set || !mask) ? char : mask)
88
98
  end
89
-
90
99
  end # Reader
91
100
  end # Shell
92
101
  end # TTY
@@ -1,15 +1,22 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
3
  require 'date'
4
4
 
5
5
  module TTY
6
- # A class responsible for shell prompt interactions.
6
+ # A class responsible for shell prompt interactions
7
7
  class Shell
8
-
9
- # A class representing a question.
8
+ # A class representing a shell response
10
9
  class Response
10
+ VALID_TYPES = [
11
+ :boolean,
12
+ :string,
13
+ :symbol,
14
+ :integer,
15
+ :float,
16
+ :date,
17
+ :datetime
18
+ ]
11
19
 
12
- VALID_TYPES = [:boolean, :string, :symbol, :integer, :float, :date, :datetime]
13
20
  attr_reader :reader
14
21
  private :reader
15
22
 
@@ -22,9 +29,9 @@ module TTY
22
29
  # Initialize a Response
23
30
  #
24
31
  # @api public
25
- def initialize(question, shell=nil)
32
+ def initialize(question, shell = Shell.new)
26
33
  @question = question
27
- @shell = shell || Shell.new
34
+ @shell = shell
28
35
  @reader = Reader.new(shell)
29
36
  end
30
37
 
@@ -35,7 +42,7 @@ module TTY
35
42
  # @return [undefined]
36
43
  #
37
44
  # @api public
38
- def read(type=nil)
45
+ def read(type = nil)
39
46
  question.evaluate_response read_input
40
47
  end
41
48
 
@@ -58,7 +65,7 @@ module TTY
58
65
  # error to display on failed conversion to string type
59
66
  #
60
67
  # @api public
61
- def read_string(error=nil)
68
+ def read_string(error = nil)
62
69
  question.evaluate_response(String(read_input).strip)
63
70
  end
64
71
 
@@ -66,7 +73,7 @@ module TTY
66
73
  #
67
74
  # @api public
68
75
  def read_char
69
- question.character true
76
+ question.char(true)
70
77
  question.evaluate_response String(read_input).chars.to_a[0]
71
78
  end
72
79
 
@@ -80,14 +87,14 @@ module TTY
80
87
  # Read ansewr and cast to Symbol type
81
88
  #
82
89
  # @api public
83
- def read_symbol(error=nil)
84
- question.evaluate_response read_input.to_sym
90
+ def read_symbol(error = nil)
91
+ question.evaluate_response read_input.to_sym
85
92
  end
86
93
 
87
94
  # Read answer from predifined choicse
88
95
  #
89
96
  # @api public
90
- def read_choice(type=nil)
97
+ def read_choice(type = nil)
91
98
  question.argument(:required) unless question.default?
92
99
  question.evaluate_response read_input
93
100
  end
@@ -95,21 +102,21 @@ module TTY
95
102
  # Read integer value
96
103
  #
97
104
  # @api public
98
- def read_int(error=nil)
105
+ def read_int(error = nil)
99
106
  question.evaluate_response TTY::Coercer::Integer.coerce(read_input)
100
107
  end
101
108
 
102
109
  # Read float value
103
110
  #
104
111
  # @api public
105
- def read_float(error=nil)
112
+ def read_float(error = nil)
106
113
  question.evaluate_response TTY::Coercer::Float.coerce(read_input)
107
114
  end
108
115
 
109
116
  # Read regular expression
110
117
  #
111
118
  # @api public
112
- def read_regex(error=nil)
119
+ def read_regex(error = nil)
113
120
  question.evaluate_response Kernel.send(:Regex, read_input)
114
121
  end
115
122
 
@@ -137,14 +144,14 @@ module TTY
137
144
  # Read boolean
138
145
  #
139
146
  # @api public
140
- def read_bool(error=nil)
147
+ def read_bool(error = nil)
141
148
  question.evaluate_response TTY::Coercer::Boolean.coerce read_input
142
149
  end
143
150
 
144
151
  # Read file contents
145
152
  #
146
153
  # @api public
147
- def read_file(error=nil)
154
+ def read_file(error = nil)
148
155
  question.evaluate_response File.open(File.join(directory, read_input))
149
156
  end
150
157
 
@@ -155,9 +162,7 @@ module TTY
155
162
  # @api public
156
163
  def read_email
157
164
  question.validate(/^[a-z0-9._%+-]+@([a-z0-9-]+\.)+[a-z]{2,6}$/i)
158
- if question.error
159
- question.prompt question.statement
160
- end
165
+ question.prompt(question.statement) if question.error
161
166
  with_exception { read_string }
162
167
  end
163
168
 
@@ -213,7 +218,6 @@ module TTY
213
218
  def valid_type?(type)
214
219
  self.class::VALID_TYPES.include? type.to_sym
215
220
  end
216
-
217
221
  end # Response
218
222
  end # Shell
219
223
  end # TTY
@@ -1,17 +1,22 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
3
  module TTY
4
+ # A class responsible for shell prompt interactions.
4
5
  class Shell
5
-
6
6
  # A class representing a statement output to shell.
7
7
  class Statement
8
-
9
8
  # @api private
10
9
  attr_reader :shell
11
10
  private :shell
12
11
 
12
+ # Flag to display newline
13
+ #
14
+ # @api public
13
15
  attr_reader :newline
14
16
 
17
+ # Color used to display statement
18
+ #
19
+ # @api public
15
20
  attr_reader :color
16
21
 
17
22
  # Initialize a Statement
@@ -27,10 +32,10 @@ module TTY
27
32
  # change the message display to color
28
33
  #
29
34
  # @api public
30
- def initialize(shell=nil, options={})
31
- @shell = shell || Shell.new
32
- @newline = options.fetch :newline, true
33
- @color = options.fetch :color, nil
35
+ def initialize(shell = Shell.new, options = {})
36
+ @shell = shell
37
+ @newline = options.fetch(:newline, true)
38
+ @color = options.fetch(:color, nil)
34
39
  end
35
40
 
36
41
  # Output the message to the shell
@@ -40,7 +45,7 @@ module TTY
40
45
  #
41
46
  # @api public
42
47
  def declare(message)
43
- message = TTY::terminal.color.set message, *color if color
48
+ message = TTY.terminal.color.set message, *color if color
44
49
 
45
50
  if newline && /( |\t)(\e\[\d+(;\d+)*m)?\Z/ !~ message
46
51
  shell.output.puts message
@@ -49,7 +54,6 @@ module TTY
49
54
  shell.output.flush
50
55
  end
51
56
  end
52
-
53
57
  end # Statement
54
58
  end # Shell
55
59
  end # TTY
@@ -1,12 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
3
  module TTY
4
4
  # A class responsible for shell prompt interactions.
5
5
  class Shell
6
-
7
6
  # A class representing a suggestion
8
7
  class Suggestion
9
-
10
8
  # @api private
11
9
  attr_reader :shell
12
10
  private :shell
@@ -26,6 +24,11 @@ module TTY
26
24
  # @api public
27
25
  attr_reader :plural_text
28
26
 
27
+ # Possible suggestions
28
+ #
29
+ # @api public
30
+ attr_reader :suggestions
31
+
29
32
  DEFAULT_INDENT = 8
30
33
 
31
34
  SINGLE_TEXT = 'Did you mean this?'
@@ -35,10 +38,11 @@ module TTY
35
38
  # Initialize a Suggestion
36
39
  #
37
40
  # @api public
38
- def initialize(options={})
41
+ def initialize(options = {})
39
42
  @indent = options.fetch(:indent) { DEFAULT_INDENT }
40
43
  @single_text = options.fetch(:single_text) { SINGLE_TEXT }
41
44
  @plural_text = options.fetch(:plural_text) { PLURAL_TEXT }
45
+ @suggestions = []
42
46
  end
43
47
 
44
48
  # Suggest matches out of possibile strings
@@ -54,11 +58,9 @@ module TTY
54
58
  max_distance = distances.keys.max
55
59
 
56
60
  if minimum_distance < max_distance
57
- suggestions = distances[minimum_distance].sort
58
- evaluate(suggestions)
59
- else
60
- nil
61
+ @suggestions = distances[minimum_distance].sort
61
62
  end
63
+ evaluate
62
64
  end
63
65
 
64
66
  # Measure distances between messag and possibilities
@@ -86,17 +88,19 @@ module TTY
86
88
  # @return [String]
87
89
  #
88
90
  # @api private
89
- def evaluate(suggestions)
90
- suggestion = ""
91
+ def evaluate
92
+ return suggestions if suggestions.empty?
93
+ suggestion = ''
91
94
  if suggestions.one?
92
95
  suggestion << single_text + "\n"
93
- suggestion << (" " * indent + suggestions.first)
96
+ suggestion << (' ' * indent + @suggestions.first)
94
97
  else
95
98
  suggestion << plural_text + "\n"
96
- suggestion << suggestions.map { |suggestion| " " * indent + suggestion }.join("\n")
99
+ suggestion << suggestions.map do |sugest|
100
+ ' ' * indent + sugest
101
+ end.join("\n")
97
102
  end
98
103
  end
99
-
100
104
  end # Suggestion
101
105
  end # Shell
102
106
  end # TTY