drep 0.3.3

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,22 @@
1
+ # DRep - Modular Open Software Tester.
2
+ # Copyright (C) 2009 Dmitrii Toksaitov
3
+ #
4
+ # This file is part of DRep.
5
+ #
6
+ # DRep is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # DRep is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with DRep. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ module DRepRunnable
20
+ def run()
21
+ end
22
+ end
@@ -0,0 +1,267 @@
1
+ # DRep - Modular Open Software Tester.
2
+ # Copyright (C) 2009 Dmitrii Toksaitov
3
+ #
4
+ # This file is part of DRep.
5
+ #
6
+ # DRep is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # DRep is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with DRep. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'optparse'
20
+ require 'ostruct'
21
+
22
+ require 'date'
23
+
24
+ extend_load_paths __FILE__
25
+ require 'alterers/drep_helpers'
26
+ require 'alterers/drep_validators'
27
+
28
+ require 'core/interfaces/drep_runnable'
29
+
30
+ require 'core/drep_environment'
31
+ require 'core/drep_executer'
32
+
33
+ module DRep
34
+
35
+ class DRepCli
36
+ include DRepRunnable
37
+
38
+ DREP_EXEC_OPTIONS =
39
+ {:provider_flag =>
40
+ ['-p', '--provider PROVIDER[;SOURCE_1[,SOURCE_2]][;RULE_1[,RULE_2]]',
41
+ 'Provider path with sources and rules specifications.'],
42
+ :template_flag =>
43
+ ['-t', '--template PATH[>OUTPUT_PATH]',
44
+ 'Template in/out path. By default output will be flushed to "STDOUT"'],
45
+ :version_flag =>
46
+ ['-v', '--version', 'Display version information and exit.'],
47
+ :help_flag =>
48
+ ['-h', '--help', 'Display this help message and exit.'],
49
+ :quiet_flag =>
50
+ ['-q', '--quiet', 'Start in quiet mode without any CLI messages.'],
51
+ :verbose_flag =>
52
+ ['-V', '--verbose', 'Start in verbose mode (ignored in quiet mode).'],
53
+ :debug_flag =>
54
+ ['-d', '--debug', 'Start in debug mode.']}
55
+
56
+ attr_reader :env
57
+
58
+ attr_reader :options
59
+
60
+ attr_reader :parser
61
+
62
+ def initialize(stdin = STDIN,
63
+ stdout = STDOUT,
64
+ stderr = STDERR, arguments = [])
65
+ @options = OpenStruct.new()
66
+
67
+ begin
68
+ env_options = [stdin, stdout, stderr, @options]
69
+ @env = DRepEnvironment.new(*env_options)
70
+ rescue Exception => e
71
+ unless @stderr.nil?
72
+ @stderr.puts("#{UNIX_NAME}: initialization failed: #{e.message}")
73
+ end
74
+ exit(1)
75
+ end
76
+
77
+ @options.arguments = arguments.nil? ? [] : arguments
78
+
79
+ @options.verbose = false
80
+ @options.quiet = false
81
+ @options.debug = false
82
+
83
+ @options.output = @stdout
84
+
85
+ @options.show_version = false
86
+ @options.show_help = false
87
+
88
+ @options.providers = []
89
+ @options.templates = []
90
+
91
+ @parser = OptionParser.new()
92
+ end
93
+
94
+ def run()
95
+ if options_parsed?()
96
+ begin
97
+ if @options.verbose
98
+ welcome_message = "#{FULL_NAME} has started"
99
+ msg("#{welcome_message}: #{DateTime.now}.")
100
+ end
101
+
102
+ perform_tasks()
103
+
104
+ if @options.verbose
105
+ end_message = "#{FULL_NAME} has finished all tasks"
106
+ msg("#{end_message}: #{DateTime.now}.")
107
+ end
108
+ rescue Exception => e
109
+ err("Execution failed: #{e.message}")
110
+ end
111
+ end
112
+ end
113
+
114
+ private
115
+ def options_parsed?()
116
+ result = true
117
+
118
+ begin
119
+ add_parser_arg(:version_flag) { @options.show_version = true }
120
+ add_parser_arg(:help_flag) { @options.show_help = true }
121
+
122
+ add_parser_arg(:verbose_flag) do
123
+ @options.verbose = true if !@options.quiet
124
+ end
125
+ add_parser_arg(:quiet_flag) do
126
+ @options.quiet = true
127
+ @options.verbose = false
128
+ end
129
+ add_parser_arg(:debug_flag) do
130
+ @options.debug = true
131
+ end
132
+
133
+ add_parser_arg(:provider_flag) do |provider_def|
134
+ add_provider(provider_def)
135
+ end
136
+ add_parser_arg(:template_flag) do |template_def|
137
+ add_template(template_def)
138
+ end
139
+
140
+ parser.parse!(@options.arguments)
141
+
142
+ rescue Exception => e
143
+ err("Argument parsing failed: #{e.message}")
144
+ result = false
145
+ end
146
+
147
+ return result
148
+ end
149
+
150
+ def add_parser_arg(arg_key, &block)
151
+ valid @parser do
152
+ if arg_key.is_a?(Symbol)
153
+ arg_def = DREP_EXEC_OPTIONS[arg_key]
154
+ else
155
+ arg_def = nil
156
+ end
157
+ if valid?(arg_def)
158
+ @parser.on(arg_def[0], arg_def[1], arg_def[2], &block)
159
+ end
160
+ end
161
+ end
162
+
163
+ def perform_tasks()
164
+ if @options.show_version
165
+ output_version()
166
+ elsif @options.show_help
167
+ output_help()
168
+ else
169
+ begin
170
+ args = [@env, @options.providers, @options.templates]
171
+ DRepExecuter.new(*args).run()
172
+ rescue Exception => e
173
+ err("Report population failed: #{e.message}")
174
+ end
175
+ end
176
+ end
177
+
178
+ def output_help()
179
+ output_options()
180
+ end
181
+
182
+ def output_version()
183
+ msg("#{FULL_NAME} version #{VERSION}")
184
+ msg(COPYRIGHT)
185
+ end
186
+
187
+ def output_options()
188
+ msg("Available options: \n\n")
189
+ msg("Usage: #{UNIX_NAME} {[option] [parameter]}")
190
+
191
+ DREP_EXEC_OPTIONS.each do |name, options|
192
+ msg("\n\t#{options[2]}\n\t\t#{options[0]}, #{options[1]}")
193
+ end
194
+ end
195
+
196
+ def add_provider(provider_def)
197
+ if provider_def.is_a?(String)
198
+ provider_specs = {}
199
+
200
+ parts = provider_def.split(';')
201
+ valid parts do
202
+ provider_path = parts[0]
203
+ sources_list = parts[1]
204
+ rules_list = parts[2]
205
+
206
+ unless provider_path.nil?
207
+ provider_specs[:path] = provider_path
208
+ else
209
+ raise("Provider path is not specified")
210
+ end
211
+
212
+ provider_specs[:sources] = [] + parse_args(sources_list)
213
+ provider_specs[:rules] = [] + parse_args(rules_list)
214
+ end
215
+
216
+ unless provider_specs.empty?
217
+ @options.providers << provider_specs
218
+ end
219
+ end
220
+ end
221
+
222
+ def parse_args(args_list)
223
+ result = []
224
+
225
+ unless args_list.nil?
226
+ args = args_list.split(',')
227
+
228
+ valid args do
229
+ args.each do |arg|
230
+ result << arg unless arg.nil?
231
+ end
232
+ end
233
+ end
234
+
235
+ return result
236
+ end
237
+
238
+ def add_template(template_def)
239
+ if template_def.is_a?(String)
240
+ template_specs = {}
241
+
242
+ parts = template_def.split('>')
243
+ valid parts do
244
+ template_path = parts[0]
245
+ output_path = parts[1]
246
+
247
+ unless template_path.nil?
248
+ template_specs[:path] = template_path
249
+ else
250
+ raise("Template path is not specified")
251
+ end
252
+
253
+ unless output_path.nil?
254
+ template_specs[:output] = output_path
255
+ else
256
+ template_specs[:output] = @stdout
257
+ end
258
+ end
259
+
260
+ unless template_specs.empty?
261
+ @options.templates << template_specs
262
+ end
263
+ end
264
+ end
265
+ end
266
+
267
+ end
data/lib/drep.rb ADDED
@@ -0,0 +1,48 @@
1
+ # DRep - Modular Open Software Tester.
2
+ # Copyright (C) 2009 Dmitrii Toksaitov
3
+ #
4
+ # This file is part of DRep.
5
+ #
6
+ # DRep is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # DRep is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with DRep. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require File.dirname(__FILE__) + '/drep/alterers/drep_extenders'
20
+
21
+ extend_load_paths __FILE__
22
+ require 'drep/drep_cli'
23
+
24
+ module DRep
25
+ # Name of the system
26
+ FULL_NAME = 'Dango Report'
27
+
28
+ # Unix name of the system
29
+ UNIX_NAME = 'drep'
30
+
31
+ # System version (rational version policy)
32
+ VERSION = '0.3.3'
33
+
34
+ # Full name of the author
35
+ AUTHOR = 'Toksaitov Dmitrii Alexandrovich'
36
+
37
+ # Support e-mail
38
+ EMAIL = "#{UNIX_NAME}.support@85.17.184.9"
39
+
40
+ # Official website of the system
41
+ URL = "http://85.17.184.9/#{UNIX_NAME}"
42
+
43
+ # Copyright
44
+ COPYRIGHT = "Copyright (C) 2009 #{AUTHOR}"
45
+
46
+ # Main CLI Loader
47
+ EXEC = DRepCli
48
+ end