reviser 0.0.1.1.pre.beta → 0.0.2.rc1

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +18 -0
  3. data/README.md +46 -0
  4. data/ext/valgrind.rb +21 -18
  5. data/ext/web_validators.rb +132 -0
  6. data/lang/HTML.yml +2 -14
  7. data/lib/component.rb +41 -39
  8. data/lib/components/archiver.rb +105 -101
  9. data/lib/components/checker.rb +46 -52
  10. data/lib/components/extractors.rb +121 -120
  11. data/lib/components/generator.rb +40 -37
  12. data/lib/components/generators.rb +113 -109
  13. data/lib/components/organiser.rb +165 -153
  14. data/lib/config.rb +53 -35
  15. data/lib/criteria/code_analysis.rb +54 -0
  16. data/lib/criteria/compilation.rb +42 -0
  17. data/lib/criteria/execution.rb +78 -0
  18. data/lib/exec.rb +109 -94
  19. data/lib/helpers/criteria.rb +152 -154
  20. data/lib/helpers/git.rb +23 -21
  21. data/lib/helpers/project.rb +198 -19
  22. data/lib/helpers/system.rb +50 -39
  23. data/lib/loggers/logger.rb +39 -30
  24. data/lib/loggers/modes.rb +118 -54
  25. data/lib/reviser.rb +63 -41
  26. data/res/css/style_logs.css +166 -0
  27. data/res/css/web_validators/css-base.css +733 -0
  28. data/res/css/web_validators/css-results.css +257 -0
  29. data/res/css/web_validators/html-base.css +746 -0
  30. data/res/css/web_validators/html-results.css +489 -0
  31. data/res/labys/labfich11.txt +19 -0
  32. data/res/labys/test.txt +3 -0
  33. data/res/labys/yoda.txt +19 -0
  34. data/res/scss/style_logs.scss +134 -0
  35. data/type/JavaProject.yml +18 -0
  36. data/type/Pendu.yml +22 -0
  37. data/type/Web.yml +23 -0
  38. metadata +144 -10
  39. data/ext/html_validator.rb +0 -21
  40. data/lib/helpers/code_analysis.rb +0 -64
  41. data/lib/helpers/compilation.rb +0 -40
  42. data/lib/helpers/execution.rb +0 -83
  43. data/lib/project.rb +0 -155
@@ -1,56 +1,67 @@
1
1
  #
2
2
  # @author Renan Strauss
3
3
  #
4
+ require 'open3'
5
+ require 'timeout'
4
6
 
5
- module Helpers
6
- module System
7
- #
8
- # Executes the given command
9
- # and kills it if its execution
10
- # time > timeout
11
- # @returns stdout, stderr & process_status
12
- #
13
- def exec_with_timeout(cmd, timeout = Cfg[:timeout])
14
- stdin, stdout, stderr, wait_thr = Open3.popen3(cmd)
15
- process_status = -1
7
+ module Reviser
8
+ module Helpers
9
+ module System
10
+ #
11
+ # @return the first executable found
12
+ #
13
+ def find_executable
14
+ Dir['*'].select { |f| File.executable?(f) && !File.directory?(f) }.first
15
+ end
16
16
 
17
- stdin.close
18
17
  #
19
- # We try to wait for the thread to join
20
- # during the given timeout.
21
- # When the thread has joined, process_status
22
- # will be an object, so we can check and
23
- # return at the end if it failed to complete
24
- # before time runs out.
18
+ # Executes the given command
19
+ # and kills it if its execution
20
+ # time > timeout
21
+ # @returns stdout, stderr & process_status
25
22
  #
26
- begin
27
- Timeout.timeout(timeout) do
28
- process_status = wait_thr.value
29
- end
30
- rescue Timeout::Error
23
+ def exec_with_timeout(cmd, timeout = Cfg[:timeout])
24
+ stdin, stdout, stderr, wait_thr = Open3.popen3(cmd)
25
+ process_status = -1
26
+
27
+ stdin.close
31
28
  #
