terrun 1.0.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/lib/terrun.rb +129 -0
- metadata +45 -0
data/lib/terrun.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
class TerminalOption
|
2
|
+
attr_accessor :name, :arg_num, :help, :aliases, :usage
|
3
|
+
|
4
|
+
def initialize(name, arg_num, help, usage)
|
5
|
+
@name = name
|
6
|
+
@arg_num = arg_num
|
7
|
+
@help = help
|
8
|
+
@usage = usage
|
9
|
+
@aliases = []
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_alias(alias_name)
|
13
|
+
@aliases << alias_name
|
14
|
+
end
|
15
|
+
|
16
|
+
def has_alias?(alias_name)
|
17
|
+
@name == alias_name || @aliases.include?(alias_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
result = name
|
22
|
+
aliases.each { |a| result << " " + a }
|
23
|
+
result << " " + usage
|
24
|
+
result << "\n\t" + help
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class TerminalParam
|
29
|
+
attr_accessor :name, :help, :value
|
30
|
+
|
31
|
+
def initialize(name, help)
|
32
|
+
@name = name
|
33
|
+
@help = help
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class TerminalRunner
|
38
|
+
@@avail_options = []
|
39
|
+
@@avail_params = []
|
40
|
+
@@name = ""
|
41
|
+
|
42
|
+
def self.start(args)
|
43
|
+
@@params = {}
|
44
|
+
@@options = {}
|
45
|
+
|
46
|
+
@@avail_params.each do |param|
|
47
|
+
param.value = args.shift
|
48
|
+
@@params[param.name] = param.value
|
49
|
+
if param.value.nil?
|
50
|
+
puts "** Missing value for #{param.name} **"
|
51
|
+
show_usage
|
52
|
+
exit
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
until args.empty?
|
57
|
+
option = []
|
58
|
+
option_name = get_next_arg(args)
|
59
|
+
unless option_details = find_option(option_name)
|
60
|
+
puts "Unknown option: '#{option_name}'."
|
61
|
+
exit
|
62
|
+
end
|
63
|
+
(0..option_details.arg_num).each do |i|
|
64
|
+
option[i] = args.shift
|
65
|
+
if option[i].nil?
|
66
|
+
puts "Missing argument for option '#{option_name}'"
|
67
|
+
exit
|
68
|
+
end
|
69
|
+
end
|
70
|
+
@@options[option_name] = option
|
71
|
+
end
|
72
|
+
|
73
|
+
self.run
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.run
|
77
|
+
puts "Override self.run to start."
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
|
82
|
+
def self.name(name)
|
83
|
+
@@name = name
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.option(name, arg_num, usage, help)
|
87
|
+
@@avail_options << TerminalOption.new(name, arg_num-1, help, usage)
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.option_alias(name, alias_name)
|
91
|
+
return nil unless option = self.find_option(name)
|
92
|
+
option.add_alias alias_name
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.help(message)
|
96
|
+
@@help = message
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.show_usage
|
100
|
+
usage = "Usage: #{@@name}"
|
101
|
+
param_help = ""
|
102
|
+
@@avail_params.each do |param|
|
103
|
+
usage += " <#{param.name}>"
|
104
|
+
param_help += "\t#{param.name}\n\t\t#{param.help}\n"
|
105
|
+
end
|
106
|
+
puts usage + " [options]"
|
107
|
+
puts param_help
|
108
|
+
puts "Options:"
|
109
|
+
@@avail_options.each { |o| puts "\t" + o.to_s.gsub(/\t/, "\t\t") }
|
110
|
+
puts "\n#{@@help}"
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.param(name, help)
|
114
|
+
@@avail_params << TerminalParam.new(name, help)
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
|
119
|
+
def self.get_next_arg(args)
|
120
|
+
arg = args.shift
|
121
|
+
avail_option = self.find_option arg
|
122
|
+
return avail_option.name if avail_option
|
123
|
+
arg
|
124
|
+
end
|
125
|
+
|
126
|
+
def self.find_option(name)
|
127
|
+
(@@avail_options.select { |o| o.has_alias? name })[0]
|
128
|
+
end
|
129
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: terrun
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Caleb Simpson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-25 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Easily create terminal applications.
|
15
|
+
email: the.foner@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/terrun.rb
|
21
|
+
homepage: http://www.pac.lifemakesuslaugh.com
|
22
|
+
licenses: []
|
23
|
+
post_install_message:
|
24
|
+
rdoc_options: []
|
25
|
+
require_paths:
|
26
|
+
- lib
|
27
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 1.8.24
|
42
|
+
signing_key:
|
43
|
+
specification_version: 3
|
44
|
+
summary: Easily create terminal applications.
|
45
|
+
test_files: []
|