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.
@@ -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: []