32
- # Then whether it suceeded or not,
33
- # we kill the process
29
+ # We try to wait for the thread to join
30
+ # during the given timeout.
31
+ # When the thread has joined, process_status
32
+ # will be an object, so we can check and
33
+ # return at the end if it failed to complete
34
+ # before time runs out.
34
35
  #
35
36
  begin
36
- Process.kill('KILL', wait_thr[:pid])
37
- rescue Object => e
38
- $stderr << "Unable to kill process : #{e.to_s}"
37
+ Timeout.timeout(timeout) do
38
+ process_status = wait_thr.value
39
+ end
40
+ rescue Timeout::Error
41
+ #
42
+ # Then whether it suceeded or not,
43
+ # we kill the process
44
+ #
45
+ begin
46
+ Process.kill('KILL', wait_thr[:pid])
47
+ rescue Object => e
48
+ $stderr << "Unable to kill process : #{e.to_s}"
49
+ end
39
50
  end
40
- end
41
51
 
42
- result = {
43
- :stdout => process_status == -1 && 'Timeout' || stdout.read,
44
- :stderr => process_status == -1 && 'Timeout' || stderr.read,
45
- :process_status => process_status == -1 && 'Timeout' || process_status
46
- }
47
-
48
- result.delete :process_status unless process_status != -1
52
+ result = {
53
+ :stdout => process_status == -1 && 'Timeout' || stdout.read,
54
+ :stderr => process_status == -1 && 'Timeout' || stderr.read,
55
+ :process_status => process_status == -1 && 'Timeout' || process_status
56
+ }
57
+
58
+ result.delete :process_status unless process_status != -1
49
59
 
50
- stdout.close
51
- stderr.close
60
+ stdout.close
61
+ stderr.close
52
62
 
53
- result
63
+ result
64
+ end
54
65
  end
55
66
  end
56
67
  end
@@ -1,41 +1,50 @@
1
1
  require 'logger'
2
2
  require_relative 'modes'
3
3
 
4
- # Custom logger of Reviser.
5
- # This class is a adapter.
6
- # We used the standard Logger included in Ruby.
7
- #
8
- # @author Yann Prono
9
- #
10
- module Loggers
11
- class Logger
12
-
13
- # Create logger.
14
- # The extension determines the mode to use (logger mode).
15
- # @filename
16
- def initialize filename
17
-
18
- ext = File.extname(filename).delete '.'
19
- # Include mode aksed by user (config file)
20
- begin
21
- self.class.send :include, Modes.const_get("#{ext.downcase.capitalize}")
22
- rescue => e
23
- self.class.send :include, Modes::Txt
4
+ module Reviser
5
+ module Loggers
6
+
7
+ class Logger::LogDevice
8
+ def add_log_header(file)
24
9
  end
10
+ end
11
+
12
+ # Custom logger of Reviser.
13
+ # This class is a adapter.
14
+ # We used the standard Logger included in Ruby.
15
+ #
16
+ # @author Yann Prono
17
+ #
18
+ class Logger
19
+
20
+ # Creates logger.
21
+ # The extension determines the mode to use (logger mode).
22
+ # @param filename [String] name of logger.
23
+ def initialize filename
24
+ ext = File.extname filename
25
+ @basename = File.basename filename, ext
26
+ ext = ext.delete '.'
27
+ # Include mode aksed by user (config file)
28
+ begin
29
+ self.class.send :prepend, Modes.const_get("#{ext.downcase.capitalize}")
30
+ rescue => e
31
+ self.class.send :include, Modes::Txt
32
+ end
25
33
 
26
- @logger = ::Logger.new filename
27
- @logger.level = ::Logger::DEBUG
28
- end
34
+ @logger = ::Logger.new File.open(filename, 'w')
35
+ @logger.level = ::Logger::DEBUG
36
+ end
29
37
 
30
- # Close the logger
31
- def close
32
- @logger.close
33
- end
38
+ # Closes the logger
39
+ def close
40
+ @logger.close
41
+ end
34
42
 
