quality_meter 0.0.2

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,5 @@
1
+ module QualityMeter
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace QualityMeter
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class String
2
+ def reverse_color; "\033[7m#{self}\033[27m" end
3
+ def bold; "\033[1m#{self}\033[22m" end
4
+ def black; "\033[30m#{self}\033[0m" end
5
+ def green; "\033[32m#{self}\033[0m" end
6
+ def bg_red; "\033[41m#{self}\033[0m" end
7
+ end
@@ -0,0 +1,248 @@
1
+ <!DOCTYPE HTML SYSTEM>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <title>Application Report</title>
6
+ <style>
7
+ /* CSS style used for HTML reports */
8
+ body {
9
+ font-family: sans-serif;
10
+ color: #161616;
11
+ width: 70%;
12
+ margin: auto;
13
+ }
14
+ th {
15
+ /*background-color: #980905;*/
16
+ /*border-bottom: 5px solid #530200;*/
17
+ /*color: white;*/
18
+ font-size: 11pt;
19
+ padding: 1px 8px 1px 8px;
20
+ }
21
+
22
+ td {
23
+ border-bottom: 2px solid white;
24
+ font-family: monospace;
25
+ padding: 5px 8px 1px 8px;
26
+ }
27
+
28
+ table {
29
+ /*background-color: #FCF4D4;*/
30
+ border-collapse: collapse;
31
+ /*color: black;*/
32
+ }
33
+
34
+ tr.first {
35
+ border-top: 1px solid #7ecc54;
36
+ padding-top: 2px;
37
+ }
38
+
39
+ table{
40
+ width: 100%;
41
+ border: 1px;
42
+ border-color: black;
43
+ }
44
+ th, td{
45
+ width: 33.33%;
46
+ }
47
+
48
+ .pie1 .title {
49
+ position: relative;
50
+ bottom: -40px;
51
+ text-align: top;
52
+ width: 50%;
53
+ }
54
+
55
+ .content {
56
+ width: 100px;
57
+ height: 100px;
58
+ border-radius: 50%;
59
+ background-color: #fff;
60
+ position: absolute;
61
+ top: 20px;
62
+ left: 20px;
63
+ line-height: 100px;
64
+ font-family: arial, sans-serif;
65
+ font-size: 35px;
66
+ text-align: center;
67
+ z-index: 2;
68
+ }
69
+ .content span {
70
+ opacity: 0;
71
+ animation: load-content 1s;
72
+ animation-fill-mode: forwards;
73
+ animation-delay: 0.6s;
74
+ -webkit-animation: load-content 3s;
75
+ -webkit-animation-fill-mode: forwards;
76
+ -webkit-animation-delay: 0.6s;
77
+ }
78
+ @keyframes load-content {
79
+ from {
80
+ opacity: 0;
81
+ }
82
+ to {
83
+ opacity: 5;
84
+ }
85
+ }
86
+ @-webkit-keyframes load-content {
87
+ from {
88
+ opacity: 0;
89
+ }
90
+ to {
91
+ opacity: 1;
92
+ }
93
+ }
94
+
95
+ .pie {
96
+ width:200px;
97
+ height:200px;
98
+ -moz-border-radius:100px;
99
+ -webkit-border-radius:100px;
100
+ border-radius:100px;
101
+ position:relative;
102
+ }
103
+ </style>
104
+ </head>
105
+ <body>
106
+ <table width="70%" margin="auto" border="1%">
107
+ <tr>
108
+ <th>
109
+ <h3>Security Warnings ss</h3>
110
+ <div class="pie" style="<%= if @brakeman_warnings.count > @security_warnings then "background-color:red;" else "background-color:green;" end %>">
111
+ <div class="title"></div>
112
+ <div class="outer-right mask" id= "10deg"></div>
113
+ <div class="inner-right"></div>
114
+
115
+ <div class="outer-left mask">
116
+ <div class="inner-left"></div>
117
+ </div>
118
+ <div class="content">
119
+ <span><%= @brakeman_warnings.count %></span>
120
+ </div>
121
+ </div><p></p>
122
+ <a href="<%= @app_root %>/report.html" target="_blank">Report</a>
123
+ </th>
124
+
125
+ <th>
126
+ <h3>Rails Best Practise</h3>
127
+ <div class="pie" style="<%= if @rails_best_practices_info.first['rails_best_practices'] > @rails_best_practices then "background-color:red;" else "background-color:green;" end %>">
128
+ <div class="title"></div>
129
+ <div class="outer-right mask" id= "10deg">
130
+ <!-- <div class="inner-right"></div> -->
131
+ </div>
132
+
133
+ <div class="outer-left mask">
134
+ <div class="inner-left"></div>
135
+ </div>
136
+ <div class="content">
137
+ <span><%= @rails_best_practices_info.first['rails_best_practices'] %></span>
138
+ </div>
139
+ </div>
140
+ <p></p>
141
+ <a href="<%= @app_root %>/tmp/metric_fu/output/rails_best_practices.html" target="_blank">Report</a>
142
+ </th>
143
+
144
+ <th>
145
+ <h3>Flog</h3>
146
+ <div class="pie" style="<%= if @flog_info.first['flog'] > @flog_complexity then "background-color:red;" else "background-color:green;" end %>">
147
+ <div class="title"></div>
148
+ <div class="outer-right mask" id= "10deg">
149
+ <div class="inner-right"></div>
150
+ </div>
151
+
152
+ <div class="outer-left mask">
153
+ <div class="inner-left"></div>
154
+ </div>
155
+ <div class="content">
156
+ <span><%= @flog_info.first['flog'] %></span>
157
+ </div>
158
+ </div><p></p>
159
+ <a href="<%= @app_root %>/tmp/metric_fu/output/flog.html" target="_blank">Report</a>
160
+ </th>
161
+
162
+ <th>
163
+ <h3>Stat</h3>
164
+ <div class="pie" style="<%= if @stats_info.first['stats'] > @stats_ratio then "background-color:red;" else "background-color:green;" end %>">
165
+ <div class="title"></div>
166
+ <div class="outer-right mask" id= "10deg">
167
+ <div class="inner-right"></div>
168
+ </div>
169
+
170
+ <div class="outer-left mask">
171
+ <div class="inner-left"></div>
172
+ </div>
173
+ <div class="content">
174
+ <span><%= @stats_info.first['stats'] %></span>
175
+ </div>
176
+ </div><p></p>
177
+ <a href="<%= @app_root %>/tmp/metric_fu/output/stats.html" target="_blank">Report</a>
178
+ </th>
179
+ </tr>
180
+ </table>
181
+ <p></p>
182
+
183
+ <h2>Security Warnings</h2>
184
+ <table style="background-color: pink;">
185
+ <tr>
186
+ <th>Type</th>
187
+ <th>File</th>
188
+ <th>Message</th>
189
+ </tr>
190
+
191
+ <% @brakeman_warnings.each do |warning| %>
192
+ <tr>
193
+ <td><h4><%= warning['warning_type'] %></h4></td>
194
+ <td><%= warning['file'] %></td>
195
+ <td><%= warning['message'] %></td>
196
+ </tr>
197
+ <% end %>
198
+ </table>
199
+ <p></p>
200
+
201
+ <table width="80%">
202
+ <tr>
203
+ <th><div id="lineCanvas" style="position:absolute;height:300px;width:300px;"></div></th>
204
+ <th><div id="line1Canvas" style=" position:absolute;height:300px;width:300px;"></div></th>
205
+ <th><div id="line2Canvas" style="position:absolute;height:300px;width:300px;"></div></th>
206
+ <th><div id="line3Canvas" style="position:absolute;height:300px;width:300px;"></div></th>
207
+ </tr>
208
+ </table>
209
+
210
+ <script type="text/javascript">
211
+ var g = new line_graph();
212
+ g.add('c1', 140);
213
+ g.add('c2', 90);
214
+ g.add('c3', 100);
215
+ g.add('c4', 54);
216
+ g.add('c5', 0);
217
+
218
+ var m = new line_graph();
219
+ m.add('c1', 200);
220
+ m.add('c2', 100);
221
+ m.add('c3', 9000);
222
+ m.add('c4', 8000);
223
+ m.add('c5', 70);
224
+
225
+ var n = new line_graph();
226
+ n.add('c1', 200);
227
+ n.add('c2', 105);
228
+ n.add('c3', 90);
229
+ n.add('c4', 35);
230
+ n.add('c5', 10);
231
+
232
+ var q = new line_graph();
233
+ q.add('c1', 20);
234
+ q.add('c2', 18);
235
+ q.add('c3', 15);
236
+ q.add('c4', 4);
237
+ q.add('c5', 1);
238
+
239
+ g.render("lineCanvas", "flog Graph");
240
+ m.render("line1Canvas", "Rails best practise Graph");
241
+ n.render("line2Canvas", "Rails best practise Graph");
242
+ q.render("line3Canvas", "flog Grap");
243
+ </script>
244
+
245
+ <h2><%= "Generated on #{Time.now}" %></h2>
246
+ <%#= @previous_reports %>
247
+ </body>
248
+ </html>
@@ -0,0 +1,3 @@
1
+ module QualityMeter
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,97 @@
1
+ require 'erb'
2
+ require 'quality_meter/string'
3
+ require 'terminal-table'
4
+
5
+ namespace :quality_meter do
6
+ desc "Run brakeman and metric_fu to generate report of code"
7
+
8
+ ###This will run command to generate brakeman and matric fu report ###
9
+ task :generate_report do
10
+ puts "*** run brakeman ***"
11
+ system "brakeman -o report.html -o report.json"
12
+
13
+ puts "*** run metric_fu ***"
14
+ system "metric_fu --out #{Rails.root}/public/metric_fu "
15
+ end
16
+
17
+ task :add_command_in_post_commit do
18
+ ### Asked user to add rake command inside git post commit file , Task will run in each eommit
19
+ STDOUT.puts "Write Y to add rake qmeter:run command to 'post commit', it will run when you commit the code".reverse_color
20
+ input = STDIN.gets.strip
21
+ if input == 'y' || input == 'Y'
22
+ File.open('.git/hooks/post-commit', 'a') do |f|
23
+ f.puts "rake qmeter:run"
24
+ end
25
+ system "chmod +x .git/hooks/post-commit"
26
+ else
27
+ STDOUT.puts "You can add it in next time"
28
+ end
29
+ end
30
+
31
+ ### *** ###
32
+ task :run do
33
+ if File.directory?('.git') && File.exists?('.git/config')
34
+ ### this will check git post commit has rake command or not
35
+ if File.file?('.git/hooks/post-commit')
36
+ file = File.read(".git/hooks/post-commit").include?('rake qmeter:run')
37
+ if !file = File.read(".git/hooks/post-commit").include?('rake qmeter:run')
38
+ Rake::Task["qmeter:add_command_in_post_commit"].execute
39
+ end
40
+ else
41
+ Rake::Task["qmeter:add_command_in_post_commit"].execute
42
+ end
43
+
44
+ ###This always executes the task, but it doesn't execute its dependencies
45
+ Rake::Task["qmeter:generate_report"].execute
46
+ ### *** ###
47
+ extend Qmeter
48
+ self.generate_final_report
49
+ puts "======= Saving Current Analysis Details ======="
50
+ self.save_report
51
+ # Initialize JavaScript and CoffeeScript functionality
52
+ initialize_javascript_coffeescript_report unless File.exist?("#{Rails.root}/config/js_cs_config/js_error_list.txt")
53
+
54
+ rows = []
55
+ rows << ['Security Warning', @warnings_count]
56
+ rows << ['Flog', @flog_average_complexity]
57
+ rows << ['Stats', @stats_code_to_test_ratio]
58
+ rows << ['Rails Best Practices', @rails_best_practices_total]
59
+ table = Terminal::Table.new :title => "Qmeter Analysis", :headings => ['Type', 'Number'], :rows => rows, :style => {:width => 80}
60
+ puts table
61
+
62
+ puts "======= Please visit localhost:3000/qmeter for detailed report ======="
63
+ else
64
+ puts "======= Please Initialize git first =======".bold.green.bg_red
65
+ end
66
+ end
67
+
68
+ # This will append Files/Folders in .gitignore file
69
+ task :gitignore do
70
+ add_to_gitignore("qmeter.csv")
71
+ add_to_gitignore("report.json")
72
+ add_to_gitignore("report.html")
73
+ add_to_gitignore("public/metric_fu")
74
+ add_to_gitignore("config/js_cs_config")
75
+ end
76
+
77
+ def add_to_gitignore(file_folder)
78
+ resource = file_folder.to_s
79
+ unless File.read('.gitignore').include?(resource)
80
+ gitignore_file = File.open('.gitignore', 'a')
81
+ gitignore_file.puts(resource)
82
+ gitignore_file.close_write
83
+ end
84
+ end
85
+
86
+ def initialize_javascript_coffeescript_report
87
+ puts "======= Initializing for JavsScript CoffeeScript reports =======".reverse_color
88
+ open("#{Rails.root}/Gemfile", 'a') { |f| f.puts "gem 'jshint'" } unless (File.read('Gemfile').include?("gem 'jshint'") || File.read('Gemfile').include?('gem "jshint"'))
89
+ open("#{Rails.root}/Gemfile", 'a') { |f| f.puts "gem 'coffeelint'" } unless (File.read('Gemfile').include?("gem 'coffeelint'") || File.read('Gemfile').include?('gem "coffeelint"'))
90
+ system('bundle')
91
+ system('mkdir config/js_cs_config') unless File.directory?("#{Rails.root}/config/js_cs_config")
92
+ File.open("config/js_cs_config/coffeelint.json", 'w') do |f|
93
+ f.write('{ "max_line_length": { "value": 120 }, "no_tabs": { "level": "ignore" } }')
94
+ end
95
+ end
96
+
97
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quality_meter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Arpit Vaishnav
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: brakeman
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: metric_fu
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.12'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.12'
69
+ - !ruby/object:Gem::Dependency
70
+ name: terminal-table
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.5'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.5'
83
+ description: QualityMeter is a common platform for rails application quality controll.
84
+ email:
85
+ - arpitvaishnav@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - MIT-LICENSE
91
+ - README.rdoc
92
+ - Rakefile
93
+ - app/assets/javascripts/quality_meter/jquery-v1.11.2.js
94
+ - app/assets/javascripts/quality_meter/quality_meter.js
95
+ - app/assets/stylesheets/quality_meter/quality_meter.css
96
+ - app/controllers/quality_meter/report_controller.rb
97
+ - app/views/quality_meter/report/index.html.erb
98
+ - config/routes.rb
99
+ - lib/quality_meter.rb
100
+ - lib/quality_meter/engine.rb
101
+ - lib/quality_meter/string.rb
102
+ - lib/quality_meter/templates/summary_report.html.erb
103
+ - lib/quality_meter/version.rb
104
+ - lib/tasks/quality_meter_tasks.rake
105
+ homepage: https://github.com/arpitvaishnav/quality_meter
106
+ licenses: []
107
+ metadata: {}
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 2.4.8
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: QualityMeter for applications in Rails.
128
+ test_files: []