cliprompt 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -3
- data/README.md +1 -1
- data/example.rb +12 -2
- data/lib/cliprompt/optionset.rb +18 -2
- data/lib/cliprompt/version.rb +1 -1
- data/lib/cliprompt.rb +14 -1
- data/spec/lib/cliprompt_spec.rb +24 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 130c7d8782cb21bd861497572e1f70c561d3713a
|
4
|
+
data.tar.gz: a7e8e0ed439cb3efb295931f8149a2f602c6df3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a33c9fc219191d65e7f33fba11437d87795dfbc91387c6389ef9e79408297df0537f64158be384524f5097eddca13e7e700752a76d6f28ba67f3dcac1b72706
|
7
|
+
data.tar.gz: 2bdb0c2ee17d1e8017ee6d7b28eff9b58b7b5e15ecc1308b7bf5d3fbf8cee15973a30366379ecaaf574bb136c7ced84c99baac769afbe89bdde6cb5f06f709c0
|
data/CHANGELOG.md
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
Cliprompt Changelog
|
2
2
|
=====================
|
3
3
|
|
4
|
+
v0.0.4 - 2014-05-24
|
5
|
+
--------------------
|
6
|
+
|
7
|
+
- add an option `aslist` for we can decide if we want it as a list or not
|
8
|
+
- add a way to display big list, when choices are more than 5, make a list out of them
|
9
|
+
|
4
10
|
v0.0.3 - 2014-05-20
|
5
|
-
|
11
|
+
--------------------
|
6
12
|
|
7
13
|
- relax the boolean check so 1 and 0 can be used for yes and no (especially for env vars)
|
8
14
|
- added a `guess` method to have env var override question if set
|
9
15
|
|
10
16
|
v0.0.2 - 2014-05-20
|
11
|
-
|
17
|
+
--------------------
|
12
18
|
|
13
19
|
- fix case when numbers are used in choices
|
14
20
|
- added some test coverage for further evolution easiness
|
15
21
|
|
16
22
|
v0.0.1 - 2014-05-19
|
17
|
-
|
23
|
+
--------------------
|
18
24
|
|
19
25
|
- first draft
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ Cliprompt
|
|
7
7
|
[![Dependency Status](https://gemnasium.com/mose/cliprompt.svg)](https://gemnasium.com/mose/cliprompt)
|
8
8
|
[![Code Climate](https://codeclimate.com/github/mose/cliprompt.png)](https://codeclimate.com/github/mose/cliprompt)
|
9
9
|
|
10
|
-
This library provides a simple DSL for managing user interaction in a CLI application. Still under development,
|
10
|
+
This library provides a simple DSL for managing user interaction in a CLI application. Still under development, but usable already. Check the [Changelog](https://github.com/mose/cliprompt/blob/master/CHANGELOG.md) to see what is in already.
|
11
11
|
|
12
12
|
Features
|
13
13
|
----------
|
data/example.rb
CHANGED
@@ -40,6 +40,15 @@ class Myclass
|
|
40
40
|
showguess 'SOMEVAR', "what is your var?", [12, 'aa']
|
41
41
|
end
|
42
42
|
|
43
|
+
def biglist
|
44
|
+
puts '-------------------'
|
45
|
+
puts 'a long list of choices'
|
46
|
+
show 'a list with default?', [22, 33, 44, '=55', 66, 77, 'something else']
|
47
|
+
show 'a list without default?', [22, 33, 44, '55', 66, 77, 'something else']
|
48
|
+
show 'a big list of choices but not in list?', choices: [22, 33, 44, '=55', 66, 77, 'something else'], aslist: false
|
49
|
+
show 'a small list of choices but we want it in list?', choices: [22, 33, '=44'], aslist: true
|
50
|
+
end
|
51
|
+
|
43
52
|
def show(*args)
|
44
53
|
it = ask *args
|
45
54
|
puts "-- returned #{it.inspect}"
|
@@ -55,5 +64,6 @@ class Myclass
|
|
55
64
|
end
|
56
65
|
|
57
66
|
m = Myclass.new
|
58
|
-
m.guessit
|
59
|
-
m.askit
|
67
|
+
#m.guessit
|
68
|
+
#m.askit
|
69
|
+
m.biglist
|
data/lib/cliprompt/optionset.rb
CHANGED
@@ -5,13 +5,14 @@ module Cliprompt
|
|
5
5
|
|
6
6
|
class Optionset
|
7
7
|
|
8
|
-
attr_reader :choices, :default, :boolean, :envdefault
|
8
|
+
attr_reader :choices, :default, :boolean, :envdefault, :aslist
|
9
9
|
|
10
10
|
def initialize(options = nil)
|
11
11
|
@choices = []
|
12
12
|
@default = nil
|
13
13
|
@boolean = false
|
14
14
|
@envdefault = nil
|
15
|
+
@aslist = false
|
15
16
|
@type = options.class.name.downcase
|
16
17
|
meth = "parse_#{@type}".to_sym
|
17
18
|
if respond_to? meth
|
@@ -32,6 +33,11 @@ module Cliprompt
|
|
32
33
|
else
|
33
34
|
@default ||= args[:default] || args['default']
|
34
35
|
end
|
36
|
+
if args[:aslist] == false || args['aslist'] == false
|
37
|
+
@aslist = false
|
38
|
+
elsif args[:aslist] == true || args['aslist'] == true
|
39
|
+
@aslist = true
|
40
|
+
end
|
35
41
|
@boolean = args[:boolean] || args['boolean']
|
36
42
|
@default = true if (@boolean && @default.nil?)
|
37
43
|
@envdefault = args[:env] || args['env']
|
@@ -45,6 +51,7 @@ module Cliprompt
|
|
45
51
|
a
|
46
52
|
end
|
47
53
|
end
|
54
|
+
@aslist = (@choices.count > 5)
|
48
55
|
end
|
49
56
|
|
50
57
|
def parse_fixnum(arg)
|
@@ -87,7 +94,11 @@ module Cliprompt
|
|
87
94
|
elsif @boolean
|
88
95
|
check_boolean question, answer
|
89
96
|
elsif @choices.count > 0
|
90
|
-
|
97
|
+
if @aslist
|
98
|
+
check_list question, answer
|
99
|
+
else
|
100
|
+
check_choices question, answer
|
101
|
+
end
|
91
102
|
else
|
92
103
|
answer
|
93
104
|
end
|
@@ -108,6 +119,11 @@ module Cliprompt
|
|
108
119
|
answer
|
109
120
|
end
|
110
121
|
|
122
|
+
def check_list(question, answer)
|
123
|
+
return ask_again(question, Cliprompt::MSG_CHOSE_IN_LIST) unless answer.to_i < @choices.count
|
124
|
+
@choices[answer.to_i]
|
125
|
+
end
|
126
|
+
|
111
127
|
def ask_again(question, msg)
|
112
128
|
Cliprompt.shout msg
|
113
129
|
Cliprompt.ask question, self
|
data/lib/cliprompt/version.rb
CHANGED
data/lib/cliprompt.rb
CHANGED
@@ -10,6 +10,7 @@ module Cliprompt
|
|
10
10
|
MSG_MANDATORY_TEXT = "Sorry you need to fill that information."
|
11
11
|
MSG_YES_OR_NO = "You need to answer by yes, no, y, n, 1 or 0."
|
12
12
|
MSG_CHOSE_IN_LIST = "You need to chose between the available options."
|
13
|
+
MSG_CHOSE_A_NUMBER = "Choose a number:"
|
13
14
|
|
14
15
|
def ask(question, *options)
|
15
16
|
if options[0].class == Optionset
|
@@ -17,7 +18,19 @@ module Cliprompt
|
|
17
18
|
else
|
18
19
|
opts = Optionset.new *options
|
19
20
|
end
|
20
|
-
|
21
|
+
if opts.aslist
|
22
|
+
output.puts "#{question}"
|
23
|
+
opts.choices.each_with_index do |choice, i|
|
24
|
+
if opts.default == choice
|
25
|
+
output.printf "> %-3s %s\n", i, choice
|
26
|
+
else
|
27
|
+
output.printf " %-3s %s\n", i, choice
|
28
|
+
end
|
29
|
+
end
|
30
|
+
output.print "#{MSG_CHOSE_A_NUMBER} "
|
31
|
+
else
|
32
|
+
output.print "#{question} #{opts.display} "
|
33
|
+
end
|
21
34
|
answer = input.gets.chomp
|
22
35
|
output.flush
|
23
36
|
opts.validate(question, answer)
|
data/spec/lib/cliprompt_spec.rb
CHANGED
@@ -31,6 +31,30 @@ describe Cliprompt do
|
|
31
31
|
Then { expect(subject.ask(question, args)).to eq answer }
|
32
32
|
And { expect(output.string).to eq "#{question} " }
|
33
33
|
end
|
34
|
+
context 'with choices requested as a list,' do
|
35
|
+
When(:args) { { choices: ['aaa', 'bbb', 'ccc'], aslist: true } }
|
36
|
+
When { input.stub(:gets).and_return '1' }
|
37
|
+
Then { expect(subject.ask(question, args)).to eq 'bbb' }
|
38
|
+
And { expect(output.string).to eq "#{question}\n 0 aaa\n 1 bbb\n 2 ccc\n#{Cliprompt::MSG_CHOSE_A_NUMBER} " }
|
39
|
+
end
|
40
|
+
context 'with choices requested as a list with a default,' do
|
41
|
+
When(:args) { { choices: ['=aaa', 'bbb', 'ccc'], aslist: true } }
|
42
|
+
When { input.stub(:gets).and_return '' }
|
43
|
+
Then { expect(subject.ask(question, args)).to eq 'aaa' }
|
44
|
+
And { expect(output.string).to eq "#{question}\n> 0 aaa\n 1 bbb\n 2 ccc\n#{Cliprompt::MSG_CHOSE_A_NUMBER} " }
|
45
|
+
end
|
46
|
+
context 'with choices requested as a non-list despite there are many choices,' do
|
47
|
+
When(:args) { { choices: %w(aaa bbb ccc ddd eee fff), aslist: false } }
|
48
|
+
When { input.stub(:gets).and_return 'bbb' }
|
49
|
+
Then { expect(subject.ask(question, args)).to eq 'bbb' }
|
50
|
+
And { expect(output.string).to eq "#{question} (aaa / bbb / ccc / ddd / eee / fff) " }
|
51
|
+
end
|
52
|
+
context 'with a big list of choices,' do
|
53
|
+
When(:args) { %w(aaa bbb ccc ddd eee fff) }
|
54
|
+
When { input.stub(:gets).and_return '5' }
|
55
|
+
Then { expect(subject.ask(question, args)).to eq 'fff' }
|
56
|
+
And { expect(output.string).to eq "#{question}\n 0 aaa\n 1 bbb\n 2 ccc\n 3 ddd\n 4 eee\n 5 fff\n#{Cliprompt::MSG_CHOSE_A_NUMBER} " }
|
57
|
+
end
|
34
58
|
end
|
35
59
|
|
36
60
|
describe '.guess' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cliprompt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mose
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: paint
|