palaver 0.2.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.
- data/.gitignore +1 -0
- data/LICENSE +20 -0
- data/README.md +16 -0
- data/Rakefile +21 -0
- data/examples/calendar.rb +14 -0
- data/examples/checklist.rb +28 -0
- data/examples/dselect.rb +13 -0
- data/examples/form.rb +16 -0
- data/examples/form_simple.rb +18 -0
- data/examples/fselect.rb +13 -0
- data/examples/infobox.rb +14 -0
- data/examples/inputbox.rb +16 -0
- data/examples/menu.rb +28 -0
- data/examples/msgbox.rb +9 -0
- data/examples/passwordbox.rb +16 -0
- data/examples/pause.rb +14 -0
- data/examples/radiolist.rb +28 -0
- data/examples/textbox.rb +9 -0
- data/examples/yesno.rb +15 -0
- data/lib/palaver/base.rb +40 -0
- data/lib/palaver/calendar.rb +43 -0
- data/lib/palaver/checklist.rb +24 -0
- data/lib/palaver/dialog_factory.rb +42 -0
- data/lib/palaver/dselect.rb +18 -0
- data/lib/palaver/form.rb +96 -0
- data/lib/palaver/fselect.rb +17 -0
- data/lib/palaver/infobox.rb +15 -0
- data/lib/palaver/inputbox.rb +34 -0
- data/lib/palaver/list_with_options.rb +46 -0
- data/lib/palaver/menu.rb +25 -0
- data/lib/palaver/msgbox.rb +15 -0
- data/lib/palaver/passwordbox.rb +36 -0
- data/lib/palaver/pathselect.rb +35 -0
- data/lib/palaver/pause.rb +26 -0
- data/lib/palaver/radiolist.rb +24 -0
- data/lib/palaver/textbox.rb +25 -0
- data/lib/palaver/yesno.rb +16 -0
- data/lib/palaver.rb +18 -0
- data/palaver.gemspec +14 -0
- metadata +106 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012, Peter Allin <peter@peca.dk>
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted
|
5
|
+
provided that the following conditions are met:
|
6
|
+
|
7
|
+
- Redistributions of source code must retain the above copyright notice, this list of conditions and
|
8
|
+
the following disclaimer.
|
9
|
+
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions
|
10
|
+
and the following disclaimer in the documentation and/or other materials provided with the
|
11
|
+
distribution.
|
12
|
+
|
13
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
14
|
+
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
16
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
17
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
18
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
19
|
+
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
20
|
+
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# Palaver -- A 'dialog' API for Ruby
|
2
|
+
|
3
|
+
Palaver is a ruby library for making text user interfaces based on the program "dialog"
|
4
|
+
(http://invisible-island.net/dialog/). It aims at making all the features of the "dialog" program
|
5
|
+
available for Ruby programs.
|
6
|
+
|
7
|
+
The project was started because the RDialog (http://rdialog.rubyforge.org/) project with similar
|
8
|
+
aims seemed idle and missed some features that I needed. I also felt that RDialogs API was not a
|
9
|
+
very good match for some of the more complex dialogs supported by the "dialog" program.
|
10
|
+
|
11
|
+
In order to scratch these itches I have implemented, what I call the "blocks based API", in
|
12
|
+
Palaver. This API works by passing a Ruby block to a factory method, the function calls in this
|
13
|
+
block then defines the dialog to be created. I believe this kind of API is well suited for things
|
14
|
+
like the "menu" and "form" dialogs from the "dialog" program. For the simpler dialogs a more
|
15
|
+
conventional API where the factory methods are given hashes containing parameter to value mappings
|
16
|
+
is implemented. The examples in the "examples" directory show how both kind of APIs can be used.
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rubygems/package_task'
|
3
|
+
|
4
|
+
gemspec = eval(File.read("palaver.gemspec"))
|
5
|
+
|
6
|
+
desc "Validate the gemspec"
|
7
|
+
task :gemspec do
|
8
|
+
gemspec.validate
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Build gem locally"
|
12
|
+
task :build => :gemspec do
|
13
|
+
system "gem build #{gemspec.name}.gemspec"
|
14
|
+
FileUtils.mkdir "pkg" unless File.exists? "pkg"
|
15
|
+
FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", "pkg"
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Clean automatically generated files"
|
19
|
+
task :clean do
|
20
|
+
FileUtils.rm_rf "pkg"
|
21
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
dialog_factory = Palaver::DialogFactory.new
|
5
|
+
|
6
|
+
# Using the hash based API with the calendar dialog
|
7
|
+
start_date = dialog_factory.calendar(:text => "Choose the start date", :date => Date.new(1939,9,1)).show
|
8
|
+
|
9
|
+
# Using the block based API with the calendar dialog. This probably doesn'palaver'
|
10
|
+
# simple widget like the calendar.
|
11
|
+
end_date = dialog_factory.calendar { text "Choose the end date"; date Date.new(1945,9,2); }.show
|
12
|
+
|
13
|
+
puts start_date
|
14
|
+
puts end_date
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
chosen1 = dialog_factory.checklist(:text => "Which do you want, hash style?",
|
6
|
+
:options => [
|
7
|
+
[ "fisk", "A confusing choice for a metasyntactic variable name", :off ],
|
8
|
+
[ "foo", "The classic first metasyntactic variable name", :on ],
|
9
|
+
[ "bar", "The classic second metasyntactic variable name", :off ],
|
10
|
+
[ "baz", "The classic third metasyntactic variable name", :off ],
|
11
|
+
[ "quux", "A quite unusual metasyntactic variable name", :off ]
|
12
|
+
]).show
|
13
|
+
|
14
|
+
chosen2 = dialog_factory.checklist {
|
15
|
+
text "Which do you want, block style?"
|
16
|
+
option "fisk", "A confusing choice for a metasyntactic variable name"
|
17
|
+
option "foo", "The classic first metasyntactic variable name", :on
|
18
|
+
option "bar", "The classic second metasyntactic variable name", :on
|
19
|
+
option "baz", "The classic third metasyntactic variable name", :on
|
20
|
+
option "quux", "A quite unusual metasyntactic variable name"
|
21
|
+
}.show
|
22
|
+
|
23
|
+
puts "Chosen from the dialog created with the hash style:"
|
24
|
+
puts chosen1
|
25
|
+
puts
|
26
|
+
puts "Chosen from the dialog created with the block style"
|
27
|
+
puts chosen2
|
28
|
+
|
data/examples/dselect.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
# Using the hash based API for requesting the user to choose a directory
|
6
|
+
dir_hash = dialog_factory.dselect(:path => "/").show
|
7
|
+
|
8
|
+
# Using the block based API for requesting the user to choose a directory
|
9
|
+
dir_block = dialog_factory.dselect { path "/" }.show
|
10
|
+
|
11
|
+
puts "Dir chosen with hash method #{dir_hash}"
|
12
|
+
puts "Dir chosen with block method #{dir_block}"
|
13
|
+
|
data/examples/form.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
answers = dialog_factory.form {
|
6
|
+
text "Foos and their texts"
|
7
|
+
height 10
|
8
|
+
form_height 5
|
9
|
+
entry :first, "First foo", 1, 0, "Default text for first foo", 1, 15, 20, 200
|
10
|
+
entry :second, "Second foo", 1, 40, "Default text for second foo", 1, 55, 20, 200
|
11
|
+
entry :third, "Third foo", 3, 0, "Default text for third foo", 3, 15, 20, 200
|
12
|
+
}.show
|
13
|
+
|
14
|
+
answers.keys.each do |k|
|
15
|
+
puts "#{k}: #{answers[k]}"
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
answers = dialog_factory.form {
|
6
|
+
text "Simple-entry foos and their texts"
|
7
|
+
height 10
|
8
|
+
form_height 5
|
9
|
+
simple_display_width 30
|
10
|
+
simple_text_length 200
|
11
|
+
simple_entry :first, "First foo", "Default text for first foo"
|
12
|
+
simple_entry :second, "Second foo", "Default text for second foo"
|
13
|
+
simple_entry :third, "Third foo", "Default text for third foo"
|
14
|
+
}.show
|
15
|
+
|
16
|
+
answers.keys.each do |k|
|
17
|
+
puts "#{k}: #{answers[k]}"
|
18
|
+
end
|
data/examples/fselect.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
# Using the hash based API for requesting the user to choose a fileectory
|
6
|
+
file_hash = dialog_factory.fselect(:path => "/", :width => 60, :height => 10).show
|
7
|
+
|
8
|
+
# Using the block based API for requesting the user to choose a fileectory
|
9
|
+
file_block = dialog_factory.fselect { path "/"; width 60; height 10; }.show
|
10
|
+
|
11
|
+
puts "File chosen with hash method #{file_hash}"
|
12
|
+
puts "File chosen with block method #{file_block}"
|
13
|
+
|
data/examples/infobox.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
dialog_factory.infobox(:text => "This is information from the hash based api").show
|
6
|
+
sleep 2
|
7
|
+
dialog_factory.infobox(:text => "This is wide information from the hash based api", :width => 60, :height => 10).show
|
8
|
+
sleep 2
|
9
|
+
|
10
|
+
dialog_factory.infobox{ text "This is information from the block based api" }.show
|
11
|
+
sleep 2
|
12
|
+
dialog_factory.infobox{ text "This is wide information from the block based api"; width 60; height 10 }.show
|
13
|
+
sleep 2
|
14
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
# Using the hash based API for asking a question in an input box
|
6
|
+
answer_hash = dialog_factory.inputbox(:text => "What do you think about the hash based API?", :initial => "I like it very much" ).show
|
7
|
+
|
8
|
+
# Using the block based API for asking a question in an input box
|
9
|
+
answer_block = dialog_factory.inputbox{ text "What do you think about the block based API?"; initial "I love it"; }.show
|
10
|
+
|
11
|
+
# Using the block based API, with no initial value
|
12
|
+
answer_ruby = dialog_factory.inputbox { text "What do you think about Ruby? (be creative)" }.show
|
13
|
+
|
14
|
+
puts "Answer to the hash question: #{answer_hash}"
|
15
|
+
puts "Answer to the block question: #{answer_block}"
|
16
|
+
puts "Answer to the Ruby question: #{answer_ruby}"
|
data/examples/menu.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
chosen1 = dialog_factory.menu(:text => "Choose from the menu, hash style",
|
6
|
+
:options => [
|
7
|
+
[ "fisk", "A confusing choice for a metasyntactic variable name", :off ],
|
8
|
+
[ "foo", "The classic first metasyntactic variable name", :on ],
|
9
|
+
[ "bar", "The classic second metasyntactic variable name", :off ],
|
10
|
+
[ "baz", "The classic third metasyntactic variable name", :off ],
|
11
|
+
[ "quux", "A quite unusual metasyntactic variable name", :off ]
|
12
|
+
]).show
|
13
|
+
|
14
|
+
chosen2 = dialog_factory.menu {
|
15
|
+
text "Choose from the menu, block style"
|
16
|
+
option "fisk", "A confusing choice for a metasyntactic variable name"
|
17
|
+
option "foo", "The classic first metasyntactic variable name", :on
|
18
|
+
option "bar", "The classic second metasyntactic variable name", :on
|
19
|
+
option "baz", "The classic third metasyntactic variable name", :on
|
20
|
+
option "quux", "A quite unusual metasyntactic variable name"
|
21
|
+
}.show
|
22
|
+
|
23
|
+
puts "Chosen from the dialog created with the hash style:"
|
24
|
+
puts chosen1
|
25
|
+
puts
|
26
|
+
puts "Chosen from the dialog created with the block style"
|
27
|
+
puts chosen2
|
28
|
+
|
data/examples/msgbox.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
# Using the hash based API for showing a msgbox
|
6
|
+
dialog_factory.msgbox(:text => "This is a message from the hash based API").show
|
7
|
+
|
8
|
+
# Using the block based API for showing a msgbox
|
9
|
+
dialog_factory.msgbox { text "This is a message from the block based API" }.show
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
# Using the hash based API to ask for a password
|
6
|
+
hash_pw = dialog_factory.passwordbox(:text => "Please enter password, hash style").show
|
7
|
+
hash_pw_insec = dialog_factory.passwordbox(:text => "Please enter password, more usable hash style", :insecure => true).show
|
8
|
+
# Using the block based API to ask for a password
|
9
|
+
block_pw = dialog_factory.passwordbox{ text "Please enter passwrod, block style" }.show
|
10
|
+
block_pw_insec = dialog_factory.passwordbox{ insecure; text "Please enter passwrod, more usable block style" }.show
|
11
|
+
|
12
|
+
puts "Hash password: #{hash_pw}"
|
13
|
+
puts "Hash password (entered in less secure way): #{hash_pw_insec}"
|
14
|
+
puts "Block password: #{block_pw}"
|
15
|
+
puts "Block parssword (entered ien less secure way): #{block_pw_insec}"
|
16
|
+
|
data/examples/pause.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
accepted_hash_style = dialog_factory.pause(:text => "Pause, hash style", :seconds => 15, :width => 40, :height => 8).show
|
6
|
+
accepted_block_style = dialog_factory.pause{ text "Pause, block style"; seconds 20; width 30; height 8; }.show
|
7
|
+
|
8
|
+
if accepted_hash_style then
|
9
|
+
puts "You accepted the hash style pause"
|
10
|
+
end
|
11
|
+
|
12
|
+
if accepted_block_style then
|
13
|
+
puts "You accepted the block style pause"
|
14
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
chosen1 = dialog_factory.radiolist(:text => "Choose one, hash style",
|
6
|
+
:options => [
|
7
|
+
[ "fisk", "A confusing choice for a metasyntactic variable name", :off ],
|
8
|
+
[ "foo", "The classic first metasyntactic variable name", :on ],
|
9
|
+
[ "bar", "The classic second metasyntactic variable name", :off ],
|
10
|
+
[ "baz", "The classic third metasyntactic variable name", :off ],
|
11
|
+
[ "quux", "A quite unusual metasyntactic variable name", :off ]
|
12
|
+
]).show
|
13
|
+
|
14
|
+
chosen2 = dialog_factory.radiolist {
|
15
|
+
text "Choose one, block style"
|
16
|
+
option "fisk", "A confusing choice for a metasyntactic variable name"
|
17
|
+
option "foo", "The classic first metasyntactic variable name", :on
|
18
|
+
option "bar", "The classic second metasyntactic variable name"
|
19
|
+
option "baz", "The classic third metasyntactic variable name"
|
20
|
+
option "quux", "A quite unusual metasyntactic variable name"
|
21
|
+
}.show
|
22
|
+
|
23
|
+
puts "Chosen from the dialog created with the hash style:"
|
24
|
+
puts chosen1
|
25
|
+
puts
|
26
|
+
puts "Chosen from the dialog created with the block style"
|
27
|
+
puts chosen2
|
28
|
+
|
data/examples/textbox.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
# How to view a file in a dialog using the hash API
|
6
|
+
dialog_factory.textbox(:filename => ARGV[0]).show
|
7
|
+
|
8
|
+
# How to view a file in a dialog using the block API, does not make much sense
|
9
|
+
dialog_factory.textbox { filename ARGV[1] }.show
|
data/examples/yesno.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'palaver'
|
2
|
+
|
3
|
+
dialog_factory = Palaver::DialogFactory.new
|
4
|
+
|
5
|
+
# Using the hash based API, which makes most sense for this kind of dialog
|
6
|
+
likes_hash_based_api = dialog_factory.yesno(:text => "Do you like the hash based API?").show
|
7
|
+
|
8
|
+
# Using the block based API
|
9
|
+
likes_block_based_api = dialog_factory.yesno { text "Do you like the block based API?" }.show
|
10
|
+
|
11
|
+
if likes_block_based_api or likes_hash_based_api then
|
12
|
+
puts "Great"
|
13
|
+
else
|
14
|
+
puts "What a pity. Try RDialog instead, it's also very nice"
|
15
|
+
end
|
data/lib/palaver/base.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class Base
|
6
|
+
def initialize(options)
|
7
|
+
@text = nil
|
8
|
+
@width = 0
|
9
|
+
@height = 0
|
10
|
+
|
11
|
+
options.each do |option,value|
|
12
|
+
case option
|
13
|
+
when :width then self.width(value)
|
14
|
+
when :height then self.height(value)
|
15
|
+
when :text then self.text(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def text(str)
|
21
|
+
@text = str
|
22
|
+
end
|
23
|
+
|
24
|
+
def width(w)
|
25
|
+
@width = w
|
26
|
+
end
|
27
|
+
|
28
|
+
def height(h)
|
29
|
+
@height = h
|
30
|
+
end
|
31
|
+
|
32
|
+
def with_tempfile
|
33
|
+
tf = Tempfile.new "palaver"
|
34
|
+
tfpath = tf.path
|
35
|
+
tf.close
|
36
|
+
yield tfpath
|
37
|
+
File.delete tfpath
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
require 'tempfile'
|
5
|
+
require 'date'
|
6
|
+
require 'palaver/base'
|
7
|
+
|
8
|
+
module Palaver
|
9
|
+
class Calendar < Palaver::Base
|
10
|
+
def initialize(options={})
|
11
|
+
super(options)
|
12
|
+
@default_date = nil
|
13
|
+
|
14
|
+
options.each do |option,value|
|
15
|
+
case option
|
16
|
+
when :date then self.date(value)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def date(d)
|
23
|
+
@default_date = d
|
24
|
+
end
|
25
|
+
|
26
|
+
def show
|
27
|
+
day, month, year =
|
28
|
+
if @default_date then [ @default_date.day, @default_date.month, @default_date.year]
|
29
|
+
else [ 0, 0, 0 ]
|
30
|
+
end
|
31
|
+
chosen_date = nil
|
32
|
+
with_tempfile do |tfpath|
|
33
|
+
cmd = 'dialog --calendar "%s" %d %d %d %d %d 2> %s' % [ @text,
|
34
|
+
@height, @width,
|
35
|
+
day, month, year,
|
36
|
+
tfpath ]
|
37
|
+
success = system cmd
|
38
|
+
chosen_date = Date.strptime(File.read(tfpath), "%d/%m/%Y") if success
|
39
|
+
end
|
40
|
+
return chosen_date
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
require 'palaver/list_with_options'
|
5
|
+
|
6
|
+
module Palaver
|
7
|
+
class Checklist < Palaver::ListWithOptions
|
8
|
+
def initialize(options)
|
9
|
+
super(options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
choices = nil
|
14
|
+
with_tempfile do |fname|
|
15
|
+
cmd = "dialog --checklist '#@text' #@height #@width #@list_height #{options_string_with_status} 2> #{fname}"
|
16
|
+
success = system cmd
|
17
|
+
if success then
|
18
|
+
choices = File.read(fname).split(" ").map { |s| s[1..-2] }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
return choices
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class DialogFactory
|
6
|
+
@@dialog_types = {
|
7
|
+
:calendar => Calendar,
|
8
|
+
:checklist => Checklist,
|
9
|
+
:radiolist => Radiolist,
|
10
|
+
:menu => Menu,
|
11
|
+
:yesno => YesNo,
|
12
|
+
:textbox => TextBox,
|
13
|
+
:msgbox => MsgBox,
|
14
|
+
:inputbox => InputBox,
|
15
|
+
:infobox => InfoBox,
|
16
|
+
:pause => Pause,
|
17
|
+
:passwordbox => PasswordBox,
|
18
|
+
:dselect => DSelect,
|
19
|
+
:fselect => FSelect,
|
20
|
+
:form => Form
|
21
|
+
}
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def method_missing(methodsym, *args, &block)
|
26
|
+
if @@dialog_types.has_key? methodsym then
|
27
|
+
c = @@dialog_types[methodsym]
|
28
|
+
options = args.size == 1 ? args[0] : {}
|
29
|
+
return make_dialog(c, options, &block)
|
30
|
+
else
|
31
|
+
raise NoMethodError.new("Undefined method: #{methodsym} for #{self}", methodsym)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def make_dialog(cls, options, &spec)
|
36
|
+
d = cls.new(options)
|
37
|
+
d.instance_eval &spec if spec
|
38
|
+
return d
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
require 'palaver/pathselect'
|
5
|
+
|
6
|
+
module Palaver
|
7
|
+
class DSelect < Palaver::PathSelect
|
8
|
+
def initialize(options={})
|
9
|
+
super(options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def dialog_name
|
13
|
+
"dselect"
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
data/lib/palaver/form.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
|
6
|
+
class Form < Palaver::Base
|
7
|
+
def initialize(options)
|
8
|
+
super(options)
|
9
|
+
@entries = []
|
10
|
+
@form_height = nil
|
11
|
+
@simple_display_width = nil
|
12
|
+
@simple_text_length = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def show
|
16
|
+
text_width = @entries.map { |e| e.text_width }.max
|
17
|
+
@entries.each { |e| e.update_value_x text_width }
|
18
|
+
|
19
|
+
cmd_intro = "dialog --form '#@text' #@height #@width #@form_height "
|
20
|
+
cmd_entries = @entries.map { |e| e.to_cmd_s }.join(' ')
|
21
|
+
|
22
|
+
result = nil
|
23
|
+
with_tempfile do |tfpath|
|
24
|
+
cmd = "#{cmd_intro} #{cmd_entries} 2> #{tfpath}"
|
25
|
+
success = system cmd
|
26
|
+
result = read_dialog_output tfpath
|
27
|
+
end
|
28
|
+
|
29
|
+
return result
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
class Entry
|
35
|
+
attr_reader :field_id, :text
|
36
|
+
|
37
|
+
def initialize(id, text, text_y, text_x, default_value, value_y, value_x, field_length, input_length)
|
38
|
+
@field_id = id
|
39
|
+
@text = text
|
40
|
+
@text_y = text_y
|
41
|
+
@text_x = text_x
|
42
|
+
@default_value = default_value
|
43
|
+
@value_y = value_y
|
44
|
+
@value_x = value_x
|
45
|
+
@field_length = field_length
|
46
|
+
@input_length = input_length
|
47
|
+
end
|
48
|
+
|
49
|
+
def text_width
|
50
|
+
@text.length + 2
|
51
|
+
end
|
52
|
+
|
53
|
+
def update_value_x(min)
|
54
|
+
@value_x = [ @value_x ? @value_x : 0, min ].max
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_cmd_s
|
58
|
+
"'#@text' #@text_y #@text_x '#@default_value' #@value_y #@value_x #@field_length #@input_length"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def read_dialog_output(fname)
|
63
|
+
lines = File.read(fname).split("\n")
|
64
|
+
result = {}
|
65
|
+
lines.each_with_index { |l,i| result[@entries[i].field_id] = l }
|
66
|
+
return result
|
67
|
+
end
|
68
|
+
|
69
|
+
def form_height(val)
|
70
|
+
@form_height = val
|
71
|
+
end
|
72
|
+
|
73
|
+
def entry(id, title, text_y, text_x, default_value, value_y, value_x, field_length, input_length)
|
74
|
+
newentry = Entry.new(id, title, text_y, text_x, default_value, value_y, value_x, field_length, input_length)
|
75
|
+
@entries.push newentry
|
76
|
+
end
|
77
|
+
|
78
|
+
def simple_display_width(width)
|
79
|
+
@simple_display_width = width
|
80
|
+
end
|
81
|
+
|
82
|
+
def simple_text_length(length)
|
83
|
+
@simple_text_length = length
|
84
|
+
end
|
85
|
+
|
86
|
+
def simple_entry(id, title, default_value)
|
87
|
+
@simple_next_y = 1 if not @simple_next_y
|
88
|
+
newentry = Entry.new(id, title, @simple_next_y, 0, default_value, @simple_next_y, nil, @simple_display_width, @simple_text_length)
|
89
|
+
@entries.push newentry
|
90
|
+
@simple_next_y = @simple_next_y + 1
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
require 'palaver/pathselect'
|
5
|
+
|
6
|
+
module Palaver
|
7
|
+
class FSelect < Palaver::PathSelect
|
8
|
+
def initialize(options={})
|
9
|
+
super(options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def dialog_name
|
13
|
+
"fselect"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class InfoBox < Palaver::Base
|
6
|
+
def initialize(options)
|
7
|
+
super(options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
cmd = "dialog --infobox '#@text' #@height #@width"
|
12
|
+
system cmd
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class InputBox < Palaver::Base
|
6
|
+
def initialize(options)
|
7
|
+
super(options)
|
8
|
+
@initial = nil
|
9
|
+
|
10
|
+
options.each do |option,value|
|
11
|
+
case option
|
12
|
+
when :initial then self.initial(value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
def initial(text)
|
19
|
+
@initial = text
|
20
|
+
end
|
21
|
+
|
22
|
+
def show
|
23
|
+
answer = nil
|
24
|
+
with_tempfile do |fname|
|
25
|
+
cmd = "dialog --inputbox '#@text' #@height #@width '#@initial' 2> #{fname}"
|
26
|
+
success = system cmd
|
27
|
+
if success then
|
28
|
+
answer = File.read(fname)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
return answer
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
|
6
|
+
class ListWithOptions < Palaver::Base
|
7
|
+
|
8
|
+
class Option
|
9
|
+
attr_reader :tag, :item, :status
|
10
|
+
def initialize(tag,item,status=nil)
|
11
|
+
@tag = tag
|
12
|
+
@item = item
|
13
|
+
@status = status
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(options)
|
18
|
+
super(options)
|
19
|
+
@dialog_options = []
|
20
|
+
@list_height = 0
|
21
|
+
|
22
|
+
options.each do |option,value|
|
23
|
+
case option
|
24
|
+
when :options then @dialog_options = value.map { |o| Option.new(o[0],o[1],o[2]) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def option(tag, desc, status=nil)
|
30
|
+
@dialog_options.push Option.new(tag,desc,status)
|
31
|
+
end
|
32
|
+
|
33
|
+
def list_height(h)
|
34
|
+
@list_height = h
|
35
|
+
end
|
36
|
+
|
37
|
+
def options_string_with_status
|
38
|
+
@dialog_options.map { |o| "'#{o.tag}' '#{o.item}' '#{o.status == :on ? 'on' : 'off'}'" }.join ' '
|
39
|
+
end
|
40
|
+
|
41
|
+
def options_string_no_status
|
42
|
+
@dialog_options.map { |o| "'#{o.tag}' '#{o.item}'" }.join ' '
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
data/lib/palaver/menu.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
require 'palaver/list_with_options'
|
5
|
+
|
6
|
+
module Palaver
|
7
|
+
class Menu < Palaver::ListWithOptions
|
8
|
+
def initialize(options)
|
9
|
+
super options
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
chosen = nil
|
14
|
+
with_tempfile do |fname|
|
15
|
+
cmd = "dialog --menu '#@text' #@height #@width #@list_height #{options_string_no_status} 2> #{fname}"
|
16
|
+
sucess = system cmd
|
17
|
+
if sucess then
|
18
|
+
chosen = File.read(fname)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
return chosen
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class MsgBox < Palaver::Base
|
6
|
+
def initialize(options)
|
7
|
+
super options
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
cmd = "dialog --msgbox '#@text' #@height #@width"
|
12
|
+
system cmd
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class PasswordBox < Palaver::Base
|
6
|
+
def initialize(options)
|
7
|
+
super(options)
|
8
|
+
@insecure = false
|
9
|
+
|
10
|
+
options.each do |option,value|
|
11
|
+
case option
|
12
|
+
when :insecure then self.insecure(value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def insecure(should_be_insecure=true)
|
18
|
+
@insecure = should_be_insecure
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def show
|
23
|
+
answer = nil
|
24
|
+
with_tempfile do |fname|
|
25
|
+
insecure = @insecure ? "--insecure" : ""
|
26
|
+
cmd = "dialog #{insecure} --passwordbox '#@text' #@height #@width 2> #{fname}"
|
27
|
+
#puts cmd
|
28
|
+
success = system cmd
|
29
|
+
if success then
|
30
|
+
answer = File.read(fname)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
return answer
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class PathSelect < Palaver::Base
|
6
|
+
def initialize(options={})
|
7
|
+
super(options)
|
8
|
+
@path = nil
|
9
|
+
|
10
|
+
options.each do |option,value|
|
11
|
+
case option
|
12
|
+
when :path then self.path(value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
def path(str)
|
19
|
+
@path = str
|
20
|
+
end
|
21
|
+
|
22
|
+
def show
|
23
|
+
raise "CAn't open a #{dialog_name} dialog with a path" if not @path
|
24
|
+
chosen_file = nil
|
25
|
+
with_tempfile do |tfpath|
|
26
|
+
cmd = "dialog --#{dialog_name} '#@path' #@height #@width 2> #{tfpath}"
|
27
|
+
puts cmd
|
28
|
+
success = system cmd
|
29
|
+
chosen_file = File.read(tfpath) if success
|
30
|
+
end
|
31
|
+
return chosen_file
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class Pause < Palaver::Base
|
6
|
+
def initialize(options)
|
7
|
+
super(options)
|
8
|
+
@seconds = 0
|
9
|
+
options.each do |option,value|
|
10
|
+
case option
|
11
|
+
when :seconds then @seconds = value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def seconds(val)
|
17
|
+
@seconds = val
|
18
|
+
end
|
19
|
+
|
20
|
+
def show
|
21
|
+
cmd = "dialog --pause '#@text' #@height #@width #@seconds"
|
22
|
+
rc = system cmd
|
23
|
+
return rc
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
require 'palaver/list_with_options'
|
5
|
+
|
6
|
+
module Palaver
|
7
|
+
class Radiolist < Palaver::ListWithOptions
|
8
|
+
def initialize(options)
|
9
|
+
super(options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
chosen = nil
|
14
|
+
with_tempfile do |fname|
|
15
|
+
cmd = "dialog --radiolist '#@text' #@height #@width #@list_height #{options_string_with_status} 2> #{fname}"
|
16
|
+
sucess = system cmd
|
17
|
+
if sucess then
|
18
|
+
chosen = File.read(fname)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
return chosen
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class TextBox < Base
|
6
|
+
def initialize(options)
|
7
|
+
super options
|
8
|
+
options.each do |option,value|
|
9
|
+
case option
|
10
|
+
when :filename then filename(value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def show
|
16
|
+
cmd = "dialog --textbox '#@filename' #@height #@width"
|
17
|
+
system cmd
|
18
|
+
end
|
19
|
+
|
20
|
+
def filename(name)
|
21
|
+
@filename = name
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
module Palaver
|
5
|
+
class YesNo < Palaver::Base
|
6
|
+
def initialize(optons)
|
7
|
+
super optons
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
cmd = "dialog --yesno '#@text' #@height #@width"
|
12
|
+
rc = system cmd
|
13
|
+
return rc
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/palaver.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright (c) 2012, Peter Allin <peter@peca.dk> All rights reserved.
|
2
|
+
# See LICENSE file for licensing information.
|
3
|
+
|
4
|
+
require 'palaver/calendar.rb'
|
5
|
+
require 'palaver/checklist.rb'
|
6
|
+
require 'palaver/radiolist.rb'
|
7
|
+
require 'palaver/menu.rb'
|
8
|
+
require 'palaver/yesno.rb'
|
9
|
+
require 'palaver/textbox.rb'
|
10
|
+
require 'palaver/msgbox.rb'
|
11
|
+
require 'palaver/inputbox.rb'
|
12
|
+
require 'palaver/infobox.rb'
|
13
|
+
require 'palaver/pause.rb'
|
14
|
+
require 'palaver/passwordbox.rb'
|
15
|
+
require 'palaver/dselect.rb'
|
16
|
+
require 'palaver/fselect.rb'
|
17
|
+
require 'palaver/form.rb'
|
18
|
+
require 'palaver/dialog_factory.rb'
|
data/palaver.gemspec
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "palaver"
|
3
|
+
s.version = "0.2.0"
|
4
|
+
s.platform = Gem::Platform::RUBY
|
5
|
+
s.authors = [ "Peter Allin" ]
|
6
|
+
s.email = [ "peter@peca.dk" ]
|
7
|
+
s.summary = "Ruby interface for the 'dialog' progam"
|
8
|
+
s.description = "Uses the 'dialog' program to create Ruby applications with text based user interfaces"
|
9
|
+
s.rubyforge_project = s.name
|
10
|
+
s.required_rubygems_version = ">= 1.3.6"
|
11
|
+
s.files = `git ls-files`.split "\n"
|
12
|
+
s.require_path = "lib"
|
13
|
+
s.homepage = "https://github.com/peterallin/palaver"
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: palaver
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Peter Allin
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-07-10 00:00:00 Z
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Uses the 'dialog' program to create Ruby applications with text based user interfaces
|
22
|
+
email:
|
23
|
+
- peter@peca.dk
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- LICENSE
|
33
|
+
- README.md
|
34
|
+
- Rakefile
|
35
|
+
- examples/calendar.rb
|
36
|
+
- examples/checklist.rb
|
37
|
+
- examples/dselect.rb
|
38
|
+
- examples/form.rb
|
39
|
+
- examples/form_simple.rb
|
40
|
+
- examples/fselect.rb
|
41
|
+
- examples/infobox.rb
|
42
|
+
- examples/inputbox.rb
|
43
|
+
- examples/menu.rb
|
44
|
+
- examples/msgbox.rb
|
45
|
+
- examples/passwordbox.rb
|
46
|
+
- examples/pause.rb
|
47
|
+
- examples/radiolist.rb
|
48
|
+
- examples/textbox.rb
|
49
|
+
- examples/yesno.rb
|
50
|
+
- lib/palaver.rb
|
51
|
+
- lib/palaver/base.rb
|
52
|
+
- lib/palaver/calendar.rb
|
53
|
+
- lib/palaver/checklist.rb
|
54
|
+
- lib/palaver/dialog_factory.rb
|
55
|
+
- lib/palaver/dselect.rb
|
56
|
+
- lib/palaver/form.rb
|
57
|
+
- lib/palaver/fselect.rb
|
58
|
+
- lib/palaver/infobox.rb
|
59
|
+
- lib/palaver/inputbox.rb
|
60
|
+
- lib/palaver/list_with_options.rb
|
61
|
+
- lib/palaver/menu.rb
|
62
|
+
- lib/palaver/msgbox.rb
|
63
|
+
- lib/palaver/passwordbox.rb
|
64
|
+
- lib/palaver/pathselect.rb
|
65
|
+
- lib/palaver/pause.rb
|
66
|
+
- lib/palaver/radiolist.rb
|
67
|
+
- lib/palaver/textbox.rb
|
68
|
+
- lib/palaver/yesno.rb
|
69
|
+
- palaver.gemspec
|
70
|
+
homepage: https://github.com/peterallin/palaver
|
71
|
+
licenses: []
|
72
|
+
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
84
|
+
segments:
|
85
|
+
- 0
|
86
|
+
version: "0"
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 23
|
93
|
+
segments:
|
94
|
+
- 1
|
95
|
+
- 3
|
96
|
+
- 6
|
97
|
+
version: 1.3.6
|
98
|
+
requirements: []
|
99
|
+
|
100
|
+
rubyforge_project: palaver
|
101
|
+
rubygems_version: 1.8.16
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: Ruby interface for the 'dialog' progam
|
105
|
+
test_files: []
|
106
|
+
|