35
- # In case of someone want to use methods of standard Logger ...
36
- def method_missing(m, *args, &block)
43
+ # In case of someone want to use methods of standard Logger ...
44
+ def method_missing(m, *args, &block)
37
45
  @logger.send(m,*args, &block)
38
- end
46
+ end
39
47
 
48
+ end
40
49
  end
41
50
  end
data/lib/loggers/modes.rb CHANGED
@@ -1,74 +1,138 @@
1
1
  require 'logger'
2
2
 
3
- #
4
- # Modules containing all methods to custom logger.
5
- #
6
- # There are 3 main level of logger (as in HTML)
7
- # => h1
8
- # => h2
9
- # => h3
10
-
11
- # @author Yann Prono
12
- # @author Anthony Cerf
13
- module Loggers
14
- module Modes
15
-
16
- module Txt
17
-
18
- include Modes
19
-
20
- def h1 severity, msg
21
- change_formatter ''
22
- @logger.add severity, msg
23
- end
3
+ module Reviser
4
+ module Loggers
5
+
6
+ #
7
+ # Module containing all methods to custom logger.
8
+ #
9
+ # There are 3 main levels of logger
10
+ # => h1 : Big title
11
+ # => h2 : medium title
12
+ # => h3 : tiny title
13
+ #
14
+ # @author Yann Prono
15
+ # @author Anthony Cerf
16
+ # @author Romain Ruez
17
+ #
18
+ module Modes
19
+
20
+ module Txt
21
+
22
+ include Modes
23
+
24
+ def h1 severity, msg
25
+ change_formatter ''
26
+ @logger.add severity, msg
27
+ end
24
28
 
25
- def h2 severity, msg
26
- change_formatter "\t\t"
27
- @logger.add severity, msg
29
+ def h2 severity, msg
30
+ change_formatter "\t\t"
31
+ @logger.add severity, msg
32
+ end
33
+
34
+ def h3 severity, msg
35
+ change_formatter "\t\t\t"
36
+ @logger.add severity, msg
37
+ end
28
38
  end
29
39
 
30
- def h3 severity, msg
31
- change_formatter "\t\t\t"
32
- @logger.add severity, msg
40
+ module Org
41
+
42
+ include Modes
43
+
44
+ def h1 severity, msg
45
+ change_formatter '*'
46
+ @logger.add severity, msg
47
+ end
48
+
49
+ def h2 severity, msg
50
+ change_formatter "**"
51
+ @logger.add severity, msg
52
+ end
53
+
54
+ def h3 severity, msg
55
+ change_formatter "***"
56
+ @logger.add severity, msg
57
+ end
58
+
33
59
  end
34
- end
60
+
61
+ module Html
62
+ include Modes
63
+
64
+ @add_header = false
65
+ def header
66
+ add_tag "<!DOCTYPE html><html><head>
67
+ <meta charset= \"UTF-8\">
68
+ <link rel=\"stylesheet\" href=\"#{File.expand_path(File.join(Cfg[:res_dir],'/css/style_logs.css'))}\" />
69
+ <title>#{@basename} logs</title>
70
+ </head>\n<body>
71
+ <header>
72
+ <p>#{@basename} logs</p>\n</header>\n<section>"
73
+ @add_header = true
74
+ end
35
75
 
36
- module Org
76
+ def h1 severity,msg
77
+ header unless @add_header
78
+ change_formatter "<h1 class=\"#{severity_to_s(severity)}\">" , '</h1>'
79
+ @logger.add severity , msg
80
+ end
81
+
82
+ def h2 severity,msg
83
+ header unless @add_header
84
+ change_formatter "<h2 class=\"#{severity_to_s(severity)}\">" , '</h2>'
85
+ @logger.add severity , msg
86
+ end
87
+
88
+ def h3 severity,msg
89
+ header unless @add_header
90
+ change_formatter "<h3 class=\"#{severity_to_s(severity)}\">", '</h3>'
91
+ @logger.add severity , msg
92
+ end
37
93
 
38
- include Modes
94
+ def close
95
+ add_tag '</section></body></html>'
96
+ @logger.close
97
+ end
98
+
99
+ end
100
+
39
101
 
