script_summoner 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.
- data/bin/summon +155 -0
- metadata +55 -0
data/bin/summon
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
unless ARGV.length == 1
|
5
|
+
STDERR.puts "[ERROR] Please provide configuration filename (e.g. 'summon example.config')"
|
6
|
+
exit
|
7
|
+
end
|
8
|
+
|
9
|
+
config_file = ARGV[0]
|
10
|
+
|
11
|
+
CONFIG = YAML::load(File.read(config_file))
|
12
|
+
|
13
|
+
# Check validity of file:
|
14
|
+
config_ok = true
|
15
|
+
# - mandatory fields
|
16
|
+
unless CONFIG.has_key?('author')
|
17
|
+
puts "Missing author in config file"
|
18
|
+
config_ok = false
|
19
|
+
end
|
20
|
+
unless CONFIG.has_key?('name')
|
21
|
+
puts "Missing script name in config file"
|
22
|
+
config_ok = false
|
23
|
+
end
|
24
|
+
unless CONFIG.has_key?('description')
|
25
|
+
puts "Missing script description in config file"
|
26
|
+
config_ok = false
|
27
|
+
end
|
28
|
+
CONFIG['options'].each do |opt|
|
29
|
+
unless opt.has_key?('long')
|
30
|
+
puts "Missing long name for option in config file"
|
31
|
+
config_ok = false
|
32
|
+
end
|
33
|
+
if opt.has_key?('type') and ! opt['type'] == 'Boolean'
|
34
|
+
unless opt.has_key?('example')
|
35
|
+
puts "Missing example for option in config file"
|
36
|
+
config_ok = false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
# - Options cannot be required and have a default at the same time (otherwise they wouldn't be required...)
|
41
|
+
CONFIG['options'].each do |opt|
|
42
|
+
if opt.has_key?('required') and opt['required'] and opt.has_key?('default')
|
43
|
+
puts "Options cannot have a default value and be required at the same time"
|
44
|
+
config_ok = false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
exit unless config_ok
|
48
|
+
|
49
|
+
outfile = File.new(CONFIG['name'], 'w')
|
50
|
+
outfile.puts '#!/usr/bin/env ruby'
|
51
|
+
|
52
|
+
# Get script name, author, usage and description
|
53
|
+
output_part = <<OUT
|
54
|
+
# == NAME
|
55
|
+
# #{CONFIG['name']}
|
56
|
+
#
|
57
|
+
# == AUTHOR
|
58
|
+
# #{CONFIG['author']}
|
59
|
+
#
|
60
|
+
# == USAGE
|
61
|
+
# #{CONFIG['name']}
|
62
|
+
OUT
|
63
|
+
outfile.puts output_part
|
64
|
+
|
65
|
+
CONFIG['options'].each do |opt|
|
66
|
+
outfile.puts "# [ -#{opt['short']} | --#{opt['long']} ] #{opt['example']}\n"
|
67
|
+
end
|
68
|
+
|
69
|
+
output_part = <<OUT
|
70
|
+
#
|
71
|
+
# == DESCRIPTION
|
72
|
+
# #{CONFIG['description']}
|
73
|
+
#
|
74
|
+
# == OPTIONS
|
75
|
+
OUT
|
76
|
+
outfile.puts output_part
|
77
|
+
|
78
|
+
CONFIG['options'].each do |opt|
|
79
|
+
outfile.print "# -#{opt['short']}, --#{opt['long']}:\n# #{opt['description']}"
|
80
|
+
if opt['default']
|
81
|
+
outfile.print ' Default: ' + opt['default'] + '.'
|
82
|
+
end
|
83
|
+
if opt['required']
|
84
|
+
outfile.print ' Required.'
|
85
|
+
end
|
86
|
+
outfile.puts "\n"
|
87
|
+
end
|
88
|
+
|
89
|
+
outfile.puts "\n"
|
90
|
+
outfile.puts "require 'rubygems'\n"
|
91
|
+
outfile.puts "require 'optparse'\n"
|
92
|
+
outfile.puts "require 'rdoc/usage'\n"
|
93
|
+
outfile.puts "require 'yaml'\n"
|
94
|
+
outfile.puts
|
95
|
+
|
96
|
+
# Set options defaults
|
97
|
+
outfile.puts '# Set option defaults'
|
98
|
+
outfile.puts 'options = {'
|
99
|
+
default_array = Array.new
|
100
|
+
CONFIG['options'].each do |opt|
|
101
|
+
if opt.has_key?('default')
|
102
|
+
if opt.has_key?('type') and opt['type'] == 'Boolean'
|
103
|
+
default_array.push(' :' + opt['long'] + ' => ' + opt['default'].to_s)
|
104
|
+
else
|
105
|
+
default_array.push(' :' + opt['long'] + ' => "' + opt['default'].to_s + '"')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
outfile.puts default_array.join(",\n")
|
110
|
+
outfile.puts '}'
|
111
|
+
outfile.puts
|
112
|
+
|
113
|
+
outfile.puts '# Set options'
|
114
|
+
outfile.puts 'optparse = OptionParser.new do |opts|'
|
115
|
+
outfile.puts " opts.on('-h','--help',"
|
116
|
+
outfile.puts " 'Display the usage information') {RDoc::usage}"
|
117
|
+
|
118
|
+
CONFIG['options'].each do |opt|
|
119
|
+
unless opt.has_key?('type')
|
120
|
+
opt['type'] = 'String'
|
121
|
+
end
|
122
|
+
|
123
|
+
if opt['type'] == 'Boolean'
|
124
|
+
outfile.puts " opts.on('-#{opt['short']}','--#{opt['long']}',"
|
125
|
+
outfile.puts " '#{opt['description']}') {|argument| options[:#{opt['long']}] = true}"
|
126
|
+
else
|
127
|
+
if opt.has_key?('required') and opt['required']
|
128
|
+
outfile.puts " opts.on('-#{opt['short']}','--#{opt['long']} #{opt['long'].gsub(/ /, '_')}',"
|
129
|
+
else
|
130
|
+
outfile.puts " opts.on('-#{opt['short']}','--#{opt['long']} [#{opt['long'].gsub(/ /, '_')}]',"
|
131
|
+
end
|
132
|
+
outfile.puts " #{opt['type']},"
|
133
|
+
outfile.puts " '#{opt['description']}') {|argument| options[:#{opt['long']}] = argument}"
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
outfile.puts 'end'
|
138
|
+
outfile.puts "optparse.parse! rescue RDoc::usage('usage')"
|
139
|
+
|
140
|
+
outfile.puts
|
141
|
+
outfile.puts '# Check that mandatory arguments are present'
|
142
|
+
CONFIG['options'].each do |opt|
|
143
|
+
if opt.has_key?('required') and opt['required']
|
144
|
+
outfile.puts "if options[:#{opt['long']}].nil?"
|
145
|
+
outfile.puts " STDERR.puts '[ERROR] Missing argument: #{opt['long']}'"
|
146
|
+
outfile.puts " RDoc::usage"
|
147
|
+
outfile.puts " exit"
|
148
|
+
outfile.puts "end"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
outfile.puts "puts options.to_yaml"
|
152
|
+
|
153
|
+
outfile.close
|
154
|
+
|
155
|
+
system('chmod u+x ' + CONFIG['name'])
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: script_summoner
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "0.1"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jan Aerts
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-01-28 00:00:00 +00:00
|
13
|
+
default_executable: summon
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: script_summoner creates a template ruby script including command-line parsing and documentation based on a small configuration file.
|
17
|
+
email: first_name.last_name at gmail.org
|
18
|
+
executables:
|
19
|
+
- summon
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files: []
|
25
|
+
|
26
|
+
has_rdoc: true
|
27
|
+
homepage: http://github.com/jandot/script_summoner
|
28
|
+
licenses: []
|
29
|
+
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: "0"
|
40
|
+
version:
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "0"
|
46
|
+
version:
|
47
|
+
requirements: []
|
48
|
+
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 1.3.5
|
51
|
+
signing_key:
|
52
|
+
specification_version: 3
|
53
|
+
summary: Ruby script template generator
|
54
|
+
test_files: []
|
55
|
+
|