mymenu 0.0.1
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.
- checksums.yaml +7 -0
- data/examples/filters_example.rb +68 -0
- data/lib/mymenu.rb +143 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bf009855b3b2157af5cd343c8c08ab7f386e6eaf
|
4
|
+
data.tar.gz: ef71b30aafcbbdd682a51c058914ef23de7dff25
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 88a6ed13550142e9a3e0dfd7bfebf2c986603374641845add5ce0bb4b5141dcdc1bf8cc7a2ba4adec915aabc8987d8b2eb443f70f6b83a43a322f22edafc357f
|
7
|
+
data.tar.gz: a3d502e93b547bb03fd81b7dde467d2907c7f10a0d052887abab1e0dd5af2d2ece55ceb881eee4dbbe4cbab280fe28ba240ef43e398ea2e73fe1e918933719fd
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require File.expand_path(File.join(
|
2
|
+
File.dirname(__FILE__),
|
3
|
+
"../lib/mymenu.rb"))
|
4
|
+
|
5
|
+
class FileServices
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@fdata = String.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def writefile
|
12
|
+
File.open("/tmp/mymenu.txt", 'w') {|n|
|
13
|
+
n.puts("line 1")
|
14
|
+
n.puts("line 2")
|
15
|
+
n.puts("line 3")
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def openfile
|
20
|
+
File.open("/tmp/mymenu.txt", 'r') {|n|
|
21
|
+
n.each_line {|l|
|
22
|
+
@fdata << l
|
23
|
+
}
|
24
|
+
}
|
25
|
+
return @fdata
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
x = MyMenu.new
|
31
|
+
#x.debug = 3
|
32
|
+
x.settitle("Welcome to Trafviz")
|
33
|
+
x.mymenuname = "Trafviz"
|
34
|
+
x.prompt = "Trafviz"
|
35
|
+
# Add my methods
|
36
|
+
x.definemenuitem("listfilters") do
|
37
|
+
puts "My Filters"
|
38
|
+
a = FileServices.new
|
39
|
+
a.writefile
|
40
|
+
data = a.openfile
|
41
|
+
puts "#{data}"
|
42
|
+
end
|
43
|
+
# Define dummy method and create another instance of the class inside it.
|
44
|
+
x.definemenuitem("setfilters") do
|
45
|
+
# My Set filters block
|
46
|
+
y = MyMenu.new
|
47
|
+
#y.debug = 3
|
48
|
+
y.prompt = "Trafiz {Filters}>"
|
49
|
+
y.definemenuitem("setfilter", true) do
|
50
|
+
puts "Hello"
|
51
|
+
a = 2
|
52
|
+
if a == 1
|
53
|
+
puts "My Test"
|
54
|
+
else
|
55
|
+
b = 1
|
56
|
+
puts "B: #{b}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
# Execute function you just created
|
60
|
+
y.setfilter
|
61
|
+
end
|
62
|
+
# Define your list items
|
63
|
+
x.additemtolist(1, "List Filters", "listfilters;")
|
64
|
+
x.additemtolist(2, "Set Filters", "setfilters;")
|
65
|
+
x.additemtolist(3, "Display Menu", "showmenu;")
|
66
|
+
x.additemtolist(4, "Toggle Menu", "togglemenu;")
|
67
|
+
x.additemtolist(5, "Exit Trafviz", "exit;")
|
68
|
+
x.menu!
|
data/lib/mymenu.rb
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
########################################################################
|
2
|
+
#
|
3
|
+
# MyMenu Readline interactive menu builder
|
4
|
+
#
|
5
|
+
# Author: Brian Hood
|
6
|
+
# Description: Build interactive menu's with Readline quickly
|
7
|
+
#
|
8
|
+
########################################################################
|
9
|
+
|
10
|
+
require 'readline'
|
11
|
+
|
12
|
+
class MyMenu
|
13
|
+
|
14
|
+
attr_writer :mymenuname, :mymenugreeting, :prompt, :promptcolor, :menutitlecolour, :mymenushow, :debug
|
15
|
+
attr_reader :menuitems
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@mymenuname = "MyMenu"
|
19
|
+
@prompt = "MyPrompt"
|
20
|
+
@promptcolor = "\e[1;32m\ ".strip
|
21
|
+
@menuitems = Array.new
|
22
|
+
@menuitemnumbercolor = "\e[1;36m"
|
23
|
+
@mymenugreeting = "Welcome to MyMenu"
|
24
|
+
@mymenutoggle = true
|
25
|
+
@debug = 0
|
26
|
+
end
|
27
|
+
|
28
|
+
public
|
29
|
+
|
30
|
+
def additemtolist(number, name, func)
|
31
|
+
@menuitems << [number, "#{name}", "#{func}"]
|
32
|
+
end
|
33
|
+
|
34
|
+
def settitle(title)
|
35
|
+
@mymenugreeting = title
|
36
|
+
@menutitlecolor = "\e[1;38m"
|
37
|
+
@menutitle = %Q{\n
|
38
|
+
/=========================\e[0m\
|
39
|
+
\e[1;38m| #{@mymenugreeting} |\e[0m\
|
40
|
+
\e[1;38m\=========================/\e[0m\ \n
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def menu!
|
45
|
+
menubuilder
|
46
|
+
createmenu("0")
|
47
|
+
showmenu
|
48
|
+
while buf = Readline.readline("#{@promptcolor}#{@prompt}>\e[0m\ ", true)
|
49
|
+
trap("INT") {
|
50
|
+
puts "\nGoodbye see yall later!!!"
|
51
|
+
exit
|
52
|
+
}
|
53
|
+
begin
|
54
|
+
showmenu
|
55
|
+
createmenu(buf)
|
56
|
+
rescue NoMethodError
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def definemenuitem(func, readlineprompt=false, args=nil, &codeeval)
|
62
|
+
func_name = func.to_sym
|
63
|
+
if args == nil
|
64
|
+
Kernel.send :define_method, func_name do
|
65
|
+
evalreadline?(readlineprompt) do
|
66
|
+
puts "Without args" if @debug >= 2
|
67
|
+
codeeval.call
|
68
|
+
end
|
69
|
+
end
|
70
|
+
else
|
71
|
+
Kernel.send :define_method, func_name do |args|
|
72
|
+
evalreadline?(readlineprompt) do
|
73
|
+
puts "With args" if @debug >= 2
|
74
|
+
codeeval.call
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
|
82
|
+
def evalreadline(&block)
|
83
|
+
while buf2 = Readline.readline("#{@promptcolor}#{@prompt}>\e[0m\ ", true)
|
84
|
+
puts "Eval Readline Pre execution" if @debug >= 2
|
85
|
+
block.call
|
86
|
+
puts "Post execution of block in Readline prompt" if @debug >= 2
|
87
|
+
break
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def evalreadline?(readlineprompt, &codeeval)
|
92
|
+
if readlineprompt == false
|
93
|
+
puts "Without Readline" if @debug >= 2
|
94
|
+
codeeval.call
|
95
|
+
else
|
96
|
+
puts "Pre evalreadline with readlineprompt" if @debug >= 2
|
97
|
+
evalreadline do
|
98
|
+
codeeval.call
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def showmenu
|
104
|
+
unless @mymenutoggle == false
|
105
|
+
puts @menutitle
|
106
|
+
@menuitems.each {|n|
|
107
|
+
puts "#{@menuitemnumbercolor}#{n[0]})\e[0m\ #{n[1]}"
|
108
|
+
}
|
109
|
+
puts "\n"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def togglemenu
|
114
|
+
if @mymenutoggle == true
|
115
|
+
@mymenutoggle = false
|
116
|
+
puts "Toggle Menu: #{@mymenutoggle}" if @debug >= 1
|
117
|
+
else
|
118
|
+
@mymenutoggle = true
|
119
|
+
puts "Toggle Menu: #{@mymenutoggle}" if @debug >= 1
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def menubuilder
|
124
|
+
head = "buf ||= String.new; case buf; "
|
125
|
+
y = 1
|
126
|
+
mc = String.new
|
127
|
+
mc << "when \"0\"; "
|
128
|
+
@menuitems.each {|n|
|
129
|
+
mc << "when \"#{n[0]}\"; "
|
130
|
+
func_name = "#{n[2]}".gsub(";", "")
|
131
|
+
mc << " if !defined?(#{func_name}); puts \"\e[1;31m\Function not defined #{func_name}\e[0m\ \"; exit; end; "
|
132
|
+
mc << "#{n[2]}"
|
133
|
+
y += 1
|
134
|
+
}
|
135
|
+
tail = "end"
|
136
|
+
menucode = "#{head}#{mc}#{tail}"
|
137
|
+
puts "Generated Code: #{menucode}".gsub(";", "\n") if @debug >= 3
|
138
|
+
Kernel.send :define_method, :createmenu do |buf|
|
139
|
+
eval(menucode)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mymenu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brian Hood
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Create readline menu's quickly
|
14
|
+
email: brianh6854@googlemail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- examples/filters_example.rb
|
20
|
+
- lib/mymenu.rb
|
21
|
+
homepage: https://github.com/puppetpies/MyMenu
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.2.2
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: CLI Menu system with readline in Ruby
|
45
|
+
test_files: []
|