40
- def h1 severity, msg
41
- change_formatter '*'
42
- @logger.add severity, msg
102
+ # Changes formatter of logger.
103
+ # @param prefix [String] Prefix to put before any content.
104
+ # @param suffix [String] Suffix to put after all contents.
105
+ def change_formatter prefix , suffix = ''
106
+ @logger.formatter = proc do |severity, datetime, progname, msg|
107
+ "\n#{prefix} #{severity} #{msg} #{suffix}"
108
+ end
43
109
  end
44
110
 
45
- def h2 severity, msg
46
- change_formatter "**"
47
- @logger.add severity, msg
111
+ # Creates a new line.
112
+ def newline
113
+ @logger.formatter = proc do |severity, datetime, progname, msg|
114
+ "\n#{msg}"
115
+ end
116
+ @logger.add(nil,"\n")
48
117
  end
49
118
 
50
- def h3 severity, msg
51
- change_formatter "***"
52
- @logger.add severity, msg
119
+ # Mainly used for HTML mode.
120
+ # @param tag [String] tag added.
121
+ def add_tag tag
122
+ @logger.formatter = proc do |severity, datetime, progname, msg|
123
+ "\n#{msg}"
124
+ end
125
+ @logger.add(nil,tag)
53
126
  end
54
127
 
55
- end
56
-
57
- # Change formatter
58
- # @param prefix Prefix to put before all content
59
- def change_formatter prefix
60
- @logger.formatter = proc do |severity, datetime, progname, msg|
61
- "\n#{prefix} #{severity} #{msg}"
128
+ # converts a severity level to a String.
129
+ # @param severity [Integer] Level of severity.
130
+ # @return [String] String of severity.
131
+ def severity_to_s severity
132
+ sev_labels = %w(DEBUG INFO WARN ERROR FATAL ANY)
133
+ sev_labels[severity].downcase
62
134
  end
63
- end
64
135
 
65
- # Create new line
66
- def newline
67
- @logger.formatter = proc do |severity, datetime, progname, msg|
68
- "\n#{msg}"
69
- end
70
- @logger.add(nil,"\n")
71
136
  end
72
-
73
137
  end
74
138
  end
data/lib/reviser.rb CHANGED
@@ -9,60 +9,82 @@
9
9
  # about the data these components exchange.
10
10
  #
11
11
  require 'mkmf'
12
+ require 'colorize'
12
13
 
13
14
  require_relative 'component'
14
15
  require_relative 'config'
15
16
 
16
- class Reviser
17
- @@setup = false
18
- @@loaded_components = {}
17
+ require_relative 'helpers/git'
18
+ require_relative 'helpers/project'
19
+ require_relative 'helpers/system'
19
20
 
20
- #
21
- # Adds an entry with the specified data.
22
- # At this time, we assume the user has given us
23
- # a Cfg that makes sense.
24
- # TODO : check data
25
- #
26
- def self.load(data)
27
- @@loaded_components[data[:component]] = {inputFrom: data[:inputFrom], data: nil}
28
- end
21
+ module Reviser
22
+ class Reviser
23
+ @@setup = false
24
+ @@loaded_components = {}
29
25
 
30
- def self.setup(config_file)
31
- @@setup = true
32
- Cfg.load config_file
33
- end
26
+ #
27
+ # Adds an entry with the specified data.
28
+ # At this time, we assume the user has given us
29
+ # a Cfg that makes sense.
30
+ # TODO : check data
31
+ #
32
+ def self.load(data)
33
+ data[:local] ||= false
34
34
 
35
- #
36
- # Basically runs each loaded component.
37
- # The exection order is based on the loading order.
38
- #
39
- def self.run
40
- raise ArgumentError unless @@setup
35
+ @@loaded_components.store data[:component],
36
+ {
37
+ :inputFrom => data[:inputFrom],
38
+ :local => data[:local],
39
+ :data => nil
40
+ }
41
+ end
41
42
 
