matrack 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ require "matrack"
2
+
3
+ def required_paths
4
+ [
5
+ File.join(File.dirname(__FILE__), "..", "app", "controllers"),
6
+ File.join(File.dirname(__FILE__), "..", "app", "models"),
7
+ File.join(File.dirname(__FILE__), "..", "app", "helpers"),
8
+ File.join(File.dirname(__FILE__), "..", "db"),
9
+ File.join(File.dirname(__FILE__), "..", "config")
10
+ ]
11
+ end
12
+
13
+ required_paths.each { |path| $LOAD_PATH << path }
14
+ Dir["app/helpers/*.rb"].each { |helper| require helper.split("/").last }
15
+ Dir["app/models/*.rb"].each { |model| require model.split("/").last }
16
+
17
+ class Application < Matrack::Application
18
+ Matrack::BaseModel.db_conn
19
+ end
@@ -0,0 +1,3 @@
1
+ class ApplicationController < Matrack::BaseController
2
+ # All other controllers inherit from here
3
+ end
@@ -0,0 +1,12 @@
1
+ #\ -p 3001
2
+ APP_PATH = __dir__
3
+ require "./config/application"
4
+ MatrackApp = Matrack::Application.new
5
+
6
+ require "./config/routes"
7
+
8
+ use Rack::Static, :urls => ["/css", "/images","/js"], :root => "app/assets"
9
+ use Rack::MethodOverride
10
+ use Rack::Session::Cookie, :secret => "user_choice_secret"
11
+ use Rack::Reloader
12
+ run MatrackApp
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <head>
3
+ <meta charset= "UTF-8">
4
+ <title>404</title>
5
+ <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
6
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
7
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.4/css/materialize.min.css">
8
+ <%= include_stylesheet("application")%>
9
+ <%= display_favicon %>
10
+ <%= include_javascript("application")%>
11
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
12
+ </head>
13
+ <body>
14
+ <div class="row not-found">
15
+ <div class="col m8 offset-m2">
16
+ <p>&nbsp;</p>
17
+ <p>Since we could not find the page you want to visit.<br/>
18
+ We brought you this beautiful car with the pretty angel to take you to wherever you want to find your unavailable page.</p>
19
+ <p>&nbsp;</p>
20
+ <img src="http://404-resto.com/typo3temp/pics/7580ea80fa.jpg">
21
+ </div>
22
+ </div>
23
+ </body>
24
+ </html>
@@ -0,0 +1,11 @@
1
+ MatrackApp.router.draw do
2
+ # Add different routes here.
3
+ # You may specify the root route or landing page with the root keyword
4
+ # The root method takes a parameter
5
+ # EXAMPLE root "/" OR root "controller#action"
6
+ # Available routes requests are get, post, put and delete
7
+ # Each takes in an alias the first parameter and a hash as the second
8
+ # The hash key is "to" while the value is the controller and action
9
+ # Example get "user", to: "sessions#index"
10
+
11
+ end
@@ -0,0 +1,78 @@
1
+ module Matrack
2
+ class Generator < Thor
3
+ include Thor::Actions
4
+
5
+ attr_reader :app_name
6
+
7
+ class_option :test_framework, default: :rspec
8
+
9
+ def self.source_root
10
+ File.dirname(__FILE__)
11
+ end
12
+
13
+ desc "new [app_name]", "creates new project with app_name as the app name"
14
+ def new(app_name)
15
+ @app_name = app_name
16
+ empty_directory "#{app_name}"
17
+ create_mvc_dir(["assets", "controllers", "helpers", "models", "views"])
18
+ create_dir(["config", "db"])
19
+ files = ["config.ru", "Gemfile", "README.md"]
20
+ copy_basic_files(files)
21
+ end
22
+
23
+ desc "create_a_file[args]", "creates new file"
24
+ def create_a_file(name, path)
25
+ create_file "#{path}/#{name}"
26
+ end
27
+
28
+ desc "create_mvc_dir[args]", "creates app dir with mvc folders"
29
+ def create_mvc_dir(directories = [])
30
+ directories.each do |name|
31
+ empty_directory "#{app_name}/app/#{name}"
32
+ create_asset_dirs if name == "assets"
33
+ if name == "views"
34
+ create_view_layout
35
+ files = ["application.html.erb", "invalid.html.erb"]
36
+ path = "app/views/layout"
37
+ copy_basic_files(files, path)
38
+ elsif name == "controllers"
39
+ copy_basic_files("application_controller.rb", "app/#{name}")
40
+ end
41
+ end
42
+ end
43
+
44
+ desc "create_asset_dirs", "creates asset subfolders"
45
+ def create_asset_dirs
46
+ directories = ["css", "images", "js"]
47
+ directories.each do |name|
48
+ path = "#{app_name}/app/assets/#{name}"
49
+ empty_directory path
50
+ create_a_file("application.#{name}", path) if ["css", "js"].include? name
51
+ end
52
+ end
53
+
54
+ desc "create_view_layout", "creates view layout folder"
55
+ def create_view_layout
56
+ empty_directory "#{app_name}/app/views/layout"
57
+ end
58
+
59
+ desc "create_dir[args]", "creates directories in the app root"
60
+ def create_dir(directories = [])
61
+ directories.each do |name|
62
+ empty_directory "#{app_name}/#{name}"
63
+ files = ["application.rb", "routes.rb"]
64
+ copy_basic_files(files, "#{name}") if name == "config"
65
+ end
66
+ end
67
+
68
+ desc "copy_basic_files[args]", "creates basic setup files"
69
+ def copy_basic_files(name, path = nil)
70
+ dir_path = path.nil? ? "#{app_name}" : "#{app_name}/#{path}"
71
+ if name.is_a? Array
72
+ name.each { |n| copy_file "generate/#{n}", "#{dir_path}/#{n}" }
73
+ else
74
+ copy_file "generate/#{name}", "#{dir_path}/#{name}"
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,14 @@
1
+ require_relative "generator"
2
+ require_relative "mvc_gen"
3
+
4
+ module Matrack
5
+ class GeneratorBase < MvcGen
6
+
7
+ desc "server", "starts matrack server. Alias 's'"
8
+ def server
9
+ exec "rackup"
10
+ end
11
+
12
+ map ["server", "s"] => "server"
13
+ end
14
+ end
@@ -0,0 +1,57 @@
1
+ module Matrack
2
+ class MvcGen < Generator
3
+ attr_reader :name, :len
4
+
5
+ desc "generate[args]", "generates controllers, models & views. Alias 'g'"
6
+ def generate(*args)
7
+ @name = args[0] == "controller" ? args[1].pluralize : args[1]
8
+ @len = args.length
9
+ create_controller(args) if args[0] == "controller"
10
+ create_model(args) if args[0] == "model"
11
+ end
12
+
13
+ desc "create_controller[args]", "creates new controllers"
14
+ def create_controller(args)
15
+ create_file "./app/controllers/#{name}_controller.rb" do
16
+ data = "class #{name.to_camel_case}Controller < ApplicationController"
17
+ args[2..-1].each { |mthd| data += "\n def #{mthd} \n end"} if len > 2
18
+ data += "\nend"
19
+ end
20
+ create_views(args)
21
+ create_helper
22
+ end
23
+
24
+ desc "create_views[args]", "creates new controllers views"
25
+ def create_views(args)
26
+ path = "./app/views/#{name}"
27
+ empty_directory path
28
+ if len > 2
29
+ args[2..-1].each { |mthd| create_a_file("#{mthd}.html.erb", path) }
30
+ end
31
+ end
32
+
33
+ desc "create_helper", "creates new helper"
34
+ def create_helper
35
+ path = "./app/helpers/#{name}_helper.rb"
36
+ create_file "./app/helpers/#{name}_helper.rb" do
37
+ "module #{name.to_camel_case}Helper \nend"
38
+ end
39
+ end
40
+
41
+ desc "create_model[args]", "creates new models"
42
+ def create_model(args)
43
+ create_file "./app/models/#{name}.rb" do
44
+ data = "class #{name.to_camel_case} < Matrack::BaseModel"
45
+ if len > 2
46
+ args[2..-1].each do |prop|
47
+ name, type = prop.split(":")
48
+ data += "\n property :#{name}, :#{type}"
49
+ end
50
+ end
51
+ data += "\n create_table \nend"
52
+ end
53
+ end
54
+
55
+ map ["g", "generate"] => "generate"
56
+ end
57
+ end
@@ -0,0 +1,604 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset='UTF-8' />
5
+ <title>RuboCop Inspection Report</title>
6
+
7
+ <style>
8
+ * {
9
+ -webkit-box-sizing: border-box;
10
+ -moz-box-sizing: border-box;
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ body, html {
15
+ font-size: 62.5%;
16
+ }
17
+ body {
18
+ background-color: #ecedf0;
19
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
20
+ margin: 0;
21
+ }
22
+ code {
23
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
24
+ font-size: 85%;
25
+ }
26
+ #header {
27
+ background: #f9f9f9;
28
+ color: #333;
29
+ border-bottom: 3px solid #ccc;
30
+ height: 50px;
31
+ padding: 0;
32
+ }
33
+ #header .logo {
34
+ float: left;
35
+ margin: 5px 12px 7px 20px;
36
+ width: 38px;
37
+ height: 38px;
38
+ }
39
+ #header .title {
40
+ display: inline-block;
41
+ float: left;
42
+ height: 50px;
43
+ font-size: 2.4rem;
44
+ letter-spacing: normal;
45
+ line-height: 50px;
46
+ margin: 0;
47
+ }
48
+
49
+ .information, #offenses {
50
+ width: 100%;
51
+ padding: 20px;
52
+ color: #333;
53
+ }
54
+ #offenses {
55
+ padding: 0 20px;
56
+ }
57
+
58
+ .information .infobox {
59
+ border-left: 3px solid;
60
+ border-radius: 4px;
61
+ background-color: #fff;
62
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
63
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
64
+ padding: 15px;
65
+ border-color: #0088cc;
66
+ font-size: 1.4rem;
67
+ }
68
+ .information .infobox .info-title {
69
+ font-size: 1.8rem;
70
+ line-height: 2.2rem;
71
+ margin: 0 0 0.5em;
72
+ }
73
+ .information .infobox ul {
74
+ list-style: none;
75
+ margin: 0;
76
+ padding: 0;
77
+ }
78
+ .information .infobox ul li {
79
+ line-height: 1.8rem
80
+ }
81
+
82
+ #offenses .offense-box {
83
+ border-radius: 4px;
84
+ margin-bottom: 20px;
85
+ background-color: #fff;
86
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
87
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
88
+ }
89
+ #offenses .offense-box .box-title h3 {
90
+ color: #33353f;
91
+ background-color: #f6f6f6;
92
+ font-size: 2rem;
93
+ line-height: 2rem;
94
+ display: block;
95
+ padding: 15px;
96
+ border-radius: 5px;
97
+ margin: 0;
98
+ }
99
+ #offenses .offense-box .offense-reports {
100
+ padding: 0 15px;
101
+ }
102
+ #offenses .offense-box .offense-reports .report {
103
+ border-bottom: 1px dotted #ddd;
104
+ padding: 15px 0px;
105
+ position: relative;
106
+ font-size: 1.3rem;
107
+ }
108
+ #offenses .offense-box .offense-reports .report:last-child {
109
+ border-bottom: none;
110
+ }
111
+ #offenses .offense-box .offense-reports .report pre code {
112
+ display: block;
113
+ background: #000;
114
+ color: #fff;
115
+ padding: 10px 15px;
116
+ border-radius: 5px;
117
+ line-height: 1.6rem;
118
+ }
119
+ #offenses .offense-box .offense-reports .report .location {
120
+ font-weight: bold;
121
+ }
122
+ #offenses .offense-box .offense-reports .report .message code {
123
+ padding: 0.3em;
124
+ background-color: rgba(0,0,0,0.07);
125
+ border-radius: 3px;
126
+ }
127
+ .severity {
128
+ text-transform: capitalize;
129
+ font-weight: bold;
130
+ }
131
+ .highlight {
132
+ padding: 2px;
133
+ border-radius: 2px;
134
+ font-weight: bold;
135
+ }
136
+
137
+ .severity.refactor {
138
+ color: rgba(237, 156, 40, 1.0);
139
+ }
140
+ .highlight.refactor {
141
+ background-color: rgba(237, 156, 40, 0.6);
142
+ border: 1px solid rgba(237, 156, 40, 0.4);
143
+ }
144
+
145
+ .severity.convention {
146
+ color: rgba(237, 156, 40, 1.0);
147
+ }
148
+ .highlight.convention {
149
+ background-color: rgba(237, 156, 40, 0.6);
150
+ border: 1px solid rgba(237, 156, 40, 0.4);
151
+ }
152
+
153
+ .severity.warning {
154
+ color: rgba(150, 40, 239, 1.0);
155
+ }
156
+ .highlight.warning {
157
+ background-color: rgba(150, 40, 239, 0.6);
158
+ border: 1px solid rgba(150, 40, 239, 0.4);
159
+ }
160
+
161
+ .severity.error {
162
+ color: rgba(210, 50, 45, 1.0);
163
+ }
164
+ .highlight.error {
165
+ background-color: rgba(210, 50, 45, 0.6);
166
+ border: 1px solid rgba(210, 50, 45, 0.4);
167
+ }
168
+
169
+ .severity.fatal {
170
+ color: rgba(210, 50, 45, 1.0);
171
+ }
172
+ .highlight.fatal {
173
+ background-color: rgba(210, 50, 45, 0.6);
174
+ border: 1px solid rgba(210, 50, 45, 0.4);
175
+ }
176
+
177
+ footer {
178
+ margin-bottom: 20px;
179
+ margin-right: 20px;
180
+ font-size: 1.3rem;
181
+ color: #777;
182
+ text-align: right;
183
+ }
184
+ </style>
185
+ </head>
186
+ <body>
187
+ <div id="header">
188
+ <img class="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABMCAYAAADHl1ErAAAKQWlDQ1BJQ0Mg
189
+ UHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKG
190
+ hCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a
191
+ /cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA
192
+ 4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8
193
+ fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnO
194
+ Gbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcm
195
+ oWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrx
196
+ s1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nf
197
+ Hn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/v
198
+ IADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtW
199
+ O6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR
200
+ 6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBD
201
+ IwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWi
202
+ LBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJB
203
+ PtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC
204
+ 8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQj
205
+ dBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvh
206
+ SrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQ
207
+ DqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5
208
+ gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJu
209
+ Na4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoE
210
+ a4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJ
211
+ hiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRP
212
+ ShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uR
213
+ a5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqi
214
+ lWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAd
215
+ Rzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M0
216
+ 5rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmph
217
+ atlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqX
218
+ NMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+
219
+ pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9H
220
+ v1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41sm
221
+ sImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5
222
+ m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Oz
223
+ zqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuE
224
+ fdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEu
225
+ ZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrP
226
+ C16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX
227
+ +08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJ
228
+ NQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF
229
+ 1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNc
230
+ lrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufG
231
+ K+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykz
232
+ qdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruY
233
+ jv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752
234
+ /ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBR
235
+ sL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr
236
+ 31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fs
237
+ vlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/T
238
+ AY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XH
239
+ wo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++e
240
+ DDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2
241
+ mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5
242
+ cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+
243
+ BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j
244
+ 7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0
245
+ RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K
246
+ 3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn8
247
+ 8ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEJGlUWHRY
248
+ TUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9i
249
+ ZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRm
250
+ OlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt
251
+ cmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjph
252
+ Ym91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRv
253
+ YmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0
254
+ cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICAgICAgICAgIHhtbG5z
255
+ OmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAg
256
+ ICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv
257
+ Ij4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MTwvdGlmZjpSZXNv
258
+ bHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+NTwvdGlm
259
+ ZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzI8
260
+ L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9u
261
+ PjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0
262
+ aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhl
263
+ bFhEaW1lbnNpb24+NzY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAg
264
+ ICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAg
265
+ ICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjc2PC9leGlmOlBpeGVsWURpbWVu
266
+ c2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6
267
+ U2VxLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1v
268
+ ZGlmeURhdGU+MjAxNDowOToyMyAyMjowOToxNDwveG1wOk1vZGlmeURhdGU+
269
+ CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjIuMTwv
270
+ eG1wOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAg
271
+ PC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KkpvroQAABkNJREFUeAHtm0uIHFUY
272
+ hWveM8ZpHN/RYCIS34mKGGSMMmLA6CKILmQwBOJCEcwqKzELceVWN+IyIgQM
273
+ 4gt84SMqBpNBkBiJGkEFMRFNMmSSzEzm5fmG7qEpbt1bt7q6XuOBQ3Xfuvf/
274
+ z/nr3qrq6u6OIH9cLAlrxGvr20e0vVsE34rviL+Lv9W3J7XNDR05Zb5deR8U
275
+ 7xfXiVeKnaIN89p5XPxB/EL8WPxerCxqcrZd3CdOiwstkhj7RGISuzLol5On
276
+ xSNiq0WKGk9scpCr1LhP6veLUUbTbicXOUuHHil+QZwS0y6KKx45yY2GUuAy
277
+ qXxXdBlr9340oKXQWC11Y2K7ixE3PlrQVEhcI1WHxLhmsuqHJrQVCtx8cpOZ
278
+ VRF886ANjYVAl1TsFX1NZN0fjWjNHTulIGvzSfOhNVfcpuwTYlIDWY9DK5pz
279
+ AdP7EzFr063mQ3MuS/PREharUWy0Zwruog+IDQFl26I9008Cm0tcrMbBxYM3
280
+ XM+gogI+GbWjRO2ZebhKRTklNo5UWbd4wIsXksywEWW4yCtLMTvjYcRXWpKC
281
+ bfJNUuD+3l58C9Yt83cWuAC+0vCCp7aBT/3nxbKet8K68eL1JMO3unzLtFtk
282
+ WwVQwKp4Kebx8KnurbLwjLhBHCimHW9VkxpxUHxVPOw92jJgi/bxjXP4HFCV
283
+ 93jDYypYrSj/iFUpTpQPPK4RrYhzW7FVES61RqnGTjw+4bISp2B3uIJUaL/T
284
+ a5yC9VaoIC4rTq9xCjbrylKh/U6vroLdpGKsr1BBXFbwiudE4NP8j2LUVaWq
285
+ 7XiOfBpjm2HbNPBmcbkBz3g3wnanf1ojBo2j6o1DnZ3B6IpasL6nb/Hng0y5
286
+ IgKT8+Khmelgz9nTwal53lnB13E1Uw9bwaz+r+jqCvZcsjIY7hsIZhdXrSl8
287
+ sdq69Tl7//RkMHriWPD33JxLnLE2vk8rlpLsGBwKhvsHggn30Voak/+LhUXN
288
+ aN81/m8iObZzWGRABg339QfTC9ZJGDk+zx1oRnsi4xKeaBxlmlJi45zNsxox
289
+ cqMZ7UkPdeKCvX3uTNCrkpWpaGhFM9qTFizxOWy3rjZru3uD7RfWgoGOcpRt
290
+ UjPrlYnxAO1JYXN6QEF5WGgFtxQ39vQGXbZI1gjZ7JzTlPpp5vzirUWMjGPq
291
+ 4/QejjOiBmbuciTevcH57TWRu7zlUjS84jnRuV3jFr+z+1Lb5VKwr+qe8W6E
292
+ q5I87jhpHFnNxhOyZX3E4yoYZcnl13o5HQ+n1zgFS34Nzsl1C2mdXuMU7PMW
293
+ BJRtaCpeecTDfUnVT/x4tD7O8jn616nz1xUuGt7w6ITP/Xmfoj0s8n/sFSIz
294
+ Low4Szw8Jov33F+FgfezIn+r+UDkH77/I+0K+MywRm7+0P6hGF7vM2rbIh4V
295
+ i4S1EvOeGP6ZOY+hHxKPi7GR5GkFYxDBsmwGS5RlWzSg6QYxPDlYjt7+vQfU
296
+ q2G6G6bNdF6rD1naPKZXHNk0wEx/yxEITWgLzzCTB0eoBBV2RrR3eEC7Xxcv
297
+ sHeLvXdUPcfFz2KPaLFjllc1foD7hphWsbBOLGISOxMkXZJJxLEMuWAALuEY
298
+ PcebBKBQW0XOT8Qk9ndiIbFKqlgGnBuayS+SbxGj0KUdz4sUaUdUJ492YhCL
299
+ mMSOAppMv/zGA17ajqQFawhj+YSvWI19PltixFmKqRYsyyXZKEZaS4fZnVas
300
+ hjbnNo+ChUVtVMP1omvWUaCfxW/EUuFqqTX9m21W7es8nTyl/oxrPhfaXtOX
301
+ MT5AkykHHvDSdgwpw1+iyRgfjeLiHnU8I5ri2NoYw9i4QJMpHh7w0nZw7zYm
302
+ mkS8GTP7SvX7JSKGKW64jbHEiIO96hQez3s8ZHYf+nKECKb+NtEGzpvviyYT
303
+ Pm3EcJ2D0WJajuTBQ2bYqEz8wMpkcErtu8TLxTC4X3pJNI1L0kYs0z0YudGA
304
+ FlNctOPBG64rU1RARH4kborqoPZj4mGx8cUCuVaJG8Q0cVDB/hQpDKiJ/C/K
305
+ tmQ/1f7NovNXdeqTGu5SJB6RmI5gkdvQjPZc8KyyFrk4Jm1ozhXPKTvPzE3i
306
+ itSGRrQWAo9LxR9ikQrUrAVtaCwUOMm+KB4Vm8Xm+RotaLJdALQ7Xwwq/b3i
307
+ TvFXMeuCkZPcaEBLqvgPBhCuiZo8+sAAAAAASUVORK5CYII=
308
+ " alt="">
309
+ <h1 class="title">RuboCop Inspection Report</h1>
310
+ </div>
311
+ <div class="information">
312
+ <div class="infobox">
313
+ 10 files inspected,
314
+ 24 offenses detected
315
+ </div>
316
+ </div>
317
+ <div id="offenses">
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+ <div class="offense-box">
327
+ <div class="box-title"><h3>lib/matrack/base_model.rb - 22 offenses</h3></div>
328
+ <div class="offense-reports">
329
+
330
+ <div class="report">
331
+ <div class="meta">
332
+ <span class="location">Line #4</span> –
333
+ <span class="severity convention">convention:</span>
334
+ <span class="message">Extra empty line detected at method body beginning.</span>
335
+ </div>
336
+
337
+ </div>
338
+
339
+ <div class="report">
340
+ <div class="meta">
341
+ <span class="location">Line #7</span> –
342
+ <span class="severity convention">convention:</span>
343
+ <span class="message">Omit the parentheses in defs when the method doesn't accept any arguments.</span>
344
+ </div>
345
+
346
+ <pre><code> def self.find<span class="highlight convention">(</span>)</code></pre>
347
+
348
+ </div>
349
+
350
+ <div class="report">
351
+ <div class="meta">
352
+ <span class="location">Line #8</span> –
353
+ <span class="severity convention">convention:</span>
354
+ <span class="message">Extra empty line detected at method body beginning.</span>
355
+ </div>
356
+
357
+ </div>
358
+
359
+ <div class="report">
360
+ <div class="meta">
361
+ <span class="location">Line #11</span> –
362
+ <span class="severity convention">convention:</span>
363
+ <span class="message">Omit the parentheses in defs when the method doesn't accept any arguments.</span>
364
+ </div>
365
+
366
+ <pre><code> def self.find_by<span class="highlight convention">(</span>)</code></pre>
367
+
368
+ </div>
369
+
370
+ <div class="report">
371
+ <div class="meta">
372
+ <span class="location">Line #12</span> –
373
+ <span class="severity convention">convention:</span>
374
+ <span class="message">Extra empty line detected at method body beginning.</span>
375
+ </div>
376
+
377
+ </div>
378
+
379
+ <div class="report">
380
+ <div class="meta">
381
+ <span class="location">Line #15</span> –
382
+ <span class="severity convention">convention:</span>
383
+ <span class="message">Omit the parentheses in defs when the method doesn't accept any arguments.</span>
384
+ </div>
385
+
386
+ <pre><code> def self.where<span class="highlight convention">(</span>)</code></pre>
387
+
388
+ </div>
389
+
390
+ <div class="report">
391
+ <div class="meta">
392
+ <span class="location">Line #16</span> –
393
+ <span class="severity convention">convention:</span>
394
+ <span class="message">Extra empty line detected at method body beginning.</span>
395
+ </div>
396
+
397
+ </div>
398
+
399
+ <div class="report">
400
+ <div class="meta">
401
+ <span class="location">Line #19</span> –
402
+ <span class="severity convention">convention:</span>
403
+ <span class="message">Omit the parentheses in defs when the method doesn't accept any arguments.</span>
404
+ </div>
405
+
406
+ <pre><code> def self.limit<span class="highlight convention">(</span>)</code></pre>
407
+
408
+ </div>
409
+
410
+ <div class="report">
411
+ <div class="meta">
412
+ <span class="location">Line #20</span> –
413
+ <span class="severity convention">convention:</span>
414
+ <span class="message">Extra empty line detected at method body beginning.</span>
415
+ </div>
416
+
417
+ </div>
418
+
419
+ <div class="report">
420
+ <div class="meta">
421
+ <span class="location">Line #23</span> –
422
+ <span class="severity convention">convention:</span>
423
+ <span class="message">Omit the parentheses in defs when the method doesn't accept any arguments.</span>
424
+ </div>
425
+
426
+ <pre><code> def self.offset<span class="highlight convention">(</span>)</code></pre>
427
+
428
+ </div>
429
+
430
+ <div class="report">
431
+ <div class="meta">
432
+ <span class="location">Line #24</span> –
433
+ <span class="severity convention">convention:</span>
434
+ <span class="message">Extra empty line detected at method body beginning.</span>
435
+ </div>
436
+
437
+ </div>
438
+
439
+ <div class="report">
440
+ <div class="meta">
441
+ <span class="location">Line #27</span> –
442
+ <span class="severity convention">convention:</span>
443
+ <span class="message">Omit the parentheses in defs when the method doesn't accept any arguments.</span>
444
+ </div>
445
+
446
+ <pre><code> def self.join<span class="highlight convention">(</span>)</code></pre>
447
+
448
+ </div>
449
+
450
+ <div class="report">
451
+ <div class="meta">
452
+ <span class="location">Line #28</span> –
453
+ <span class="severity convention">convention:</span>
454
+ <span class="message">Extra empty line detected at method body beginning.</span>
455
+ </div>
456
+
457
+ </div>
458
+
459
+ <div class="report">
460
+ <div class="meta">
461
+ <span class="location">Line #31</span> –
462
+ <span class="severity convention">convention:</span>
463
+ <span class="message">Omit the parentheses in defs when the method doesn't accept any arguments.</span>
464
+ </div>
465
+
466
+ <pre><code> def self.select<span class="highlight convention">(</span>)</code></pre>
467
+
468
+ </div>
469
+
470
+ <div class="report">
471
+ <div class="meta">
472
+ <span class="location">Line #32</span> –
473
+ <span class="severity convention">convention:</span>
474
+ <span class="message">Extra empty line detected at method body beginning.</span>
475
+ </div>
476
+
477
+ </div>
478
+
479
+ <div class="report">
480
+ <div class="meta">
481
+ <span class="location">Line #35</span> –
482
+ <span class="severity convention">convention:</span>
483
+ <span class="message">Omit the parentheses in defs when the method doesn't accept any arguments.</span>
484
+ </div>
485
+
486
+ <pre><code> def self.unique<span class="highlight convention">(</span>)</code></pre>
487
+
488
+ </div>
489
+
490
+ <div class="report">
491
+ <div class="meta">
492
+ <span class="location">Line #36</span> –
493
+ <span class="severity convention">convention:</span>
494
+ <span class="message">Extra empty line detected at method body beginning.</span>
495
+ </div>
496
+
497
+ </div>
498
+
499
+ <div class="report">
500
+ <div class="meta">
501
+ <span class="location">Line #40</span> –
502
+ <span class="severity convention">convention:</span>
503
+ <span class="message">Extra empty line detected at method body beginning.</span>
504
+ </div>
505
+
506
+ </div>
507
+
508
+ <div class="report">
509
+ <div class="meta">
510
+ <span class="location">Line #44</span> –
511
+ <span class="severity convention">convention:</span>
512
+ <span class="message">Extra empty line detected at method body beginning.</span>
513
+ </div>
514
+
515
+ </div>
516
+
517
+ <div class="report">
518
+ <div class="meta">
519
+ <span class="location">Line #48</span> –
520
+ <span class="severity convention">convention:</span>
521
+ <span class="message">Extra empty line detected at method body beginning.</span>
522
+ </div>
523
+
524
+ </div>
525
+
526
+ <div class="report">
527
+ <div class="meta">
528
+ <span class="location">Line #51</span> –
529
+ <span class="severity convention">convention:</span>
530
+ <span class="message">Rename <code>has_many</code> to <code>has_many?</code>.</span>
531
+ </div>
532
+
533
+ <pre><code> def self.<span class="highlight convention">has_many</span></code></pre>
534
+
535
+ </div>
536
+
537
+ <div class="report">
538
+ <div class="meta">
539
+ <span class="location">Line #52</span> –
540
+ <span class="severity convention">convention:</span>
541
+ <span class="message">Extra empty line detected at method body beginning.</span>
542
+ </div>
543
+
544
+ </div>
545
+
546
+ </div>
547
+ </div>
548
+
549
+
550
+
551
+ <div class="offense-box">
552
+ <div class="box-title"><h3>lib/matrack/dependencies.rb - 1 offense</h3></div>
553
+ <div class="offense-reports">
554
+
555
+ <div class="report">
556
+ <div class="meta">
557
+ <span class="location">Line #1</span> –
558
+ <span class="severity convention">convention:</span>
559
+ <span class="message">Use nested module/class definitions instead of compact style.</span>
560
+ </div>
561
+
562
+ <pre><code>class <span class="highlight convention">::Object</span></code></pre>
563
+
564
+ </div>
565
+
566
+ </div>
567
+ </div>
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+ <div class="offense-box">
576
+ <div class="box-title"><h3>lib/matrack/utility.rb - 1 offense</h3></div>
577
+ <div class="offense-reports">
578
+
579
+ <div class="report">
580
+ <div class="meta">
581
+ <span class="location">Line #1</span> –
582
+ <span class="severity convention">convention:</span>
583
+ <span class="message">Use nested module/class definitions instead of compact style.</span>
584
+ </div>
585
+
586
+ <pre><code>class <span class="highlight convention">::String</span></code></pre>
587
+
588
+ </div>
589
+
590
+ </div>
591
+ </div>
592
+
593
+
594
+
595
+
596
+
597
+
598
+ </div>
599
+ <footer>
600
+ Generated by <a href="https://github.com/bbatsov/rubocop">RuboCop</a>
601
+ <span class="version">0.35.1</span>
602
+ </footer>
603
+ </body>
604
+ </html>