tty-prompt 0.20.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/README.md +29 -4
  4. data/lib/tty/prompt.rb +3 -3
  5. data/lib/tty/prompt/multi_list.rb +33 -10
  6. data/lib/tty/prompt/version.rb +1 -1
  7. metadata +11 -175
  8. data/Rakefile +0 -8
  9. data/examples/ask.rb +0 -7
  10. data/examples/ask_blank.rb +0 -9
  11. data/examples/ask_multiline.rb +0 -7
  12. data/examples/ask_valid.rb +0 -12
  13. data/examples/collect.rb +0 -21
  14. data/examples/echo.rb +0 -11
  15. data/examples/enum_select.rb +0 -7
  16. data/examples/enum_select_disabled.rb +0 -16
  17. data/examples/enum_select_paged.rb +0 -9
  18. data/examples/enum_select_wrapped.rb +0 -15
  19. data/examples/expand.rb +0 -29
  20. data/examples/expand_auto.rb +0 -29
  21. data/examples/in.rb +0 -9
  22. data/examples/inputs.rb +0 -10
  23. data/examples/key_events.rb +0 -15
  24. data/examples/keypress.rb +0 -9
  25. data/examples/mask.rb +0 -13
  26. data/examples/multi_select.rb +0 -8
  27. data/examples/multi_select_disabled.rb +0 -17
  28. data/examples/multi_select_disabled_paged.rb +0 -22
  29. data/examples/multi_select_paged.rb +0 -9
  30. data/examples/multi_select_wrapped.rb +0 -15
  31. data/examples/multiline.rb +0 -9
  32. data/examples/pause.rb +0 -9
  33. data/examples/select.rb +0 -24
  34. data/examples/select_disabled.rb +0 -18
  35. data/examples/select_disabled_paged.rb +0 -22
  36. data/examples/select_enum.rb +0 -8
  37. data/examples/select_filtered.rb +0 -11
  38. data/examples/select_paginated.rb +0 -11
  39. data/examples/select_wrapped.rb +0 -15
  40. data/examples/slider.rb +0 -6
  41. data/examples/validation.rb +0 -9
  42. data/examples/yes_no.rb +0 -7
  43. data/spec/spec_helper.rb +0 -61
  44. data/spec/unit/ask_spec.rb +0 -173
  45. data/spec/unit/block_paginator_spec.rb +0 -84
  46. data/spec/unit/choice/eql_spec.rb +0 -22
  47. data/spec/unit/choice/from_spec.rb +0 -130
  48. data/spec/unit/choices/add_spec.rb +0 -12
  49. data/spec/unit/choices/each_spec.rb +0 -13
  50. data/spec/unit/choices/find_by_spec.rb +0 -10
  51. data/spec/unit/choices/new_spec.rb +0 -10
  52. data/spec/unit/choices/pluck_spec.rb +0 -9
  53. data/spec/unit/collect_spec.rb +0 -96
  54. data/spec/unit/converters/convert_bool_spec.rb +0 -58
  55. data/spec/unit/converters/convert_char_spec.rb +0 -11
  56. data/spec/unit/converters/convert_custom_spec.rb +0 -14
  57. data/spec/unit/converters/convert_date_spec.rb +0 -34
  58. data/spec/unit/converters/convert_file_spec.rb +0 -18
  59. data/spec/unit/converters/convert_number_spec.rb +0 -39
  60. data/spec/unit/converters/convert_path_spec.rb +0 -15
  61. data/spec/unit/converters/convert_range_spec.rb +0 -22
  62. data/spec/unit/converters/convert_regex_spec.rb +0 -12
  63. data/spec/unit/converters/convert_string_spec.rb +0 -21
  64. data/spec/unit/converters/on_error_spec.rb +0 -9
  65. data/spec/unit/distance/distance_spec.rb +0 -73
  66. data/spec/unit/enum_select_spec.rb +0 -518
  67. data/spec/unit/error_spec.rb +0 -20
  68. data/spec/unit/evaluator_spec.rb +0 -67
  69. data/spec/unit/expand_spec.rb +0 -290
  70. data/spec/unit/keypress_spec.rb +0 -66
  71. data/spec/unit/mask_spec.rb +0 -140
  72. data/spec/unit/multi_select_spec.rb +0 -741
  73. data/spec/unit/multiline_spec.rb +0 -77
  74. data/spec/unit/new_spec.rb +0 -20
  75. data/spec/unit/ok_spec.rb +0 -10
  76. data/spec/unit/paginator_spec.rb +0 -92
  77. data/spec/unit/question/checks_spec.rb +0 -97
  78. data/spec/unit/question/default_spec.rb +0 -31
  79. data/spec/unit/question/echo_spec.rb +0 -38
  80. data/spec/unit/question/in_spec.rb +0 -115
  81. data/spec/unit/question/initialize_spec.rb +0 -12
  82. data/spec/unit/question/modifier/apply_to_spec.rb +0 -24
  83. data/spec/unit/question/modifier/letter_case_spec.rb +0 -41
  84. data/spec/unit/question/modifier/whitespace_spec.rb +0 -51
  85. data/spec/unit/question/modify_spec.rb +0 -41
  86. data/spec/unit/question/required_spec.rb +0 -92
  87. data/spec/unit/question/validate_spec.rb +0 -115
  88. data/spec/unit/question/validation/call_spec.rb +0 -31
  89. data/spec/unit/question/validation/coerce_spec.rb +0 -30
  90. data/spec/unit/result_spec.rb +0 -40
  91. data/spec/unit/say_spec.rb +0 -67
  92. data/spec/unit/select_spec.rb +0 -942
  93. data/spec/unit/slider_spec.rb +0 -142
  94. data/spec/unit/statement/initialize_spec.rb +0 -15
  95. data/spec/unit/subscribe_spec.rb +0 -22
  96. data/spec/unit/suggest_spec.rb +0 -28
  97. data/spec/unit/timer_spec.rb +0 -29
  98. data/spec/unit/warn_spec.rb +0 -21
  99. data/spec/unit/yes_no_spec.rb +0 -285
  100. data/tasks/console.rake +0 -11
  101. data/tasks/coverage.rake +0 -11
  102. data/tasks/spec.rake +0 -29
  103. data/tty-prompt.gemspec +0 -40
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../lib/tty-prompt"
4
-
5
- prompt = TTY::Prompt.new
6
-
7
- alfabet = ('A'..'Z').to_a
8
-
9
- answer = prompt.select('Which letter?', alfabet, per_page: 7, cycle: true, default: 5)
10
-
11
- puts answer.inspect
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../lib/tty-prompt'
4
-
5
- prompt = TTY::Prompt.new
6
-
7
- quotes = [
8
- "There are certain queer times and occasions in this strange mixed affair we call life when a man takes this whole universe for a vast practical joke, though the wit thereof he but dimly discerns, and more than suspects that the joke is at nobody's expense but his own.",
9
- "Talk not to me of blasphemy, man;\n I'd strike the sun if it insulted me.",
10
- "There is a wisdom that is woe; but there is a woe that is madness. And there is a Catskill eagle in some souls that can alike dive down into the blackest gorges, and soar out of them again and become invisible in the sunny spaces. And even if he for ever flies within the gorge, that gorge is in the mountains; so that even in his lowest swoop the mountain eagle is still higher than other birds upon the plain, even though they soar."
11
- ]
12
-
13
- answer = prompt.select('Chose your quote?', quotes)
14
-
15
- puts "Answer: #{answer}"
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../lib/tty-prompt"
4
-
5
- prompt = TTY::Prompt.new
6
- prompt.slider("Volume", max: 100, step: 5, default: 75, format: "|:slider| %d%%")
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../lib/tty-prompt"
4
-
5
- prompt = TTY::Prompt.new
6
-
7
- prompt.ask('What is your username?') do |q|
8
- q.validate(/^[^\.]+\.[^\.]+/)
9
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../lib/tty-prompt"
4
-
5
- prompt = TTY::Prompt.new
6
-
7
- prompt.yes?('Do you like Ruby?')
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- if ENV['COVERAGE'] || ENV['TRAVIS']
4
- require 'simplecov'
5
- require 'coveralls'
6
-
7
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
8
- SimpleCov::Formatter::HTMLFormatter,
9
- Coveralls::SimpleCov::Formatter
10
- ])
11
-
12
- SimpleCov.start do
13
- command_name 'spec'
14
- add_filter 'spec'
15
- end
16
- end
17
-
18
- require 'tty-prompt'
19
-
20
- class StringIO
21
- def wait_readable(*)
22
- true
23
- end
24
- end
25
-
26
- module Helpers
27
- def diff_output(actual_output, expected_output)
28
- puts "ACTUAL: #{actual_output.inspect}"
29
- puts "--------------------------------\n"
30
- puts "EXPECT: #{expected_output.inspect}"
31
- end
32
- end
33
-
34
- RSpec.configure do |config|
35
- config.include(Helpers)
36
-
37
- config.expect_with :rspec do |expectations|
38
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
39
- end
40
-
41
- config.mock_with :rspec do |mocks|
42
- mocks.verify_partial_doubles = true
43
- end
44
-
45
- # Limits the available syntax to the non-monkey patched syntax that is recommended.
46
- config.disable_monkey_patching!
47
-
48
- # This setting enables warnings. It's recommended, but in some cases may
49
- # be too noisy due to issues in dependencies.
50
- config.warnings = true
51
-
52
- if config.files_to_run.one?
53
- config.default_formatter = 'doc'
54
- end
55
-
56
- config.profile_examples = 2
57
-
58
- config.order = :random
59
-
60
- Kernel.srand config.seed
61
- end
@@ -1,173 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe TTY::Prompt, '#ask' do
4
-
5
- subject(:prompt) { TTY::TestPrompt.new }
6
-
7
- it 'asks question' do
8
- prompt.ask('What is your name?')
9
- expect(prompt.output.string).to eq([
10
- "What is your name? ",
11
- "\e[1A\e[2K\e[1G",
12
- "What is your name? \n"
13
- ].join)
14
- end
15
-
16
- it 'asks an empty question ' do
17
- prompt = TTY::TestPrompt.new
18
- prompt.input << "\r"
19
- prompt.input.rewind
20
-
21
- answer = prompt.ask
22
- expect(answer).to eq(nil)
23
-
24
- expect(prompt.output.string).to eql("\e[2K\e[1G\n\e[1A\e[2K\e[1G\n")
25
- end
26
-
27
- it "asks an empty question and returns nil if EOF is sent to stdin" do
28
- prompt = TTY::TestPrompt.new
29
- prompt.input << nil
30
- prompt.input.rewind
31
-
32
- answer = prompt.ask('')
33
-
34
- expect(answer).to eql(nil)
35
- expect(prompt.output.string).to eq("\e[1A\e[2K\e[1G\n")
36
- end
37
-
38
- it "asks an empty question with prepopulated value" do
39
- prompt = TTY::TestPrompt.new
40
- prompt.input << "\n"
41
- prompt.input.rewind
42
-
43
- answer = prompt.ask value: "yes"
44
-
45
- expect(answer).to eq("yes")
46
- expect(prompt.output.string).to eq([
47
- "yes\e[2K\e[1G",
48
- "yes\n\e[1A\e[2K\e[1G",
49
- "\e[32myes\e[0m\n"
50
- ].join)
51
- end
52
-
53
- it "asks question with prepopulated value" do
54
- prompt = TTY::TestPrompt.new prefix: "> "
55
- prompt.input << "\n"
56
- prompt.input.rewind
57
-
58
- answer = prompt.ask("Say?") do |q|
59
- q.value "yes"
60
- end
61
-
62
- expect(answer).to eq("yes")
63
- expect(prompt.output.string).to eq([
64
- "> Say? yes\e[2K\e[1G",
65
- "> Say? yes\n\e[1A\e[2K\e[1G",
66
- "> Say? \e[32myes\e[0m\n"
67
- ].join)
68
- end
69
-
70
- it "asks a question with a prefix [?]" do
71
- prompt = TTY::TestPrompt.new(prefix: "[?] ")
72
- prompt.input << "\r"
73
- prompt.input.rewind
74
- answer = prompt.ask 'Are you Polish?'
75
- expect(answer).to eq(nil)
76
- expect(prompt.output.string).to eq([
77
- "[?] Are you Polish? ",
78
- "\e[2K\e[1G[?] Are you Polish? \n",
79
- "\e[1A\e[2K\e[1G",
80
- "[?] Are you Polish? \n"
81
- ].join)
82
- end
83
-
84
- it 'asks a question with block' do
85
- prompt.input << ''
86
- prompt.input.rewind
87
- answer = prompt.ask "What is your name?" do |q|
88
- q.default 'Piotr'
89
- end
90
- expect(answer).to eq('Piotr')
91
- expect(prompt.output.string).to eq([
92
- "What is your name? \e[90m(Piotr)\e[0m ",
93
- "\e[1A\e[2K\e[1G",
94
- "What is your name? \e[32mPiotr\e[0m\n"
95
- ].join)
96
- end
97
-
98
- it "changes question color" do
99
- prompt.input << ''
100
- prompt.input.rewind
101
- options = {default: 'Piotr', help_color: :red, active_color: :cyan}
102
- answer = prompt.ask("What is your name?", **options)
103
- expect(answer).to eq('Piotr')
104
- expect(prompt.output.string).to eq([
105
- "What is your name? \e[31m(Piotr)\e[0m ",
106
- "\e[1A\e[2K\e[1G",
107
- "What is your name? \e[36mPiotr\e[0m\n"
108
- ].join)
109
- end
110
-
111
- it "permits empty default parameter" do
112
- prompt.input << "\r"
113
- prompt.input.rewind
114
-
115
- answer = prompt.ask("What is your name?", default: '')
116
- expect(answer).to eq('')
117
- expect(prompt.output.string).to eq([
118
- "What is your name? ",
119
- "\e[2K\e[1GWhat is your name? \n",
120
- "\e[1A\e[2K\e[1G",
121
- "What is your name? \n"
122
- ].join)
123
- end
124
-
125
- it "permits nil default parameter" do
126
- prompt.input << "\r"
127
- prompt.input.rewind
128
-
129
- answer = prompt.ask("What is your name?", default: nil)
130
- expect(answer).to eq(nil)
131
- expect(prompt.output.string).to eq([
132
- "What is your name? ",
133
- "\e[2K\e[1GWhat is your name? \n",
134
- "\e[1A\e[2K\e[1G",
135
- "What is your name? \n"
136
- ].join)
137
- end
138
-
139
- it "overwrites global settings" do
140
- global_settings = {prefix: "[?] ", active_color: :cyan, help_color: :red}
141
- prompt = TTY::TestPrompt.new(global_settings)
142
-
143
- prompt.input << "Piotr\r"
144
- prompt.input.rewind
145
- prompt.ask('What is your name?')
146
-
147
- prompt.input << "Piotr\r"
148
- prompt.input.rewind
149
- local_settings = {prefix: ':-) ', active_color: :blue, help_color: :magenta}
150
- prompt.ask('What is your name?', **local_settings)
151
-
152
- expect(prompt.output.string).to eq([
153
- "[?] What is your name? ",
154
- "\e[2K\e[1G[?] What is your name? P",
155
- "\e[2K\e[1G[?] What is your name? Pi",
156
- "\e[2K\e[1G[?] What is your name? Pio",
157
- "\e[2K\e[1G[?] What is your name? Piot",
158
- "\e[2K\e[1G[?] What is your name? Piotr",
159
- "\e[2K\e[1G[?] What is your name? Piotr\n",
160
- "\e[1A\e[2K\e[1G",
161
- "[?] What is your name? \e[36mPiotr\e[0m\n",
162
- ":-) What is your name? ",
163
- "\e[2K\e[1G:-) What is your name? P",
164
- "\e[2K\e[1G:-) What is your name? Pi",
165
- "\e[2K\e[1G:-) What is your name? Pio",
166
- "\e[2K\e[1G:-) What is your name? Piot",
167
- "\e[2K\e[1G:-) What is your name? Piotr",
168
- "\e[2K\e[1G:-) What is your name? Piotr\n",
169
- "\e[1A\e[2K\e[1G",
170
- ":-) What is your name? \e[34mPiotr\e[0m\n"
171
- ].join)
172
- end
173
- end
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe TTY::Prompt::BlockPaginator, '#paginate' do
4
- it "ignores per_page when equal items " do
5
- list = %w(a b c d)
6
- paginator = described_class.new(per_page: 4)
7
-
8
- expect(paginator.paginate(list, 1).to_a).to eq([
9
- ['a',0],['b',1],['c',2],['d',3]])
10
- end
11
-
12
- it "ignores per_page when less items " do
13
- list = %w(a b c d)
14
- paginator = described_class.new(per_page: 5)
15
-
16
- expect(paginator.paginate(list, 1).to_a).to eq([
17
- ['a',0],['b',1],['c',2],['d',3]])
18
- end
19
-
20
- it "paginates items matching per_page count" do
21
- list = %w(a b c d e f)
22
- paginator = described_class.new(per_page: 3)
23
-
24
- expect(paginator.paginate(list, 1).to_a).to eq([['a',0], ['b',1], ['c',2]])
25
- expect(paginator.paginate(list, 2).to_a).to eq([['a',0], ['b',1], ['c',2]])
26
- expect(paginator.paginate(list, 3).to_a).to eq([['a',0], ['b',1], ['c',2]])
27
- expect(paginator.paginate(list, 4).to_a).to eq([['d',3], ['e',4], ['f',5]])
28
- expect(paginator.paginate(list, 5).to_a).to eq([['d',3], ['e',4], ['f',5]])
29
- expect(paginator.paginate(list, 6).to_a).to eq([['d',3], ['e',4], ['f',5]])
30
- expect(paginator.paginate(list, 7).to_a).to eq([['d',3], ['e',4], ['f',5]])
31
- end
32
-
33
- it "paginates items not matching per_page count" do
34
- list = %w(a b c d e f g)
35
- paginator = described_class.new(per_page: 3)
36
-
37
- expect(paginator.paginate(list, 1).to_a).to eq([['a',0], ['b',1], ['c',2]])
38
- expect(paginator.paginate(list, 2).to_a).to eq([['a',0], ['b',1], ['c',2]])
39
- expect(paginator.paginate(list, 3).to_a).to eq([['a',0], ['b',1], ['c',2]])
40
- expect(paginator.paginate(list, 4).to_a).to eq([['d',3], ['e',4], ['f',5]])
41
- expect(paginator.paginate(list, 5).to_a).to eq([['d',3], ['e',4], ['f',5]])
42
- expect(paginator.paginate(list, 6).to_a).to eq([['d',3], ['e',4], ['f',5]])
43
- expect(paginator.paginate(list, 7).to_a).to eq([['g',6]])
44
- expect(paginator.paginate(list, 8).to_a).to eq([['g',6]])
45
- end
46
-
47
- it "finds both start and end index for current selection" do
48
- list = %w(a b c d e f g)
49
- paginator = described_class.new(per_page: 3, default: 0)
50
-
51
- paginator.paginate(list, 3)
52
- expect(paginator.start_index).to eq(0)
53
- expect(paginator.end_index).to eq(2)
54
-
55
- paginator.paginate(list, 4)
56
- expect(paginator.start_index).to eq(3)
57
- expect(paginator.end_index).to eq(5)
58
-
59
- paginator.paginate(list, 5)
60
- expect(paginator.start_index).to eq(3)
61
- expect(paginator.end_index).to eq(5)
62
-
63
- paginator.paginate(list, 7)
64
- expect(paginator.start_index).to eq(6)
65
- expect(paginator.end_index).to eq(6)
66
- end
67
-
68
- it "starts with default selection" do
69
- list = %w(a b c d e f g)
70
- paginator = described_class.new(per_page: 3, default: 3)
71
-
72
- expect(paginator.paginate(list, 4).to_a).to eq([['d',3], ['e',4], ['f',5]])
73
- end
74
-
75
- it "doesn't accept invalid pagination" do
76
- list = %w(a b c d e f g)
77
-
78
- paginator = described_class.new(per_page: 0)
79
-
80
- expect {
81
- paginator.paginate(list, 4)
82
- }.to raise_error(TTY::Prompt::InvalidArgument, /per_page must be > 0/)
83
- end
84
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe TTY::Prompt::Choice, '#==' do
4
- it "is true with the same name and value attributes" do
5
- expect(described_class.new(:large, 1)).
6
- to eq(described_class.new(:large, 1))
7
- end
8
-
9
- it "is false with different name attribute" do
10
- expect(described_class.new(:large, 1)).
11
- not_to eq(described_class.new(:medium, 1))
12
- end
13
-
14
- it "is false with different value attribute" do
15
- expect(described_class.new(:large, 1)).
16
- not_to eq(described_class.new(:large, 2))
17
- end
18
-
19
- it "is false with non-choice object" do
20
- expect(described_class.new(:large, 1)).not_to eq(:other)
21
- end
22
- end
@@ -1,130 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe TTY::Prompt::Choice, '#from' do
4
- it "skips Choice instance" do
5
- choice = described_class.new(:large, 1)
6
-
7
- expect(described_class.from(choice)).to eq(choice)
8
- end
9
-
10
- it "creates choice from string" do
11
- expected_choice = described_class.new('large', 'large')
12
- choice = described_class.from('large')
13
-
14
- expect(choice).to eq(expected_choice)
15
- expect(choice.name).to eq('large')
16
- expect(choice.value).to eq('large')
17
- end
18
-
19
- it "creates choice from array with one element" do
20
- expected_choice = described_class.new('large', 'large')
21
- choice = described_class.from([:large])
22
-
23
- expect(choice).to eq(expected_choice)
24
- expect(choice.name).to eq('large')
25
- expect(choice.value).to eq('large')
26
- end
27
-
28
- it "creates choice from array with more than one element" do
29
- expected_choice = described_class.new('large', 1)
30
- choice = described_class.from([:large, 1])
31
-
32
- expect(choice).to eq(expected_choice)
33
- expect(choice.name).to eq('large')
34
- expect(choice.value).to eq(1)
35
- end
36
-
37
- it "creates choice from array with false" do
38
- expected_choice = described_class.new('large', false)
39
- choice = described_class.from([:large, false])
40
-
41
- expect(choice).to eq(expected_choice)
42
- expect(choice.name).to eq('large')
43
- expect(choice.value).to eq(false)
44
- end
45
-
46
- it "defaults value to name if value is nil" do
47
- expected_choice = described_class.new('large', 'large')
48
- choice = described_class.from([:large, nil])
49
-
50
- expect(choice).to eq(expected_choice)
51
- expect(choice.name).to eq('large')
52
- expect(choice.value).to eq('large')
53
- end
54
-
55
- it "creates choice from hash value" do
56
- expected_choice = described_class.new('large', 1)
57
- choice = described_class.from({large: 1})
58
-
59
- expect(choice).to eq(expected_choice)
60
- expect(choice.name).to eq('large')
61
- expect(choice.value).to eq(1)
62
- end
63
-
64
- it "creats choice from array with key value pair" do
65
- expected_choice = described_class.new('large', 1)
66
- choice = described_class.from([{'large' => 1}])
67
-
68
- expect(choice).to eq(expected_choice)
69
- expect(choice.name).to eq('large')
70
- expect(choice.value).to eq(1)
71
- end
72
-
73
- it "creats choice from array with hash elements" do
74
- expected_choice = described_class.new('large', 1)
75
- choice = described_class.from([{name: 'large', value: 1}])
76
-
77
- expect(choice).to eq(expected_choice)
78
- expect(choice.name).to eq('large')
79
- expect(choice.value).to eq(1)
80
- end
81
-
82
- it "creats choice from array with hash elements without value" do
83
- expected_choice = described_class.new('large', 'large')
84
- choice = described_class.from([{name: 'large'}])
85
-
86
- expect(choice).to eq(expected_choice)
87
- expect(choice.name).to eq('large')
88
- expect(choice.value).to eq('large')
89
- end
90
-
91
- it "creates choice from hash with key property" do
92
- default = {key: 'h', name: 'Help', value: :help}
93
- expected_choice = described_class.new('Help', :help, key: 'h')
94
- choice = described_class.from(default)
95
-
96
- expect(choice).to eq(expected_choice)
97
- expect(choice.name).to eq('Help')
98
- expect(choice.value).to eq(:help)
99
- expect(choice.disabled?).to eq(false)
100
- end
101
-
102
- it "creates disabled choice" do
103
- expected_choice = described_class.new('Disabled', :none, disabled: true)
104
- choice = described_class.from({
105
- name: 'Disabled',
106
- value: :none,
107
- disabled: 'unavailable'})
108
-
109
- expect(choice).to eq(expected_choice)
110
- expect(choice.name).to eq('Disabled')
111
- expect(choice.value).to eq(:none)
112
- expect(choice.disabled?).to eq(true)
113
- end
114
-
115
- it "creates choice from an arbitrary object that responds to to_s call" do
116
- stub_const("Size", Class.new do
117
- def to_s
118
- 'large'
119
- end
120
- end)
121
- size = Size.new
122
- expected_choice = described_class.new(size, size)
123
- choice = described_class.from(size)
124
-
125
- expect(choice).to eq(expected_choice)
126
- expect(choice.name).to eq(size)
127
- expect(choice.value).to eq(size)
128
- expect(choice.disabled?).to eq(false)
129
- end
130
- end