42
- if Cfg.has_key?(:options) && Cfg[:options].has_key?(:log_dir)
43
- FileUtils.mkdir Cfg[:options][:log_dir] unless Dir.exist? Cfg[:options][:log_dir]
43
+ def self.setup(config_file)
44
+ @@setup = true
45
+ Cfg.load config_file
44
46
  end
45
47
 
46
- @@loaded_components.each do |comp, conf|
47
- puts "Reviser is now running #{Reviser.titleize comp}..."
48
+ #
49
+ # Basically runs each loaded component.
50
+ # The exection order is based on the loading order.
51
+ #
52
+ def self.run
53
+ raise ArgumentError unless @@setup
48
54
 
49
- require_relative "components/#{comp}"
50
- c = eval("Components::#{Reviser.titleize comp}").new ((conf[:inputFrom] != nil) && @@loaded_components[conf[:inputFrom]][:data]) || nil
55
+ if Cfg.has_key?(:options) && Cfg[:options].has_key?(:log_dir)
56
+ FileUtils.mkdir Cfg[:options][:log_dir] unless Dir.exist? Cfg[:options][:log_dir]
57
+ end
51
58
 
52
- @@loaded_components[comp][:data] = c.work
53
-
54
- puts 'Done'
55
- end
59
+ #
60
+ # Need to change this ASAP in order to
61
+ # let users load their own components
62
+ #
63
+ @@loaded_components.each do |comp, conf|
64
+ puts "Reviser is now running "+"#{Reviser.titleize comp}".green + "..."
56
65
 
57
- # To handle multiple loads
58
- # and calls to run
59
- @@loaded_components = {}
60
- end
66
+ require_relative "components/#{comp}" unless conf[:local]
67
+
68
+ namespace = conf[:local] && '' || 'Components'
69
+ param = ((conf[:inputFrom] != nil) && @@loaded_components[conf[:inputFrom]][:data]) || nil
70
+
71
+ c = eval("#{namespace}::#{Reviser.titleize comp}").new param
72
+
73
+ @@loaded_components[comp][:data] = c.work
74
+
75
+ puts 'Done'
76
+ end
61
77
 
62
- #
63
- # Quite handy
64
- #
65
- def self.titleize(str)
66
- str.split(/ |\_/).map(&:capitalize).join('')
78
+ # To handle multiple loads
79
+ # and calls to run
80
+ @@loaded_components = {}
81
+ end
82
+
83
+ #
84
+ # Quite handy
85
+ #
86
+ def self.titleize(str)
87
+ str.split(/ |\_/).map(&:capitalize).join('')
88
+ end
67
89
  end
68
90
  end
