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.
Files changed (2) hide show
  1. data/lib/terrun.rb +129 -0
  2. 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: []