matrack 0.1.0

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,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>