mymenu 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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!
@@ -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: []