Commit d168395807ea897bd48efcc8ee68fb01789073a3
Exists in
master
and in
1 other branch
Merge pull request #992 from rud/chore/cleanups
Rubocop cleanups - it's time
Showing
160 changed files
with
1388 additions
and
1505 deletions
Show diff stats
Too many changes.
To preserve performance only 100 of 160 files displayed.
.rubocop.yml
... | ... | @@ -29,11 +29,20 @@ Style/AccessModifierIndentation: |
29 | 29 | Style/AlignParameters: |
30 | 30 | EnforcedStyle: with_fixed_indentation |
31 | 31 | |
32 | +Style/DotPosition: | |
33 | + # Support code copy/paste into console | |
34 | + EnforcedStyle: trailing | |
35 | + | |
32 | 36 | Style/IndentHash: |
33 | 37 | EnforcedStyle: consistent |
34 | 38 | |
39 | +Style/AlignHash: | |
40 | + EnforcedHashRocketStyle: table | |
41 | + EnforcedColonStyle: table | |
42 | + | |
35 | 43 | Style/SpaceAroundOperators: |
36 | 44 | MultiSpaceAllowedForOperators: |
37 | 45 | - '=' |
38 | 46 | - '=>' |
39 | 47 | - '||=' |
48 | + - 'then' | ... | ... |
.rubocop_todo.yml
... | ... | @@ -53,29 +53,12 @@ Rails/Validation: |
53 | 53 | - 'app/models/problem.rb' |
54 | 54 | - 'app/models/user.rb' |
55 | 55 | |
56 | -# Offense count: 8 | |
57 | -# Cop supports --auto-correct. | |
58 | -# Configuration parameters: EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle, SupportedLastArgumentHashStyles. | |
59 | -Style/AlignHash: | |
60 | - Exclude: | |
61 | - - 'app/models/app.rb' | |
62 | - - 'spec/controllers/apps_controller_spec.rb' | |
63 | - - 'spec/controllers/comments_controller_spec.rb' | |
64 | - - 'spec/controllers/problems_controller_spec.rb' | |
65 | - - 'spec/models/problem_spec.rb' | |
66 | - | |
67 | 56 | # Offense count: 105 |
68 | 57 | # Cop supports --auto-correct. |
69 | 58 | # Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods. |
70 | 59 | Style/BlockDelimiters: |
71 | 60 | Enabled: false |
72 | 61 | |
73 | -# Offense count: 49 | |
74 | -# Cop supports --auto-correct. | |
75 | -# Configuration parameters: EnforcedStyle, SupportedStyles. | |
76 | -Style/BracesAroundHashParameters: | |
77 | - Enabled: false | |
78 | - | |
79 | 62 | # Offense count: 15 |
80 | 63 | # Configuration parameters: EnforcedStyle, SupportedStyles. |
81 | 64 | Style/ClassAndModuleChildren: |
... | ... | @@ -96,31 +79,11 @@ Style/ClassAndModuleChildren: |
96 | 79 | - 'app/models/notification_services/webhook_service.rb' |
97 | 80 | - 'config/initializers/overrides.rb' |
98 | 81 | |
99 | -# Offense count: 23 | |
100 | -Style/ConstantName: | |
101 | - Exclude: | |
102 | - - 'app/models/notification_service.rb' | |
103 | - - 'app/models/notification_services/campfire_service.rb' | |
104 | - - 'app/models/notification_services/flowdock_service.rb' | |
105 | - - 'app/models/notification_services/gtalk_service.rb' | |
106 | - - 'app/models/notification_services/hipchat_service.rb' | |
107 | - - 'app/models/notification_services/hoiio_service.rb' | |
108 | - - 'app/models/notification_services/hubot_service.rb' | |
109 | - - 'app/models/notification_services/pushover_service.rb' | |
110 | - - 'app/models/notification_services/slack_service.rb' | |
111 | - - 'app/models/notification_services/webhook_service.rb' | |
112 | - | |
113 | 82 | # Offense count: 70 |
114 | 83 | # Configuration parameters: Exclude. |
115 | 84 | Style/Documentation: |
116 | 85 | Enabled: false |
117 | 86 | |
118 | -# Offense count: 9 | |
119 | -# Cop supports --auto-correct. | |
120 | -# Configuration parameters: EnforcedStyle, SupportedStyles. | |
121 | -Style/DotPosition: | |
122 | - Enabled: false | |
123 | - | |
124 | 87 | # Offense count: 5 |
125 | 88 | Style/EachWithObject: |
126 | 89 | Exclude: |
... | ... | @@ -161,12 +124,6 @@ Style/FormatString: |
161 | 124 | Style/GuardClause: |
162 | 125 | Enabled: false |
163 | 126 | |
164 | -# Offense count: 1168 | |
165 | -# Cop supports --auto-correct. | |
166 | -# Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues. | |
167 | -Style/HashSyntax: | |
168 | - Enabled: false | |
169 | - | |
170 | 127 | # Offense count: 6 |
171 | 128 | # Cop supports --auto-correct. |
172 | 129 | # Configuration parameters: MaxLineLength. |
... | ... | @@ -178,15 +135,6 @@ Style/IfUnlessModifier: |
178 | 135 | - 'app/models/notice.rb' |
179 | 136 | - 'app/models/user.rb' |
180 | 137 | |
181 | -# Offense count: 6 | |
182 | -# Cop supports --auto-correct. | |
183 | -Style/Lambda: | |
184 | - Exclude: | |
185 | - - 'app/models/app.rb' | |
186 | - - 'app/models/problem.rb' | |
187 | - - 'config/load.rb' | |
188 | - - 'spec/models/notice_observer_spec.rb' | |
189 | - | |
190 | 138 | # Offense count: 17 |
191 | 139 | # Cop supports --auto-correct. |
192 | 140 | Style/LeadingCommentSpace: |
... | ... | @@ -200,17 +148,6 @@ Style/LeadingCommentSpace: |
200 | 148 | - 'spec/models/notification_service/hoiio_service_spec.rb' |
201 | 149 | - 'spec/models/notification_service/pushover_service_spec.rb' |
202 | 150 | |
203 | -# Offense count: 7 | |
204 | -# Cop supports --auto-correct. | |
205 | -Style/MultilineBlockLayout: | |
206 | - Exclude: | |
207 | - - 'lib/tasks/errbit/demo.rake' | |
208 | - - 'spec/fabricators/issue_tracker_fabricator.rb' | |
209 | - - 'spec/interactors/user_destroy_spec.rb' | |
210 | - - 'spec/models/app_spec.rb' | |
211 | - - 'spec/models/error_report_spec.rb' | |
212 | - - 'spec/views/apps/show.atom.builder_spec.rb' | |
213 | - | |
214 | 151 | # Offense count: 10 |
215 | 152 | # Cop supports --auto-correct. |
216 | 153 | # Configuration parameters: EnforcedStyle, SupportedStyles. |
... | ... | @@ -228,71 +165,11 @@ Style/PercentLiteralDelimiters: |
228 | 165 | - 'spec/models/notice_spec.rb' |
229 | 166 | |
230 | 167 | # Offense count: 1 |
231 | -# Cop supports --auto-correct. | |
232 | -Style/PerlBackrefs: | |
233 | - Exclude: | |
234 | - - 'spec/acceptance/reset_password_token.rb' | |
235 | - | |
236 | -# Offense count: 3 | |
237 | -# Cop supports --auto-correct. | |
238 | -Style/Proc: | |
239 | - Exclude: | |
240 | - - 'app/models/notice.rb' | |
241 | - - 'app/models/problem.rb' | |
242 | - | |
243 | -# Offense count: 2 | |
244 | -# Configuration parameters: EnforcedStyle, SupportedStyles. | |
245 | -Style/RaiseArgs: | |
246 | - Enabled: false | |
247 | - | |
248 | -# Offense count: 3 | |
249 | -# Cop supports --auto-correct. | |
250 | -# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes. | |
251 | -Style/RegexpLiteral: | |
252 | - Exclude: | |
253 | - - 'app/models/app.rb' | |
254 | - - 'config/initializers/ssl_enforcer.rb' | |
255 | - - 'config/load.rb' | |
256 | - | |
257 | -# Offense count: 2 | |
258 | -# Cop supports --auto-correct. | |
259 | -# Configuration parameters: AllowAsExpressionSeparator. | |
260 | -Style/Semicolon: | |
261 | - Exclude: | |
262 | - - 'app/decorators/issue_tracker_type_decorator.rb' | |
263 | - - 'app/models/notice_fingerprinter.rb' | |
264 | - | |
265 | -# Offense count: 6 | |
266 | -# Cop supports --auto-correct. | |
267 | -# Configuration parameters: EnforcedStyle, SupportedStyles. | |
268 | -Style/SignalException: | |
269 | - Exclude: | |
270 | - - 'app/controllers/notices_controller.rb' | |
271 | - - 'app/interactors/problem_merge.rb' | |
272 | - - 'app/models/problem.rb' | |
273 | - - 'lib/airbrake_api/v3/notice_parser.rb' | |
274 | - - 'lib/hoptoad.rb' | |
275 | - | |
276 | -# Offense count: 4 | |
277 | 168 | # Configuration parameters: Methods. |
278 | 169 | Style/SingleLineBlockParams: |
279 | 170 | Exclude: |
280 | - - 'app/helpers/application_helper.rb' | |
281 | - - 'app/helpers/form_helper.rb' | |
282 | - - 'app/models/notice_fingerprinter.rb' | |
283 | 171 | - 'lib/hoptoad/v2.rb' |
284 | 172 | |
285 | -# Offense count: 19 | |
286 | -# Cop supports --auto-correct. | |
287 | -# Configuration parameters: AllowIfMethodIsEmpty. | |
288 | -Style/SingleLineMethods: | |
289 | - Exclude: | |
290 | - - 'app/models/notification_service.rb' | |
291 | - - 'spec/decorators/issue_tracker_decorator_spec.rb' | |
292 | - - 'spec/decorators/issue_tracker_type_decorator_spec.rb' | |
293 | - - 'spec/errbit_plugin/mock_issue_tracker.rb' | |
294 | - - 'spec/views/problems/show.html.haml_spec.rb' | |
295 | - | |
296 | 173 | # Offense count: 11 |
297 | 174 | # Cop supports --auto-correct. |
298 | 175 | Style/SingleSpaceBeforeFirstArg: |
... | ... | @@ -304,90 +181,8 @@ Style/SingleSpaceBeforeFirstArg: |
304 | 181 | - 'spec/fabricators/notice_fabricator.rb' |
305 | 182 | - 'spec/fabricators/user_fabricator.rb' |
306 | 183 | |
307 | -# Offense count: 2 | |
308 | -# Cop supports --auto-correct. | |
309 | -# Configuration parameters: EnforcedStyle, SupportedStyles. | |
310 | -Style/SpaceAroundEqualsInParameterDefault: | |
311 | - Enabled: false | |
312 | - | |
313 | -# Offense count: 27 | |
314 | -# Cop supports --auto-correct. | |
315 | -# Configuration parameters: EnforcedStyle, SupportedStyles. | |
316 | -Style/SpaceBeforeBlockBraces: | |
317 | - Enabled: false | |
318 | - | |
319 | -# Offense count: 3 | |
320 | -# Cop supports --auto-correct. | |
321 | -Style/SpaceBeforeComment: | |
322 | - Exclude: | |
323 | - - 'spec/controllers/api/v1/problems_controller_spec.rb' | |
324 | - | |
325 | -# Offense count: 75 | |
326 | -# Cop supports --auto-correct. | |
327 | -# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters. | |
328 | -Style/SpaceInsideBlockBraces: | |
329 | - Enabled: false | |
330 | - | |
331 | -# Offense count: 26 | |
332 | -# Cop supports --auto-correct. | |
333 | -Style/SpaceInsideBrackets: | |
334 | - Exclude: | |
335 | - - 'app/helpers/apps_helper.rb' | |
336 | - - 'app/models/issue.rb' | |
337 | - - 'app/models/notice_fingerprinter.rb' | |
338 | - - 'app/models/notification_services/gtalk_service.rb' | |
339 | - - 'config/initializers/devise.rb' | |
340 | - - 'lib/tasks/errbit/database.rake' | |
341 | - - 'spec/lib/configurator_spec.rb' | |
342 | - - 'spec/models/issue_spec.rb' | |
343 | - | |
344 | -# Offense count: 189 | |
345 | -# Cop supports --auto-correct. | |
346 | -# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles. | |
347 | -Style/SpaceInsideHashLiteralBraces: | |
348 | - Enabled: false | |
349 | - | |
350 | 184 | # Offense count: 873 |
351 | 185 | # Cop supports --auto-correct. |
352 | 186 | # Configuration parameters: EnforcedStyle, SupportedStyles. |
353 | 187 | Style/StringLiterals: |
354 | 188 | Enabled: false |
355 | - | |
356 | -# Offense count: 3 | |
357 | -# Cop supports --auto-correct. | |
358 | -# Configuration parameters: IgnoredMethods. | |
359 | -Style/SymbolProc: | |
360 | - Exclude: | |
361 | - - 'app/controllers/users/omniauth_callbacks_controller.rb' | |
362 | - - 'app/models/deploy.rb' | |
363 | - - 'spec/models/deploy_spec.rb' | |
364 | - | |
365 | -# Offense count: 13 | |
366 | -# Cop supports --auto-correct. | |
367 | -# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles. | |
368 | -Style/TrailingComma: | |
369 | - Exclude: | |
370 | - - 'app/controllers/deploys_controller.rb' | |
371 | - - 'app/helpers/problems_helper.rb' | |
372 | - - 'app/models/notification_services/hipchat_service.rb' | |
373 | - - 'app/models/problem.rb' | |
374 | - - 'config/deploy.example.rb' | |
375 | - - 'config/initializers/action_mailer.rb' | |
376 | - - 'config/load.rb' | |
377 | - - 'lib/tasks/errbit/demo.rake' | |
378 | - - 'spec/decorators/issue_tracker_type_decorator_spec.rb' | |
379 | - - 'spec/initializers/action_mailer_spec.rb' | |
380 | - - 'spec/initializers/devise_spec.rb' | |
381 | - | |
382 | -# Offense count: 9 | |
383 | -# Cop supports --auto-correct. | |
384 | -Style/TrailingWhitespace: | |
385 | - Exclude: | |
386 | - - 'app/models/notification_service.rb' | |
387 | - - 'app/models/notification_services/gtalk_service.rb' | |
388 | - - 'config/initializers/cve-2013-0156.rb' | |
389 | - | |
390 | -# Offense count: 2 | |
391 | -Style/UnlessElse: | |
392 | - Exclude: | |
393 | - - 'app/controllers/problems_searcher.rb' | ... | ... |
Gemfile
... | ... | @@ -29,8 +29,8 @@ gem 'htmlentities' |
29 | 29 | gem 'kaminari', '>= 0.14.1' |
30 | 30 | gem 'mongoid', '5.0.0' |
31 | 31 | gem 'mongoid_rails_migrations' |
32 | -gem 'rack-ssl', :require => 'rack/ssl' # force SSL | |
33 | -gem 'rack-ssl-enforcer', :require => false | |
32 | +gem 'rack-ssl', require: 'rack/ssl' # force SSL | |
33 | +gem 'rack-ssl-enforcer', require: false | |
34 | 34 | gem 'rails_autolink' |
35 | 35 | gem 'useragent' |
36 | 36 | |
... | ... | @@ -44,7 +44,7 @@ gem 'campy' |
44 | 44 | # Hipchat |
45 | 45 | gem 'hipchat' |
46 | 46 | # Google Talk |
47 | -gem 'xmpp4r', :require => ["xmpp4r", "xmpp4r/muc"] | |
47 | +gem 'xmpp4r', require: ["xmpp4r", "xmpp4r/muc"] | |
48 | 48 | # Hoiio (SMS) |
49 | 49 | gem 'hoi' |
50 | 50 | # Pushover (iOS Push notifications) |
... | ... | @@ -64,7 +64,7 @@ gem 'yajl-ruby', platform: 'ruby' |
64 | 64 | gem 'json', platform: 'jruby' |
65 | 65 | |
66 | 66 | group :development, :test do |
67 | - gem 'airbrake', :require => false | |
67 | + gem 'airbrake', require: false | |
68 | 68 | gem 'pry-rails' |
69 | 69 | gem 'pry-byebug', platforms: [:mri] |
70 | 70 | gem 'quiet_assets' |
... | ... | @@ -103,7 +103,7 @@ group :heroku, :production do |
103 | 103 | gem 'unicorn', require: false, platform: 'ruby' |
104 | 104 | end |
105 | 105 | |
106 | -gem 'therubyracer', :platform => :ruby # C Ruby (MRI) or Rubinius, but NOT Windows | |
106 | +gem 'therubyracer', platform: :ruby # C Ruby (MRI) or Rubinius, but NOT Windows | |
107 | 107 | gem 'sass-rails' |
108 | 108 | gem 'uglifier' |
109 | 109 | # We can't upgrade because not compatible to jquery >= 1.9. | ... | ... |
Rakefile
app/controllers/api/v1/notices_controller.rb
... | ... | @@ -8,16 +8,16 @@ class Api::V1::NoticesController < ApplicationController |
8 | 8 | if params.key?(:start_date) && params.key?(:end_date) |
9 | 9 | start_date = Time.zone.parse(params[:start_date]).utc |
10 | 10 | end_date = Time.zone.parse(params[:end_date]).utc |
11 | - query = {:created_at => {"$lte" => end_date, "$gte" => start_date}} | |
11 | + query = { created_at: { "$lte" => end_date, "$gte" => start_date } } | |
12 | 12 | end |
13 | 13 | |
14 | 14 | results = benchmark("[api/v1/notices_controller] query time") do |
15 | - Notice.where(query).with(:consistency => :strong).only(fields).to_a | |
15 | + Notice.where(query).with(consistency: :strong).only(fields).to_a | |
16 | 16 | end |
17 | 17 | |
18 | 18 | respond_to do |format| |
19 | - format.any(:html, :json) { render :json => JSON.dump(results) } # render JSON if no extension specified on path | |
20 | - format.xml { render :xml => results } | |
19 | + format.any(:html, :json) { render json: JSON.dump(results) } # render JSON if no extension specified on path | |
20 | + format.xml { render xml: results } | |
21 | 21 | end |
22 | 22 | end |
23 | 23 | end | ... | ... |
app/controllers/api/v1/problems_controller.rb
... | ... | @@ -13,8 +13,8 @@ class Api::V1::ProblemsController < ApplicationController |
13 | 13 | end |
14 | 14 | |
15 | 15 | respond_to do |format| |
16 | - format.any(:html, :json) { render :json => result } # render JSON if no extension specified on path | |
17 | - format.xml { render :xml => result } | |
16 | + format.any(:html, :json) { render json: result } # render JSON if no extension specified on path | |
17 | + format.xml { render xml: result } | |
18 | 18 | end |
19 | 19 | end |
20 | 20 | |
... | ... | @@ -24,16 +24,16 @@ class Api::V1::ProblemsController < ApplicationController |
24 | 24 | if params.key?(:start_date) && params.key?(:end_date) |
25 | 25 | start_date = Time.parse(params[:start_date]).utc |
26 | 26 | end_date = Time.parse(params[:end_date]).utc |
27 | - query = {:first_notice_at => {"$lte" => end_date}, "$or" => [{:resolved_at => nil}, {:resolved_at => {"$gte" => start_date}}]} | |
27 | + query = { :first_notice_at => { "$lte" => end_date }, "$or" => [{ resolved_at: nil }, { resolved_at: { "$gte" => start_date } }] } | |
28 | 28 | end |
29 | 29 | |
30 | 30 | results = benchmark("[api/v1/problems_controller/index] query time") do |
31 | - Problem.where(query).with(:consistency => :strong).only(FIELDS).to_a | |
31 | + Problem.where(query).with(consistency: :strong).only(FIELDS).to_a | |
32 | 32 | end |
33 | 33 | |
34 | 34 | respond_to do |format| |
35 | - format.any(:html, :json) { render :json => JSON.dump(results) } # render JSON if no extension specified on path | |
36 | - format.xml { render :xml => results } | |
35 | + format.any(:html, :json) { render json: JSON.dump(results) } # render JSON if no extension specified on path | |
36 | + format.xml { render xml: results } | |
37 | 37 | end |
38 | 38 | end |
39 | 39 | end | ... | ... |
app/controllers/api/v1/stats_controller.rb
... | ... | @@ -11,21 +11,21 @@ class Api::V1::StatsController < ApplicationController |
11 | 11 | end |
12 | 12 | |
13 | 13 | stats = { |
14 | - :name => @app.name, | |
15 | - :id => @app.id, | |
16 | - :last_error_time => @last_error_time, | |
17 | - :unresolved_errors => @app.unresolved_count | |
14 | + name: @app.name, | |
15 | + id: @app.id, | |
16 | + last_error_time: @last_error_time, | |
17 | + unresolved_errors: @app.unresolved_count | |
18 | 18 | } |
19 | 19 | |
20 | 20 | respond_to do |format| |
21 | - format.any(:html, :json) { render :json => JSON.dump(stats) } # render JSON if no extension specified on path | |
22 | - format.xml { render :xml => stats } | |
21 | + format.any(:html, :json) { render json: JSON.dump(stats) } # render JSON if no extension specified on path | |
22 | + format.xml { render xml: stats } | |
23 | 23 | end |
24 | 24 | end |
25 | 25 | |
26 | 26 | protected def require_api_key_or_authenticate_user! |
27 | 27 | if params[:api_key].present? |
28 | - if (@app = App.where(:api_key => params[:api_key]).first) | |
28 | + if (@app = App.where(api_key: params[:api_key]).first) | |
29 | 29 | return true |
30 | 30 | end |
31 | 31 | end | ... | ... |
app/controllers/api/v3/notices_controller.rb
... | ... | @@ -15,7 +15,7 @@ class Api::V3::NoticesController < ApplicationController |
15 | 15 | if report.should_keep? |
16 | 16 | report.generate_notice! |
17 | 17 | render json: { |
18 | - id: report.notice.id, | |
18 | + id: report.notice.id, | |
19 | 19 | url: app_problem_url( |
20 | 20 | report.app, |
21 | 21 | report.error.problem_id) | ... | ... |
app/controllers/application_controller.rb
... | ... | @@ -5,7 +5,7 @@ class ApplicationController < ActionController::Base |
5 | 5 | before_action :authenticate_user! |
6 | 6 | before_action :set_time_zone |
7 | 7 | |
8 | - rescue_from ActionController::RedirectBackError, :with => :redirect_to_root | |
8 | + rescue_from ActionController::RedirectBackError, with: :redirect_to_root | |
9 | 9 | |
10 | 10 | class StrongParametersWithEagerAttributesStrategy < DecentExposure::StrongParametersStrategy |
11 | 11 | def assign_attributes? | ... | ... |
app/controllers/apps_controller.rb
1 | 1 | class AppsController < ApplicationController |
2 | 2 | include ProblemsSearcher |
3 | 3 | |
4 | - before_action :require_admin!, :except => [:index, :show] | |
5 | - before_action :parse_email_at_notices_or_set_default, :only => [:create, :update] | |
6 | - before_action :parse_notice_at_notices_or_set_default, :only => [:create, :update] | |
4 | + before_action :require_admin!, except: [:index, :show] | |
5 | + before_action :parse_email_at_notices_or_set_default, only: [:create, :update] | |
6 | + before_action :parse_notice_at_notices_or_set_default, only: [:create, :update] | |
7 | 7 | respond_to :html |
8 | 8 | |
9 | 9 | expose(:app_scope) { App } |
... | ... | @@ -39,7 +39,7 @@ class AppsController < ApplicationController |
39 | 39 | } |
40 | 40 | |
41 | 41 | expose(:users) { |
42 | - User.all.sort_by {|u| u.name.downcase } | |
42 | + User.all.sort_by { |u| u.name.downcase } | |
43 | 43 | } |
44 | 44 | |
45 | 45 | def index; end |
... | ... | @@ -55,7 +55,7 @@ class AppsController < ApplicationController |
55 | 55 | def create |
56 | 56 | initialize_subclassed_notification_service |
57 | 57 | if app.save |
58 | - redirect_to app_url(app), :flash => { :success => I18n.t('controllers.apps.flash.create.success') } | |
58 | + redirect_to app_url(app), flash: { success: I18n.t('controllers.apps.flash.create.success') } | |
59 | 59 | else |
60 | 60 | flash[:error] = I18n.t('controllers.apps.flash.create.error') |
61 | 61 | render :new |
... | ... | @@ -65,7 +65,7 @@ class AppsController < ApplicationController |
65 | 65 | def update |
66 | 66 | initialize_subclassed_notification_service |
67 | 67 | if app.save |
68 | - redirect_to app_url(app), :flash => { :success => I18n.t('controllers.apps.flash.update.success') } | |
68 | + redirect_to app_url(app), flash: { success: I18n.t('controllers.apps.flash.update.success') } | |
69 | 69 | else |
70 | 70 | flash[:error] = I18n.t('controllers.apps.flash.update.error') |
71 | 71 | render :edit |
... | ... | @@ -78,7 +78,7 @@ class AppsController < ApplicationController |
78 | 78 | |
79 | 79 | def destroy |
80 | 80 | if app.destroy |
81 | - redirect_to apps_url, :flash => { :success => I18n.t('controllers.apps.flash.destroy.success') } | |
81 | + redirect_to apps_url, flash: { success: I18n.t('controllers.apps.flash.destroy.success') } | |
82 | 82 | else |
83 | 83 | flash[:error] = I18n.t('controllers.apps.flash.destroy.error') |
84 | 84 | render :show |
... | ... | @@ -96,7 +96,7 @@ protected |
96 | 96 | # set the app's notification service |
97 | 97 | if params[:app][:notification_service_attributes] && (notification_type = params[:app][:notification_service_attributes][:type]) |
98 | 98 | available_notification_classes = [NotificationService] + NotificationService.subclasses |
99 | - notification_class = available_notification_classes.detect{|c| c.name == notification_type} | |
99 | + notification_class = available_notification_classes.detect { |c| c.name == notification_type } | |
100 | 100 | if notification_class.present? |
101 | 101 | app.notification_service = notification_class.new(params[:app][:notification_service_attributes]) |
102 | 102 | end |
... | ... | @@ -116,7 +116,7 @@ protected |
116 | 116 | # Sanitize negative values, split on comma, |
117 | 117 | # strip, parse as integer, remove all '0's. |
118 | 118 | # If empty, set as default and show an error message. |
119 | - email_at_notices = val.gsub(/-\d+/, "").split(",").map{|v| v.strip.to_i }.reject{|v| v == 0} | |
119 | + email_at_notices = val.gsub(/-\d+/, "").split(",").map { |v| v.strip.to_i }.reject { |v| v == 0 } | |
120 | 120 | if email_at_notices.any? |
121 | 121 | params[:app][:email_at_notices] = email_at_notices |
122 | 122 | else |
... | ... | @@ -131,7 +131,7 @@ protected |
131 | 131 | # Sanitize negative values, split on comma, |
132 | 132 | # strip, parse as integer, remove all '0's. |
133 | 133 | # If empty, set as default and show an error message. |
134 | - notify_at_notices = val.gsub(/-\d+/, "").split(",").map{|v| v.strip.to_i } | |
134 | + notify_at_notices = val.gsub(/-\d+/, "").split(",").map { |v| v.strip.to_i } | |
135 | 135 | if notify_at_notices.any? |
136 | 136 | params[:app][:notification_service_attributes][:notify_at_notices] = notify_at_notices |
137 | 137 | else | ... | ... |
app/controllers/comments_controller.rb
... | ... | @@ -3,7 +3,7 @@ class CommentsController < ApplicationController |
3 | 3 | before_action :find_problem |
4 | 4 | |
5 | 5 | def create |
6 | - @comment = Comment.new(comment_params.merge(:user_id => current_user.id)) | |
6 | + @comment = Comment.new(comment_params.merge(user_id: current_user.id)) | |
7 | 7 | if @comment.valid? |
8 | 8 | @problem.comments << @comment |
9 | 9 | @problem.save | ... | ... |
app/controllers/deploys_controller.rb
1 | 1 | class DeploysController < ApplicationController |
2 | - protect_from_forgery :except => :create | |
2 | + protect_from_forgery except: :create | |
3 | 3 | |
4 | - skip_before_action :verify_authenticity_token, :only => :create | |
5 | - skip_before_action :authenticate_user!, :only => :create | |
4 | + skip_before_action :verify_authenticity_token, only: :create | |
5 | + skip_before_action :authenticate_user!, only: :create | |
6 | 6 | |
7 | 7 | def create |
8 | 8 | @app = App.find_by_api_key!(params[:api_key]) |
9 | 9 | @deploy = @app.deploys.create!(default_deploy || heroku_deploy) |
10 | - render :xml => @deploy | |
10 | + render xml: @deploy | |
11 | 11 | end |
12 | 12 | |
13 | 13 | def index |
... | ... | @@ -21,11 +21,11 @@ private |
21 | 21 | def default_deploy |
22 | 22 | if params[:deploy] |
23 | 23 | { |
24 | - :username => params[:deploy][:local_username], | |
25 | - :environment => params[:deploy][:rails_env], | |
26 | - :repository => params[:deploy][:scm_repository], | |
27 | - :revision => params[:deploy][:scm_revision], | |
28 | - :message => params[:deploy][:message] | |
24 | + username: params[:deploy][:local_username], | |
25 | + environment: params[:deploy][:rails_env], | |
26 | + repository: params[:deploy][:scm_repository], | |
27 | + revision: params[:deploy][:scm_revision], | |
28 | + message: params[:deploy][:message] | |
29 | 29 | } |
30 | 30 | end |
31 | 31 | end |
... | ... | @@ -33,10 +33,10 @@ private |
33 | 33 | # handle Heroku's HTTP post deployhook format |
34 | 34 | def heroku_deploy |
35 | 35 | { |
36 | - :username => params[:user], | |
37 | - :environment => params[:rack_env].try(:downcase) || params[:app], | |
38 | - :repository => "git@heroku.com:#{params[:app]}.git", | |
39 | - :revision => params[:head], | |
36 | + username: params[:user], | |
37 | + environment: params[:rack_env].try(:downcase) || params[:app], | |
38 | + repository: "git@heroku.com:#{params[:app]}.git", | |
39 | + revision: params[:head] | |
40 | 40 | } |
41 | 41 | end |
42 | 42 | end | ... | ... |
app/controllers/notices_controller.rb
... | ... | @@ -4,7 +4,7 @@ class NoticesController < ApplicationController |
4 | 4 | skip_before_action :authenticate_user!, only: :create |
5 | 5 | skip_before_action :verify_authenticity_token, only: :create |
6 | 6 | |
7 | - rescue_from ParamsError, :with => :bad_params | |
7 | + rescue_from ParamsError, with: :bad_params | |
8 | 8 | |
9 | 9 | def create |
10 | 10 | # params[:data] if the notice came from a GET request, raw_post if it came via POST |
... | ... | @@ -13,18 +13,18 @@ class NoticesController < ApplicationController |
13 | 13 | if report.valid? |
14 | 14 | if report.should_keep? |
15 | 15 | report.generate_notice! |
16 | - api_xml = report.notice.to_xml(:only => false, :methods => [:id]) do |xml| | |
17 | - xml.url locate_url(report.notice.id, :host => Errbit::Config.host) | |
16 | + api_xml = report.notice.to_xml(only: false, methods: [:id]) do |xml| | |
17 | + xml.url locate_url(report.notice.id, host: Errbit::Config.host) | |
18 | 18 | end |
19 | - render :xml => api_xml | |
19 | + render xml: api_xml | |
20 | 20 | else |
21 | - render :text => "Notice for old app version ignored" | |
21 | + render text: "Notice for old app version ignored" | |
22 | 22 | end |
23 | 23 | else |
24 | - render :text => "Your API key is unknown", :status => 422 | |
24 | + render text: "Your API key is unknown", status: 422 | |
25 | 25 | end |
26 | 26 | rescue Nokogiri::XML::SyntaxError |
27 | - render :text => 'The provided XML was not well-formed', :status => 422 | |
27 | + render text: 'The provided XML was not well-formed', status: 422 | |
28 | 28 | end |
29 | 29 | |
30 | 30 | # Redirects a notice to the problem page. Useful when using User Information at Airbrake gem. |
... | ... | @@ -39,12 +39,12 @@ private |
39 | 39 | return @notice_params if @notice_params |
40 | 40 | @notice_params = params[:data] || request.raw_post |
41 | 41 | if @notice_params.blank? |
42 | - raise ParamsError.new('Need a data params in GET or raw post data') | |
42 | + fail ParamsError, 'Need a data params in GET or raw post data' | |
43 | 43 | end |
44 | 44 | @notice_params |
45 | 45 | end |
46 | 46 | |
47 | 47 | def bad_params(exception) |
48 | - render :text => exception.message, :status => :bad_request | |
48 | + render text: exception.message, status: :bad_request | |
49 | 49 | end |
50 | 50 | end | ... | ... |
app/controllers/problems_controller.rb
... | ... | @@ -7,12 +7,12 @@ |
7 | 7 | class ProblemsController < ApplicationController |
8 | 8 | include ProblemsSearcher |
9 | 9 | |
10 | - before_action :need_selected_problem, :only => [ | |
10 | + before_action :need_selected_problem, only: [ | |
11 | 11 | :resolve_several, :unresolve_several, :unmerge_several |
12 | 12 | ] |
13 | 13 | |
14 | 14 | expose(:app_scope) { |
15 | - params[:app_id] ? App.where(:_id => params[:app_id]) : App.all | |
15 | + params[:app_id] ? App.where(_id: params[:app_id]) : App.all | |
16 | 16 | } |
17 | 17 | |
18 | 18 | expose(:app) { |
... | ... | @@ -32,11 +32,11 @@ class ProblemsController < ApplicationController |
32 | 32 | } |
33 | 33 | |
34 | 34 | expose(:problems) { |
35 | - pro = Problem | |
36 | - .for_apps(app_scope) | |
37 | - .in_env(params_environement) | |
38 | - .all_else_unresolved(all_errs) | |
39 | - .ordered_by(params_sort, params_order) | |
35 | + pro = Problem. | |
36 | + for_apps(app_scope). | |
37 | + in_env(params_environement). | |
38 | + all_else_unresolved(all_errs). | |
39 | + ordered_by(params_sort, params_order) | |
40 | 40 | |
41 | 41 | if request.format == :html |
42 | 42 | pro.page(params[:page]).per(current_user.per_page) |
... | ... | @@ -48,8 +48,8 @@ class ProblemsController < ApplicationController |
48 | 48 | def index; end |
49 | 49 | |
50 | 50 | def show |
51 | - @notices = problem.object.notices.reverse_ordered | |
52 | - .page(params[:notice]).per(1) | |
51 | + @notices = problem.object.notices.reverse_ordered. | |
52 | + page(params[:notice]).per(1) | |
53 | 53 | @notice = NoticeDecorator.new @notices.first |
54 | 54 | @comment = Comment.new |
55 | 55 | end |
... | ... | @@ -80,13 +80,13 @@ class ProblemsController < ApplicationController |
80 | 80 | |
81 | 81 | def resolve_several |
82 | 82 | selected_problems.each(&:resolve!) |
83 | - flash[:success] = "Great news everyone! #{I18n.t(:n_errs_have, :count => selected_problems.count)} been resolved." | |
83 | + flash[:success] = "Great news everyone! #{I18n.t(:n_errs_have, count: selected_problems.count)} been resolved." | |
84 | 84 | redirect_to :back |
85 | 85 | end |
86 | 86 | |
87 | 87 | def unresolve_several |
88 | 88 | selected_problems.each(&:unresolve!) |
89 | - flash[:success] = "#{I18n.t(:n_errs_have, :count => selected_problems.count)} been unresolved." | |
89 | + flash[:success] = "#{I18n.t(:n_errs_have, count: selected_problems.count)} been unresolved." | |
90 | 90 | redirect_to :back |
91 | 91 | end |
92 | 92 | |
... | ... | @@ -100,26 +100,26 @@ class ProblemsController < ApplicationController |
100 | 100 | flash[:notice] = I18n.t('controllers.problems.flash.need_two_errors_merge') |
101 | 101 | else |
102 | 102 | ProblemMerge.new(selected_problems).merge |
103 | - flash[:notice] = I18n.t('controllers.problems.flash.merge_several.success', :nb => selected_problems.count) | |
103 | + flash[:notice] = I18n.t('controllers.problems.flash.merge_several.success', nb: selected_problems.count) | |
104 | 104 | end |
105 | 105 | redirect_to :back |
106 | 106 | end |
107 | 107 | |
108 | 108 | def unmerge_several |
109 | 109 | all = selected_problems.map(&:unmerge!).flatten |
110 | - flash[:success] = "#{I18n.t(:n_errs_have, :count => all.length)} been unmerged." | |
110 | + flash[:success] = "#{I18n.t(:n_errs_have, count: all.length)} been unmerged." | |
111 | 111 | redirect_to :back |
112 | 112 | end |
113 | 113 | |
114 | 114 | def destroy_several |
115 | 115 | nb_problem_destroy = ProblemDestroy.execute(selected_problems) |
116 | - flash[:notice] = "#{I18n.t(:n_errs_have, :count => nb_problem_destroy)} been deleted." | |
116 | + flash[:notice] = "#{I18n.t(:n_errs_have, count: nb_problem_destroy)} been deleted." | |
117 | 117 | redirect_to :back |
118 | 118 | end |
119 | 119 | |
120 | 120 | def destroy_all |
121 | 121 | nb_problem_destroy = ProblemDestroy.execute(app.problems) |
122 | - flash[:success] = "#{I18n.t(:n_errs_have, :count => nb_problem_destroy)} been deleted." | |
122 | + flash[:success] = "#{I18n.t(:n_errs_have, count: nb_problem_destroy)} been deleted." | |
123 | 123 | redirect_to :back |
124 | 124 | rescue ActionController::RedirectBackError |
125 | 125 | redirect_to app_path(app) | ... | ... |
app/controllers/problems_searcher.rb
... | ... | @@ -6,18 +6,18 @@ module ProblemsSearcher |
6 | 6 | |
7 | 7 | included do |
8 | 8 | expose(:params_sort) { |
9 | - unless %w{app message last_notice_at last_deploy_at count}.member?(params[:sort]) | |
10 | - "last_notice_at" | |
11 | - else | |
9 | + if %w{app message last_notice_at last_deploy_at count}.member?(params[:sort]) | |
12 | 10 | params[:sort] |
11 | + else | |
12 | + "last_notice_at" | |
13 | 13 | end |
14 | 14 | } |
15 | 15 | |
16 | - expose(:params_order){ | |
17 | - unless %w{asc desc}.member?(params[:order]) | |
18 | - 'desc' | |
19 | - else | |
16 | + expose(:params_order) { | |
17 | + if %w{asc desc}.member?(params[:order]) | |
20 | 18 | params[:order] |
19 | + else | |
20 | + 'desc' | |
21 | 21 | end |
22 | 22 | } |
23 | 23 | ... | ... |
app/controllers/site_config_controller.rb
... | ... | @@ -13,10 +13,10 @@ class SiteConfigController < ApplicationController |
13 | 13 | end |
14 | 14 | |
15 | 15 | private def filtered_update_params |
16 | - params | |
17 | - .require(:site_config) | |
18 | - .require(:notice_fingerprinter_attributes) | |
19 | - .permit( | |
16 | + params. | |
17 | + require(:site_config). | |
18 | + require(:notice_fingerprinter_attributes). | |
19 | + permit( | |
20 | 20 | :error_class, |
21 | 21 | :message, |
22 | 22 | :backtrace_lines, | ... | ... |
app/controllers/users/omniauth_callbacks_controller.rb
... | ... | @@ -2,7 +2,7 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController |
2 | 2 | def github |
3 | 3 | github_login = env["omniauth.auth"].extra.raw_info.login |
4 | 4 | github_token = env["omniauth.auth"].credentials.token |
5 | - github_user = User.where(:github_login => github_login).first | |
5 | + github_user = User.where(github_login: github_login).first | |
6 | 6 | github_site_title = Errbit::Config.github_site_title |
7 | 7 | |
8 | 8 | if github_user.nil? && (github_org_id = Errbit::Config.github_org_id) |
... | ... | @@ -10,7 +10,7 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController |
10 | 10 | # If they are, automatically create an account |
11 | 11 | client = Octokit::Client.new(access_token: github_token) |
12 | 12 | client.api_endpoint = Errbit::Config.github_api_url |
13 | - org_ids = client.organizations.map { |org| org.id } | |
13 | + org_ids = client.organizations.map(&:id) | |
14 | 14 | if org_ids.include?(github_org_id) |
15 | 15 | github_user = User.create(name: env["omniauth.auth"].extra.raw_info.name, email: env["omniauth.auth"].extra.raw_info.email) |
16 | 16 | end |
... | ... | @@ -31,8 +31,8 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController |
31 | 31 | elsif github_user |
32 | 32 | # Store OAuth token |
33 | 33 | update_user_with_github_attributes(github_user, github_login, github_token) |
34 | - flash[:success] = I18n.t "devise.omniauth_callbacks.success", :kind => github_site_title | |
35 | - sign_in_and_redirect github_user, :event => :authentication | |
34 | + flash[:success] = I18n.t "devise.omniauth_callbacks.success", kind: github_site_title | |
35 | + sign_in_and_redirect github_user, event: :authentication | |
36 | 36 | else |
37 | 37 | flash[:error] = "There are no authorized users with #{github_site_title} login '#{github_login}'. Please ask an administrator to register your user account." |
38 | 38 | redirect_to new_user_session_path |
... | ... | @@ -41,8 +41,8 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController |
41 | 41 | |
42 | 42 | private def update_user_with_github_attributes(user, login, token) |
43 | 43 | user.update_attributes( |
44 | - :github_login => login, | |
45 | - :github_oauth_token => token | |
44 | + github_login: login, | |
45 | + github_oauth_token: token | |
46 | 46 | ) |
47 | 47 | end |
48 | 48 | end | ... | ... |
app/controllers/users_controller.rb
1 | 1 | class UsersController < ApplicationController |
2 | 2 | respond_to :html |
3 | 3 | |
4 | - before_action :require_admin!, :except => [:edit, :update] | |
5 | - before_action :require_user_edit_priviledges, :only => [:edit, :update] | |
4 | + before_action :require_admin!, except: [:edit, :update] | |
5 | + before_action :require_user_edit_priviledges, only: [:edit, :update] | |
6 | 6 | |
7 | - expose(:user, :attributes => :user_params) | |
7 | + expose(:user, attributes: :user_params) | |
8 | 8 | expose(:users) { |
9 | 9 | User.all.page(params[:page]).per(current_user.per_page) |
10 | 10 | } |
... | ... | @@ -24,7 +24,7 @@ class UsersController < ApplicationController |
24 | 24 | |
25 | 25 | def update |
26 | 26 | if user.update_attributes(user_params) |
27 | - flash[:success] = I18n.t('controllers.users.flash.update.success', :name => user.name) | |
27 | + flash[:success] = I18n.t('controllers.users.flash.update.success', name: user.name) | |
28 | 28 | redirect_to user_path(user) |
29 | 29 | else |
30 | 30 | render :edit |
... | ... | @@ -41,13 +41,13 @@ class UsersController < ApplicationController |
41 | 41 | flash[:error] = I18n.t('controllers.users.flash.destroy.error') |
42 | 42 | else |
43 | 43 | UserDestroy.new(user).destroy |
44 | - flash[:success] = I18n.t('controllers.users.flash.destroy.success', :name => user.name) | |
44 | + flash[:success] = I18n.t('controllers.users.flash.destroy.success', name: user.name) | |
45 | 45 | end |
46 | 46 | redirect_to users_path |
47 | 47 | end |
48 | 48 | |
49 | 49 | def unlink_github |
50 | - user.update_attributes :github_login => nil, :github_oauth_token => nil | |
50 | + user.update_attributes github_login: nil, github_oauth_token: nil | |
51 | 51 | redirect_to user_path(user) |
52 | 52 | end |
53 | 53 | |
... | ... | @@ -65,7 +65,7 @@ protected |
65 | 65 | def user_permit_params |
66 | 66 | @user_permit_params ||= [:name, :username, :email, :github_login, :per_page, :time_zone] |
67 | 67 | @user_permit_params << :admin if current_user.admin? && current_user.id != params[:id] |
68 | - @user_permit_params |= [:password, :password_confirmation] if user_password_params.values.all?{|pa| !pa.blank? } | |
68 | + @user_permit_params |= [:password, :password_confirmation] if user_password_params.values.all? { |pa| !pa.blank? } | |
69 | 69 | @user_permit_params |
70 | 70 | end |
71 | 71 | ... | ... |
app/controllers/watchers_controller.rb
... | ... | @@ -6,7 +6,7 @@ class WatchersController < ApplicationController |
6 | 6 | end |
7 | 7 | |
8 | 8 | def destroy |
9 | - watcher = app.watchers.where(:user_id => params[:id]).first | |
9 | + watcher = app.watchers.where(user_id: params[:id]).first | |
10 | 10 | app.watchers.delete(watcher) |
11 | 11 | flash[:success] = t('.success', app: app.name) |
12 | 12 | redirect_to app_path(app) | ... | ... |
app/decorators/app_decorator.rb
app/decorators/backtrace_line_decorator.rb
... | ... | @@ -44,9 +44,9 @@ class BacktraceLineDecorator < Draper::Decorator |
44 | 44 | end |
45 | 45 | |
46 | 46 | def decorated_path |
47 | - path | |
48 | - .sub(Backtrace::IN_APP_PATH, '') | |
49 | - .sub(Backtrace::GEMS_PATH, "<strong>\\1</strong>") | |
47 | + path. | |
48 | + sub(Backtrace::IN_APP_PATH, ''). | |
49 | + sub(Backtrace::GEMS_PATH, "<strong>\\1</strong>") | |
50 | 50 | end |
51 | 51 | |
52 | 52 | private |
... | ... | @@ -67,25 +67,25 @@ private |
67 | 67 | |
68 | 68 | def link_to_hosted_javascript(app, text) |
69 | 69 | if app.asset_host? |
70 | - h.link_to(text, "#{app.asset_host}/#{file_relative}", :target => '_blank') | |
70 | + h.link_to(text, "#{app.asset_host}/#{file_relative}", target: '_blank') | |
71 | 71 | end |
72 | 72 | end |
73 | 73 | |
74 | 74 | def link_to_github(app, text = nil) |
75 | 75 | return unless app.github_repo? |
76 | 76 | href = "%s#L%s" % [app.github_url_to_file(decorated_path + file_name), number] |
77 | - h.link_to(text || file_name, href, :target => '_blank') | |
77 | + h.link_to(text || file_name, href, target: '_blank') | |
78 | 78 | end |
79 | 79 | |
80 | 80 | def link_to_bitbucket(app, text = nil) |
81 | 81 | return unless app.bitbucket_repo? |
82 | 82 | href = "%s#%s-%s" % [app.bitbucket_url_to_file(decorated_path + file_name), file_name, number] |
83 | - h.link_to(text || file_name, href, :target => '_blank') | |
83 | + h.link_to(text || file_name, href, target: '_blank') | |
84 | 84 | end |
85 | 85 | |
86 | 86 | def link_to_issue_tracker_file(app, text = nil) |
87 | 87 | return unless app.issue_tracker && app.issue_tracker.respond_to?(:url_to_file) |
88 | 88 | href = app.issue_tracker.url_to_file(file_relative, number) |
89 | - h.link_to(text || file_name, href, :target => '_blank') | |
89 | + h.link_to(text || file_name, href, target: '_blank') | |
90 | 90 | end |
91 | 91 | end | ... | ... |
app/decorators/issue_tracker_field_decorator.rb
... | ... | @@ -13,8 +13,8 @@ class IssueTrackerFieldDecorator < Draper::Decorator |
13 | 13 | |
14 | 14 | def input(form, issue_tracker) |
15 | 15 | form.send(input_field, key.to_s, |
16 | - :placeholder => field_info[:placeholder], | |
17 | - :value => issue_tracker.options[key.to_s]) | |
16 | + placeholder: field_info[:placeholder], | |
17 | + value: issue_tracker.options[key.to_s]) | |
18 | 18 | end |
19 | 19 | |
20 | 20 | private def input_field | ... | ... |
app/decorators/issue_tracker_type_decorator.rb
... | ... | @@ -7,7 +7,8 @@ class IssueTrackerTypeDecorator < Draper::Decorator |
7 | 7 | return unless object.icons |
8 | 8 | |
9 | 9 | object.icons.reduce({}) do |c, (k, v)| |
10 | - c[k] = "data:#{v[0]};base64,#{Base64.encode64(v[1])}"; c | |
10 | + c[k] = "data:#{v[0]};base64,#{Base64.encode64(v[1])}" | |
11 | + c | |
11 | 12 | end |
12 | 13 | end |
13 | 14 | ... | ... |
app/helpers/application_helper.rb
... | ... | @@ -13,7 +13,7 @@ module ApplicationHelper |
13 | 13 | event.dtend = notice.created_at.utc + 60.minutes |
14 | 14 | event.organizer = notice.server_environment && notice.server_environment["hostname"] |
15 | 15 | event.location = notice.project_root |
16 | - event.url = app_problem_url(:app_id => notice.problem.app.id, :id => notice.problem) | |
16 | + event.url = app_problem_url(app_id: notice.problem.app.id, id: notice.problem) | |
17 | 17 | end |
18 | 18 | end |
19 | 19 | end.to_s |
... | ... | @@ -53,12 +53,12 @@ module ApplicationHelper |
53 | 53 | end |
54 | 54 | end |
55 | 55 | |
56 | - def create_percentage_table_from_tallies(tallies, options={}) | |
56 | + def create_percentage_table_from_tallies(tallies, options = {}) | |
57 | 57 | total = (options[:total] || total_from_tallies(tallies)) |
58 | 58 | percent = 100.0 / total.to_f |
59 | - rows = tallies.map {|value, count| [(count.to_f * percent), value]} \ | |
60 | - .sort {|a, b| b[0] <=> a[0]} | |
61 | - render "problems/tally_table", :rows => rows | |
59 | + rows = tallies.map { |value, count| [(count.to_f * percent), value] }. \ | |
60 | + sort { |a, b| b[0] <=> a[0] } | |
61 | + render "problems/tally_table", rows: rows | |
62 | 62 | end |
63 | 63 | |
64 | 64 | def head(collection) |
... | ... | @@ -78,7 +78,7 @@ module ApplicationHelper |
78 | 78 | private |
79 | 79 | |
80 | 80 | def total_from_tallies(tallies) |
81 | - tallies.values.inject(0) {|sum, n| sum + n} | |
81 | + tallies.values.sum | |
82 | 82 | end |
83 | 83 | |
84 | 84 | def head_size | ... | ... |
app/helpers/apps_helper.rb
... | ... | @@ -2,11 +2,11 @@ module AppsHelper |
2 | 2 | def link_to_copy_attributes_from_other_app |
3 | 3 | if App.count > 1 |
4 | 4 | html = link_to('copy settings from another app', '#', |
5 | - :class => 'button copy_config') | |
5 | + class: 'button copy_config') | |
6 | 6 | html << select("duplicate", "app", |
7 | - App.all.asc(:name).reject{|a| a == @app }. | |
8 | - collect{|p| [ p.name, p.id ] }, {:include_blank => "[choose app]"}, | |
9 | - {:class => "choose_other_app", :style => "display: none;"}) | |
7 | + App.all.asc(:name).reject { |a| a == @app }. | |
8 | + collect { |p| [p.name, p.id] }, { include_blank: "[choose app]" }, | |
9 | + class: "choose_other_app", style: "display: none;") | |
10 | 10 | return html |
11 | 11 | end |
12 | 12 | end | ... | ... |
app/helpers/form_helper.rb
... | ... | @@ -2,10 +2,12 @@ module FormHelper |
2 | 2 | def errors_for(document) |
3 | 3 | return unless document.errors.any? |
4 | 4 | |
5 | - content_tag(:div, :class => 'error-messages') do | |
5 | + content_tag(:div, class: 'error-messages') do | |
6 | 6 | body = content_tag(:h2, 'Dang. The following errors are keeping this from being a success.') |
7 | 7 | body + content_tag(:ul) do |
8 | - document.errors.full_messages.inject('') {|errs, msg| errs + content_tag(:li, h(msg)) }.html_safe | |
8 | + document.errors.full_messages.inject('') do |errs, msg| | |
9 | + errs + content_tag(:li, h(msg)) | |
10 | + end.html_safe | |
9 | 11 | end |
10 | 12 | end |
11 | 13 | end | ... | ... |
app/helpers/navigation_helper.rb
app/helpers/notices_helper.rb
app/helpers/problems_helper.rb
... | ... | @@ -6,21 +6,21 @@ module ProblemsHelper |
6 | 6 | def truncated_problem_message(problem) |
7 | 7 | unless (msg = problem.message).blank? |
8 | 8 | # Truncate & insert invisible chars so that firefox can emulate 'word-wrap: break-word' CSS rule |
9 | - truncate(msg, :length => 300, :escape => false).scan(/.{1,5}/).map { |s| h(s) }.join("​").html_safe | |
9 | + truncate(msg, length: 300, escape: false).scan(/.{1,5}/).map { |s| h(s) }.join("​").html_safe | |
10 | 10 | end |
11 | 11 | end |
12 | 12 | |
13 | 13 | def gravatar_tag(email, options = {}) |
14 | 14 | return nil unless email.present? |
15 | 15 | |
16 | - image_tag gravatar_url(email, options), :alt => email, :class => 'gravatar' | |
16 | + image_tag gravatar_url(email, options), alt: email, class: 'gravatar' | |
17 | 17 | end |
18 | 18 | |
19 | 19 | def gravatar_url(email, options = {}) |
20 | 20 | return nil unless email.present? |
21 | 21 | |
22 | 22 | default_options = { |
23 | - :d => Errbit::Config.gravatar_default, | |
23 | + d: Errbit::Config.gravatar_default | |
24 | 24 | } |
25 | 25 | options.reverse_merge! default_options |
26 | 26 | params = options.extract!(:s, :d).delete_if { |_k, v| v.blank? } | ... | ... |
app/helpers/sort_helper.rb
1 | 1 | # encoding: utf-8 |
2 | 2 | module SortHelper |
3 | - def link_for_sort(name, field=nil) | |
3 | + def link_for_sort(name, field = nil) | |
4 | 4 | field ||= name.underscore |
5 | 5 | current = (params_sort == field) |
6 | 6 | order = (current && (params_order == "asc")) ? "desc" : "asc" |
7 | 7 | url = request.path + "?sort=#{field}&order=#{order}" |
8 | 8 | options = {} |
9 | - options.merge!(:class => "current #{order}") if current | |
9 | + options.merge!(class: "current #{order}") if current | |
10 | 10 | link_to(name, url, options) |
11 | 11 | end |
12 | 12 | end | ... | ... |
app/interactors/problem_destroy.rb
... | ... | @@ -20,7 +20,7 @@ class ProblemDestroy |
20 | 20 | # the number of problem destroy |
21 | 21 | # |
22 | 22 | def self.execute(problems) |
23 | - Array(problems).each{ |problem| | |
23 | + Array(problems).each { |problem| | |
24 | 24 | ProblemDestroy.new(problem).execute |
25 | 25 | }.count |
26 | 26 | end |
... | ... | @@ -36,11 +36,11 @@ private |
36 | 36 | end |
37 | 37 | |
38 | 38 | def delete_errs |
39 | - Notice.delete_all(:err_id => { '$in' => errs_id }) | |
40 | - Err.delete_all(:_id => { '$in' => errs_id }) | |
39 | + Notice.delete_all(err_id: { '$in' => errs_id }) | |
40 | + Err.delete_all(_id: { '$in' => errs_id }) | |
41 | 41 | end |
42 | 42 | |
43 | 43 | def delete_comments |
44 | - Comment.delete_all(:_id => { '$in' => comments_id }) | |
44 | + Comment.delete_all(_id: { '$in' => comments_id }) | |
45 | 45 | end |
46 | 46 | end | ... | ... |
app/interactors/problem_merge.rb
... | ... | @@ -5,7 +5,7 @@ class ProblemMerge |
5 | 5 | problems = problems.flatten.uniq |
6 | 6 | @merged_problem = problems[0] |
7 | 7 | @child_problems = problems[1..-1] |
8 | - raise ArgumentError.new("need almost 2 uniq different problems") if @child_problems.empty? | |
8 | + fail ArgumentError, "need almost 2 uniq different problems" if @child_problems.empty? | |
9 | 9 | end |
10 | 10 | attr_reader :merged_problem, :child_problems |
11 | 11 | ... | ... |
app/interactors/resolved_problem_clearer.rb
app/mailers/mailer.rb
... | ... | @@ -5,12 +5,12 @@ require Rails.root.join('config/routes.rb') |
5 | 5 | class Mailer < ActionMailer::Base |
6 | 6 | helper ApplicationHelper |
7 | 7 | |
8 | - default :from => Errbit::Config.email_from, | |
9 | - 'X-Errbit-Host' => Errbit::Config.host, | |
10 | - 'X-Mailer' => 'Errbit', | |
8 | + default :from => Errbit::Config.email_from, | |
9 | + 'X-Errbit-Host' => Errbit::Config.host, | |
10 | + 'X-Mailer' => 'Errbit', | |
11 | 11 | 'X-Auto-Response-Suppress' => 'OOF, AutoReply', |
12 | - 'Precedence' => 'bulk', | |
13 | - 'Auto-Submitted' => 'auto-generated' | |
12 | + 'Precedence' => 'bulk', | |
13 | + 'Auto-Submitted' => 'auto-generated' | |
14 | 14 | |
15 | 15 | def err_notification(error_report) |
16 | 16 | @notice = NoticeDecorator.new error_report.notice |
... | ... | @@ -19,25 +19,25 @@ class Mailer < ActionMailer::Base |
19 | 19 | count = error_report.problem.notices_count |
20 | 20 | count = count > 1 ? "(#{count}) " : "" |
21 | 21 | |
22 | - errbit_headers 'App' => @app.name, | |
22 | + errbit_headers 'App' => @app.name, | |
23 | 23 | 'Environment' => @notice.environment_name, |
24 | - 'Error-Id' => @notice.err_id | |
24 | + 'Error-Id' => @notice.err_id | |
25 | 25 | |
26 | - mail :to => @app.notification_recipients, | |
27 | - :subject => "#{count}[#{@app.name}][#{@notice.environment_name}] #{@notice.message.truncate(50)}" | |
26 | + mail to: @app.notification_recipients, | |
27 | + subject: "#{count}[#{@app.name}][#{@notice.environment_name}] #{@notice.message.truncate(50)}" | |
28 | 28 | end |
29 | 29 | |
30 | 30 | def deploy_notification(deploy) |
31 | 31 | @deploy = deploy |
32 | 32 | @app = AppDecorator.new deploy.app |
33 | 33 | |
34 | - errbit_headers 'App' => @app.name, | |
35 | - 'Environment' => @deploy.environment, | |
34 | + errbit_headers 'App' => @app.name, | |
35 | + 'Environment' => @deploy.environment, | |
36 | 36 | 'Deploy-Revision' => @deploy.revision, |
37 | - 'Deploy-User' => @deploy.username | |
37 | + 'Deploy-User' => @deploy.username | |
38 | 38 | |
39 | - mail :to => @app.notification_recipients, | |
40 | - :subject => "[#{@app.name}] Deployed to #{@deploy.environment} by #{@deploy.username}" | |
39 | + mail to: @app.notification_recipients, | |
40 | + subject: "[#{@app.name}] Deployed to #{@deploy.environment} by #{@deploy.username}" | |
41 | 41 | end |
42 | 42 | |
43 | 43 | def comment_notification(comment) |
... | ... | @@ -49,13 +49,13 @@ class Mailer < ActionMailer::Base |
49 | 49 | |
50 | 50 | recipients = @comment.notification_recipients |
51 | 51 | |
52 | - errbit_headers 'App' => @app.name, | |
53 | - 'Environment' => @notice.environment_name, | |
54 | - 'Problem-Id' => @problem.id, | |
52 | + errbit_headers 'App' => @app.name, | |
53 | + 'Environment' => @notice.environment_name, | |
54 | + 'Problem-Id' => @problem.id, | |
55 | 55 | 'Comment-Author' => @user.name |
56 | 56 | |
57 | - mail :to => recipients, | |
58 | - :subject => "#{@user.name} commented on [#{@app.name}][#{@notice.environment_name}] #{@notice.message.truncate(50)}" | |
57 | + mail to: recipients, | |
58 | + subject: "#{@user.name} commented on [#{@app.name}][#{@notice.environment_name}] #{@notice.message.truncate(50)}" | |
59 | 59 | end |
60 | 60 | |
61 | 61 | private def errbit_headers(header) | ... | ... |
app/models/app.rb
... | ... | @@ -3,56 +3,59 @@ class App |
3 | 3 | include Mongoid::Document |
4 | 4 | include Mongoid::Timestamps |
5 | 5 | |
6 | - field :name, :type => String | |
6 | + field :name, type: String | |
7 | 7 | field :api_key |
8 | 8 | field :github_repo |
9 | 9 | field :bitbucket_repo |
10 | 10 | field :asset_host |
11 | 11 | field :repository_branch |
12 | 12 | field :current_app_version |
13 | - field :resolve_errs_on_deploy, :type => Boolean, :default => false | |
14 | - field :notify_all_users, :type => Boolean, :default => false | |
15 | - field :notify_on_errs, :type => Boolean, :default => true | |
16 | - field :notify_on_deploys, :type => Boolean, :default => false | |
17 | - field :email_at_notices, :type => Array, :default => Errbit::Config.email_at_notices | |
13 | + field :resolve_errs_on_deploy, type: Boolean, default: false | |
14 | + field :notify_all_users, type: Boolean, default: false | |
15 | + field :notify_on_errs, type: Boolean, default: true | |
16 | + field :notify_on_deploys, type: Boolean, default: false | |
17 | + field :email_at_notices, type: Array, default: Errbit::Config.email_at_notices | |
18 | 18 | |
19 | 19 | # Some legacy apps may have string as key instead of BSON::ObjectID |
20 | 20 | # identity :type => String |
21 | 21 | field :_id, |
22 | - type: String, | |
22 | + type: String, | |
23 | 23 | pre_processed: true, |
24 | - default: ->{ BSON::ObjectId.new.to_s } | |
24 | + default: -> { BSON::ObjectId.new.to_s } | |
25 | 25 | |
26 | 26 | embeds_many :watchers |
27 | 27 | embeds_many :deploys |
28 | - embeds_one :issue_tracker, :class_name => 'IssueTracker' | |
28 | + embeds_one :issue_tracker, class_name: 'IssueTracker' | |
29 | 29 | embeds_one :notification_service |
30 | 30 | embeds_one :notice_fingerprinter, autobuild: true |
31 | 31 | |
32 | - has_many :problems, :inverse_of => :app, :dependent => :destroy | |
32 | + has_many :problems, inverse_of: :app, dependent: :destroy | |
33 | 33 | |
34 | - before_validation :generate_api_key, :on => :create | |
34 | + before_validation :generate_api_key, on: :create | |
35 | 35 | before_save :normalize_github_repo |
36 | 36 | after_update :store_cached_attributes_on_problems |
37 | 37 | |
38 | 38 | validates_presence_of :name, :api_key |
39 | - validates_uniqueness_of :name, :allow_blank => true | |
40 | - validates_uniqueness_of :api_key, :allow_blank => true | |
39 | + validates_uniqueness_of :name, allow_blank: true | |
40 | + validates_uniqueness_of :api_key, allow_blank: true | |
41 | 41 | validates_associated :watchers |
42 | 42 | validates_associated :notice_fingerprinter |
43 | 43 | validate :check_issue_tracker |
44 | 44 | |
45 | - accepts_nested_attributes_for :watchers, :allow_destroy => true, | |
46 | - :reject_if => proc { |attrs| attrs[:user_id].blank? && attrs[:email].blank? } | |
47 | - accepts_nested_attributes_for :issue_tracker, :allow_destroy => true, | |
48 | - :reject_if => proc { |attrs| !ErrbitPlugin::Registry.issue_trackers.keys.map(&:to_s).include?(attrs[:type_tracker].to_s) } | |
49 | - accepts_nested_attributes_for :notification_service, :allow_destroy => true, | |
50 | - :reject_if => proc { |attrs| !NotificationService.subclasses.map(&:to_s).include?(attrs[:type].to_s) } | |
45 | + accepts_nested_attributes_for :watchers, | |
46 | + allow_destroy: true, | |
47 | + reject_if: proc { |attrs| attrs[:user_id].blank? && attrs[:email].blank? } | |
48 | + accepts_nested_attributes_for :issue_tracker, | |
49 | + allow_destroy: true, | |
50 | + reject_if: proc { |attrs| !ErrbitPlugin::Registry.issue_trackers.keys.map(&:to_s).include?(attrs[:type_tracker].to_s) } | |
51 | + accepts_nested_attributes_for :notification_service, | |
52 | + allow_destroy: true, | |
53 | + reject_if: proc { |attrs| !NotificationService.subclasses.map(&:to_s).include?(attrs[:type].to_s) } | |
51 | 54 | accepts_nested_attributes_for :notice_fingerprinter |
52 | 55 | |
53 | - scope :watched_by, ->(user) do | |
56 | + scope :watched_by, lambda { |user| | |
54 | 57 | where watchers: { "$elemMatch" => { "user_id" => user.id } } |
55 | - end | |
58 | + } | |
56 | 59 | |
57 | 60 | def watched_by?(user) |
58 | 61 | watchers.pluck("user_id").include? user.id |
... | ... | @@ -71,7 +74,7 @@ class App |
71 | 74 | problem = problems.create!( |
72 | 75 | error_class: attrs[:error_class], |
73 | 76 | environment: attrs[:environment], |
74 | - app_name: name | |
77 | + app_name: name | |
75 | 78 | ) |
76 | 79 | problem.errs.create!(attrs.slice(:fingerprint, :problem_id)) |
77 | 80 | end |
... | ... | @@ -82,7 +85,7 @@ class App |
82 | 85 | end |
83 | 86 | |
84 | 87 | def self.find_by_api_key!(key) |
85 | - find_by(:api_key => key) | |
88 | + find_by(api_key: key) | |
86 | 89 | end |
87 | 90 | |
88 | 91 | def last_deploy_at |
... | ... | @@ -151,7 +154,7 @@ class App |
151 | 154 | |
152 | 155 | # Copy app attributes from another app. |
153 | 156 | def copy_attributes_from(app_id) |
154 | - if (copy_app = App.where(:_id => app_id).first) | |
157 | + if (copy_app = App.where(_id: app_id).first) | |
155 | 158 | # Copy fields |
156 | 159 | (copy_app.fields.keys - %w(_id name created_at updated_at)).each do |k| |
157 | 160 | send("#{k}=", copy_app.send(k)) |
... | ... | @@ -191,7 +194,7 @@ class App |
191 | 194 | protected |
192 | 195 | |
193 | 196 | def store_cached_attributes_on_problems |
194 | - Problem.where(:app_id => id).update_all( | |
197 | + Problem.where(app_id: id).update_all( | |
195 | 198 | app_name: name |
196 | 199 | ) |
197 | 200 | end |
... | ... | @@ -214,7 +217,7 @@ protected |
214 | 217 | github_host = URI.parse(Errbit::Config.github_url).host |
215 | 218 | github_host = Regexp.escape(github_host) |
216 | 219 | github_repo.strip! |
217 | - github_repo.sub!(/(git@|https?:\/\/)#{github_host}(\/|:)/, '') | |
220 | + github_repo.sub!(%r{(git@|https?://)#{github_host}(/|:)}, '') | |
218 | 221 | github_repo.sub!(/\.git$/, '') |
219 | 222 | end |
220 | 223 | end | ... | ... |
app/models/backtrace.rb
... | ... | @@ -8,14 +8,14 @@ class Backtrace |
8 | 8 | field :fingerprint |
9 | 9 | field :lines |
10 | 10 | |
11 | - index :fingerprint => 1 | |
11 | + index fingerprint: 1 | |
12 | 12 | |
13 | 13 | def self.find_or_create(lines) |
14 | 14 | fingerprint = generate_fingerprint(lines) |
15 | 15 | |
16 | 16 | where(fingerprint: fingerprint).find_one_and_update( |
17 | 17 | { '$setOnInsert' => { fingerprint: fingerprint, lines: lines } }, |
18 | - { return_document: :after, upsert: true }) | |
18 | + return_document: :after, upsert: true) | |
19 | 19 | end |
20 | 20 | |
21 | 21 | def self.generate_fingerprint(lines) | ... | ... |
app/models/comment.rb
... | ... | @@ -5,14 +5,14 @@ class Comment |
5 | 5 | after_create :increase_counter_cache |
6 | 6 | before_destroy :decrease_counter_cache |
7 | 7 | |
8 | - after_create :deliver_email, :if => :emailable? | |
8 | + after_create :deliver_email, if: :emailable? | |
9 | 9 | |
10 | - field :body, :type => String | |
11 | - index(:user_id => 1) | |
10 | + field :body, type: String | |
11 | + index(user_id: 1) | |
12 | 12 | |
13 | - belongs_to :err, :class_name => "Problem" | |
13 | + belongs_to :err, class_name: "Problem" | |
14 | 14 | belongs_to :user |
15 | - delegate :app, :to => :err | |
15 | + delegate :app, to: :err | |
16 | 16 | |
17 | 17 | validates_presence_of :body |
18 | 18 | ... | ... |
app/models/deploy.rb
... | ... | @@ -8,18 +8,18 @@ class Deploy |
8 | 8 | field :revision |
9 | 9 | field :message |
10 | 10 | |
11 | - index(:created_at => -1) | |
11 | + index(created_at: -1) | |
12 | 12 | |
13 | - embedded_in :app, :inverse_of => :deploys | |
13 | + embedded_in :app, inverse_of: :deploys | |
14 | 14 | |
15 | - after_create :resolve_app_errs, :if => :should_resolve_app_errs? | |
15 | + after_create :resolve_app_errs, if: :should_resolve_app_errs? | |
16 | 16 | after_create :store_cached_attributes_on_problems |
17 | 17 | after_create :deliver_email |
18 | 18 | |
19 | 19 | validates_presence_of :username, :environment |
20 | 20 | |
21 | 21 | def resolve_app_errs |
22 | - app.problems.unresolved.in_env(environment).each {|problem| problem.resolve!} | |
22 | + app.problems.unresolved.in_env(environment).each(&:resolve!) | |
23 | 23 | end |
24 | 24 | |
25 | 25 | def short_revision |
... | ... | @@ -33,7 +33,7 @@ protected |
33 | 33 | end |
34 | 34 | |
35 | 35 | def store_cached_attributes_on_problems |
36 | - Problem.where(:app_id => app.id).update_all( | |
36 | + Problem.where(app_id: app.id).update_all( | |
37 | 37 | last_deploy_at: created_at |
38 | 38 | ) |
39 | 39 | end | ... | ... |
app/models/err.rb
... | ... | @@ -12,9 +12,9 @@ class Err |
12 | 12 | index fingerprint: 1 |
13 | 13 | |
14 | 14 | belongs_to :problem |
15 | - has_many :notices, :inverse_of => :err, :dependent => :destroy | |
15 | + has_many :notices, inverse_of: :err, dependent: :destroy | |
16 | 16 | |
17 | 17 | validates_presence_of :problem_id, :fingerprint |
18 | 18 | |
19 | - delegate :app, :resolved?, :to => :problem | |
19 | + delegate :app, :resolved?, to: :problem | |
20 | 20 | end | ... | ... |
app/models/error_report.rb
... | ... | @@ -61,15 +61,15 @@ class ErrorReport |
61 | 61 | |
62 | 62 | def make_notice |
63 | 63 | @notice = Notice.new( |
64 | - app: app, | |
65 | - message: message, | |
66 | - error_class: error_class, | |
67 | - backtrace: backtrace, | |
68 | - request: request, | |
64 | + app: app, | |
65 | + message: message, | |
66 | + error_class: error_class, | |
67 | + backtrace: backtrace, | |
68 | + request: request, | |
69 | 69 | server_environment: server_environment, |
70 | - notifier: notifier, | |
71 | - user_attributes: user_attributes, | |
72 | - framework: framework | |
70 | + notifier: notifier, | |
71 | + user_attributes: user_attributes, | |
72 | + framework: framework | |
73 | 73 | ) |
74 | 74 | end |
75 | 75 | ... | ... |
app/models/issue.rb
app/models/issue_tracker.rb
... | ... | @@ -2,10 +2,10 @@ class IssueTracker |
2 | 2 | include Mongoid::Document |
3 | 3 | include Mongoid::Timestamps |
4 | 4 | |
5 | - embedded_in :app, :inverse_of => :issue_tracker | |
5 | + embedded_in :app, inverse_of: :issue_tracker | |
6 | 6 | |
7 | - field :type_tracker, :type => String | |
8 | - field :options, :type => Hash, :default => {} | |
7 | + field :type_tracker, type: String | |
8 | + field :options, type: Hash, default: {} | |
9 | 9 | |
10 | 10 | validate :validate_tracker |
11 | 11 | |
... | ... | @@ -15,7 +15,7 @@ class IssueTracker |
15 | 15 | klass = ErrbitPlugin::Registry.issue_trackers[type_tracker] || ErrbitPlugin::NoneIssueTracker |
16 | 16 | # TODO: we need to find out a better way to pass those config to the issue tracker |
17 | 17 | klass.new(options.merge( |
18 | - github_repo: app.try(:github_repo), | |
18 | + github_repo: app.try(:github_repo), | |
19 | 19 | bitbucket_repo: app.try(:bitbucket_repo) |
20 | 20 | )) |
21 | 21 | end |
... | ... | @@ -32,7 +32,7 @@ class IssueTracker |
32 | 32 | end |
33 | 33 | end |
34 | 34 | |
35 | - delegate :configured?, :to => :tracker | |
36 | - delegate :create_issue, :to => :tracker | |
37 | - delegate :url, :to => :tracker | |
35 | + delegate :configured?, to: :tracker | |
36 | + delegate :create_issue, to: :tracker | |
37 | + delegate :url, to: :tracker | |
38 | 38 | end | ... | ... |
app/models/notice.rb
... | ... | @@ -5,30 +5,30 @@ class Notice |
5 | 5 | include Mongoid::Timestamps |
6 | 6 | |
7 | 7 | field :message |
8 | - field :server_environment, :type => Hash | |
9 | - field :request, :type => Hash | |
10 | - field :notifier, :type => Hash | |
11 | - field :user_attributes, :type => Hash | |
8 | + field :server_environment, type: Hash | |
9 | + field :request, type: Hash | |
10 | + field :notifier, type: Hash | |
11 | + field :user_attributes, type: Hash | |
12 | 12 | field :framework |
13 | 13 | field :error_class |
14 | - delegate :lines, :to => :backtrace, :prefix => true | |
15 | - delegate :problem, :to => :err | |
14 | + delegate :lines, to: :backtrace, prefix: true | |
15 | + delegate :problem, to: :err | |
16 | 16 | |
17 | 17 | belongs_to :app |
18 | 18 | belongs_to :err |
19 | - belongs_to :backtrace, :index => true | |
19 | + belongs_to :backtrace, index: true | |
20 | 20 | |
21 | - index(:created_at => 1) | |
22 | - index(:err_id => 1, :created_at => 1, :_id => 1) | |
21 | + index(created_at: 1) | |
22 | + index(err_id: 1, created_at: 1, _id: 1) | |
23 | 23 | |
24 | 24 | before_save :sanitize |
25 | 25 | before_destroy :problem_recache |
26 | 26 | |
27 | 27 | validates_presence_of :backtrace_id, :server_environment, :notifier |
28 | 28 | |
29 | - scope :ordered, ->{ order_by(:created_at.asc) } | |
30 | - scope :reverse_ordered, ->{ order_by(:created_at.desc) } | |
31 | - scope :for_errs, Proc.new { |errs| | |
29 | + scope :ordered, -> { order_by(:created_at.asc) } | |
30 | + scope :reverse_ordered, -> { order_by(:created_at.desc) } | |
31 | + scope :for_errs, lambda { |errs| | |
32 | 32 | where(:err_id.in => errs.all.map(&:id)) |
33 | 33 | } |
34 | 34 | ... | ... |
app/models/notice_fingerprinter.rb
... | ... | @@ -14,7 +14,7 @@ class NoticeFingerprinter |
14 | 14 | embedded_in :site_config |
15 | 15 | |
16 | 16 | def generate(api_key, notice, backtrace) |
17 | - material = [ api_key ] | |
17 | + material = [api_key] | |
18 | 18 | material << notice.error_class if error_class |
19 | 19 | material << notice.filtered_message if message |
20 | 20 | material << notice.component if component |
... | ... | @@ -27,6 +27,6 @@ class NoticeFingerprinter |
27 | 27 | material << backtrace.lines.slice(0, backtrace_lines) |
28 | 28 | end |
29 | 29 | |
30 | - Digest::MD5.hexdigest(material.reduce('') { |c, m| c << m.to_s; c }) | |
30 | + Digest::MD5.hexdigest(material.map(&:to_s).join) | |
31 | 31 | end |
32 | 32 | end | ... | ... |
app/models/notification_service.rb
... | ... | @@ -5,26 +5,26 @@ class NotificationService |
5 | 5 | default_url_options[:host] = ActionMailer::Base.default_url_options[:host] |
6 | 6 | default_url_options[:port] = ActionMailer::Base.default_url_options[:port] |
7 | 7 | |
8 | - field :room_id, :type => String | |
9 | - field :user_id, :type => String | |
10 | - field :service_url, :type => String | |
11 | - field :service, :type => String | |
12 | - field :api_token, :type => String | |
13 | - field :subdomain, :type => String | |
14 | - field :sender_name, :type => String | |
15 | - field :notify_at_notices, :type => Array, :default => Errbit::Config.notify_at_notices | |
16 | - embedded_in :app, :inverse_of => :notification_service | |
8 | + field :room_id, type: String | |
9 | + field :user_id, type: String | |
10 | + field :service_url, type: String | |
11 | + field :service, type: String | |
12 | + field :api_token, type: String | |
13 | + field :subdomain, type: String | |
14 | + field :sender_name, type: String | |
15 | + field :notify_at_notices, type: Array, default: Errbit::Config.notify_at_notices | |
16 | + embedded_in :app, inverse_of: :notification_service | |
17 | 17 | |
18 | 18 | validate :check_params |
19 | 19 | |
20 | 20 | if Errbit::Config.per_app_notify_at_notices |
21 | - Fields = [[:notify_at_notices, | |
22 | - { :placeholder => 'comma separated numbers or simply 0 for every notice', | |
23 | - :label => 'notify on errors (0 for all errors)' | |
21 | + FIELDS = [[:notify_at_notices, | |
22 | + { placeholder: 'comma separated numbers or simply 0 for every notice', | |
23 | + label: 'notify on errors (0 for all errors)' | |
24 | 24 | } |
25 | 25 | ]] |
26 | 26 | else |
27 | - Fields = [] | |
27 | + FIELDS = [] | |
28 | 28 | end |
29 | 29 | |
30 | 30 | def notify_at_notices |
... | ... | @@ -32,22 +32,36 @@ class NotificationService |
32 | 32 | end |
33 | 33 | |
34 | 34 | # Subclasses are responsible for overwriting this method. |
35 | - def check_params; true; end | |
35 | + def check_params | |
36 | + true | |
37 | + end | |
36 | 38 | |
37 | 39 | def notification_description(problem) |
38 | 40 | "[#{problem.environment}][#{problem.where}] #{problem.message.to_s.truncate(100)}" |
39 | 41 | end |
40 | 42 | |
41 | 43 | # Allows us to set the issue tracker class from a single form. |
42 | - def type; _type; end | |
43 | - def type=(t); self._type = t; end | |
44 | + def type | |
45 | + _type | |
46 | + end | |
47 | + | |
48 | + def type=(t) | |
49 | + self._type = t | |
50 | + end | |
44 | 51 | |
45 | - def url; nil; end | |
52 | + def url | |
53 | + nil | |
54 | + end | |
46 | 55 | |
47 | 56 | # Retrieve tracker label from either class or instance. |
48 | - Label = '' | |
49 | - def self.label; self::Label; end | |
50 | - def label; self.class.label; end | |
57 | + LABEL = '' | |
58 | + def self.label | |
59 | + self::LABEL | |
60 | + end | |
61 | + | |
62 | + def label | |
63 | + self.class.label | |
64 | + end | |
51 | 65 | |
52 | 66 | def configured? |
53 | 67 | api_token.present? | ... | ... |
app/models/notification_services/campfire_service.rb
1 | 1 | if defined? Campy |
2 | 2 | class NotificationServices::CampfireService < NotificationService |
3 | - Label = "campfire" | |
4 | - Fields += [ | |
3 | + LABEL = "campfire" | |
4 | + FIELDS += [ | |
5 | 5 | [:subdomain, { |
6 | - :label => "Subdomain", | |
7 | - :placeholder => "subdomain from http://{{subdomain}}.campfirenow.com" | |
6 | + label: "Subdomain", | |
7 | + placeholder: "subdomain from http://{{subdomain}}.campfirenow.com" | |
8 | 8 | }], |
9 | 9 | [:api_token, { |
10 | - :label => "API Token", | |
11 | - :placeholder => "123456789abcdef123456789abcdef" | |
10 | + label: "API Token", | |
11 | + placeholder: "123456789abcdef123456789abcdef" | |
12 | 12 | }], |
13 | 13 | [:room_id, { |
14 | - :label => "Room ID", | |
15 | - :placeholder => "123456" | |
14 | + label: "Room ID", | |
15 | + placeholder: "123456" | |
16 | 16 | }] |
17 | 17 | ] |
18 | 18 | |
19 | 19 | def check_params |
20 | - if Fields.detect {|f| self[f[0]].blank? } | |
20 | + if FIELDS.detect { |f| self[f[0]].blank? } | |
21 | 21 | errors.add :base, 'You must specify your Campfire Subdomain, API token and Room ID' |
22 | 22 | end |
23 | 23 | end |
... | ... | @@ -28,7 +28,7 @@ if defined? Campy |
28 | 28 | |
29 | 29 | def create_notification(problem) |
30 | 30 | # build the campfire client |
31 | - campy = Campy::Room.new(:account => subdomain, :token => api_token, :room_id => room_id) | |
31 | + campy = Campy::Room.new(account: subdomain, token: api_token, room_id: room_id) | |
32 | 32 | # post the issue to the campfire room |
33 | 33 | campy.speak "[errbit] #{problem.app.name} #{notification_description problem} - #{Errbit::Config.protocol}://#{Errbit::Config.host}/apps/#{problem.app.id}/problems/#{problem.id}" |
34 | 34 | end | ... | ... |
app/models/notification_services/flowdock_service.rb
1 | 1 | if defined? Flowdock |
2 | 2 | class NotificationServices::FlowdockService < NotificationService |
3 | - Label = 'flowdock' | |
4 | - Fields += [ | |
3 | + LABEL = 'flowdock' | |
4 | + FIELDS += [ | |
5 | 5 | [ |
6 | 6 | :api_token, { |
7 | - :label => 'Flow API Token', | |
8 | - :placeholder => '123456789abcdef123456789abcdefgh' | |
7 | + label: 'Flow API Token', | |
8 | + placeholder: '123456789abcdef123456789abcdefgh' | |
9 | 9 | } |
10 | 10 | ] |
11 | 11 | ] |
12 | 12 | |
13 | 13 | def check_params |
14 | - if Fields.any? { |f, _| self[f].blank? } | |
14 | + if FIELDS.any? { |f, _| self[f].blank? } | |
15 | 15 | errors.add :base, 'You must specify your Flowdock(Flow) API token' |
16 | 16 | end |
17 | 17 | end |
... | ... | @@ -21,10 +21,22 @@ if defined? Flowdock |
21 | 21 | end |
22 | 22 | |
23 | 23 | def create_notification(problem) |
24 | - flow = Flowdock::Flow.new(:api_token => api_token, :source => "Errbit", :from => {:name => "Errbit", :address => ENV['ERRBIT_EMAIL_FROM'] || 'support@flowdock.com'}) | |
24 | + flow = Flowdock::Flow.new( | |
25 | + api_token: api_token, | |
26 | + source: "Errbit", | |
27 | + from: { | |
28 | + name: "Errbit", | |
29 | + address: ENV['ERRBIT_EMAIL_FROM'] || 'support@flowdock.com' | |
30 | + } | |
31 | + ) | |
25 | 32 | subject = "[#{problem.environment}] #{problem.message.to_s.truncate(100)}" |
26 | 33 | url = app_problem_url problem.app, problem |
27 | - flow.push_to_team_inbox(:subject => subject, :content => content(problem, url), :project => project_name(problem), :link => url) | |
34 | + flow.push_to_team_inbox( | |
35 | + subject: subject, | |
36 | + content: content(problem, url), | |
37 | + project: project_name(problem), | |
38 | + link: url | |
39 | + ) | |
28 | 40 | end |
29 | 41 | |
30 | 42 | private | ... | ... |
app/models/notification_services/gtalk_service.rb
1 | 1 | class NotificationServices::GtalkService < NotificationService |
2 | - Label = "gtalk" | |
3 | - Fields += [ | |
2 | + LABEL = "gtalk" | |
3 | + FIELDS += [ | |
4 | 4 | [:subdomain, { |
5 | - :placeholder => "username@example.com", | |
6 | - :label => "Username" | |
5 | + placeholder: "username@example.com", | |
6 | + label: "Username" | |
7 | 7 | }], |
8 | 8 | [:api_token, { |
9 | - :placeholder => "password", | |
10 | - :label => "Password" | |
9 | + placeholder: "password", | |
10 | + label: "Password" | |
11 | 11 | }], |
12 | 12 | [:user_id, { |
13 | - :placeholder => "touser@example.com, anotheruser@example.com", | |
14 | - :label => "Send To User(s)" | |
13 | + placeholder: "touser@example.com, anotheruser@example.com", | |
14 | + label: "Send To User(s)" | |
15 | 15 | }, :room_id], |
16 | 16 | [:room_id, { |
17 | - :placeholder => "toroom@conference.example.com", | |
18 | - :label => "Send To Room (one only)" | |
17 | + placeholder: "toroom@conference.example.com", | |
18 | + label: "Send To Room (one only)" | |
19 | 19 | }, :user_id], |
20 | - [ :service, { | |
21 | - :placeholder => "talk.google.com", | |
22 | - :label => "Jabber Service" | |
20 | + [:service, { | |
21 | + placeholder: "talk.google.com", | |
22 | + label: "Jabber Service" | |
23 | 23 | }], |
24 | - [ :service_url, { | |
25 | - :placeholder => "http://www.google.com/talk/", | |
26 | - :label => "Link To Jabber Service" | |
24 | + [:service_url, { | |
25 | + placeholder: "http://www.google.com/talk/", | |
26 | + label: "Link To Jabber Service" | |
27 | 27 | }] |
28 | 28 | ] |
29 | 29 | |
30 | 30 | def check_params |
31 | - if Fields.detect { |f| self[f[0]].blank? && self[f[2]].blank? } | |
32 | - errors.add :base, | |
33 | - """You must specify your Username, Password, service, service_url | |
31 | + if FIELDS.detect { |f| self[f[0]].blank? && self[f[2]].blank? } | |
32 | + errors.add :base, | |
33 | + """You must specify your Username, Password, service, service_url | |
34 | 34 | and either rooms or users to send to or both""" |
35 | 35 | end |
36 | 36 | end |
... | ... | @@ -58,7 +58,7 @@ class NotificationServices::GtalkService < NotificationService |
58 | 58 | end |
59 | 59 | |
60 | 60 | private |
61 | - | |
61 | + | |
62 | 62 | def send_to_users(client, message) |
63 | 63 | user_id.tr(' ', ",").tr(';', ",").split(",").map(&:strip).reject(&:empty?).each do |user| |
64 | 64 | client.send(Jabber::Message.new(user, message)) |
... | ... | @@ -66,9 +66,9 @@ private |
66 | 66 | end |
67 | 67 | |
68 | 68 | def send_to_muc(client, message) |
69 | - #TODO: set this so that it can send to multiple rooms like users, nb multiple room joins in one send fail randomly so leave as one room for the moment | |
69 | + #TODO: set this so that it can send to multiple rooms like users, nb multiple room joins in one send fail randomly so leave as one room for the moment | |
70 | 70 | muc = Jabber::MUC::SimpleMUCClient.new(client) |
71 | - muc.join(room_id + "/errbit") | |
71 | + muc.join(room_id + "/errbit") | |
72 | 72 | muc.send(Jabber::Message.new(room_id, message)) |
73 | 73 | end |
74 | 74 | end | ... | ... |
app/models/notification_services/hipchat_service.rb
1 | 1 | if defined? HipChat |
2 | 2 | class NotificationServices::HipchatService < NotificationService |
3 | - Label = 'hipchat' | |
4 | - Fields += [ | |
3 | + LABEL = 'hipchat' | |
4 | + FIELDS += [ | |
5 | 5 | [:service, { |
6 | - :placeholder => "'v1' (admin API token) or 'v2' (account API token)", | |
7 | - :label => "HipChat API version" | |
6 | + placeholder: "'v1' (admin API token) or 'v2' (account API token)", | |
7 | + label: "HipChat API version" | |
8 | 8 | }], |
9 | 9 | [:service_url, { |
10 | - :placeholder => "Optional, leave empty for HipChat.com", | |
11 | - :label => "Custom HipChat Server URL" | |
10 | + placeholder: "Optional, leave empty for HipChat.com", | |
11 | + label: "Custom HipChat Server URL" | |
12 | 12 | }], |
13 | 13 | [:api_token, { |
14 | - :placeholder => "API token", | |
15 | - :label => "API token" | |
14 | + placeholder: "API token", | |
15 | + label: "API token" | |
16 | 16 | }], |
17 | 17 | [:room_id, { |
18 | - :placeholder => "Room name", | |
19 | - :label => "Room name" | |
20 | - }], | |
18 | + placeholder: "Room name", | |
19 | + label: "Room name" | |
20 | + }] | |
21 | 21 | ] |
22 | - Mandatory_fields = [:service, :api_token, :room_id] | |
23 | - API_versions = %w(v1 v2) | |
22 | + MANDATORY_FIELDS = [:service, :api_token, :room_id] | |
23 | + API_VERSIONS = %w(v1 v2) | |
24 | 24 | |
25 | 25 | def check_params |
26 | - Fields.each do |field, hash| | |
27 | - if Mandatory_fields.include?(field) && self[field].blank? | |
26 | + FIELDS.each do |field, hash| | |
27 | + if MANDATORY_FIELDS.include?(field) && self[field].blank? | |
28 | 28 | errors.add field, "You must specify #{hash[:label]}" |
29 | 29 | end |
30 | 30 | end |
31 | - unless API_versions.include?(self[:service]) | |
32 | - errors.add :service, "API version must be #{API_versions.join(' or ')}" | |
31 | + unless API_VERSIONS.include?(self[:service]) | |
32 | + errors.add :service, "API version must be #{API_VERSIONS.join(' or ')}" | |
33 | 33 | end |
34 | 34 | end |
35 | 35 | |
... | ... | @@ -45,11 +45,11 @@ if defined? HipChat |
45 | 45 | Times occurred: #{problem.notices_count} |
46 | 46 | MSG |
47 | 47 | |
48 | - options = { :api_version => self[:service] } | |
48 | + options = { api_version: self[:service] } | |
49 | 49 | options[:server_url] = self[:service_url] if service_url.present? |
50 | 50 | |
51 | 51 | client = HipChat::Client.new(api_token, options) |
52 | - client[room_id].send('Errbit', message, :color => 'red', :notify => true) | |
52 | + client[room_id].send('Errbit', message, color: 'red', notify: true) | |
53 | 53 | end |
54 | 54 | end |
55 | 55 | end | ... | ... |
app/models/notification_services/hoiio_service.rb
1 | 1 | class NotificationServices::HoiioService < NotificationService |
2 | - Label = "hoiio" | |
3 | - Fields += [ | |
2 | + LABEL = "hoiio" | |
3 | + FIELDS += [ | |
4 | 4 | [:api_token, { |
5 | - :placeholder => "App ID", | |
6 | - :label => "App ID" | |
5 | + placeholder: "App ID", | |
6 | + label: "App ID" | |
7 | 7 | }], |
8 | 8 | [:subdomain, { |
9 | - :placeholder => "Access Token", | |
10 | - :label => "Access Token" | |
9 | + placeholder: "Access Token", | |
10 | + label: "Access Token" | |
11 | 11 | }], |
12 | 12 | [:room_id, { |
13 | - :placeholder => "+6511111111, +6511111111", | |
14 | - :label => "Recipient's phone numbers seperated by comma. Phone numbers should start with a \"+\" and country code." | |
13 | + placeholder: "+6511111111, +6511111111", | |
14 | + label: "Recipient's phone numbers seperated by comma. Phone numbers should start with a \"+\" and country code." | |
15 | 15 | }] |
16 | 16 | ] |
17 | 17 | |
18 | 18 | def check_params |
19 | - if Fields.detect {|f| self[f[0]].blank? } | |
19 | + if FIELDS.detect { |f| self[f[0]].blank? } | |
20 | 20 | errors.add :base, 'You must specify your App ID, Access Token and Recipient\'s phone numbers' |
21 | 21 | end |
22 | 22 | end |
... | ... | @@ -35,7 +35,7 @@ class NotificationServices::HoiioService < NotificationService |
35 | 35 | |
36 | 36 | # send sms |
37 | 37 | room_id.split(',').each do |number| |
38 | - sms.send :dest => number, :msg => "#{Errbit::Config.protocol}://#{Errbit::Config.host}/apps/#{problem.app.id} #{notification_description problem}" | |
38 | + sms.send dest: number, msg: "#{Errbit::Config.protocol}://#{Errbit::Config.host}/apps/#{problem.app.id} #{notification_description problem}" | |
39 | 39 | end |
40 | 40 | end |
41 | 41 | end | ... | ... |
app/models/notification_services/hubot_service.rb
1 | 1 | class NotificationServices::HubotService < NotificationService |
2 | - Label = "hubot" | |
3 | - Fields += [ | |
2 | + LABEL = "hubot" | |
3 | + FIELDS += [ | |
4 | 4 | [:api_token, { |
5 | - :placeholder => 'http://hubot.example.org:8080/hubot/say', | |
6 | - :label => 'Hubot URL' | |
5 | + placeholder: 'http://hubot.example.org:8080/hubot/say', | |
6 | + label: 'Hubot URL' | |
7 | 7 | }], |
8 | 8 | [:room_id, { |
9 | - :placeholder => '#dev', | |
10 | - :label => 'Room where Hubot should notify' | |
9 | + placeholder: '#dev', | |
10 | + label: 'Room where Hubot should notify' | |
11 | 11 | }] |
12 | 12 | ] |
13 | 13 | |
14 | 14 | def check_params |
15 | - if Fields.detect {|f| self[f[0]].blank? } | |
15 | + if FIELDS.detect { |f| self[f[0]].blank? } | |
16 | 16 | errors.add :base, 'You must specify the URL of your hubot' |
17 | 17 | end |
18 | 18 | end |
... | ... | @@ -26,6 +26,6 @@ class NotificationServices::HubotService < NotificationService |
26 | 26 | end |
27 | 27 | |
28 | 28 | def create_notification(problem) |
29 | - HTTParty.post(url, :body => {:message => message_for_hubot(problem), :room => room_id}) | |
29 | + HTTParty.post(url, body: { message: message_for_hubot(problem), room: room_id }) | |
30 | 30 | end |
31 | 31 | end | ... | ... |
app/models/notification_services/pushover_service.rb
1 | 1 | class NotificationServices::PushoverService < NotificationService |
2 | - Label = "pushover" | |
3 | - Fields += [ | |
2 | + LABEL = "pushover" | |
3 | + FIELDS += [ | |
4 | 4 | [:api_token, { |
5 | - :placeholder => "User Key", | |
6 | - :label => "User Key" | |
5 | + placeholder: "User Key", | |
6 | + label: "User Key" | |
7 | 7 | }], |
8 | 8 | [:subdomain, { |
9 | - :placeholder => "Application API Token", | |
10 | - :label => "Application API Token" | |
9 | + placeholder: "Application API Token", | |
10 | + label: "Application API Token" | |
11 | 11 | }] |
12 | 12 | ] |
13 | 13 | |
14 | 14 | def check_params |
15 | - if Fields.detect {|f| self[f[0]].blank? } | |
15 | + if FIELDS.detect { |f| self[f[0]].blank? } | |
16 | 16 | errors.add :base, 'You must specify your User Key and Application API Token.' |
17 | 17 | end |
18 | 18 | end |
... | ... | @@ -26,6 +26,6 @@ class NotificationServices::PushoverService < NotificationService |
26 | 26 | notification = Rushover::Client.new(subdomain) |
27 | 27 | |
28 | 28 | # send push notification to pushover |
29 | - notification.notify(api_token, "#{notification_description problem}", :priority => 1, :title => "Errbit Notification", :url => "#{Errbit::Config.protocol}://#{Errbit::Config.host}/apps/#{problem.app.id}", :url_title => "Link to error") | |
29 | + notification.notify(api_token, "#{notification_description problem}", priority: 1, title: "Errbit Notification", url: "#{Errbit::Config.protocol}://#{Errbit::Config.host}/apps/#{problem.app.id}", url_title: "Link to error") | |
30 | 30 | end |
31 | 31 | end | ... | ... |
app/models/notification_services/slack_service.rb
1 | 1 | class NotificationServices::SlackService < NotificationService |
2 | - Label = "slack" | |
3 | - Fields += [ | |
2 | + LABEL = "slack" | |
3 | + FIELDS += [ | |
4 | 4 | [:service_url, { |
5 | - :placeholder => 'Slack Hook URL (https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXX)', | |
6 | - :label => 'Hook URL' | |
5 | + placeholder: 'Slack Hook URL (https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXX)', | |
6 | + label: 'Hook URL' | |
7 | 7 | }] |
8 | 8 | ] |
9 | 9 | |
10 | 10 | def check_params |
11 | - if Fields.detect {|f| self[f[0]].blank? } | |
11 | + if FIELDS.detect { |f| self[f[0]].blank? } | |
12 | 12 | errors.add :base, "You must specify your Slack Hook url." |
13 | 13 | end |
14 | 14 | end |
... | ... | @@ -19,41 +19,41 @@ class NotificationServices::SlackService < NotificationService |
19 | 19 | |
20 | 20 | def post_payload(problem) |
21 | 21 | { |
22 | - :attachments => [ | |
22 | + attachments: [ | |
23 | 23 | { |
24 | - :fallback => message_for_slack(problem), | |
25 | - :pretext => "<#{problem_url(problem)}|Errbit - #{problem.app.name}: #{problem.error_class}>", | |
26 | - :color => "#D00000", | |
27 | - :fields => [ | |
24 | + fallback: message_for_slack(problem), | |
25 | + pretext: "<#{problem_url(problem)}|Errbit - #{problem.app.name}: #{problem.error_class}>", | |
26 | + color: "#D00000", | |
27 | + fields: [ | |
28 | 28 | { |
29 | - :title => "Environment", | |
30 | - :value => problem.environment, | |
31 | - :short => false | |
29 | + title: "Environment", | |
30 | + value: problem.environment, | |
31 | + short: false | |
32 | 32 | }, |
33 | 33 | { |
34 | - :title => "Location", | |
35 | - :value => problem.where, | |
36 | - :short => false | |
34 | + title: "Location", | |
35 | + value: problem.where, | |
36 | + short: false | |
37 | 37 | }, |
38 | 38 | { |
39 | - :title => "Message", | |
40 | - :value => problem.message.to_s, | |
41 | - :short => false | |
39 | + title: "Message", | |
40 | + value: problem.message.to_s, | |
41 | + short: false | |
42 | 42 | }, |
43 | 43 | { |
44 | - :title => "First Noticed", | |
45 | - :value => problem.first_notice_at, | |
46 | - :short => false | |
44 | + title: "First Noticed", | |
45 | + value: problem.first_notice_at, | |
46 | + short: false | |
47 | 47 | }, |
48 | 48 | { |
49 | - :title => "Last Noticed", | |
50 | - :value => problem.last_notice_at, | |
51 | - :short => false | |
49 | + title: "Last Noticed", | |
50 | + value: problem.last_notice_at, | |
51 | + short: false | |
52 | 52 | }, |
53 | 53 | { |
54 | - :title => "Times Occurred", | |
55 | - :value => problem.notices_count, | |
56 | - :short => false | |
54 | + title: "Times Occurred", | |
55 | + value: problem.notices_count, | |
56 | + short: false | |
57 | 57 | } |
58 | 58 | ] |
59 | 59 | } |
... | ... | @@ -62,7 +62,13 @@ class NotificationServices::SlackService < NotificationService |
62 | 62 | end |
63 | 63 | |
64 | 64 | def create_notification(problem) |
65 | - HTTParty.post(service_url, :body => post_payload(problem), :headers => { 'Content-Type' => 'application/json' }) | |
65 | + HTTParty.post( | |
66 | + service_url, | |
67 | + body: post_payload(problem), | |
68 | + headers: { | |
69 | + 'Content-Type' => 'application/json' | |
70 | + } | |
71 | + ) | |
66 | 72 | end |
67 | 73 | |
68 | 74 | def configured? | ... | ... |
app/models/notification_services/webhook_service.rb
1 | 1 | class NotificationServices::WebhookService < NotificationService |
2 | - Label = "webhook" | |
3 | - Fields = [ | |
2 | + LABEL = "webhook" | |
3 | + FIELDS = [ | |
4 | 4 | [:api_token, { |
5 | - :placeholder => 'URL to receive a POST request when an error occurs', | |
6 | - :label => 'URL' | |
5 | + placeholder: 'URL to receive a POST request when an error occurs', | |
6 | + label: 'URL' | |
7 | 7 | }] |
8 | 8 | ] |
9 | 9 | |
10 | 10 | def check_params |
11 | - if Fields.detect {|f| self[f[0]].blank? } | |
11 | + if FIELDS.detect { |f| self[f[0]].blank? } | |
12 | 12 | errors.add :base, 'You must specify the URL' |
13 | 13 | end |
14 | 14 | end |
15 | 15 | |
16 | 16 | def message_for_webhook(problem) |
17 | - {:problem => {:url => problem_url(problem)}.merge(problem.as_json).to_json} | |
17 | + { | |
18 | + problem: { | |
19 | + url: problem_url(problem) | |
20 | + }.merge(problem.as_json).to_json | |
21 | + } | |
18 | 22 | end |
19 | 23 | |
20 | 24 | def create_notification(problem) |
21 | - HTTParty.post(api_token, :body => message_for_webhook(problem)) | |
25 | + HTTParty.post(api_token, body: message_for_webhook(problem)) | |
22 | 26 | end |
23 | 27 | end | ... | ... |
app/models/problem.rb
... | ... | @@ -7,61 +7,61 @@ class Problem |
7 | 7 | include Mongoid::Timestamps |
8 | 8 | |
9 | 9 | CACHED_NOTICE_ATTRIBUTES = { |
10 | - messages: :message, | |
11 | - hosts: :host, | |
10 | + messages: :message, | |
11 | + hosts: :host, | |
12 | 12 | user_agents: :user_agent_string |
13 | 13 | }.freeze |
14 | 14 | |
15 | - field :last_notice_at, :type => ActiveSupport::TimeWithZone, :default => Proc.new { Time.zone.now } | |
16 | - field :first_notice_at, :type => ActiveSupport::TimeWithZone, :default => Proc.new { Time.zone.now } | |
17 | - field :last_deploy_at, :type => Time | |
18 | - field :resolved, :type => Boolean, :default => false | |
19 | - field :resolved_at, :type => Time | |
20 | - field :issue_link, :type => String | |
21 | - field :issue_type, :type => String | |
15 | + field :last_notice_at, type: ActiveSupport::TimeWithZone, default: proc { Time.zone.now } | |
16 | + field :first_notice_at, type: ActiveSupport::TimeWithZone, default: proc { Time.zone.now } | |
17 | + field :last_deploy_at, type: Time | |
18 | + field :resolved, type: Boolean, default: false | |
19 | + field :resolved_at, type: Time | |
20 | + field :issue_link, type: String | |
21 | + field :issue_type, type: String | |
22 | 22 | |
23 | 23 | # Cached fields |
24 | - field :app_name, :type => String | |
25 | - field :notices_count, :type => Integer, :default => 0 | |
24 | + field :app_name, type: String | |
25 | + field :notices_count, type: Integer, default: 0 | |
26 | 26 | field :message |
27 | 27 | field :environment |
28 | 28 | field :error_class |
29 | 29 | field :where |
30 | - field :user_agents, :type => Hash, :default => {} | |
31 | - field :messages, :type => Hash, :default => {} | |
32 | - field :hosts, :type => Hash, :default => {} | |
33 | - field :comments_count, :type => Integer, :default => 0 | |
34 | - | |
35 | - index :app_id => 1 | |
36 | - index :app_name => 1 | |
37 | - index :message => 1 | |
38 | - index :last_notice_at => 1 | |
39 | - index :first_notice_at => 1 | |
40 | - index :last_deploy_at => 1 | |
41 | - index :resolved_at => 1 | |
42 | - index :notices_count => 1 | |
30 | + field :user_agents, type: Hash, default: {} | |
31 | + field :messages, type: Hash, default: {} | |
32 | + field :hosts, type: Hash, default: {} | |
33 | + field :comments_count, type: Integer, default: 0 | |
34 | + | |
35 | + index app_id: 1 | |
36 | + index app_name: 1 | |
37 | + index message: 1 | |
38 | + index last_notice_at: 1 | |
39 | + index first_notice_at: 1 | |
40 | + index last_deploy_at: 1 | |
41 | + index resolved_at: 1 | |
42 | + index notices_count: 1 | |
43 | 43 | |
44 | 44 | index({ |
45 | 45 | error_class: "text", |
46 | - where: "text", | |
47 | - message: "text", | |
48 | - app_name: "text", | |
46 | + where: "text", | |
47 | + message: "text", | |
48 | + app_name: "text", | |
49 | 49 | environment: "text" |
50 | 50 | }, default_language: "english") |
51 | 51 | |
52 | 52 | belongs_to :app |
53 | - has_many :errs, :inverse_of => :problem, :dependent => :destroy | |
54 | - has_many :comments, :inverse_of => :err, :dependent => :destroy | |
53 | + has_many :errs, inverse_of: :problem, dependent: :destroy | |
54 | + has_many :comments, inverse_of: :err, dependent: :destroy | |
55 | 55 | |
56 | 56 | validates_presence_of :environment |
57 | 57 | |
58 | 58 | before_create :cache_app_attributes |
59 | 59 | before_save :truncate_message |
60 | 60 | |
61 | - scope :resolved, ->{ where(:resolved => true) } | |
62 | - scope :unresolved, ->{ where(:resolved => false) } | |
63 | - scope :ordered, ->{ order_by(:last_notice_at.desc) } | |
64 | - scope :for_apps, lambda {|apps| where(:app_id.in => apps.all.map(&:id))} | |
61 | + scope :resolved, -> { where(resolved: true) } | |
62 | + scope :unresolved, -> { where(resolved: false) } | |
63 | + scope :ordered, -> { order_by(:last_notice_at.desc) } | |
64 | + scope :for_apps, ->(apps) { where(:app_id.in => apps.all.map(&:id)) } | |
65 | 65 | |
66 | 66 | validates_presence_of :last_notice_at, :first_notice_at |
67 | 67 | |
... | ... | @@ -69,12 +69,12 @@ class Problem |
69 | 69 | if fetch_all |
70 | 70 | all |
71 | 71 | else |
72 | - where(:resolved => false) | |
72 | + where(resolved: false) | |
73 | 73 | end |
74 | 74 | end |
75 | 75 | |
76 | 76 | def self.in_env(env) |
77 | - env.present? ? where(:environment => env) : scoped | |
77 | + env.present? ? where(environment: env) : scoped | |
78 | 78 | end |
79 | 79 | |
80 | 80 | def self.cache_notice(id, notice) |
... | ... | @@ -85,22 +85,22 @@ class Problem |
85 | 85 | |
86 | 86 | Problem.where('_id' => id).find_one_and_update({ |
87 | 87 | '$set' => { |
88 | - 'environment' => notice.environment_name, | |
89 | - 'error_class' => notice.error_class, | |
90 | - 'last_notice_at' => notice.created_at.utc, | |
91 | - 'message' => notice.message, | |
92 | - 'resolved' => false, | |
93 | - 'resolved_at' => nil, | |
94 | - 'where' => notice.where, | |
95 | - "messages.#{message_digest}.value" => notice.message, | |
96 | - "hosts.#{host_digest}.value" => notice.host, | |
97 | - "user_agents.#{user_agent_digest}.value" => notice.user_agent_string, | |
88 | + 'environment' => notice.environment_name, | |
89 | + 'error_class' => notice.error_class, | |
90 | + 'last_notice_at' => notice.created_at.utc, | |
91 | + 'message' => notice.message, | |
92 | + 'resolved' => false, | |
93 | + 'resolved_at' => nil, | |
94 | + 'where' => notice.where, | |
95 | + "messages.#{message_digest}.value" => notice.message, | |
96 | + "hosts.#{host_digest}.value" => notice.host, | |
97 | + "user_agents.#{user_agent_digest}.value" => notice.user_agent_string | |
98 | 98 | }, |
99 | 99 | '$inc' => { |
100 | - 'notices_count' => 1, | |
101 | - "messages.#{message_digest}.count" => 1, | |
102 | - "hosts.#{host_digest}.count" => 1, | |
103 | - "user_agents.#{user_agent_digest}.count" => 1, | |
100 | + 'notices_count' => 1, | |
101 | + "messages.#{message_digest}.count" => 1, | |
102 | + "hosts.#{host_digest}.count" => 1, | |
103 | + "user_agents.#{user_agent_digest}.count" => 1 | |
104 | 104 | } |
105 | 105 | }, return_document: :after) |
106 | 106 | end |
... | ... | @@ -110,12 +110,12 @@ class Problem |
110 | 110 | |
111 | 111 | atomically do |doc| |
112 | 112 | doc.set( |
113 | - 'environment' => last_notice.environment_name, | |
114 | - 'error_class' => last_notice.error_class, | |
113 | + 'environment' => last_notice.environment_name, | |
114 | + 'error_class' => last_notice.error_class, | |
115 | 115 | 'last_notice_at' => last_notice.created_at, |
116 | - 'message' => last_notice.message, | |
117 | - 'where' => last_notice.where, | |
118 | - 'notices_count' => notices_count.to_i > 1 ? notices_count - 1 : 0 | |
116 | + 'message' => last_notice.message, | |
117 | + 'where' => last_notice.where, | |
118 | + 'notices_count' => notices_count.to_i > 1 ? notices_count - 1 : 0 | |
119 | 119 | ) |
120 | 120 | |
121 | 121 | CACHED_NOTICE_ATTRIBUTES.each do |k, v| |
... | ... | @@ -139,7 +139,7 @@ class Problem |
139 | 139 | # find only notices related to this problem |
140 | 140 | Notice.collection.find.aggregate([ |
141 | 141 | { "$match" => { err_id: { "$in" => err_ids } } }, |
142 | - { "$group" => { _id: "$#{v}", count: {"$sum" => 1} } } | |
142 | + { "$group" => { _id: "$#{v}", count: { "$sum" => 1 } } } | |
143 | 143 | ]).each do |agg| |
144 | 144 | send(k)[Digest::MD5.hexdigest(agg[:_id] || 'N/A')] = { |
145 | 145 | 'value' => agg[:_id] || 'N/A', |
... | ... | @@ -164,8 +164,8 @@ class Problem |
164 | 164 | Rails.application.routes.url_helpers.app_problem_url( |
165 | 165 | app, |
166 | 166 | self, |
167 | - :host => Errbit::Config.host, | |
168 | - :port => Errbit::Config.port | |
167 | + host: Errbit::Config.host, | |
168 | + port: Errbit::Config.port | |
169 | 169 | ) |
170 | 170 | end |
171 | 171 | |
... | ... | @@ -174,11 +174,11 @@ class Problem |
174 | 174 | end |
175 | 175 | |
176 | 176 | def resolve! |
177 | - self.update_attributes!(:resolved => true, :resolved_at => Time.zone.now) | |
177 | + self.update_attributes!(resolved: true, resolved_at: Time.zone.now) | |
178 | 178 | end |
179 | 179 | |
180 | 180 | def unresolve! |
181 | - self.update_attributes!(:resolved => false, :resolved_at => nil) | |
181 | + self.update_attributes!(resolved: false, resolved_at: nil) | |
182 | 182 | end |
183 | 183 | |
184 | 184 | def unresolved? |
... | ... | @@ -194,7 +194,7 @@ class Problem |
194 | 194 | end |
195 | 195 | |
196 | 196 | def unmerge! |
197 | - attrs = {:error_class => error_class, :environment => environment} | |
197 | + attrs = { error_class: error_class, environment: environment } | |
198 | 198 | problem_errs = errs.to_a |
199 | 199 | |
200 | 200 | # associate and return all the problems |
... | ... | @@ -214,12 +214,12 @@ class Problem |
214 | 214 | |
215 | 215 | def self.ordered_by(sort, order) |
216 | 216 | case sort |
217 | - when "app" then order_by(["app_name", order]) | |
218 | - when "message" then order_by(["message", order]) | |
217 | + when "app" then order_by(["app_name", order]) | |
218 | + when "message" then order_by(["message", order]) | |
219 | 219 | when "last_notice_at" then order_by(["last_notice_at", order]) |
220 | 220 | when "last_deploy_at" then order_by(["last_deploy_at", order]) |
221 | - when "count" then order_by(["notices_count", order]) | |
222 | - else raise("\"#{sort}\" is not a recognized sort") | |
221 | + when "count" then order_by(["notices_count", order]) | |
222 | + else fail("\"#{sort}\" is not a recognized sort") | |
223 | 223 | end |
224 | 224 | end |
225 | 225 | |
... | ... | @@ -241,7 +241,7 @@ class Problem |
241 | 241 | end |
242 | 242 | |
243 | 243 | def self.search(value) |
244 | - Problem.where({'$text' => {'$search' => value}}) | |
244 | + Problem.where('$text' => { '$search' => value }) | |
245 | 245 | end |
246 | 246 | |
247 | 247 | private | ... | ... |
app/models/user.rb
... | ... | @@ -9,37 +9,37 @@ class User |
9 | 9 | field :github_login |
10 | 10 | field :github_oauth_token |
11 | 11 | field :name |
12 | - field :admin, :type => Boolean, :default => false | |
13 | - field :per_page, :type => Fixnum, :default => PER_PAGE | |
14 | - field :time_zone, :default => "UTC" | |
12 | + field :admin, type: Boolean, default: false | |
13 | + field :per_page, type: Fixnum, default: PER_PAGE | |
14 | + field :time_zone, default: "UTC" | |
15 | 15 | |
16 | 16 | ## Devise field |
17 | 17 | ### Database Authenticatable |
18 | - field :encrypted_password, :type => String | |
18 | + field :encrypted_password, type: String | |
19 | 19 | |
20 | 20 | ### Recoverable |
21 | - field :reset_password_token, :type => String | |
22 | - field :reset_password_sent_at, :type => Time | |
21 | + field :reset_password_token, type: String | |
22 | + field :reset_password_sent_at, type: Time | |
23 | 23 | |
24 | 24 | ### Rememberable |
25 | - field :remember_created_at, :type => Time | |
25 | + field :remember_created_at, type: Time | |
26 | 26 | |
27 | 27 | ### Trackable |
28 | - field :sign_in_count, :type => Integer | |
29 | - field :current_sign_in_at, :type => Time | |
30 | - field :last_sign_in_at, :type => Time | |
31 | - field :current_sign_in_ip, :type => String | |
32 | - field :last_sign_in_ip, :type => String | |
28 | + field :sign_in_count, type: Integer | |
29 | + field :current_sign_in_at, type: Time | |
30 | + field :last_sign_in_at, type: Time | |
31 | + field :current_sign_in_ip, type: String | |
32 | + field :last_sign_in_ip, type: String | |
33 | 33 | |
34 | 34 | ### Token_authenticatable |
35 | - field :authentication_token, :type => String | |
35 | + field :authentication_token, type: String | |
36 | 36 | |
37 | - index :authentication_token => 1 | |
37 | + index authentication_token: 1 | |
38 | 38 | |
39 | 39 | before_save :ensure_authentication_token |
40 | 40 | |
41 | 41 | validates_presence_of :name |
42 | - validates_uniqueness_of :github_login, :allow_nil => true | |
42 | + validates_uniqueness_of :github_login, allow_nil: true | |
43 | 43 | |
44 | 44 | if Errbit::Config.user_has_username |
45 | 45 | field :username | ... | ... |
app/models/watcher.rb
app/views/apps/_service_notification_fields.html.haml
... | ... | @@ -14,7 +14,7 @@ |
14 | 14 | %div.notification_params.none{:class => (w.object && !(w.object.class < NotificationService)) ? 'chosen' : nil} |
15 | 15 | - NotificationService.subclasses.each do |notification_service| |
16 | 16 | %div.notification_params{:class => (w.object.is_a?(notification_service) ? 'chosen ' : '') << notification_service.label} |
17 | - - notification_service::Fields.each do |field, field_info| | |
17 | + - notification_service::FIELDS.each do |field, field_info| | |
18 | 18 | = w.label field, field_info[:label] || field.to_s.titleize |
19 | 19 | - field_type = field == :password ? :password_field : :text_field |
20 | 20 | - value = field == :notify_at_notices ? w.object.notify_at_notices.join(", ") : w.object.send(field) | ... | ... |
config/application.rb
config/deploy.example.rb
... | ... | @@ -46,7 +46,7 @@ namespace :errbit do |
46 | 46 | |
47 | 47 | { |
48 | 48 | 'config/newrelic.example.yml' => 'config/newrelic.yml', |
49 | - 'config/unicorn.default.rb' => 'config/unicorn.rb', | |
49 | + 'config/unicorn.default.rb' => 'config/unicorn.rb' | |
50 | 50 | }.each do |src, target| |
51 | 51 | unless test("[ -f #{shared_path}/#{target} ]") |
52 | 52 | upload! src, "#{shared_path}/#{target}" | ... | ... |
config/initializers/action_mailer.rb
... | ... | @@ -2,12 +2,12 @@ |
2 | 2 | if Errbit::Config.email_delivery_method == :smtp |
3 | 3 | ActionMailer::Base.delivery_method = :smtp |
4 | 4 | ActionMailer::Base.smtp_settings = { |
5 | - :address => Errbit::Config.smtp_address, | |
6 | - :port => Errbit::Config.smtp_port, | |
7 | - :authentication => Errbit::Config.smtp_authentication, | |
8 | - :user_name => Errbit::Config.smtp_user_name, | |
9 | - :password => Errbit::Config.smtp_password, | |
10 | - :domain => Errbit::Config.smtp_domain, | |
5 | + address: Errbit::Config.smtp_address, | |
6 | + port: Errbit::Config.smtp_port, | |
7 | + authentication: Errbit::Config.smtp_authentication, | |
8 | + user_name: Errbit::Config.smtp_user_name, | |
9 | + password: Errbit::Config.smtp_password, | |
10 | + domain: Errbit::Config.smtp_domain | |
11 | 11 | } |
12 | 12 | end |
13 | 13 | |
... | ... | @@ -23,8 +23,8 @@ end |
23 | 23 | # Set config specific values |
24 | 24 | (ActionMailer::Base.default_url_options ||= {}).tap do |default| |
25 | 25 | options_from_config = { |
26 | - host: Errbit::Config.host, | |
27 | - port: Errbit::Config.port, | |
26 | + host: Errbit::Config.host, | |
27 | + port: Errbit::Config.port, | |
28 | 28 | protocol: Errbit::Config.protocol |
29 | 29 | }.select { |_k, v| v } |
30 | 30 | ... | ... |
config/initializers/cve-2013-0156.rb
config/initializers/devise.rb
... | ... | @@ -29,7 +29,7 @@ Devise.setup do |config| |
29 | 29 | # session. If you need permissions, you should implement that in a before filter. |
30 | 30 | # You can also supply a hash where the value is a boolean determining whether |
31 | 31 | # or not authentication should be aborted when the value is not present. |
32 | - config.authentication_keys = [ Errbit::Config.user_has_username ? :username : :email ] | |
32 | + config.authentication_keys = [Errbit::Config.user_has_username ? :username : :email] | |
33 | 33 | |
34 | 34 | # Configure parameters from the request object used for authentication. Each entry |
35 | 35 | # given should be a request method and it will automatically be passed to the |
... | ... | @@ -41,12 +41,12 @@ Devise.setup do |config| |
41 | 41 | # Configure which authentication keys should be case-insensitive. |
42 | 42 | # These keys will be downcased upon creating or modifying a user and when used |
43 | 43 | # to authenticate or find a user. Default is :email. |
44 | - config.case_insensitive_keys = [ Errbit::Config.user_has_username ? :username : :email ] | |
44 | + config.case_insensitive_keys = [Errbit::Config.user_has_username ? :username : :email] | |
45 | 45 | |
46 | 46 | # Configure which authentication keys should have whitespace stripped. |
47 | 47 | # These keys will have whitespace before and after removed upon creating or |
48 | 48 | # modifying a user and when used to authenticate or find a user. Default is :email. |
49 | - config.strip_whitespace_keys = [ Errbit::Config.user_has_username ? :username : :email ] | |
49 | + config.strip_whitespace_keys = [Errbit::Config.user_has_username ? :username : :email] | |
50 | 50 | |
51 | 51 | # Tell if authentication through request.params is enabled. True by default. |
52 | 52 | # It can be set to an array that will enable params authentication only for the |
... | ... | @@ -237,12 +237,12 @@ Devise.setup do |config| |
237 | 237 | |
238 | 238 | if Errbit::Config.github_authentication || Rails.env.test? |
239 | 239 | github_options = { |
240 | - :scope => Errbit::Config.github_access_scope.join(','), | |
241 | - :skip_info => true, | |
242 | - :client_options => { | |
243 | - :site => Errbit::Config.github_api_url, | |
244 | - :authorize_url => "#{Errbit::Config.github_url}/login/oauth/authorize", | |
245 | - :token_url => "#{Errbit::Config.github_url}/login/oauth/access_token" | |
240 | + scope: Errbit::Config.github_access_scope.join(','), | |
241 | + skip_info: true, | |
242 | + client_options: { | |
243 | + site: Errbit::Config.github_api_url, | |
244 | + authorize_url: "#{Errbit::Config.github_url}/login/oauth/authorize", | |
245 | + token_url: "#{Errbit::Config.github_url}/login/oauth/access_token" | |
246 | 246 | } |
247 | 247 | } |
248 | 248 | ... | ... |
config/initializers/ssl_enforcer.rb
1 | 1 | # Enforce SSL connections, if configured |
2 | 2 | if Errbit::Config.enforce_ssl |
3 | 3 | require 'rack/ssl-enforcer' |
4 | - ActionMailer::Base.default_url_options.merge!(:protocol => 'https://') | |
4 | + ActionMailer::Base.default_url_options.merge!(protocol: 'https://') | |
5 | 5 | Rails.application.configure do |
6 | - config.middleware.use Rack::SslEnforcer, :except => /^\/deploys/ | |
6 | + config.middleware.use Rack::SslEnforcer, except: %r{^/deploys} | |
7 | 7 | end |
8 | 8 | end | ... | ... |
config/load.rb
... | ... | @@ -7,7 +7,7 @@ require_relative '../lib/configurator' |
7 | 7 | # |
8 | 8 | # We use the first non-nil environment variable in the list. If the last array |
9 | 9 | # element is a proc, it runs at the end, overriding the config value |
10 | -Errbit::Config = Configurator.run({ | |
10 | +Errbit::Config = Configurator.run( | |
11 | 11 | host: ['ERRBIT_HOST'], |
12 | 12 | protocol: ['ERRBIT_PROTOCOL'], |
13 | 13 | port: ['ERRBIT_PORT'], |
... | ... | @@ -29,8 +29,8 @@ Errbit::Config = Configurator.run({ |
29 | 29 | mongo_url: %w(MONGOLAB_URI MONGOHQ_URL MONGODB_URL MONGO_URL), |
30 | 30 | |
31 | 31 | # github |
32 | - github_url: ['GITHUB_URL', ->(values) { | |
33 | - values[:github_url].gsub(/\/*\z/, '') | |
32 | + github_url: ['GITHUB_URL', lambda { |values| | |
33 | + values[:github_url].gsub(%r{/*\z}, '') | |
34 | 34 | }], |
35 | 35 | github_authentication: ['GITHUB_AUTHENTICATION'], |
36 | 36 | github_client_id: ['GITHUB_CLIENT_ID'], |
... | ... | @@ -40,7 +40,7 @@ Errbit::Config = Configurator.run({ |
40 | 40 | github_api_url: ['GITHUB_API_URL'], |
41 | 41 | github_site_title: ['GITHUB_SITE_TITLE'], |
42 | 42 | |
43 | - email_delivery_method: ['EMAIL_DELIVERY_METHOD', -> (values) { | |
43 | + email_delivery_method: ['EMAIL_DELIVERY_METHOD', lambda { |values| | |
44 | 44 | values[:email_delivery_method] && values[:email_delivery_method].to_sym |
45 | 45 | }], |
46 | 46 | |
... | ... | @@ -50,7 +50,7 @@ Errbit::Config = Configurator.run({ |
50 | 50 | smtp_authentication: ['SMTP_AUTHENTICATION'], |
51 | 51 | smtp_user_name: %w(SMTP_USERNAME SENDGRID_USERNAME), |
52 | 52 | smtp_password: %w(SMTP_PASSWORD SENDGRID_PASSWORD), |
53 | - smtp_domain: ['SMTP_DOMAIN', 'SENDGRID_DOMAIN', ->(values) { | |
53 | + smtp_domain: ['SMTP_DOMAIN', 'SENDGRID_DOMAIN', lambda { |values| | |
54 | 54 | values[:smtp_domain] || |
55 | 55 | (values[:email_from] && values[:email_from].split('@').last) || nil |
56 | 56 | }], |
... | ... | @@ -59,5 +59,5 @@ Errbit::Config = Configurator.run({ |
59 | 59 | sendmail_location: ['SENDMAIL_LOCATION'], |
60 | 60 | sendmail_arguments: ['SENDMAIL_ARGUMENTS'], |
61 | 61 | |
62 | - devise_modules: ['DEVISE_MODULES'], | |
63 | -}) | |
62 | + devise_modules: ['DEVISE_MODULES'] | |
63 | +) | ... | ... |
config/mongo.rb
... | ... | @@ -10,7 +10,7 @@ Mongoid.configure do |config| |
10 | 10 | Errbit::Config.mongo_url |
11 | 11 | end |
12 | 12 | |
13 | - config.load_configuration({ | |
13 | + config.load_configuration( | |
14 | 14 | clients: { |
15 | 15 | default: { |
16 | 16 | uri: uri |
... | ... | @@ -19,5 +19,5 @@ Mongoid.configure do |config| |
19 | 19 | options: { |
20 | 20 | use_activesupport_time_zone: true |
21 | 21 | } |
22 | - }) | |
22 | + ) | |
23 | 23 | end | ... | ... |
config/routes.rb
1 | 1 | Rails.application.routes.draw do |
2 | - devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } | |
2 | + devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks" } | |
3 | 3 | |
4 | 4 | # Hoptoad Notifier Routes |
5 | 5 | match '/notifier_api/v2/notices' => 'notices#create', via: [:get, :post] |
6 | 6 | get '/locate/:id' => 'notices#locate', :as => :locate |
7 | 7 | post '/deploys.txt' => 'deploys#create' |
8 | 8 | |
9 | - resources :notices, :only => [:show] | |
10 | - resources :deploys, :only => [:show] | |
9 | + resources :notices, only: [:show] | |
10 | + resources :deploys, only: [:show] | |
11 | 11 | resources :users do |
12 | 12 | member do |
13 | 13 | delete :unlink_github |
14 | 14 | end |
15 | 15 | end |
16 | 16 | |
17 | - resources :site_config, :only => [:index] do | |
17 | + resources :site_config, only: [:index] do | |
18 | 18 | collection do |
19 | 19 | put :update |
20 | 20 | end |
21 | 21 | end |
22 | 22 | |
23 | - resources :problems, :only => [:index] do | |
23 | + resources :problems, only: [:index] do | |
24 | 24 | collection do |
25 | 25 | post :destroy_several |
26 | 26 | post :resolve_several |
... | ... | @@ -34,7 +34,7 @@ Rails.application.routes.draw do |
34 | 34 | resources :apps do |
35 | 35 | resources :problems do |
36 | 36 | resources :notices |
37 | - resources :comments, :only => [:create, :destroy] | |
37 | + resources :comments, only: [:create, :destroy] | |
38 | 38 | |
39 | 39 | collection do |
40 | 40 | post :destroy_all |
... | ... | @@ -47,8 +47,8 @@ Rails.application.routes.draw do |
47 | 47 | delete :unlink_issue |
48 | 48 | end |
49 | 49 | end |
50 | - resources :deploys, :only => [:index] | |
51 | - resources :watchers, :only => [:destroy, :update] | |
50 | + resources :deploys, only: [:index] | |
51 | + resources :watchers, only: [:destroy, :update] | |
52 | 52 | member do |
53 | 53 | post :regenerate_api_key |
54 | 54 | end |
... | ... | @@ -56,9 +56,9 @@ Rails.application.routes.draw do |
56 | 56 | |
57 | 57 | namespace :api do |
58 | 58 | namespace :v1 do |
59 | - resources :problems, :only => [:index, :show], :defaults => { :format => 'json' } | |
60 | - resources :notices, :only => [:index], :defaults => { :format => 'json' } | |
61 | - resources :stats, :only => [], :defaults => { :format => 'json' } do | |
59 | + resources :problems, only: [:index, :show], defaults: { format: 'json' } | |
60 | + resources :notices, only: [:index], defaults: { format: 'json' } | |
61 | + resources :stats, only: [], defaults: { format: 'json' } do | |
62 | 62 | collection do |
63 | 63 | get :app |
64 | 64 | end |
... | ... | @@ -69,5 +69,5 @@ Rails.application.routes.draw do |
69 | 69 | match '/api/v3/projects/:project_id/create-notice' => 'api/v3/notices#create', via: [:post] |
70 | 70 | match '/api/v3/projects/:project_id/notices' => 'api/v3/notices#create', via: [:post] |
71 | 71 | |
72 | - root :to => 'apps#index' | |
72 | + root to: 'apps#index' | |
73 | 73 | end | ... | ... |
db/migrate/201510290041_extract_issue_tracker.rb
1 | 1 | class ExtractIssueTracker < Mongoid::Migration |
2 | 2 | TRACKER_MAPPING = { |
3 | - 'ErrbitTracPlugin::IssueTracker' => 'trac', | |
3 | + 'ErrbitTracPlugin::IssueTracker' => 'trac', | |
4 | 4 | 'IssueTrackers::BitbucketIssuesTracker' => 'bitbucket', |
5 | - 'IssueTrackers::FogbugzTracker' => 'fogbugz', | |
6 | - 'IssueTrackers::GithubIssuesTracker' => 'github', | |
7 | - 'IssueTrackers::GitlabTracker' => 'gitlab', | |
8 | - 'IssueTrackers::JiraTracker' => 'jira', | |
9 | - 'IssueTrackers::LighthouseTracker' => 'lighthouse', | |
10 | - 'IssueTrackers::PivotalLabsTracker' => 'pivotal', | |
11 | - 'IssueTrackers::RedmineTracker' => 'redmine', | |
12 | - 'IssueTrackers::UnfuddleTracker' => 'unfuddle' | |
5 | + 'IssueTrackers::FogbugzTracker' => 'fogbugz', | |
6 | + 'IssueTrackers::GithubIssuesTracker' => 'github', | |
7 | + 'IssueTrackers::GitlabTracker' => 'gitlab', | |
8 | + 'IssueTrackers::JiraTracker' => 'jira', | |
9 | + 'IssueTrackers::LighthouseTracker' => 'lighthouse', | |
10 | + 'IssueTrackers::PivotalLabsTracker' => 'pivotal', | |
11 | + 'IssueTrackers::RedmineTracker' => 'redmine', | |
12 | + 'IssueTrackers::UnfuddleTracker' => 'unfuddle' | |
13 | 13 | } |
14 | 14 | |
15 | 15 | def self.up |
... | ... | @@ -29,14 +29,12 @@ class ExtractIssueTracker < Mongoid::Migration |
29 | 29 | |
30 | 30 | tracker = { |
31 | 31 | 'type_tracker' => TRACKER_MAPPING[type], |
32 | - 'options' => options, | |
33 | - 'updated_at' => updated_at, | |
34 | - 'created_at' => created_at | |
32 | + 'options' => options, | |
33 | + 'updated_at' => updated_at, | |
34 | + 'created_at' => created_at | |
35 | 35 | } |
36 | 36 | |
37 | - App.where({ _id: app.id }).update({ | |
38 | - "$set" => { :issue_tracker => tracker } | |
39 | - }) | |
37 | + App.where(_id: app.id).update("$set" => { issue_tracker: tracker }) | |
40 | 38 | end |
41 | 39 | end |
42 | 40 | ... | ... |
db/seeds.rb
... | ... | @@ -15,7 +15,7 @@ puts "-- password: #{admin_pass}" |
15 | 15 | puts "" |
16 | 16 | puts "Be sure to note down these credentials now!" |
17 | 17 | |
18 | -user = User.find_or_initialize_by(:email => admin_email) | |
18 | +user = User.find_or_initialize_by(email: admin_email) | |
19 | 19 | |
20 | 20 | user.name = 'Errbit Admin' |
21 | 21 | user.password = admin_pass | ... | ... |
lib/airbrake_api/v3/notice_parser.rb
... | ... | @@ -11,14 +11,14 @@ module AirbrakeApi |
11 | 11 | |
12 | 12 | def report |
13 | 13 | attributes = { |
14 | - error_class: error['type'], | |
15 | - message: error['message'], | |
16 | - backtrace: backtrace, | |
17 | - request: request, | |
14 | + error_class: error['type'], | |
15 | + message: error['message'], | |
16 | + backtrace: backtrace, | |
17 | + request: request, | |
18 | 18 | server_environment: server_environment, |
19 | - api_key: params['key'].present? ? params['key'] : params['project_id'], | |
20 | - notifier: params['notifier'], | |
21 | - user_attributes: user_attributes | |
19 | + api_key: params['key'].present? ? params['key'] : params['project_id'], | |
20 | + notifier: params['notifier'], | |
21 | + user_attributes: user_attributes | |
22 | 22 | } |
23 | 23 | |
24 | 24 | ErrorReport.new(attributes) |
... | ... | @@ -27,7 +27,7 @@ module AirbrakeApi |
27 | 27 | private |
28 | 28 | |
29 | 29 | def error |
30 | - raise AirbrakeApi::ParamsError unless params.key?('errors') && params['errors'].any? | |
30 | + fail AirbrakeApi::ParamsError unless params.key?('errors') && params['errors'].any? | |
31 | 31 | @error ||= params['errors'].first |
32 | 32 | end |
33 | 33 | |
... | ... | @@ -35,7 +35,7 @@ module AirbrakeApi |
35 | 35 | (error['backtrace'] || []).map do |backtrace_line| |
36 | 36 | { |
37 | 37 | method: backtrace_line['function'], |
38 | - file: backtrace_line['file'], | |
38 | + file: backtrace_line['file'], | |
39 | 39 | number: backtrace_line['line'], |
40 | 40 | column: backtrace_line['column'] |
41 | 41 | } |
... | ... | @@ -45,9 +45,9 @@ module AirbrakeApi |
45 | 45 | def server_environment |
46 | 46 | { |
47 | 47 | 'environment-name' => context['environment'], |
48 | - 'hostname' => hostname, | |
49 | - 'project-root' => context['rootDirectory'], | |
50 | - 'app-version' => context['version'] | |
48 | + 'hostname' => hostname, | |
49 | + 'project-root' => context['rootDirectory'], | |
50 | + 'app-version' => context['version'] | |
51 | 51 | } |
52 | 52 | end |
53 | 53 | |
... | ... | @@ -57,12 +57,12 @@ module AirbrakeApi |
57 | 57 | ) |
58 | 58 | |
59 | 59 | { |
60 | - 'cgi-data' => environment, | |
61 | - 'session' => params['session'], | |
62 | - 'params' => params['params'], | |
63 | - 'url' => url, | |
60 | + 'cgi-data' => environment, | |
61 | + 'session' => params['session'], | |
62 | + 'params' => params['params'], | |
63 | + 'url' => url, | |
64 | 64 | 'component' => context['component'], |
65 | - 'action' => context['action'] | |
65 | + 'action' => context['action'] | |
66 | 66 | } |
67 | 67 | end |
68 | 68 | ... | ... |
lib/hoptoad.rb
... | ... | @@ -9,7 +9,7 @@ module Hoptoad |
9 | 9 | |
10 | 10 | class << self |
11 | 11 | def parse_xml!(xml) |
12 | - parsed = ActiveSupport::XmlMini.backend.parse(xml)['notice'] || raise(ApiVersionError) | |
12 | + parsed = ActiveSupport::XmlMini.backend.parse(xml)['notice'] || fail(ApiVersionError) | |
13 | 13 | processor = get_version_processor(parsed['version']) |
14 | 14 | processor.process_notice(parsed) |
15 | 15 | end |
... | ... | @@ -17,7 +17,7 @@ module Hoptoad |
17 | 17 | private def get_version_processor(version) |
18 | 18 | case version |
19 | 19 | when /2\.[01234]/ then Hoptoad::V2 |
20 | - else; raise ApiVersionError | |
20 | + else; fail ApiVersionError | |
21 | 21 | end |
22 | 22 | end |
23 | 23 | end | ... | ... |
lib/hoptoad/v2.rb
... | ... | @@ -12,23 +12,23 @@ module Hoptoad |
12 | 12 | case node |
13 | 13 | when Hash |
14 | 14 | if node.key?('var') && node.key?('key') |
15 | - {normalize_key(node['key']) => rekey(node['var'])} | |
15 | + { normalize_key(node['key']) => rekey(node['var']) } | |
16 | 16 | elsif node.key?('var') |
17 | 17 | rekey(node['var']) |
18 | 18 | elsif node.key?('__content__') && node.key?('key') |
19 | - {normalize_key(node['key']) => rekey(node['__content__'])} | |
19 | + { normalize_key(node['key']) => rekey(node['__content__']) } | |
20 | 20 | elsif node.key?('__content__') |
21 | 21 | rekey(node['__content__']) |
22 | 22 | elsif node.key?('key') |
23 | - {normalize_key(node['key']) => nil} | |
23 | + { normalize_key(node['key']) => nil } | |
24 | 24 | else |
25 | - node.inject({}) {|rekeyed, (key, val)| rekeyed.merge(normalize_key(key) => rekey(val))} | |
25 | + node.inject({}) { |rekeyed, (key, val)| rekeyed.merge(normalize_key(key) => rekey(val)) } | |
26 | 26 | end |
27 | 27 | when Array |
28 | 28 | if node.first.key?('key') |
29 | - node.inject({}) {|rekeyed, keypair| rekeyed.merge(rekey(keypair))} | |
29 | + node.inject({}) { |rekeyed, keypair| rekeyed.merge(rekey(keypair)) } | |
30 | 30 | else |
31 | - node.map {|n| rekey(n)} | |
31 | + node.map { |n| rekey(n) } | |
32 | 32 | end |
33 | 33 | else |
34 | 34 | node |
... | ... | @@ -53,18 +53,18 @@ module Hoptoad |
53 | 53 | |
54 | 54 | def self.for_errbit_api(notice) |
55 | 55 | { |
56 | - :error_class => notice['error']['class'] || notice['error']['key'], | |
57 | - :message => notice['error']['message'], | |
58 | - :backtrace => notice['error']['backtrace']['line'], | |
56 | + error_class: notice['error']['class'] || notice['error']['key'], | |
57 | + message: notice['error']['message'], | |
58 | + backtrace: notice['error']['backtrace']['line'], | |
59 | 59 | |
60 | - :request => notice['request'], | |
61 | - :server_environment => notice['server-environment'], | |
60 | + request: notice['request'], | |
61 | + server_environment: notice['server-environment'], | |
62 | 62 | |
63 | - :api_key => notice['api-key'], | |
64 | - :notifier => notice['notifier'], | |
63 | + api_key: notice['api-key'], | |
64 | + notifier: notice['notifier'], | |
65 | 65 | # 'current-user' from airbrake, 'user-attributes' from airbrake_user_attributes gem |
66 | - :user_attributes => notice['current-user'] || notice['user-attributes'] || {}, | |
67 | - :framework => notice['framework'] | |
66 | + user_attributes: notice['current-user'] || notice['user-attributes'] || {}, | |
67 | + framework: notice['framework'] | |
68 | 68 | } |
69 | 69 | end |
70 | 70 | end | ... | ... |
lib/overrides/hoptoad_notifier/hoptoad_notifier.rb
... | ... | @@ -7,7 +7,7 @@ HoptoadNotifier.module_eval do |
7 | 7 | private def send_notice(notice) |
8 | 8 | # Log the error internally if we are not in a development environment. |
9 | 9 | if configuration.public? |
10 | - app = App.find_or_initialize_by(:name => "Self.Errbit") | |
10 | + app = App.find_or_initialize_by(name: "Self.Errbit") | |
11 | 11 | app.github_repo = "errbit/errbit" |
12 | 12 | app.save! |
13 | 13 | notice.send("api_key=", app.api_key) | ... | ... |
lib/tasks/errbit/database.rake
1 | 1 | namespace :errbit do |
2 | 2 | desc "Updates cached attributes on Problem" |
3 | - task :problem_recache => :environment do | |
3 | + task problem_recache: :environment do | |
4 | 4 | ProblemRecacher.run |
5 | 5 | end |
6 | 6 | |
7 | 7 | desc "Delete resolved errors from the database. (Useful for limited heroku databases)" |
8 | - task :clear_resolved => :environment do | |
8 | + task clear_resolved: :environment do | |
9 | 9 | require 'resolved_problem_clearer' |
10 | 10 | puts "=== Cleared #{ResolvedProblemClearer.new.execute} resolved errors from the database." |
11 | 11 | end |
12 | 12 | |
13 | 13 | desc "Regenerate fingerprints" |
14 | - task :notice_refingerprint => :environment do | |
14 | + task notice_refingerprint: :environment do | |
15 | 15 | NoticeRefingerprinter.run |
16 | 16 | ProblemRecacher.run |
17 | 17 | end |
18 | 18 | |
19 | 19 | desc "Remove notices in batch" |
20 | - task :notices_delete, [ :problem_id ] => [ :environment ] do | |
20 | + task :notices_delete, [:problem_id] => [:environment] do | |
21 | 21 | BATCH_SIZE = 1000 |
22 | 22 | if args[:problem_id] |
23 | 23 | item_count = Problem.find(args[:problem_id]).notices.count | ... | ... |
lib/tasks/errbit/demo.rake
1 | 1 | namespace :errbit do |
2 | 2 | desc "Add a demo app & errors to your database (for testing)" |
3 | - task :demo => :environment do | |
3 | + task demo: :environment do | |
4 | 4 | require 'fabrication' |
5 | 5 | |
6 | - app = Fabricate(:app, :name => "Demo App #{Time.zone.now.strftime('%N')}") | |
6 | + app = Fabricate(:app, name: "Demo App #{Time.zone.now.strftime('%N')}") | |
7 | 7 | |
8 | 8 | # Report a number of errors for the application |
9 | 9 | app.problems.delete_all |
10 | 10 | |
11 | 11 | errors = [{ |
12 | - :error_class => "ArgumentError", | |
13 | - :message => "wrong number of arguments (3 for 0)" | |
12 | + error_class: "ArgumentError", | |
13 | + message: "wrong number of arguments (3 for 0)" | |
14 | 14 | }, { |
15 | - :error_class => "RuntimeError", | |
16 | - :message => "Could not find Red October" | |
15 | + error_class: "RuntimeError", | |
16 | + message: "Could not find Red October" | |
17 | 17 | }, { |
18 | - :error_class => "TypeError", | |
19 | - :message => "can't convert Symbol into Integer" | |
18 | + error_class: "TypeError", | |
19 | + message: "can't convert Symbol into Integer" | |
20 | 20 | }, { |
21 | - :error_class => "ActiveRecord::RecordNotFound", | |
22 | - :message => "could not find a record with the id 5" | |
21 | + error_class: "ActiveRecord::RecordNotFound", | |
22 | + message: "could not find a record with the id 5" | |
23 | 23 | }, { |
24 | - :error_class => "NameError", | |
25 | - :message => "uninitialized constant Tag" | |
24 | + error_class: "NameError", | |
25 | + message: "uninitialized constant Tag" | |
26 | 26 | }, { |
27 | - :error_class => "SyntaxError", | |
28 | - :message => "unexpected tSTRING_BEG, expecting keyword_do or '{' or '('" | |
27 | + error_class: "SyntaxError", | |
28 | + message: "unexpected tSTRING_BEG, expecting keyword_do or '{' or '('" | |
29 | 29 | }] |
30 | 30 | |
31 | 31 | RANDOM_METHODS = ActiveSupport.methods.shuffle[1..8] |
32 | 32 | |
33 | 33 | def random_backtrace |
34 | 34 | backtrace = [] |
35 | - 99.times {|t| backtrace << { | |
36 | - 'number' => t.hash % 1000, | |
37 | - 'file' => "/path/to/file.rb", | |
38 | - 'method' => RANDOM_METHODS.sample.to_s | |
39 | - }} | |
35 | + 99.times {|t| | |
36 | + backtrace << { | |
37 | + 'number' => t.hash % 1000, | |
38 | + 'file' => "/path/to/file.rb", | |
39 | + 'method' => RANDOM_METHODS.sample.to_s | |
40 | + }} | |
40 | 41 | backtrace |
41 | 42 | end |
42 | 43 | |
43 | 44 | errors.each do |error_template| |
44 | 45 | rand(34).times do |
45 | - ErrorReport.new(error_template.reverse_merge({ | |
46 | - :api_key => app.api_key, | |
47 | - :error_class => "StandardError", | |
48 | - :message => "Oops. Something went wrong!", | |
49 | - :backtrace => random_backtrace, | |
50 | - :request => { | |
51 | - 'component' => 'main', | |
52 | - 'action' => 'error', | |
53 | - 'url' => "http://example.com/post/#{[111, 222, 333].sample}", | |
54 | - }, | |
55 | - :server_environment => {'environment-name' => Rails.env.to_s}, | |
56 | - :notifier => {:name => "seeds.rb"}, | |
57 | - :app_user => { | |
58 | - :id => "1234", | |
59 | - :username => "jsmith", | |
60 | - :name => "John Smith", | |
61 | - :url => "http://www.example.com/users/jsmith" | |
62 | - } | |
63 | - })).generate_notice! | |
46 | + ErrorReport.new( | |
47 | + error_template.reverse_merge( | |
48 | + api_key: app.api_key, | |
49 | + error_class: "StandardError", | |
50 | + message: "Oops. Something went wrong!", | |
51 | + backtrace: random_backtrace, | |
52 | + request: { | |
53 | + 'component' => 'main', | |
54 | + 'action' => 'error', | |
55 | + 'url' => "http://example.com/post/#{[111, 222, 333].sample}" | |
56 | + }, | |
57 | + server_environment: { 'environment-name' => Rails.env.to_s }, | |
58 | + notifier: { name: "seeds.rb" }, | |
59 | + app_user: { | |
60 | + id: "1234", | |
61 | + username: "jsmith", | |
62 | + name: "John Smith", | |
63 | + url: "http://www.example.com/users/jsmith" | |
64 | + } | |
65 | + ) | |
66 | + ).generate_notice! | |
64 | 67 | end |
65 | 68 | end |
66 | 69 | |
67 | - Fabricate(:notice, :err => Fabricate(:err, :problem => Fabricate(:problem, :app => app))) | |
70 | + Fabricate(:notice, err: Fabricate(:err, problem: Fabricate(:problem, app: app))) | |
68 | 71 | puts "=== Created demo app: '#{app.name}', with example errors." |
69 | 72 | end |
70 | 73 | end | ... | ... |
lib/tasks/heroku/cron.rake
spec/acceptance/acceptance_helper.rb
... | ... | @@ -7,9 +7,9 @@ OmniAuth.config.test_mode = true |
7 | 7 | |
8 | 8 | def mock_auth(user = "test_user", token = "abcdef") |
9 | 9 | OmniAuth.config.mock_auth[:github] = Hashie::Mash.new( |
10 | - 'provider' => 'github', | |
11 | - 'uid' => '1763', | |
12 | - 'extra' => { | |
10 | + 'provider' => 'github', | |
11 | + 'uid' => '1763', | |
12 | + 'extra' => { | |
13 | 13 | 'raw_info' => { |
14 | 14 | 'login' => user |
15 | 15 | } |
... | ... | @@ -22,7 +22,7 @@ end |
22 | 22 | |
23 | 23 | def log_in(user) |
24 | 24 | visit '/' |
25 | - fill_in :user_email, :with => user.email | |
26 | - fill_in :user_password, :with => 'password' | |
25 | + fill_in :user_email, with: user.email | |
26 | + fill_in :user_password, with: 'password' | |
27 | 27 | click_on I18n.t('devise.sessions.new.sign_in') |
28 | 28 | end | ... | ... |
spec/acceptance/app_regenerate_api_key_spec.rb
... | ... | @@ -4,7 +4,7 @@ feature "Regeneration api_Key" do |
4 | 4 | let(:app) { Fabricate(:app) } |
5 | 5 | let(:admin) { Fabricate(:admin) } |
6 | 6 | let(:user) { |
7 | - Fabricate(:user_watcher, :app => app).user | |
7 | + Fabricate(:user_watcher, app: app).user | |
8 | 8 | } |
9 | 9 | |
10 | 10 | before do |
... | ... | @@ -37,7 +37,7 @@ end |
37 | 37 | feature "Create an application" do |
38 | 38 | let(:admin) { Fabricate(:admin) } |
39 | 39 | let(:user) { |
40 | - Fabricate(:user_watcher, :app => app).user | |
40 | + Fabricate(:user_watcher, app: app).user | |
41 | 41 | } |
42 | 42 | |
43 | 43 | before do |
... | ... | @@ -48,37 +48,37 @@ feature "Create an application" do |
48 | 48 | visit '/' |
49 | 49 | log_in admin |
50 | 50 | click_on I18n.t('apps.index.new_app') |
51 | - fill_in 'app_name', :with => 'My new app' | |
51 | + fill_in 'app_name', with: 'My new app' | |
52 | 52 | click_on I18n.t('apps.new.add_app') |
53 | 53 | page.has_content?(I18n.t('controllers.apps.flash.create.success')) |
54 | - expect(App.where(:name => 'My new app').count).to eq 1 | |
55 | - expect(App.where(:name => 'My new app 2').count).to eq 0 | |
54 | + expect(App.where(name: 'My new app').count).to eq 1 | |
55 | + expect(App.where(name: 'My new app 2').count).to eq 0 | |
56 | 56 | |
57 | 57 | click_on I18n.t('shared.navigation.apps') |
58 | 58 | click_on 'My new app' |
59 | 59 | click_link I18n.t('apps.show.edit') |
60 | - fill_in 'app_name', :with => 'My new app 2' | |
60 | + fill_in 'app_name', with: 'My new app 2' | |
61 | 61 | click_on I18n.t('apps.edit.update') |
62 | 62 | page.has_content?(I18n.t('controllers.apps.flash.update.success')) |
63 | - expect(App.where(:name => 'My new app').count).to eq 0 | |
64 | - expect(App.where(:name => 'My new app 2').count).to eq 1 | |
63 | + expect(App.where(name: 'My new app').count).to eq 0 | |
64 | + expect(App.where(name: 'My new app 2').count).to eq 1 | |
65 | 65 | end |
66 | 66 | |
67 | - scenario "create an apps with issue tracker and edit it", :js => true do | |
67 | + scenario "create an apps with issue tracker and edit it", js: true do | |
68 | 68 | visit '/' |
69 | 69 | log_in admin |
70 | 70 | click_on I18n.t('apps.index.new_app') |
71 | - fill_in 'app_name', :with => 'My new app' | |
71 | + fill_in 'app_name', with: 'My new app' | |
72 | 72 | find('.label_radio.github').click |
73 | 73 | |
74 | 74 | fill_in 'app_github_repo', with: 'foo/bar' |
75 | 75 | within ".github.tracker_params" do |
76 | - fill_in 'app_issue_tracker_attributes_options_username', :with => 'token' | |
77 | - fill_in 'app_issue_tracker_attributes_options_password', :with => 'pass' | |
76 | + fill_in 'app_issue_tracker_attributes_options_username', with: 'token' | |
77 | + fill_in 'app_issue_tracker_attributes_options_password', with: 'pass' | |
78 | 78 | end |
79 | 79 | click_on I18n.t('apps.new.add_app') |
80 | 80 | expect(page.has_content?(I18n.t('controllers.apps.flash.create.success'))).to eql true |
81 | - app = App.where(:name => 'My new app').first | |
81 | + app = App.where(name: 'My new app').first | |
82 | 82 | expect(app.issue_tracker.type_tracker).to eql 'github' |
83 | 83 | expect(app.issue_tracker.options['username']).to eql 'token' |
84 | 84 | expect(app.issue_tracker.options['password']).to eql 'pass' |
... | ... | @@ -89,7 +89,7 @@ feature "Create an application" do |
89 | 89 | find('.issue_tracker .label_radio.none').click |
90 | 90 | click_on I18n.t('apps.edit.update') |
91 | 91 | expect(page.has_content?(I18n.t('controllers.apps.flash.update.success'))).to eql true |
92 | - app = App.where(:name => 'My new app').first | |
92 | + app = App.where(name: 'My new app').first | |
93 | 93 | expect(app.issue_tracker.tracker).to be_a ErrbitPlugin::NoneIssueTracker |
94 | 94 | end |
95 | 95 | end | ... | ... |
spec/acceptance/reset_password_token.rb
... | ... | @@ -20,7 +20,7 @@ feature 'password reset token' do |
20 | 20 | expect(mail.body.encoded).to match(/change your password/) |
21 | 21 | expect(mail.body.encoded).to match(regex) |
22 | 22 | if mail.body.encoded =~ regex |
23 | - visit "/users/password/edit?reset_password_token=#{$1}" | |
23 | + visit "/users/password/edit?reset_password_token=#{Regexp.last_match(1)}" | |
24 | 24 | expect(page).to have_content 'Change your password' |
25 | 25 | fill_in 'New password', with: 'test12345' |
26 | 26 | fill_in 'Type your new password again', with: 'test12345' | ... | ... |
spec/acceptance/sign_in_with_github_spec.rb
... | ... | @@ -3,7 +3,7 @@ require 'acceptance/acceptance_helper' |
3 | 3 | feature 'Sign in with GitHub' do |
4 | 4 | background do |
5 | 5 | allow(Errbit::Config).to receive(:github_authentication).and_return(true) |
6 | - Fabricate(:user, :github_login => 'nashby') | |
6 | + Fabricate(:user, github_login: 'nashby') | |
7 | 7 | end |
8 | 8 | |
9 | 9 | scenario 'log in via GitHub with recognized user' do |
... | ... | @@ -11,7 +11,7 @@ feature 'Sign in with GitHub' do |
11 | 11 | |
12 | 12 | visit '/' |
13 | 13 | click_link 'Sign in with GitHub' |
14 | - expect(page).to have_content I18n.t("devise.omniauth_callbacks.success", :kind => 'GitHub') | |
14 | + expect(page).to have_content I18n.t("devise.omniauth_callbacks.success", kind: 'GitHub') | |
15 | 15 | end |
16 | 16 | |
17 | 17 | scenario 'reject unrecognized user if authenticating via GitHub' do | ... | ... |
spec/controllers/api/v1/notices_controller_spec.rb
... | ... | @@ -6,30 +6,30 @@ describe Api::V1::NoticesController, type: 'controller' do |
6 | 6 | |
7 | 7 | describe "GET /api/v1/notices" do |
8 | 8 | before do |
9 | - Fabricate(:notice, :created_at => Time.zone.parse('2012-08-01')) | |
10 | - Fabricate(:notice, :created_at => Time.zone.parse('2012-08-01')) | |
11 | - Fabricate(:notice, :created_at => Time.zone.parse('2012-08-21')) | |
12 | - Fabricate(:notice, :created_at => Time.zone.parse('2012-08-30')) | |
9 | + Fabricate(:notice, created_at: Time.zone.parse('2012-08-01')) | |
10 | + Fabricate(:notice, created_at: Time.zone.parse('2012-08-01')) | |
11 | + Fabricate(:notice, created_at: Time.zone.parse('2012-08-21')) | |
12 | + Fabricate(:notice, created_at: Time.zone.parse('2012-08-30')) | |
13 | 13 | end |
14 | 14 | |
15 | 15 | it "should return JSON if JSON is requested" do |
16 | - get :index, :auth_token => @user.authentication_token, :format => "json" | |
16 | + get :index, auth_token: @user.authentication_token, format: "json" | |
17 | 17 | expect { JSON.load(response.body) }.not_to raise_error #JSON::ParserError) |
18 | 18 | end |
19 | 19 | |
20 | 20 | it "should return XML if XML is requested" do |
21 | - get :index, :auth_token => @user.authentication_token, :format => "xml" | |
21 | + get :index, auth_token: @user.authentication_token, format: "xml" | |
22 | 22 | expect(Nokogiri::XML(response.body).errors).to be_empty |
23 | 23 | end |
24 | 24 | |
25 | 25 | it "should return JSON by default" do |
26 | - get :index, :auth_token => @user.authentication_token | |
26 | + get :index, auth_token: @user.authentication_token | |
27 | 27 | expect { JSON.load(response.body) }.not_to raise_error #JSON::ParserError) |
28 | 28 | end |
29 | 29 | |
30 | 30 | describe "given a date range" do |
31 | 31 | it "should return only the notices created during the date range" do |
32 | - get :index, {:auth_token => @user.authentication_token, :start_date => "2012-08-01", :end_date => "2012-08-27"} | |
32 | + get :index, auth_token: @user.authentication_token, start_date: "2012-08-01", end_date: "2012-08-27" | |
33 | 33 | expect(response).to be_success |
34 | 34 | notices = JSON.load response.body |
35 | 35 | expect(notices.length).to eq 3 |
... | ... | @@ -37,7 +37,7 @@ describe Api::V1::NoticesController, type: 'controller' do |
37 | 37 | end |
38 | 38 | |
39 | 39 | it "should return all notices" do |
40 | - get :index, {:auth_token => @user.authentication_token} | |
40 | + get :index, auth_token: @user.authentication_token | |
41 | 41 | expect(response).to be_success |
42 | 42 | notices = JSON.load response.body |
43 | 43 | expect(notices.length).to eq 4 | ... | ... |
spec/controllers/api/v1/problems_controller_spec.rb
... | ... | @@ -7,34 +7,34 @@ describe Api::V1::ProblemsController, type: 'controller' do |
7 | 7 | describe "GET /api/v1/problems/:id" do |
8 | 8 | before do |
9 | 9 | notice = Fabricate(:notice) |
10 | - err = Fabricate(:err, :notices => [notice]) | |
11 | - @problem = Fabricate(:problem, :errs => [err]) | |
10 | + err = Fabricate(:err, notices: [notice]) | |
11 | + @problem = Fabricate(:problem, errs: [err]) | |
12 | 12 | end |
13 | 13 | |
14 | 14 | it "should return JSON if JSON is requested" do |
15 | - get :show, :auth_token => @user.authentication_token, :format => "json", :id => Problem.first.id | |
15 | + get :show, auth_token: @user.authentication_token, format: "json", id: Problem.first.id | |
16 | 16 | expect { JSON.load(response.body) }.not_to raise_error #JSON::ParserError |
17 | 17 | end |
18 | 18 | |
19 | 19 | it "should return XML if XML is requested" do |
20 | - get :index, :auth_token => @user.authentication_token, :format => "xml", :id => @problem.id | |
20 | + get :index, auth_token: @user.authentication_token, format: "xml", id: @problem.id | |
21 | 21 | expect(Nokogiri::XML(response.body).errors).to be_empty |
22 | 22 | end |
23 | 23 | |
24 | 24 | it "should return JSON by default" do |
25 | - get :show, :auth_token => @user.authentication_token, :id => @problem.id | |
26 | - expect { JSON.load(response.body) }.not_to raise_error#JSON::ParserError) | |
25 | + get :show, auth_token: @user.authentication_token, id: @problem.id | |
26 | + expect { JSON.load(response.body) }.not_to raise_error #JSON::ParserError) | |
27 | 27 | end |
28 | 28 | |
29 | 29 | it "should return the correct problem" do |
30 | - get :show, :auth_token => @user.authentication_token, :format => "json", :id => @problem.id | |
30 | + get :show, auth_token: @user.authentication_token, format: "json", id: @problem.id | |
31 | 31 | |
32 | 32 | returned_problem = JSON.parse(response.body) |
33 | 33 | expect(returned_problem["_id"]).to eq(@problem.id.to_s) |
34 | 34 | end |
35 | 35 | |
36 | 36 | it "should return only the correct fields" do |
37 | - get :show, :auth_token => @user.authentication_token, :format => "json", :id => @problem.id | |
37 | + get :show, auth_token: @user.authentication_token, format: "json", id: @problem.id | |
38 | 38 | returned_problem = JSON.parse(response.body) |
39 | 39 | |
40 | 40 | expect(returned_problem.keys).to match_array(%w( |
... | ... | @@ -52,37 +52,37 @@ describe Api::V1::ProblemsController, type: 'controller' do |
52 | 52 | end |
53 | 53 | |
54 | 54 | it "returns a 404 if the problem cannot be found" do |
55 | - get :show, :auth_token => @user.authentication_token, :format => "json", :id => 'IdontExist' | |
55 | + get :show, auth_token: @user.authentication_token, format: "json", id: 'IdontExist' | |
56 | 56 | expect(response.status).to eq(404) |
57 | 57 | end |
58 | 58 | end |
59 | 59 | |
60 | 60 | describe "GET /api/v1/problems" do |
61 | 61 | before do |
62 | - Fabricate(:problem, :first_notice_at => Date.new(2012, 8, 01), :resolved_at => Date.new(2012, 8, 02)) | |
63 | - Fabricate(:problem, :first_notice_at => Date.new(2012, 8, 01), :resolved_at => Date.new(2012, 8, 21)) | |
64 | - Fabricate(:problem, :first_notice_at => Date.new(2012, 8, 21)) | |
65 | - Fabricate(:problem, :first_notice_at => Date.new(2012, 8, 30)) | |
62 | + Fabricate(:problem, first_notice_at: Date.new(2012, 8, 01), resolved_at: Date.new(2012, 8, 02)) | |
63 | + Fabricate(:problem, first_notice_at: Date.new(2012, 8, 01), resolved_at: Date.new(2012, 8, 21)) | |
64 | + Fabricate(:problem, first_notice_at: Date.new(2012, 8, 21)) | |
65 | + Fabricate(:problem, first_notice_at: Date.new(2012, 8, 30)) | |
66 | 66 | end |
67 | 67 | |
68 | 68 | it "should return JSON if JSON is requested" do |
69 | - get :index, :auth_token => @user.authentication_token, :format => "json" | |
70 | - expect { JSON.load(response.body) }.not_to raise_error#JSON::ParserError) | |
69 | + get :index, auth_token: @user.authentication_token, format: "json" | |
70 | + expect { JSON.load(response.body) }.not_to raise_error #JSON::ParserError) | |
71 | 71 | end |
72 | 72 | |
73 | 73 | it "should return XML if XML is requested" do |
74 | - get :index, :auth_token => @user.authentication_token, :format => "xml" | |
74 | + get :index, auth_token: @user.authentication_token, format: "xml" | |
75 | 75 | expect(Nokogiri::XML(response.body).errors).to be_empty |
76 | 76 | end |
77 | 77 | |
78 | 78 | it "should return JSON by default" do |
79 | - get :index, :auth_token => @user.authentication_token | |
80 | - expect { JSON.load(response.body) }.not_to raise_error#JSON::ParserError) | |
79 | + get :index, auth_token: @user.authentication_token | |
80 | + expect { JSON.load(response.body) }.not_to raise_error #JSON::ParserError) | |
81 | 81 | end |
82 | 82 | |
83 | 83 | describe "given a date range" do |
84 | 84 | it "should return only the problems open during the date range" do |
85 | - get :index, {:auth_token => @user.authentication_token, :start_date => "2012-08-20", :end_date => "2012-08-27"} | |
85 | + get :index, auth_token: @user.authentication_token, start_date: "2012-08-20", end_date: "2012-08-27" | |
86 | 86 | expect(response).to be_success |
87 | 87 | problems = JSON.load response.body |
88 | 88 | expect(problems.length).to eq 2 |
... | ... | @@ -90,7 +90,7 @@ describe Api::V1::ProblemsController, type: 'controller' do |
90 | 90 | end |
91 | 91 | |
92 | 92 | it "should return all problems" do |
93 | - get :index, {:auth_token => @user.authentication_token} | |
93 | + get :index, auth_token: @user.authentication_token | |
94 | 94 | expect(response).to be_success |
95 | 95 | problems = JSON.load response.body |
96 | 96 | expect(problems.length).to eq 4 | ... | ... |
spec/controllers/api/v3/notices_controller_spec.rb
... | ... | @@ -15,22 +15,22 @@ describe Api::V3::NoticesController, type: :controller do |
15 | 15 | it 'returns created notice id in json format' do |
16 | 16 | post :create, legit_body, legit_params |
17 | 17 | notice = Notice.last |
18 | - expect(JSON.parse(response.body)).to eq({ | |
19 | - 'id' => notice.id.to_s, | |
18 | + expect(JSON.parse(response.body)).to eq( | |
19 | + 'id' => notice.id.to_s, | |
20 | 20 | 'url' => app_problem_url(app, notice.problem) |
21 | - }) | |
21 | + ) | |
22 | 22 | end |
23 | 23 | |
24 | 24 | it 'responds with 400 when request attributes are not valid' do |
25 | - allow_any_instance_of(AirbrakeApi::V3::NoticeParser) | |
26 | - .to receive(:report).and_raise(AirbrakeApi::ParamsError) | |
25 | + allow_any_instance_of(AirbrakeApi::V3::NoticeParser). | |
26 | + to receive(:report).and_raise(AirbrakeApi::ParamsError) | |
27 | 27 | post :create, project_id: 'ID' |
28 | 28 | expect(response.status).to eq(400) |
29 | 29 | expect(response.body).to eq('Invalid request') |
30 | 30 | end |
31 | 31 | |
32 | 32 | it 'responds with 422 when project_id is invalid' do |
33 | - post :create, legit_body, { project_id: 'hm?', key: 'wha?' } | |
33 | + post :create, legit_body, project_id: 'hm?', key: 'wha?' | |
34 | 34 | |
35 | 35 | expect(response.status).to eq(422) |
36 | 36 | expect(response.body).to eq('Your API key is unknown') |
... | ... | @@ -38,7 +38,7 @@ describe Api::V3::NoticesController, type: :controller do |
38 | 38 | |
39 | 39 | it 'ignores notices for older api' do |
40 | 40 | app = Fabricate(:app, current_app_version: '2.0') |
41 | - post :create, legit_body, { project_id: app.api_key, key: app.api_key } | |
41 | + post :create, legit_body, project_id: app.api_key, key: app.api_key | |
42 | 42 | expect(response.body).to eq('Notice for old app version ignored') |
43 | 43 | expect(Notice.count).to eq(0) |
44 | 44 | end | ... | ... |
spec/controllers/apps_controller_spec.rb
1 | 1 | describe AppsController, type: 'controller' do |
2 | 2 | it_requires_authentication |
3 | - it_requires_admin_privileges :for => {:new => :get, :edit => :get, :create => :post, :update => :put, :destroy => :delete} | |
3 | + it_requires_admin_privileges for: { new: :get, edit: :get, create: :post, update: :put, destroy: :delete } | |
4 | 4 | |
5 | 5 | let(:admin) { Fabricate(:admin) } |
6 | 6 | let(:user) { Fabricate(:user) } |
7 | - let(:watcher) { Fabricate(:user_watcher, :app => app, :user => user) } | |
7 | + let(:watcher) { Fabricate(:user_watcher, app: app, user: user) } | |
8 | 8 | let(:unwatched_app) { Fabricate(:app) } |
9 | 9 | let(:app) { unwatched_app } |
10 | 10 | let(:watched_app1) do |
11 | 11 | a = Fabricate(:app) |
12 | - Fabricate(:user_watcher, :user => user, :app => a) | |
12 | + Fabricate(:user_watcher, user: user, app: a) | |
13 | 13 | a |
14 | 14 | end |
15 | 15 | let(:watched_app2) do |
16 | 16 | a = Fabricate(:app) |
17 | - Fabricate(:user_watcher, :user => user, :app => a) | |
17 | + Fabricate(:user_watcher, user: user, app: a) | |
18 | 18 | a |
19 | 19 | end |
20 | 20 | let(:err) do |
21 | - Fabricate(:err, :problem => problem) | |
21 | + Fabricate(:err, problem: problem) | |
22 | 22 | end |
23 | 23 | let(:notice) do |
24 | - Fabricate(:notice, :err => err) | |
24 | + Fabricate(:notice, err: err) | |
25 | 25 | end |
26 | 26 | let(:problem) do |
27 | - Fabricate(:problem, :app => app) | |
27 | + Fabricate(:problem, app: app) | |
28 | 28 | end |
29 | - let(:problem_resolved) { Fabricate(:problem_resolved, :app => app) } | |
29 | + let(:problem_resolved) { Fabricate(:problem_resolved, app: app) } | |
30 | 30 | |
31 | 31 | describe "GET /apps" do |
32 | 32 | context 'when logged in as an admin' do |
... | ... | @@ -55,43 +55,43 @@ describe AppsController, type: 'controller' do |
55 | 55 | end |
56 | 56 | |
57 | 57 | it 'finds the app' do |
58 | - get :show, :id => app.id | |
58 | + get :show, id: app.id | |
59 | 59 | expect(controller.app).to eq app |
60 | 60 | end |
61 | 61 | |
62 | 62 | it "should not raise errors for app with err without notices" do |
63 | 63 | err |
64 | - expect{ get :show, :id => app.id }.to_not raise_error | |
64 | + expect { get :show, id: app.id }.to_not raise_error | |
65 | 65 | end |
66 | 66 | |
67 | 67 | it "should list atom feed successfully" do |
68 | - get :show, :id => app.id, :format => "atom" | |
68 | + get :show, id: app.id, format: "atom" | |
69 | 69 | expect(response).to be_success |
70 | 70 | end |
71 | 71 | |
72 | 72 | it "should list available watchers by name" do |
73 | - Fabricate(:user, :name => "Carol") | |
74 | - Fabricate(:user, :name => "Alice") | |
75 | - Fabricate(:user, :name => "Betty") | |
73 | + Fabricate(:user, name: "Carol") | |
74 | + Fabricate(:user, name: "Alice") | |
75 | + Fabricate(:user, name: "Betty") | |
76 | 76 | |
77 | - get :show, :id => app.id | |
77 | + get :show, id: app.id | |
78 | 78 | |
79 | 79 | expect(controller.users.to_a).to eq(User.all.to_a.sort_by(&:name)) |
80 | 80 | end |
81 | 81 | |
82 | 82 | context "pagination" do |
83 | 83 | before(:each) do |
84 | - 35.times { Fabricate(:err, :problem => Fabricate(:problem, :app => app)) } | |
84 | + 35.times { Fabricate(:err, problem: Fabricate(:problem, app: app)) } | |
85 | 85 | end |
86 | 86 | |
87 | 87 | it "should have default per_page value for user" do |
88 | - get :show, :id => app.id | |
88 | + get :show, id: app.id | |
89 | 89 | expect(controller.problems.to_a.size).to eq User::PER_PAGE |
90 | 90 | end |
91 | 91 | |
92 | 92 | it "should be able to override default per_page value" do |
93 | 93 | admin.update_attribute :per_page, 10 |
94 | - get :show, :id => app.id | |
94 | + get :show, id: app.id | |
95 | 95 | expect(controller.problems.to_a.size).to eq 10 |
96 | 96 | end |
97 | 97 | end |
... | ... | @@ -103,14 +103,14 @@ describe AppsController, type: 'controller' do |
103 | 103 | |
104 | 104 | context 'and no params' do |
105 | 105 | it 'shows only unresolved problems' do |
106 | - get :show, :id => app.id | |
106 | + get :show, id: app.id | |
107 | 107 | expect(controller.problems.size).to eq 1 |
108 | 108 | end |
109 | 109 | end |
110 | 110 | |
111 | 111 | context 'and all_problems=true params' do |
112 | 112 | it 'shows all errors' do |
113 | - get :show, :id => app.id, :all_errs => true | |
113 | + get :show, id: app.id, all_errs: true | |
114 | 114 | expect(controller.problems.size).to eq 2 |
115 | 115 | end |
116 | 116 | end |
... | ... | @@ -120,41 +120,41 @@ describe AppsController, type: 'controller' do |
120 | 120 | before(:each) do |
121 | 121 | environments = %w(production test development staging) |
122 | 122 | 20.times do |i| |
123 | - Fabricate(:problem, :app => app, :environment => environments[i % environments.length]) | |
123 | + Fabricate(:problem, app: app, environment: environments[i % environments.length]) | |
124 | 124 | end |
125 | 125 | end |
126 | 126 | |
127 | 127 | context 'no params' do |
128 | 128 | it 'shows errs for all environments' do |
129 | - get :show, :id => app.id | |
129 | + get :show, id: app.id | |
130 | 130 | expect(controller.problems.size).to eq 20 |
131 | 131 | end |
132 | 132 | end |
133 | 133 | |
134 | 134 | context 'environment production' do |
135 | 135 | it 'shows errs for just production' do |
136 | - get :show, :id => app.id, :environment => 'production' | |
136 | + get :show, id: app.id, environment: 'production' | |
137 | 137 | expect(controller.problems.size).to eq 5 |
138 | 138 | end |
139 | 139 | end |
140 | 140 | |
141 | 141 | context 'environment staging' do |
142 | 142 | it 'shows errs for just staging' do |
143 | - get :show, :id => app.id, :environment => 'staging' | |
143 | + get :show, id: app.id, environment: 'staging' | |
144 | 144 | expect(controller.problems.size).to eq 5 |
145 | 145 | end |
146 | 146 | end |
147 | 147 | |
148 | 148 | context 'environment development' do |
149 | 149 | it 'shows errs for just development' do |
150 | - get :show, :id => app.id, :environment => 'development' | |
150 | + get :show, id: app.id, environment: 'development' | |
151 | 151 | expect(controller.problems.size).to eq 5 |
152 | 152 | end |
153 | 153 | end |
154 | 154 | |
155 | 155 | context 'environment test' do |
156 | 156 | it 'shows errs for just test' do |
157 | - get :show, :id => app.id, :environment => 'test' | |
157 | + get :show, id: app.id, environment: 'test' | |
158 | 158 | expect(controller.problems.size).to eq 5 |
159 | 159 | end |
160 | 160 | end |
... | ... | @@ -166,7 +166,7 @@ describe AppsController, type: 'controller' do |
166 | 166 | sign_in Fabricate(:user) |
167 | 167 | app = Fabricate(:app) |
168 | 168 | |
169 | - get :show, :id => app.id | |
169 | + get :show, id: app.id | |
170 | 170 | expect(controller.app).to eq app |
171 | 171 | end |
172 | 172 | end |
... | ... | @@ -186,9 +186,9 @@ describe AppsController, type: 'controller' do |
186 | 186 | end |
187 | 187 | |
188 | 188 | it "should copy attributes from an existing app" do |
189 | - @app = Fabricate(:app, :name => "do not copy", | |
190 | - :github_repo => "test/example") | |
191 | - get :new, :copy_attributes_from => @app.id | |
189 | + @app = Fabricate(:app, name: "do not copy", | |
190 | + github_repo: "test/example") | |
191 | + get :new, copy_attributes_from: @app.id | |
192 | 192 | expect(controller.app).to be_a(App) |
193 | 193 | expect(controller.app).to be_new_record |
194 | 194 | expect(controller.app.name).to be_blank |
... | ... | @@ -199,7 +199,7 @@ describe AppsController, type: 'controller' do |
199 | 199 | describe "GET /apps/:id/edit" do |
200 | 200 | it 'finds the correct app' do |
201 | 201 | app = Fabricate(:app) |
202 | - get :edit, :id => app.id | |
202 | + get :edit, id: app.id | |
203 | 203 | expect(controller.app).to eq app |
204 | 204 | end |
205 | 205 | end |
... | ... | @@ -216,12 +216,12 @@ describe AppsController, type: 'controller' do |
216 | 216 | end |
217 | 217 | |
218 | 218 | it "should redirect to the app page" do |
219 | - post :create, :app => {} | |
219 | + post :create, app: {} | |
220 | 220 | expect(response).to redirect_to(app_path(@app)) |
221 | 221 | end |
222 | 222 | |
223 | 223 | it "should display a message" do |
224 | - post :create, :app => {} | |
224 | + post :create, app: {} | |
225 | 225 | expect(request.flash[:success]).to match(/success/) |
226 | 226 | end |
227 | 227 | end |
... | ... | @@ -234,12 +234,12 @@ describe AppsController, type: 'controller' do |
234 | 234 | |
235 | 235 | context "when the update is successful" do |
236 | 236 | it "should redirect to the app page" do |
237 | - put :update, :id => @app.id, :app => {} | |
237 | + put :update, id: @app.id, app: {} | |
238 | 238 | expect(response).to redirect_to(app_path(@app)) |
239 | 239 | end |
240 | 240 | |
241 | 241 | it "should display a message" do |
242 | - put :update, :id => @app.id, :app => {} | |
242 | + put :update, id: @app.id, app: {} | |
243 | 243 | expect(request.flash[:success]).to match(/success/) |
244 | 244 | end |
245 | 245 | end |
... | ... | @@ -247,14 +247,14 @@ describe AppsController, type: 'controller' do |
247 | 247 | context "changing name" do |
248 | 248 | it "should redirect to app page" do |
249 | 249 | id = @app.id |
250 | - put :update, :id => id, :app => {:name => "new name"} | |
250 | + put :update, id: id, app: { name: "new name" } | |
251 | 251 | expect(response).to redirect_to(app_path(id)) |
252 | 252 | end |
253 | 253 | end |
254 | 254 | |
255 | 255 | context "when the update is unsuccessful" do |
256 | 256 | it "should render the edit page" do |
257 | - put :update, :id => @app.id, :app => { :name => '' } | |
257 | + put :update, id: @app.id, app: { name: '' } | |
258 | 258 | expect(response).to render_template(:edit) |
259 | 259 | end |
260 | 260 | end |
... | ... | @@ -265,30 +265,30 @@ describe AppsController, type: 'controller' do |
265 | 265 | end |
266 | 266 | |
267 | 267 | it "should parse legal csv values" do |
268 | - put :update, :id => @app.id, :app => { :email_at_notices => '1, 4, 7,8, 10' } | |
268 | + put :update, id: @app.id, app: { email_at_notices: '1, 4, 7,8, 10' } | |
269 | 269 | @app.reload |
270 | 270 | expect(@app.email_at_notices).to eq [1, 4, 7, 8, 10] |
271 | 271 | end |
272 | 272 | context "failed parsing of CSV" do |
273 | 273 | it "should set the default value" do |
274 | - @app = Fabricate(:app, :email_at_notices => [1, 2, 3, 4]) | |
275 | - put :update, :id => @app.id, :app => { :email_at_notices => 'asdf, -1,0,foobar,gd00,0,abc' } | |
274 | + @app = Fabricate(:app, email_at_notices: [1, 2, 3, 4]) | |
275 | + put :update, id: @app.id, app: { email_at_notices: 'asdf, -1,0,foobar,gd00,0,abc' } | |
276 | 276 | @app.reload |
277 | 277 | expect(@app.email_at_notices).to eq Errbit::Config.email_at_notices |
278 | 278 | end |
279 | 279 | |
280 | 280 | it "should display a message" do |
281 | - put :update, :id => @app.id, :app => { :email_at_notices => 'qwertyuiop' } | |
281 | + put :update, id: @app.id, app: { email_at_notices: 'qwertyuiop' } | |
282 | 282 | expect(request.flash[:error]).to match(/Couldn't parse/) |
283 | 283 | end |
284 | 284 | end |
285 | 285 | end |
286 | 286 | |
287 | - context "setting up issue tracker", :cur => true do | |
287 | + context "setting up issue tracker", cur: true do | |
288 | 288 | context "unknown tracker type" do |
289 | 289 | before(:each) do |
290 | - put :update, :id => @app.id, :app => { :issue_tracker_attributes => { | |
291 | - :type_tracker => 'unknown', :options => {:project_id => '1234', :api_token => '123123', :account => 'myapp'} | |
290 | + put :update, id: @app.id, app: { issue_tracker_attributes: { | |
291 | + type_tracker: 'unknown', options: { project_id: '1234', api_token: '123123', account: 'myapp' } | |
292 | 292 | } } |
293 | 293 | @app.reload |
294 | 294 | end |
... | ... | @@ -306,24 +306,24 @@ describe AppsController, type: 'controller' do |
306 | 306 | end |
307 | 307 | |
308 | 308 | it "should find the app" do |
309 | - delete :destroy, :id => @app.id | |
309 | + delete :destroy, id: @app.id | |
310 | 310 | expect(controller.app).to eq @app |
311 | 311 | end |
312 | 312 | |
313 | 313 | it "should destroy the app" do |
314 | - delete :destroy, :id => @app.id | |
314 | + delete :destroy, id: @app.id | |
315 | 315 | expect { |
316 | 316 | @app.reload |
317 | 317 | }.to raise_error(Mongoid::Errors::DocumentNotFound) |
318 | 318 | end |
319 | 319 | |
320 | 320 | it "should display a message" do |
321 | - delete :destroy, :id => @app.id | |
321 | + delete :destroy, id: @app.id | |
322 | 322 | expect(request.flash[:success]).to match(/success/) |
323 | 323 | end |
324 | 324 | |
325 | 325 | it "should redirect to the apps page" do |
326 | - delete :destroy, :id => @app.id | |
326 | + delete :destroy, id: @app.id | |
327 | 327 | expect(response).to redirect_to(apps_path) |
328 | 328 | end |
329 | 329 | end |
... | ... | @@ -336,7 +336,7 @@ describe AppsController, type: 'controller' do |
336 | 336 | end |
337 | 337 | |
338 | 338 | it 'redirect to root with flash error' do |
339 | - post :regenerate_api_key, :id => 'foo' | |
339 | + post :regenerate_api_key, id: 'foo' | |
340 | 340 | expect(request).to redirect_to root_path |
341 | 341 | end |
342 | 342 | end |
... | ... | @@ -348,7 +348,7 @@ describe AppsController, type: 'controller' do |
348 | 348 | |
349 | 349 | it 'redirect_to app view' do |
350 | 350 | expect do |
351 | - post :regenerate_api_key, :id => app.id | |
351 | + post :regenerate_api_key, id: app.id | |
352 | 352 | expect(request).to redirect_to edit_app_path(app) |
353 | 353 | end.to change { app.reload.api_key } |
354 | 354 | end | ... | ... |
spec/controllers/comments_controller_spec.rb
1 | 1 | describe CommentsController, type: 'controller' do |
2 | 2 | let(:app) { Fabricate(:app) } |
3 | - let(:err) { Fabricate(:err, :problem => Fabricate(:problem, :app => app, :environment => "production")) } | |
3 | + let(:err) { Fabricate(:err, problem: Fabricate(:problem, app: app, environment: "production")) } | |
4 | 4 | |
5 | 5 | describe "POST /apps/:app_id/errs/:id/comments/create" do |
6 | 6 | render_views |
... | ... | @@ -14,8 +14,8 @@ describe CommentsController, type: 'controller' do |
14 | 14 | let(:user) { Fabricate(:user) } |
15 | 15 | |
16 | 16 | before(:each) do |
17 | - post :create, :app_id => problem.app.id, :problem_id => problem.id, | |
18 | - :comment => { :body => "One test comment", :user_id => user.id } | |
17 | + post :create, app_id: problem.app.id, problem_id: problem.id, | |
18 | + comment: { body: "One test comment", user_id: user.id } | |
19 | 19 | problem.reload |
20 | 20 | end |
21 | 21 | |
... | ... | @@ -41,12 +41,12 @@ describe CommentsController, type: 'controller' do |
41 | 41 | let(:comment) { problem.reload.comments.first } |
42 | 42 | |
43 | 43 | before(:each) do |
44 | - delete :destroy, :app_id => problem.app.id, :problem_id => problem.id, :id => comment.id.to_s | |
44 | + delete :destroy, app_id: problem.app.id, problem_id: problem.id, id: comment.id.to_s | |
45 | 45 | problem.reload |
46 | 46 | end |
47 | 47 | |
48 | 48 | it "should delete the comment" do |
49 | - expect(problem.comments.detect{|c| c.id.to_s == comment.id }).to be nil | |
49 | + expect(problem.comments.detect { |c| c.id.to_s == comment.id }).to be nil | |
50 | 50 | end |
51 | 51 | |
52 | 52 | it "should redirect to problem page" do | ... | ... |
spec/controllers/deploys_controller_spec.rb
... | ... | @@ -10,30 +10,28 @@ describe DeploysController, type: 'controller' do |
10 | 10 | 'scm_revision' => '19d77837eef37902cf5df7e4445c85f392a8d0d5', |
11 | 11 | 'message' => 'johns first deploy' |
12 | 12 | } |
13 | - @app = Fabricate(:app_with_watcher, :notify_on_deploys => true, :api_key => 'APIKEY') | |
13 | + @app = Fabricate(:app_with_watcher, notify_on_deploys: true, api_key: 'APIKEY') | |
14 | 14 | end |
15 | 15 | |
16 | 16 | it 'finds the app via the api key' do |
17 | 17 | expect(App).to receive(:find_by_api_key!).with('APIKEY').and_return(@app) |
18 | - post :create, :deploy => @params, :api_key => 'APIKEY' | |
18 | + post :create, deploy: @params, api_key: 'APIKEY' | |
19 | 19 | end |
20 | 20 | |
21 | 21 | it 'creates a deploy' do |
22 | 22 | expect(App).to receive(:find_by_api_key!).and_return(@app) |
23 | 23 | expect(@app.deploys).to receive(:create!). |
24 | - with({ | |
25 | - :username => 'john.doe', | |
26 | - :environment => 'production', | |
27 | - :repository => 'git@github.com/errbit/errbit.git', | |
28 | - :revision => '19d77837eef37902cf5df7e4445c85f392a8d0d5', | |
29 | - :message => 'johns first deploy' | |
30 | - | |
31 | - }).and_return(Fabricate(:deploy)) | |
32 | - post :create, :deploy => @params, :api_key => 'APIKEY' | |
24 | + with( | |
25 | + username: 'john.doe', | |
26 | + environment: 'production', | |
27 | + repository: 'git@github.com/errbit/errbit.git', | |
28 | + revision: '19d77837eef37902cf5df7e4445c85f392a8d0d5', | |
29 | + message: 'johns first deploy').and_return(Fabricate(:deploy)) | |
30 | + post :create, deploy: @params, api_key: 'APIKEY' | |
33 | 31 | end |
34 | 32 | |
35 | 33 | it 'sends an email notification when configured to do so' do |
36 | - post :create, :deploy => @params, :api_key => 'APIKEY' | |
34 | + post :create, deploy: @params, api_key: 'APIKEY' | |
37 | 35 | email = ActionMailer::Base.deliveries.last |
38 | 36 | expect(email.to).to include(@app.watchers.first.email) |
39 | 37 | expect(email.subject).to eq "[#{@app.name}] Deployed to production by john.doe" |
... | ... | @@ -44,7 +42,7 @@ describe DeploysController, type: 'controller' do |
44 | 42 | before(:each) do |
45 | 43 | @deploy = Fabricate :deploy |
46 | 44 | sign_in Fabricate(:admin) |
47 | - get :index, :app_id => @deploy.app.id | |
45 | + get :index, app_id: @deploy.app.id | |
48 | 46 | end |
49 | 47 | |
50 | 48 | it "should render successfully" do | ... | ... |
spec/controllers/devise_sessions_controller_spec.rb
... | ... | @@ -10,12 +10,12 @@ describe Devise::SessionsController, type: 'controller' do |
10 | 10 | let(:user) { Fabricate(:user) } |
11 | 11 | |
12 | 12 | it 'redirects to app index page if there are no apps for the user' do |
13 | - post :create, { :user => { 'email' => user.email, 'password' => user.password } } | |
13 | + post :create, user: { 'email' => user.email, 'password' => user.password } | |
14 | 14 | expect(response).to redirect_to(root_path) |
15 | 15 | end |
16 | 16 | |
17 | 17 | it 'displays a friendly error when credentials are invalid' do |
18 | - post :create, { :user => { 'email' => 'whatever', 'password' => 'somethinginvalid' } } | |
18 | + post :create, user: { 'email' => 'whatever', 'password' => 'somethinginvalid' } | |
19 | 19 | expect(request.flash["alert"]).to eq(I18n.t 'devise.failure.user.email_invalid') |
20 | 20 | end |
21 | 21 | end | ... | ... |
spec/controllers/notices_controller_spec.rb
1 | 1 | describe NoticesController, type: 'controller' do |
2 | - it_requires_authentication :for => { :locate => :get } | |
2 | + it_requires_authentication for: { locate: :get } | |
3 | 3 | |
4 | 4 | let(:notice) { Fabricate(:notice) } |
5 | 5 | let(:xml) { Rails.root.join('spec', 'fixtures', 'hoptoad_test_notice.xml').read } |
6 | 6 | let(:app) { Fabricate(:app) } |
7 | - let(:error_report) { double(:valid? => true, :generate_notice! => true, :notice => notice, :should_keep? => true) } | |
7 | + let(:error_report) { double(valid?: true, generate_notice!: true, notice: notice, should_keep?: true) } | |
8 | 8 | |
9 | 9 | context 'notices API' do |
10 | 10 | context "with bogus xml" do |
11 | 11 | it "returns an error" do |
12 | 12 | expect(request).to receive(:raw_post).and_return('<r><b>notxml</r>') |
13 | - post :create, :format => :xml | |
13 | + post :create, format: :xml | |
14 | 14 | expect(response.status).to eq(422) |
15 | 15 | expect(response.body).to eq('The provided XML was not well-formed') |
16 | 16 | end |
... | ... | @@ -24,7 +24,7 @@ describe NoticesController, type: 'controller' do |
24 | 24 | context "with xml pass in raw_port" do |
25 | 25 | before do |
26 | 26 | expect(request).to receive(:raw_post).and_return(xml) |
27 | - post :create, :format => :xml | |
27 | + post :create, format: :xml | |
28 | 28 | end |
29 | 29 | |
30 | 30 | it "generates a notice from raw xml [POST]" do |
... | ... | @@ -37,7 +37,7 @@ describe NoticesController, type: 'controller' do |
37 | 37 | end |
38 | 38 | |
39 | 39 | it "generates a notice from xml in a data param [POST]" do |
40 | - post :create, :data => xml, :format => :xml | |
40 | + post :create, data: xml, format: :xml | |
41 | 41 | expect(response).to be_success |
42 | 42 | # Same RegExp from Airbrake::Sender#send_to_airbrake (https://github.com/airbrake/airbrake/blob/master/lib/airbrake/sender.rb#L53) |
43 | 43 | # Inspired by https://github.com/airbrake/airbrake/blob/master/test/sender_test.rb |
... | ... | @@ -46,15 +46,15 @@ describe NoticesController, type: 'controller' do |
46 | 46 | end |
47 | 47 | |
48 | 48 | it "generates a notice from xml [GET]" do |
49 | - get :create, :data => xml, :format => :xml | |
49 | + get :create, data: xml, format: :xml | |
50 | 50 | expect(response).to be_success |
51 | 51 | expect(response.body).to match(%r{<id[^>]*>#{notice.id}</id>}) |
52 | 52 | expect(response.body).to match(%r{<url[^>]*>(.+)#{locate_path(notice.id)}</url>}) |
53 | 53 | end |
54 | 54 | context "with an invalid API_KEY" do |
55 | - let(:error_report) { double(:valid? => false) } | |
55 | + let(:error_report) { double(valid?: false) } | |
56 | 56 | it 'return 422' do |
57 | - post :create, :format => :xml, :data => xml | |
57 | + post :create, format: :xml, data: xml | |
58 | 58 | expect(response.status).to eq 422 |
59 | 59 | end |
60 | 60 | end |
... | ... | @@ -62,7 +62,7 @@ describe NoticesController, type: 'controller' do |
62 | 62 | |
63 | 63 | context "without params needed" do |
64 | 64 | it 'return 400' do |
65 | - post :create, :format => :xml | |
65 | + post :create, format: :xml | |
66 | 66 | expect(response.status).to eq 400 |
67 | 67 | expect(response.body).to eq 'Need a data params in GET or raw post data' |
68 | 68 | end |
... | ... | @@ -77,9 +77,9 @@ describe NoticesController, type: 'controller' do |
77 | 77 | end |
78 | 78 | |
79 | 79 | it "should locate notice and redirect to problem" do |
80 | - problem = Fabricate(:problem, :app => app, :environment => "production") | |
81 | - notice = Fabricate(:notice, :err => Fabricate(:err, :problem => problem)) | |
82 | - get :locate, :id => notice.id | |
80 | + problem = Fabricate(:problem, app: app, environment: "production") | |
81 | + notice = Fabricate(:notice, err: Fabricate(:err, problem: problem)) | |
82 | + get :locate, id: notice.id | |
83 | 83 | expect(response).to redirect_to(app_problem_path(problem.app, problem)) |
84 | 84 | end |
85 | 85 | end | ... | ... |
spec/controllers/problems_controller_spec.rb
1 | 1 | describe ProblemsController, type: 'controller' do |
2 | - it_requires_authentication :for => { | |
3 | - :index => :get, :show => :get, :resolve => :put, :search => :get | |
2 | + it_requires_authentication for: { | |
3 | + index: :get, show: :get, resolve: :put, search: :get | |
4 | 4 | }, |
5 | - :params => {:app_id => 'dummyid', :id => 'dummyid'} | |
5 | + params: { app_id: 'dummyid', id: 'dummyid' } | |
6 | 6 | |
7 | 7 | let(:app) { Fabricate(:app) } |
8 | - let(:err) { Fabricate(:err, :problem => problem) } | |
8 | + let(:err) { Fabricate(:err, problem: problem) } | |
9 | 9 | let(:user) { Fabricate(:user) } |
10 | - let(:problem) { Fabricate(:problem, :app => app, :environment => "production") } | |
10 | + let(:problem) { Fabricate(:problem, app: app, environment: "production") } | |
11 | 11 | |
12 | 12 | describe "GET /problems" do |
13 | 13 | before(:each) do |
14 | 14 | sign_in user |
15 | - @problem = Fabricate(:notice, :err => Fabricate(:err, :problem => Fabricate(:problem, :app => app, :environment => "production"))).problem | |
15 | + @problem = Fabricate(:notice, err: Fabricate(:err, problem: Fabricate(:problem, app: app, environment: "production"))).problem | |
16 | 16 | end |
17 | 17 | |
18 | 18 | context "pagination" do |
... | ... | @@ -36,7 +36,7 @@ describe ProblemsController, type: 'controller' do |
36 | 36 | before(:each) do |
37 | 37 | environments = %w(production test development staging) |
38 | 38 | 20.times do |i| |
39 | - Fabricate(:problem, :environment => environments[i % environments.length]) | |
39 | + Fabricate(:problem, environment: environments[i % environments.length]) | |
40 | 40 | end |
41 | 41 | end |
42 | 42 | |
... | ... | @@ -49,28 +49,28 @@ describe ProblemsController, type: 'controller' do |
49 | 49 | |
50 | 50 | context 'environment production' do |
51 | 51 | it 'shows problems for just production' do |
52 | - get :index, :environment => 'production' | |
52 | + get :index, environment: 'production' | |
53 | 53 | expect(controller.problems.size).to eq 6 |
54 | 54 | end |
55 | 55 | end |
56 | 56 | |
57 | 57 | context 'environment staging' do |
58 | 58 | it 'shows problems for just staging' do |
59 | - get :index, :environment => 'staging' | |
59 | + get :index, environment: 'staging' | |
60 | 60 | expect(controller.problems.size).to eq 5 |
61 | 61 | end |
62 | 62 | end |
63 | 63 | |
64 | 64 | context 'environment development' do |
65 | 65 | it 'shows problems for just development' do |
66 | - get :index, :environment => 'development' | |
66 | + get :index, environment: 'development' | |
67 | 67 | expect(controller.problems.size).to eq 5 |
68 | 68 | end |
69 | 69 | end |
70 | 70 | |
71 | 71 | context 'environment test' do |
72 | 72 | it 'shows problems for just test' do |
73 | - get :index, :environment => 'test' | |
73 | + get :index, environment: 'test' | |
74 | 74 | expect(controller.problems.size).to eq 5 |
75 | 75 | end |
76 | 76 | end |
... | ... | @@ -82,11 +82,11 @@ describe ProblemsController, type: 'controller' do |
82 | 82 | sign_in Fabricate(:user) |
83 | 83 | problems = Kaminari.paginate_array((1..30).to_a) |
84 | 84 | 3.times { problems << Fabricate(:err).problem } |
85 | - 3.times { problems << Fabricate(:err, :problem => Fabricate(:problem, :resolved => true)).problem } | |
85 | + 3.times { problems << Fabricate(:err, problem: Fabricate(:problem, resolved: true)).problem } | |
86 | 86 | expect(Problem).to receive(:ordered_by).and_return( |
87 | - double('proxy', :page => double('other_proxy', :per => problems)) | |
87 | + double('proxy', page: double('other_proxy', per: problems)) | |
88 | 88 | ) |
89 | - get :index, :all_errs => true | |
89 | + get :index, all_errs: true | |
90 | 90 | expect(controller.problems).to eq problems |
91 | 91 | end |
92 | 92 | end |
... | ... | @@ -95,8 +95,8 @@ describe ProblemsController, type: 'controller' do |
95 | 95 | before do |
96 | 96 | sign_in user |
97 | 97 | @app = Fabricate(:app) |
98 | - @problem1 = Fabricate(:problem, :app => @app, message: "Most important") | |
99 | - @problem2 = Fabricate(:problem, :app => @app, message: "Very very important") | |
98 | + @problem1 = Fabricate(:problem, app: @app, message: "Most important") | |
99 | + @problem2 = Fabricate(:problem, app: @app, message: "Very very important") | |
100 | 100 | end |
101 | 101 | |
102 | 102 | it "renders successfully" do |
... | ... | @@ -110,7 +110,7 @@ describe ProblemsController, type: 'controller' do |
110 | 110 | end |
111 | 111 | |
112 | 112 | it "searches problems for given string" do |
113 | - get :search, :search => "\"Most important\"" | |
113 | + get :search, search: "\"Most important\"" | |
114 | 114 | expect(controller.problems).to include(@problem1) |
115 | 115 | expect(controller.problems).to_not include(@problem2) |
116 | 116 | end |
... | ... | @@ -122,35 +122,35 @@ describe ProblemsController, type: 'controller' do |
122 | 122 | end |
123 | 123 | |
124 | 124 | it "finds the app" do |
125 | - get :show, :app_id => app.id, :id => err.problem.id | |
125 | + get :show, app_id: app.id, id: err.problem.id | |
126 | 126 | expect(controller.app).to eq app |
127 | 127 | end |
128 | 128 | |
129 | 129 | it "finds the problem" do |
130 | - get :show, :app_id => app.id, :id => err.problem.id | |
130 | + get :show, app_id: app.id, id: err.problem.id | |
131 | 131 | expect(controller.problem).to eq err.problem |
132 | 132 | end |
133 | 133 | |
134 | 134 | it "successfully render page" do |
135 | - get :show, :app_id => app.id, :id => err.problem.id | |
135 | + get :show, app_id: app.id, id: err.problem.id | |
136 | 136 | expect(response).to be_success |
137 | 137 | end |
138 | 138 | |
139 | 139 | context 'pagination' do |
140 | 140 | let!(:notices) do |
141 | 141 | 3.times.reduce([]) do |coll, i| |
142 | - coll << Fabricate(:notice, :err => err, :created_at => (i.seconds.from_now)) | |
142 | + coll << Fabricate(:notice, err: err, created_at: (i.seconds.from_now)) | |
143 | 143 | end |
144 | 144 | end |
145 | 145 | |
146 | 146 | it "paginates the notices 1 at a time, starting with the most recent" do |
147 | - get :show, :app_id => app.id, :id => err.problem.id | |
147 | + get :show, app_id: app.id, id: err.problem.id | |
148 | 148 | expect(assigns(:notices).entries.count).to eq 1 |
149 | 149 | expect(assigns(:notices)).to include(notices.last) |
150 | 150 | end |
151 | 151 | |
152 | 152 | it "paginates the notices 1 at a time, based on then notice param" do |
153 | - get :show, :app_id => app.id, :id => err.problem.id, :notice => 3 | |
153 | + get :show, app_id: app.id, id: err.problem.id, notice: 3 | |
154 | 154 | expect(assigns(:notices).entries.count).to eq 1 |
155 | 155 | expect(assigns(:notices)).to include(notices.first) |
156 | 156 | end |
... | ... | @@ -165,29 +165,29 @@ describe ProblemsController, type: 'controller' do |
165 | 165 | end |
166 | 166 | |
167 | 167 | it 'finds the app and the problem' do |
168 | - put :resolve, :app_id => @err.app.id, :id => @err.problem.id | |
168 | + put :resolve, app_id: @err.app.id, id: @err.problem.id | |
169 | 169 | expect(controller.app).to eq @err.app |
170 | 170 | expect(controller.problem).to eq @err.problem |
171 | 171 | end |
172 | 172 | |
173 | 173 | it "should resolve the issue" do |
174 | - put :resolve, :app_id => @err.app.id, :id => @err.problem.id | |
174 | + put :resolve, app_id: @err.app.id, id: @err.problem.id | |
175 | 175 | expect(@err.problem.reload.resolved).to be(true) |
176 | 176 | end |
177 | 177 | |
178 | 178 | it "should display a message" do |
179 | - put :resolve, :app_id => @err.app.id, :id => @err.problem.id | |
179 | + put :resolve, app_id: @err.app.id, id: @err.problem.id | |
180 | 180 | expect(request.flash[:success]).to match(/Great news/) |
181 | 181 | end |
182 | 182 | |
183 | 183 | it "should redirect to the app page" do |
184 | - put :resolve, :app_id => @err.app.id, :id => @err.problem.id | |
184 | + put :resolve, app_id: @err.app.id, id: @err.problem.id | |
185 | 185 | expect(response).to redirect_to(app_path(@err.app)) |
186 | 186 | end |
187 | 187 | |
188 | 188 | it "should redirect back to problems page" do |
189 | 189 | request.env["HTTP_REFERER"] = problems_path |
190 | - put :resolve, :app_id => @err.app.id, :id => @err.problem.id | |
190 | + put :resolve, app_id: @err.app.id, id: @err.problem.id | |
191 | 191 | expect(response).to redirect_to(problems_path) |
192 | 192 | end |
193 | 193 | end |
... | ... | @@ -245,7 +245,7 @@ describe ProblemsController, type: 'controller' do |
245 | 245 | |
246 | 246 | it "should render whatever the issue tracker says" do |
247 | 247 | allow_any_instance_of(Issue).to receive(:render_body_args).and_return( |
248 | - [{ :inline => 'one <%= problem.id %> two' }]) | |
248 | + [{ inline: 'one <%= problem.id %> two' }]) | |
249 | 249 | post :create_issue, app_id: problem.app.id, id: problem.id, format: 'html' |
250 | 250 | line = issue_tracker.tracker.output.shift |
251 | 251 | expect(line[1]).to eq("one #{problem.id} two") |
... | ... | @@ -268,10 +268,10 @@ describe ProblemsController, type: 'controller' do |
268 | 268 | end |
269 | 269 | |
270 | 270 | context "problem with issue" do |
271 | - let(:err) { Fabricate(:err, :problem => Fabricate(:problem, :issue_link => "http://some.host")) } | |
271 | + let(:err) { Fabricate(:err, problem: Fabricate(:problem, issue_link: "http://some.host")) } | |
272 | 272 | |
273 | 273 | before(:each) do |
274 | - delete :unlink_issue, :app_id => err.app.id, :id => err.problem.id | |
274 | + delete :unlink_issue, app_id: err.app.id, id: err.problem.id | |
275 | 275 | err.problem.reload |
276 | 276 | end |
277 | 277 | |
... | ... | @@ -288,7 +288,7 @@ describe ProblemsController, type: 'controller' do |
288 | 288 | let(:err) { Fabricate :err } |
289 | 289 | |
290 | 290 | before(:each) do |
291 | - delete :unlink_issue, :app_id => err.app.id, :id => err.problem.id | |
291 | + delete :unlink_issue, app_id: err.app.id, id: err.problem.id | |
292 | 292 | err.problem.reload |
293 | 293 | end |
294 | 294 | |
... | ... | @@ -301,33 +301,33 @@ describe ProblemsController, type: 'controller' do |
301 | 301 | describe "Bulk Actions" do |
302 | 302 | before(:each) do |
303 | 303 | sign_in user |
304 | - @problem1 = Fabricate(:err, :problem => Fabricate(:problem, :resolved => true)).problem | |
305 | - @problem2 = Fabricate(:err, :problem => Fabricate(:problem, :resolved => false)).problem | |
304 | + @problem1 = Fabricate(:err, problem: Fabricate(:problem, resolved: true)).problem | |
305 | + @problem2 = Fabricate(:err, problem: Fabricate(:problem, resolved: false)).problem | |
306 | 306 | end |
307 | 307 | |
308 | 308 | context "POST /problems/merge_several" do |
309 | 309 | it "should require at least two problems" do |
310 | - post :merge_several, :problems => [@problem1.id.to_s] | |
310 | + post :merge_several, problems: [@problem1.id.to_s] | |
311 | 311 | expect(request.flash[:notice]).to eql I18n.t('controllers.problems.flash.need_two_errors_merge') |
312 | 312 | end |
313 | 313 | |
314 | 314 | it "should merge the problems" do |
315 | - expect(ProblemMerge).to receive(:new).and_return(double(:merge => true)) | |
316 | - post :merge_several, :problems => [@problem1.id.to_s, @problem2.id.to_s] | |
315 | + expect(ProblemMerge).to receive(:new).and_return(double(merge: true)) | |
316 | + post :merge_several, problems: [@problem1.id.to_s, @problem2.id.to_s] | |
317 | 317 | end |
318 | 318 | end |
319 | 319 | |
320 | 320 | context "POST /problems/unmerge_several" do |
321 | 321 | it "should require at least one problem" do |
322 | - post :unmerge_several, :problems => [] | |
322 | + post :unmerge_several, problems: [] | |
323 | 323 | expect(request.flash[:notice]).to eql I18n.t('controllers.problems.flash.no_select_problem') |
324 | 324 | end |
325 | 325 | |
326 | 326 | it "should unmerge a merged problem" do |
327 | 327 | merged_problem = Problem.merge!(@problem1, @problem2) |
328 | 328 | expect(merged_problem.errs.length).to eq 2 |
329 | - expect{ | |
330 | - post :unmerge_several, :problems => [merged_problem.id.to_s] | |
329 | + expect { | |
330 | + post :unmerge_several, problems: [merged_problem.id.to_s] | |
331 | 331 | expect(merged_problem.reload.errs.length).to eq 1 |
332 | 332 | }.to change(Problem, :count).by(1) |
333 | 333 | end |
... | ... | @@ -335,22 +335,22 @@ describe ProblemsController, type: 'controller' do |
335 | 335 | |
336 | 336 | context "POST /problems/resolve_several" do |
337 | 337 | it "should require at least one problem" do |
338 | - post :resolve_several, :problems => [] | |
338 | + post :resolve_several, problems: [] | |
339 | 339 | expect(request.flash[:notice]).to eql I18n.t('controllers.problems.flash.no_select_problem') |
340 | 340 | end |
341 | 341 | |
342 | 342 | it "should resolve the issue" do |
343 | - post :resolve_several, :problems => [@problem2.id.to_s] | |
343 | + post :resolve_several, problems: [@problem2.id.to_s] | |
344 | 344 | expect(@problem2.reload.resolved?).to eq true |
345 | 345 | end |
346 | 346 | |
347 | 347 | it "should display a message about 1 err" do |
348 | - post :resolve_several, :problems => [@problem2.id.to_s] | |
348 | + post :resolve_several, problems: [@problem2.id.to_s] | |
349 | 349 | expect(flash[:success]).to match(/1 error has been resolved/) |
350 | 350 | end |
351 | 351 | |
352 | 352 | it "should display a message about 2 errs" do |
353 | - post :resolve_several, :problems => [@problem1.id.to_s, @problem2.id.to_s] | |
353 | + post :resolve_several, problems: [@problem1.id.to_s, @problem2.id.to_s] | |
354 | 354 | expect(flash[:success]).to match(/2 errors have been resolved/) |
355 | 355 | expect(controller.selected_problems).to eq [@problem1, @problem2] |
356 | 356 | end |
... | ... | @@ -358,20 +358,20 @@ describe ProblemsController, type: 'controller' do |
358 | 358 | |
359 | 359 | context "POST /problems/unresolve_several" do |
360 | 360 | it "should require at least one problem" do |
361 | - post :unresolve_several, :problems => [] | |
361 | + post :unresolve_several, problems: [] | |
362 | 362 | expect(request.flash[:notice]).to eql I18n.t('controllers.problems.flash.no_select_problem') |
363 | 363 | end |
364 | 364 | |
365 | 365 | it "should unresolve the issue" do |
366 | - post :unresolve_several, :problems => [@problem1.id.to_s] | |
366 | + post :unresolve_several, problems: [@problem1.id.to_s] | |
367 | 367 | expect(@problem1.reload.resolved?).to eq false |
368 | 368 | end |
369 | 369 | end |
370 | 370 | |
371 | 371 | context "POST /problems/destroy_several" do |
372 | 372 | it "should delete the problems" do |
373 | - expect{ | |
374 | - post :destroy_several, :problems => [@problem1.id.to_s] | |
373 | + expect { | |
374 | + post :destroy_several, problems: [@problem1.id.to_s] | |
375 | 375 | }.to change(Problem, :count).by(-1) |
376 | 376 | end |
377 | 377 | end |
... | ... | @@ -380,25 +380,25 @@ describe ProblemsController, type: 'controller' do |
380 | 380 | before do |
381 | 381 | sign_in user |
382 | 382 | @app = Fabricate(:app) |
383 | - @problem1 = Fabricate(:problem, :app => @app) | |
384 | - @problem2 = Fabricate(:problem, :app => @app) | |
383 | + @problem1 = Fabricate(:problem, app: @app) | |
384 | + @problem2 = Fabricate(:problem, app: @app) | |
385 | 385 | end |
386 | 386 | |
387 | 387 | it "destroys all problems" do |
388 | 388 | expect { |
389 | - post :destroy_all, :app_id => @app.id | |
389 | + post :destroy_all, app_id: @app.id | |
390 | 390 | }.to change(Problem, :count).by(-2) |
391 | 391 | expect(controller.app).to eq @app |
392 | 392 | end |
393 | 393 | |
394 | 394 | it "should display a message" do |
395 | - put :destroy_all, :app_id => @app.id | |
395 | + put :destroy_all, app_id: @app.id | |
396 | 396 | expect(request.flash[:success]).to match(/been deleted/) |
397 | 397 | end |
398 | 398 | |
399 | 399 | it "should redirect back to the app page" do |
400 | 400 | request.env["HTTP_REFERER"] = edit_app_path(@app) |
401 | - put :destroy_all, :app_id => @app.id | |
401 | + put :destroy_all, app_id: @app.id | |
402 | 402 | expect(response).to redirect_to(edit_app_path(@app)) |
403 | 403 | end |
404 | 404 | end | ... | ... |
spec/controllers/site_config_controller_spec.rb
1 | 1 | describe SiteConfigController, type: 'controller' do |
2 | 2 | it_requires_admin_privileges for: { |
3 | - index: :get, | |
3 | + index: :get, | |
4 | 4 | update: :put |
5 | 5 | } |
6 | 6 | |
... | ... | @@ -18,7 +18,7 @@ describe SiteConfigController, type: 'controller' do |
18 | 18 | it 'updates' do |
19 | 19 | put :update, site_config: { |
20 | 20 | notice_fingerprinter_attributes: { |
21 | - backtrace_lines: 3, | |
21 | + backtrace_lines: 3, | |
22 | 22 | environment_name: false |
23 | 23 | } |
24 | 24 | } | ... | ... |
spec/controllers/users/omniauth_callbacks_controller_spec.rb
... | ... | @@ -4,9 +4,9 @@ describe Users::OmniauthCallbacksController, type: 'controller' do |
4 | 4 | request.env["devise.mapping"] = Devise.mappings[:user] |
5 | 5 | env = { |
6 | 6 | "omniauth.auth" => Hashie::Mash.new( |
7 | - :provider => 'github', | |
8 | - :extra => { :raw_info => { :login => login }}, | |
9 | - :credentials => { :token => token } | |
7 | + provider: 'github', | |
8 | + extra: { raw_info: { login: login } }, | |
9 | + credentials: { token: token } | |
10 | 10 | ) |
11 | 11 | } |
12 | 12 | allow(@controller).to receive(:env).and_return(env) |
... | ... | @@ -18,7 +18,7 @@ describe Users::OmniauthCallbacksController, type: 'controller' do |
18 | 18 | end |
19 | 19 | |
20 | 20 | it "should show an error if another user already has that github login" do |
21 | - Fabricate(:user, :github_login => "existing_user") | |
21 | + Fabricate(:user, github_login: "existing_user") | |
22 | 22 | stub_env_for_github_omniauth("existing_user") |
23 | 23 | get :github |
24 | 24 | ... | ... |
spec/controllers/users_controller_spec.rb
1 | 1 | describe UsersController, type: 'controller' do |
2 | 2 | it_requires_authentication |
3 | - it_requires_admin_privileges :for => { | |
4 | - :index => :get, | |
5 | - :show => :get, | |
6 | - :new => :get, | |
7 | - :create => :post, | |
8 | - :destroy => :delete | |
3 | + it_requires_admin_privileges for: { | |
4 | + index: :get, | |
5 | + show: :get, | |
6 | + new: :get, | |
7 | + create: :post, | |
8 | + destroy: :delete | |
9 | 9 | } |
10 | 10 | |
11 | 11 | let(:admin) { Fabricate(:admin) } |
... | ... | @@ -23,14 +23,14 @@ describe UsersController, type: 'controller' do |
23 | 23 | |
24 | 24 | context "GET /users/:other_id/edit" do |
25 | 25 | it "redirects to the home page" do |
26 | - get :edit, :id => other_user.id | |
26 | + get :edit, id: other_user.id | |
27 | 27 | expect(response).to redirect_to(root_path) |
28 | 28 | end |
29 | 29 | end |
30 | 30 | |
31 | 31 | context "GET /users/:my_id/edit" do |
32 | 32 | it 'finds the user' do |
33 | - get :edit, :id => user.id | |
33 | + get :edit, id: user.id | |
34 | 34 | expect(controller.user).to eq(user) |
35 | 35 | expect(response).to render_template 'edit' |
36 | 36 | end |
... | ... | @@ -38,7 +38,7 @@ describe UsersController, type: 'controller' do |
38 | 38 | |
39 | 39 | context "PUT /users/:other_id" do |
40 | 40 | it "redirects to the home page" do |
41 | - put :update, :id => other_user.id | |
41 | + put :update, id: other_user.id | |
42 | 42 | expect(response).to redirect_to(root_path) |
43 | 43 | end |
44 | 44 | end |
... | ... | @@ -46,47 +46,47 @@ describe UsersController, type: 'controller' do |
46 | 46 | context "PUT /users/:my_id/id" do |
47 | 47 | context "when the update is successful" do |
48 | 48 | it "sets a message to display" do |
49 | - put :update, :id => user.to_param, :user => {:name => 'Kermit'} | |
49 | + put :update, id: user.to_param, user: { name: 'Kermit' } | |
50 | 50 | expect(request.flash[:success]).to include('updated') |
51 | 51 | end |
52 | 52 | |
53 | 53 | it "redirects to the user's page" do |
54 | - put :update, :id => user.to_param, :user => {:name => 'Kermit'} | |
54 | + put :update, id: user.to_param, user: { name: 'Kermit' } | |
55 | 55 | expect(response).to redirect_to(user_path(user)) |
56 | 56 | end |
57 | 57 | |
58 | 58 | it "should not be able to become an admin" do |
59 | 59 | expect { |
60 | - put :update, :id => user.to_param, :user => {:admin => true} | |
60 | + put :update, id: user.to_param, user: { admin: true } | |
61 | 61 | }.to_not change { |
62 | 62 | user.reload.admin |
63 | 63 | }.from(false) |
64 | 64 | end |
65 | 65 | |
66 | 66 | it "should be able to set per_page option" do |
67 | - put :update, :id => user.to_param, :user => {:per_page => 555} | |
67 | + put :update, id: user.to_param, user: { per_page: 555 } | |
68 | 68 | expect(user.reload.per_page).to eq 555 |
69 | 69 | end |
70 | 70 | |
71 | 71 | it "should be able to set time_zone option" do |
72 | - put :update, :id => user.to_param, :user => {:time_zone => "Warsaw"} | |
72 | + put :update, id: user.to_param, user: { time_zone: "Warsaw" } | |
73 | 73 | expect(user.reload.time_zone).to eq "Warsaw" |
74 | 74 | end |
75 | 75 | |
76 | 76 | it "should be able to not set github_login option" do |
77 | - put :update, :id => user.to_param, :user => {:github_login => " "} | |
77 | + put :update, id: user.to_param, user: { github_login: " " } | |
78 | 78 | expect(user.reload.github_login).to eq nil |
79 | 79 | end |
80 | 80 | |
81 | 81 | it "should be able to set github_login option" do |
82 | - put :update, :id => user.to_param, :user => {:github_login => "awesome_name"} | |
82 | + put :update, id: user.to_param, user: { github_login: "awesome_name" } | |
83 | 83 | expect(user.reload.github_login).to eq "awesome_name" |
84 | 84 | end |
85 | 85 | end |
86 | 86 | |
87 | 87 | context "when the update is unsuccessful" do |
88 | 88 | it "renders the edit page" do |
89 | - put :update, :id => user.to_param, :user => {:name => nil} | |
89 | + put :update, id: user.to_param, user: { name: nil } | |
90 | 90 | expect(response).to render_template(:edit) |
91 | 91 | end |
92 | 92 | end |
... | ... | @@ -109,7 +109,7 @@ describe UsersController, type: 'controller' do |
109 | 109 | |
110 | 110 | context "GET /users/:id" do |
111 | 111 | it 'finds the user' do |
112 | - get :show, :id => user.id | |
112 | + get :show, id: user.id | |
113 | 113 | expect(controller.user).to eq user |
114 | 114 | end |
115 | 115 | end |
... | ... | @@ -124,14 +124,14 @@ describe UsersController, type: 'controller' do |
124 | 124 | |
125 | 125 | context "GET /users/:id/edit" do |
126 | 126 | it 'finds the user' do |
127 | - get :edit, :id => user.id | |
127 | + get :edit, id: user.id | |
128 | 128 | expect(controller.user).to eq user |
129 | 129 | end |
130 | 130 | end |
131 | 131 | |
132 | 132 | context "POST /users" do |
133 | 133 | context "when the create is successful" do |
134 | - let(:attrs) { {:user => Fabricate.to_params(:user)} } | |
134 | + let(:attrs) { { user: Fabricate.to_params(:user) } } | |
135 | 135 | |
136 | 136 | it "sets a message to display" do |
137 | 137 | post :create, attrs |
... | ... | @@ -166,7 +166,7 @@ describe UsersController, type: 'controller' do |
166 | 166 | end |
167 | 167 | |
168 | 168 | it "renders the new page" do |
169 | - post :create, :user => { :username => 'foo' } | |
169 | + post :create, user: { username: 'foo' } | |
170 | 170 | expect(response).to render_template(:new) |
171 | 171 | end |
172 | 172 | end |
... | ... | @@ -175,20 +175,20 @@ describe UsersController, type: 'controller' do |
175 | 175 | context "PUT /users/:id" do |
176 | 176 | context "when the update is successful" do |
177 | 177 | before { |
178 | - put :update, :id => user.to_param, :user => user_params | |
178 | + put :update, id: user.to_param, user: user_params | |
179 | 179 | } |
180 | 180 | |
181 | 181 | context "with normal params" do |
182 | - let(:user_params) { {:name => 'Kermit'} } | |
182 | + let(:user_params) { { name: 'Kermit' } } | |
183 | 183 | it "sets a message to display" do |
184 | - expect(request.flash[:success]).to eq I18n.t('controllers.users.flash.update.success', :name => user.reload.name) | |
184 | + expect(request.flash[:success]).to eq I18n.t('controllers.users.flash.update.success', name: user.reload.name) | |
185 | 185 | expect(response).to redirect_to(user_path(user)) |
186 | 186 | end |
187 | 187 | end |
188 | 188 | end |
189 | 189 | context "when the update is unsuccessful" do |
190 | 190 | it "renders the edit page" do |
191 | - put :update, :id => user.to_param, :user => {:name => nil} | |
191 | + put :update, id: user.to_param, user: { name: nil } | |
192 | 192 | expect(response).to render_template(:edit) |
193 | 193 | end |
194 | 194 | end |
... | ... | @@ -196,15 +196,15 @@ describe UsersController, type: 'controller' do |
196 | 196 | |
197 | 197 | context "DELETE /users/:id" do |
198 | 198 | context "with a destroy success" do |
199 | - let(:user_destroy) { double(:destroy => true) } | |
199 | + let(:user_destroy) { double(destroy: true) } | |
200 | 200 | |
201 | 201 | before { |
202 | 202 | expect(UserDestroy).to receive(:new).with(user).and_return(user_destroy) |
203 | - delete :destroy, :id => user.id | |
203 | + delete :destroy, id: user.id | |
204 | 204 | } |
205 | 205 | |
206 | 206 | it 'should destroy user' do |
207 | - expect(request.flash[:success]).to eq I18n.t('controllers.users.flash.destroy.success', :name => user.name) | |
207 | + expect(request.flash[:success]).to eq I18n.t('controllers.users.flash.destroy.success', name: user.name) | |
208 | 208 | expect(response).to redirect_to(users_path) |
209 | 209 | end |
210 | 210 | end |
... | ... | @@ -212,7 +212,7 @@ describe UsersController, type: 'controller' do |
212 | 212 | context "with trying destroy himself" do |
213 | 213 | before { |
214 | 214 | expect(UserDestroy).to_not receive(:new) |
215 | - delete :destroy, :id => admin.id | |
215 | + delete :destroy, id: admin.id | |
216 | 216 | } |
217 | 217 | |
218 | 218 | it 'should not destroy user' do |
... | ... | @@ -230,14 +230,14 @@ describe UsersController, type: 'controller' do |
230 | 230 | ActionController::Parameters.new(user_param) |
231 | 231 | ) |
232 | 232 | } |
233 | - let(:user_param) { {'user' => { :name => 'foo', :admin => true }} } | |
233 | + let(:user_param) { { 'user' => { name: 'foo', admin: true } } } | |
234 | 234 | it 'not have admin field' do |
235 | - expect(controller.send(:user_params)).to eq({'name' => 'foo'}) | |
235 | + expect(controller.send(:user_params)).to eq('name' => 'foo') | |
236 | 236 | end |
237 | 237 | context "with password and password_confirmation empty?" do |
238 | - let(:user_param) { {'user' => { :name => 'foo', 'password' => '', 'password_confirmation' => '' }} } | |
238 | + let(:user_param) { { 'user' => { :name => 'foo', 'password' => '', 'password_confirmation' => '' } } } | |
239 | 239 | it 'not have password and password_confirmation field' do |
240 | - expect(controller.send(:user_params)).to eq({'name' => 'foo'}) | |
240 | + expect(controller.send(:user_params)).to eq('name' => 'foo') | |
241 | 241 | end |
242 | 242 | end |
243 | 243 | end | ... | ... |
spec/controllers/watchers_controller_spec.rb
... | ... | @@ -15,12 +15,12 @@ describe WatchersController, type: 'controller' do |
15 | 15 | let(:watcher) { app.watchers.first } |
16 | 16 | |
17 | 17 | before(:each) do |
18 | - delete :destroy, :app_id => app.id, :id => watcher.user.id.to_s | |
18 | + delete :destroy, app_id: app.id, id: watcher.user.id.to_s | |
19 | 19 | problem.reload |
20 | 20 | end |
21 | 21 | |
22 | 22 | it "should delete the watcher" do |
23 | - expect(app.watchers.detect{|w| w.id.to_s == watcher.id }).to be nil | |
23 | + expect(app.watchers.detect { |w| w.id.to_s == watcher.id }).to be nil | |
24 | 24 | end |
25 | 25 | |
26 | 26 | it "should redirect to app page" do |
... | ... | @@ -34,7 +34,7 @@ describe WatchersController, type: 'controller' do |
34 | 34 | |
35 | 35 | context "successful watcher update" do |
36 | 36 | before(:each) do |
37 | - put :update, :app_id => app.id, :id => user.id.to_s | |
37 | + put :update, app_id: app.id, id: user.id.to_s | |
38 | 38 | problem.reload |
39 | 39 | end |
40 | 40 | ... | ... |
spec/decorators/app_decorator_spec.rb
1 | 1 | describe AppDecorator do |
2 | 2 | describe "#email_at_notices" do |
3 | 3 | it 'return the list separate by comma' do |
4 | - expect(AppDecorator.new(double(:email_at_notices => [2, 3])).email_at_notices).to eql '2, 3' | |
4 | + expect(AppDecorator.new(double(email_at_notices: [2, 3])).email_at_notices).to eql '2, 3' | |
5 | 5 | end |
6 | 6 | end |
7 | 7 | |
8 | 8 | describe "#notify_user_display" do |
9 | 9 | it 'return display:none if notify' do |
10 | - expect(AppDecorator.new(double(:notify_all_users => true)).notify_user_display).to eql 'display: none;' | |
10 | + expect(AppDecorator.new(double(notify_all_users: true)).notify_user_display).to eql 'display: none;' | |
11 | 11 | end |
12 | 12 | |
13 | 13 | it 'return blank if no notify' do |
14 | - expect(AppDecorator.new(double(:notify_all_users => false)).notify_user_display).to eql '' | |
14 | + expect(AppDecorator.new(double(notify_all_users: false)).notify_user_display).to eql '' | |
15 | 15 | end |
16 | 16 | end |
17 | 17 | |
18 | 18 | describe "#notify_err_display" do |
19 | 19 | it 'return display:none if no notify' do |
20 | - expect(AppDecorator.new(double(:notify_on_errs => false)).notify_err_display).to eql 'display: none;' | |
20 | + expect(AppDecorator.new(double(notify_on_errs: false)).notify_err_display).to eql 'display: none;' | |
21 | 21 | end |
22 | 22 | |
23 | 23 | it 'return blank if no notify' do |
24 | - expect(AppDecorator.new(double(:notify_on_errs => true)).notify_err_display).to eql '' | |
24 | + expect(AppDecorator.new(double(notify_on_errs: true)).notify_err_display).to eql '' | |
25 | 25 | end |
26 | 26 | end |
27 | 27 | end | ... | ... |
spec/decorators/backtrace_decorator_spec.rb
... | ... | @@ -3,22 +3,22 @@ describe BacktraceDecorator, type: :decorator do |
3 | 3 | described_class.new(Backtrace.new( |
4 | 4 | lines: [ |
5 | 5 | { number: 131, |
6 | - file: '[PROJECT_ROOT]app/controllers/accounts_controller.rb', | |
6 | + file: '[PROJECT_ROOT]app/controllers/accounts_controller.rb', | |
7 | 7 | method: :update_preferences }, |
8 | 8 | { number: 61, |
9 | - file: '[PROJECT_ROOT]app/controllers/application_controller.rb', | |
9 | + file: '[PROJECT_ROOT]app/controllers/application_controller.rb', | |
10 | 10 | method: :call }, |
11 | 11 | { number: 182, |
12 | - file: '[GEM_ROOT]activesupport-2.3.18/lib/active_support/callbacks.rb', | |
12 | + file: '[GEM_ROOT]activesupport-2.3.18/lib/active_support/callbacks.rb', | |
13 | 13 | method: :call }, |
14 | 14 | { number: 384, |
15 | - file: '[PROJECT_ROOT]app/models/account.rb', | |
15 | + file: '[PROJECT_ROOT]app/models/account.rb', | |
16 | 16 | method: :update_server_tag_scope }, |
17 | 17 | { number: 182, |
18 | - file: '[GEM_ROOT]activesupport-2.3.18/lib/active_support/callbacks.rb', | |
18 | + file: '[GEM_ROOT]activesupport-2.3.18/lib/active_support/callbacks.rb', | |
19 | 19 | method: :evaluate_method }, |
20 | 20 | { number: 23, |
21 | - file: '/home/rails/library/current/vendor/bundle/ruby/2.1.0/bin/rainbows', | |
21 | + file: '/home/rails/library/current/vendor/bundle/ruby/2.1.0/bin/rainbows', | |
22 | 22 | method: '<main>' } |
23 | 23 | ] |
24 | 24 | )) | ... | ... |
spec/decorators/backtrace_line_decorator_spec.rb
... | ... | @@ -2,13 +2,13 @@ describe BacktraceLineDecorator, type: :decorator do |
2 | 2 | let(:backtrace_line) do |
3 | 3 | described_class.new( |
4 | 4 | number: 884, |
5 | - file: '/path/to/file/ea315ea4.rb', | |
5 | + file: '/path/to/file/ea315ea4.rb', | |
6 | 6 | method: :instance_eval) |
7 | 7 | end |
8 | 8 | let(:backtrace_line_in_app) do |
9 | 9 | described_class.new( |
10 | 10 | number: 884, |
11 | - file: '[PROJECT_ROOT]/path/to/file/ea315ea4.rb', | |
11 | + file: '[PROJECT_ROOT]/path/to/file/ea315ea4.rb', | |
12 | 12 | method: :instance_eval) |
13 | 13 | end |
14 | 14 | let(:app) { Fabricate(:app, github_repo: 'foo/bar') } | ... | ... |
spec/decorators/issue_tracker_decorator_spec.rb
1 | 1 | describe IssueTrackerDecorator do |
2 | 2 | let(:fake_tracker) do |
3 | 3 | klass = Class.new(ErrbitPlugin::IssueTracker) { |
4 | - def self.label; 'fake'; end | |
5 | - def self.note; 'a note'; end | |
4 | + def self.label | |
5 | + 'fake' | |
6 | + end | |
7 | + | |
8 | + def self.note | |
9 | + 'a note' | |
10 | + end | |
6 | 11 | |
7 | 12 | def self.fields |
8 | 13 | { |
9 | - :foo => {:label => 'foo'}, | |
10 | - :bar => {:label => 'bar'} | |
14 | + foo: { label: 'foo' }, | |
15 | + bar: { label: 'bar' } | |
11 | 16 | } |
12 | 17 | end |
13 | 18 | |
14 | - def configured?; true; end | |
19 | + def configured? | |
20 | + true | |
21 | + end | |
15 | 22 | } |
16 | 23 | klass.new 'nothing special' |
17 | 24 | end | ... | ... |
spec/decorators/issue_tracker_field_decorator.rb
1 | 1 | describe IssueTrackerFieldDecorator do |
2 | 2 | describe "#label" do |
3 | 3 | it 'return the label of field_info by default' do |
4 | - expect(IssueTrackerFieldDecorator.new(:foo, {:label => 'hello'}).label).to eq 'hello' | |
4 | + expect(IssueTrackerFieldDecorator.new(:foo, label: 'hello').label).to eq 'hello' | |
5 | 5 | end |
6 | 6 | |
7 | 7 | it 'return the key of field if no label define' do | ... | ... |
spec/decorators/issue_tracker_type_decorator_spec.rb
1 | 1 | describe IssueTrackerDecorator do |
2 | 2 | let(:fake_tracker_class) do |
3 | 3 | klass = Class.new(ErrbitPlugin::IssueTracker) do |
4 | - def self.label; 'fake'; end | |
5 | - def self.note; 'a note'; end | |
4 | + def self.label | |
5 | + 'fake' | |
6 | + end | |
7 | + | |
8 | + def self.note | |
9 | + 'a note' | |
10 | + end | |
6 | 11 | |
7 | 12 | def self.fields |
8 | 13 | { |
9 | - :foo => {:label => 'foo'}, | |
10 | - :bar => {:label => 'bar'} | |
14 | + foo: { label: 'foo' }, | |
15 | + bar: { label: 'bar' } | |
11 | 16 | } |
12 | 17 | end |
13 | 18 | |
14 | 19 | def self.icons |
15 | 20 | { |
16 | 21 | one: ['text/plain', 'all your base are belong to us'], |
17 | - two: ['application/xml', '<root></root>'], | |
22 | + two: ['application/xml', '<root></root>'] | |
18 | 23 | } |
19 | 24 | end |
20 | 25 | end |
21 | 26 | |
22 | - allow(ErrbitPlugin::Registry).to receive(:issue_trackers).and_return({ | |
23 | - fake: klass | |
24 | - }) | |
27 | + allow(ErrbitPlugin::Registry).to receive(:issue_trackers).and_return(fake: klass) | |
25 | 28 | |
26 | 29 | klass |
27 | 30 | end |
... | ... | @@ -36,11 +39,11 @@ describe IssueTrackerDecorator do |
36 | 39 | end |
37 | 40 | |
38 | 41 | describe "#fields" do |
39 | - it 'return all Fields define decorate' do | |
42 | + it 'return all FIELDS define decorate' do | |
40 | 43 | decorator.fields do |itf| |
41 | 44 | expect(itf).to be_a(IssueTrackerFieldDecorator) |
42 | 45 | expect([:foo, :bar]).to be_include(itf.object) |
43 | - expect([{:label => 'foo'}, {:label => 'bar'}]).to be_include(itf.field_info) | |
46 | + expect([{ label: 'foo' }, { label: 'bar' }]).to be_include(itf.field_info) | |
44 | 47 | end |
45 | 48 | end |
46 | 49 | end | ... | ... |
spec/decorators/watcher_decorator_spec.rb
... | ... | @@ -2,13 +2,13 @@ describe WatcherDecorator do |
2 | 2 | describe "#email_choosen" do |
3 | 3 | context "with email define" do |
4 | 4 | it 'return blank' do |
5 | - expect(WatcherDecorator.new(double(:email => 'foo')).email_choosen).to eql '' | |
5 | + expect(WatcherDecorator.new(double(email: 'foo')).email_choosen).to eql '' | |
6 | 6 | end |
7 | 7 | end |
8 | 8 | |
9 | 9 | context "without email define" do |
10 | 10 | it 'return choosen' do |
11 | - expect(WatcherDecorator.new(double(:email => '')).email_choosen).to eql 'chosen' | |
11 | + expect(WatcherDecorator.new(double(email: '')).email_choosen).to eql 'chosen' | |
12 | 12 | end |
13 | 13 | end |
14 | 14 | end | ... | ... |