@@ -0,0 +1,166 @@
1
+ /* Imports */
2
+ /** *****************
3
+ * Variables *
4
+ *****************
5
+ */
6
+ /* line 22, ../scss/style_logs.scss */
7
+ html, body, h1, h2, h3, header {
8
+ padding: 0px;
9
+ margin: 0px;
10
+ font-family: sans-serif;
11
+ }
12
+
13
+ /* line 28, ../scss/style_logs.scss */
14
+ body {
15
+ background-color: #e6e6e6;
16
+ }
17
+
18
+ /* line 32, ../scss/style_logs.scss */
19
+ header {
20
+ display: inline-block;
21
+ width: 100%;
22
+ height: 4em;
23
+ margin-bottom: 4%;
24
+ background-color: #1B3147;
25
+ border-bottom: 2px solid #8d98a3;
26
+ }
27
+ /* line 41, ../scss/style_logs.scss */
28
+ header p {
29
+ text-align: center;
30
+ text-transform: uppercase;
31
+ font-weight: bold;
32
+ color: white;
33
+ }
34
+ /* line 48, ../scss/style_logs.scss */
35
+ header:before {
36
+ content: '';
37
+ display: inline-block;
38
+ width: 50px;
39
+ height: 50px;
40
+ position: absolute;
41
+ left: 50%;
42
+ top: 4em;
43
+ -moz-transform: translate(-27px, -22px);
44
+ -ms-transform: translate(-27px, -22px);
45
+ -webkit-transform: translate(-27px, -22px);
46
+ transform: translate(-27px, -22px);
47
+ background: white url("http://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Ruby_logo.svg/50px-Ruby_logo.svg.png");
48
+ background-repeat: no-repeat;
49
+ background-position: center;
50
+ -moz-background-size: 32px, 32px;
51
+ -o-background-size: 32px, 32px;
52
+ -webkit-background-size: 32px, 32px;
53
+ background-size: 32px, 32px;
54
+ border: 2px solid #a30000;
55
+ -moz-border-radius: 50%;
56
+ -webkit-border-radius: 50%;
57
+ border-radius: 50%;
58
+ }
59
+
60
+ /* line 68, ../scss/style_logs.scss */
61
+ section {
62
+ display: inline-block;
63
+ width: 90%;
64
+ margin-left: 5%;
65
+ margin-bottom: 2%;
66
+ border-left: 4px solid #3c4952;
67
+ -moz-box-sizing: border-box;
68
+ -webkit-box-sizing: border-box;
69
+ box-sizing: border-box;
70
+ }
71
+
72
+ /* line 78, ../scss/style_logs.scss */
73
+ h1, h2, h3 {
74
+ display: block;
75
+ width: 100%;
76
+ position: relative;
77
+ padding-left: 1.2em;
78
+ margin-top: 15px;
79
+ -moz-box-sizing: border-box;
80
+ -webkit-box-sizing: border-box;
81
+ box-sizing: border-box;
82
+ color: #3c4952;
83
+ }
84
+ /* line 88, ../scss/style_logs.scss */
85
+ h1:before, h2:before, h3:before {
86
+ content: '';
87
+ display: inline-block;
88
+ width: 20px;
89
+ height: 100%;
90
+ position: absolute;
91
+ top: 0;
92
+ left: -12px;
93
+ border-radius: 4px;
94
+ background-color: #c0392b;
95
+ }
96
+
97
+ /* line 102, ../scss/style_logs.scss */
98
+ h1 {
99
+ font-size: 2em;
100
+ }
101
+
102
+ /* line 103, ../scss/style_logs.scss */
103
+ h2 {
104
+ font-size: 1.2em;
105
+ padding-left: 3em;
106
+ }
107
+
108
+ /* line 104, ../scss/style_logs.scss */
109
+ h3 {
110
+ font-size: 0.8em;
111
+ padding-left: 6em;
112
+ }
113
+
114
+ /* line 106, ../scss/style_logs.scss */
115
+ section h1:first-child {
116
+ margin-top: -1px;
117
+ }
118
+
119
+ /* line 109, ../scss/style_logs.scss */
120
+ section h1:last-child {
121
+ margin-bottom: -1px;
122
+ }
123
+
124
+ /* line 113, ../scss/style_logs.scss */
125
+ .info:before {
126
+ background-color: #27ae60;
127
+ }
128
+
129
+ /* line 117, ../scss/style_logs.scss */
130
+ .error:before {
131
+ background-color: #c0392b;
132
+ }
133
+
134
+ /* line 121, ../scss/style_logs.scss */
135
+ .debug:before {
136
+ background-color: #F49C37;
137
+ }
138
+
139
+ @media all and (max-width: 700px) {
140
+ /* line 126, ../scss/style_logs.scss */
141
+ h1 {
142
+ font-size: 1.17em;
143
+ }
144
+
145
+ /* line 127, ../scss/style_logs.scss */
146
+ h2 {
147
+ font-size: 0.7em;
148
+ }
149
+
150
+ /* line 128, ../scss/style_logs.scss */
151
+ h3 {
152
+ font-size: 0.3em;
153
+ padding-left: 3.17em;
154
+ }
155
+
156
+ /* line 129, ../scss/style_logs.scss */
157
+ section {
158
+ margin-top: 5%;
159
+ }
160
+ }
161
+ @media all and (max-width: 300px) {
162
+ /* line 133, ../scss/style_logs.scss */
163
+ section {
164
+ margin-top: 8%;
165
+ }
166
+ }