airbrake 9.2.1 → 9.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/airbrake/rack/middleware.rb +21 -13
  3. data/lib/airbrake/rails/action_controller_performance_breakdown_subscriber.rb +20 -2
  4. data/lib/airbrake/version.rb +1 -1
  5. metadata +5 -81
  6. data/spec/apps/rack/dummy_app.rb +0 -17
  7. data/spec/apps/rails/dummy_app.rb +0 -258
  8. data/spec/apps/rails/dummy_task.rake +0 -15
  9. data/spec/apps/rails/logs/32.log +0 -34094
  10. data/spec/apps/rails/logs/42.log +0 -1488
  11. data/spec/apps/rails/logs/52.log +0 -6321
  12. data/spec/apps/sinatra/sinatra_test_app.rb +0 -12
  13. data/spec/integration/rack/rack_spec.rb +0 -19
  14. data/spec/integration/rails/rails_spec.rb +0 -430
  15. data/spec/integration/rails/rake_spec.rb +0 -97
  16. data/spec/integration/shared_examples/rack_examples.rb +0 -110
  17. data/spec/integration/sinatra/sinatra_spec.rb +0 -30
  18. data/spec/spec_helper.rb +0 -105
  19. data/spec/support/matchers/a_notice_with.rb +0 -29
  20. data/spec/unit/logger_spec.rb +0 -125
  21. data/spec/unit/rack/context_filter_spec.rb +0 -90
  22. data/spec/unit/rack/http_headers_filter_spec.rb +0 -44
  23. data/spec/unit/rack/http_params_filter_spec.rb +0 -58
  24. data/spec/unit/rack/instrumentable_spec.rb +0 -105
  25. data/spec/unit/rack/middleware_spec.rb +0 -98
  26. data/spec/unit/rack/rack_spec.rb +0 -46
  27. data/spec/unit/rack/request_body_filter_spec.rb +0 -44
  28. data/spec/unit/rack/request_store_spec.rb +0 -36
  29. data/spec/unit/rack/route_filter_spec.rb +0 -52
  30. data/spec/unit/rack/session_filter_spec.rb +0 -44
  31. data/spec/unit/rack/user_filter_spec.rb +0 -30
  32. data/spec/unit/rack/user_spec.rb +0 -218
  33. data/spec/unit/rails/action_cable/notify_callback_spec.rb +0 -26
  34. data/spec/unit/rails/action_controller_notify_subscriber_spec.rb +0 -43
  35. data/spec/unit/rails/action_controller_performance_breakdown_subscriber_spec.rb +0 -63
  36. data/spec/unit/rails/action_controller_route_subscriber_spec.rb +0 -84
  37. data/spec/unit/rails/active_record_subscriber_spec.rb +0 -70
  38. data/spec/unit/rails/excon_spec.rb +0 -46
  39. data/spec/unit/rake/tasks_spec.rb +0 -70
  40. data/spec/unit/shoryuken_spec.rb +0 -55
  41. data/spec/unit/sidekiq/retryable_jobs_filter_spec.rb +0 -36
  42. data/spec/unit/sidekiq_spec.rb +0 -33
  43. data/spec/unit/sneakers_spec.rb +0 -83
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10b37a9a2800aa301044ab10d4886a1f3c505287
4
- data.tar.gz: e930fa9ea09846007c8890e173bb948792953f6b
3
+ metadata.gz: 2c238934628051f11250e289d3c226c8480bd3ae
4
+ data.tar.gz: fcfd36d25c4280006f64c049422c968b6ca24cae
5
5
  SHA512:
6
- metadata.gz: 04d6316c3f2332a44829c44892f913a1c6c09d0779fed70b2872d414e711a1a04cb7e62acc51ee9c1b037f5fe8f7f93d7debf2e0dbfd3552f62ec67dccabfcee
7
- data.tar.gz: d00ea1b0d2137bce44df884aa0973bd44a9a0185e0a0e6e305c715c4d24f3f6fe4d4351d37ca38d3cc260af620a93ea2516fd303fb55d137f4fbc7e6b09801ee
6
+ metadata.gz: 1f4b6f4e2aa13eeb7d3cedfc4ed912893f9c0bafa88053aefb0a8d1794cc301ac88bc401c5a443e5185919e25a2739afde708d925fd1301703054066e67ed584
7
+ data.tar.gz: 891f4da4c53e22dd462db6e92ccca26dd83d956c7fc524dbad83d9d2be07dd583c639d4f26857c659ee5c5ec7531592a5be91b45b8394f322c71e7080dfbd64c
@@ -26,13 +26,12 @@ module Airbrake
26
26
  #
27
27
  # @param [Hash] env the Rack environment
28
28
  def call!(env)
29
- # Rails hooks such as ActionControllerRouteSubscriber rely on this.
30
- RequestStore[:routes] = {}
29
+ before_call(env)
31
30
 
32
31
  begin
33
32
  response = @app.call(env)
34
33
  rescue Exception => ex # rubocop:disable Lint/RescueException
35
- notify_airbrake(ex, env)
34
+ notify_airbrake(ex)
36
35
  raise ex
37
36
  ensure
38
37
  # Clear routes for the next request.
@@ -40,27 +39,36 @@ module Airbrake
40
39
  end
41
40
 
42
41
  exception = framework_exception(env)
43
- notify_airbrake(exception, env) if exception
42
+ notify_airbrake(exception) if exception
44
43
 
45
44
  response
46
45
  end
47
46
 
48
47
  private
49
48
 
50
- def notify_airbrake(exception, env)
49
+ def before_call(env)
50
+ # Rails hooks such as ActionControllerRouteSubscriber rely on this.
51
+ RequestStore[:routes] = {}
52
+ RequestStore[:request] = find_request(env)
53
+ end
54
+
55
+ def find_request(env)
56
+ if defined?(ActionDispatch::Request)
57
+ ActionDispatch::Request.new(env)
58
+ elsif defined?(Sinatra::Request)
59
+ Sinatra::Request.new(env)
60
+ else
61
+ ::Rack::Request.new(env)
62
+ end
63
+ end
64
+
65
+ def notify_airbrake(exception)
51
66
  notice = Airbrake.build_notice(exception)
52
67
  return unless notice
53
68
 
54
69
  # ActionDispatch::Request correctly captures server port when using SSL:
55
70
  # See: https://github.com/airbrake/airbrake/issues/802
56
- notice.stash[:rack_request] =
57
- if defined?(ActionDispatch::Request)
58
- ActionDispatch::Request.new(env)
59
- elsif defined?(Sinatra::Request)
60
- Sinatra::Request.new(env)
61
- else
62
- ::Rack::Request.new(env)
63
- end
71
+ notice.stash[:rack_request] = RequestStore[:request]
64
72
 
65
73
  Airbrake.notify(notice)
66
74
  end
@@ -9,20 +9,38 @@ module Airbrake
9
9
  return if !routes || routes.none?
10
10
 
11
11
  event = Airbrake::Rails::Event.new(*args)
12
+ stash = build_stash
12
13
 
13
14
  routes.each do |route, params|
14
15
  groups = event.groups.merge(params[:groups])
15
16
  next if groups.none?
16
17
 
17
- Airbrake.notify_performance_breakdown(
18
+ breakdown_info = {
18
19
  method: event.method,
19
20
  route: route,
20
21
  response_type: event.response_type,
21
22
  groups: groups,
22
23
  start_time: event.time
23
- )
24
+ }
25
+
26
+ Airbrake.notify_performance_breakdown(breakdown_info, stash)
24
27
  end
25
28
  end
29
+
30
+ private
31
+
32
+ def build_stash
33
+ stash = {}
34
+ request = Airbrake::Rack::RequestStore[:request]
35
+ return stash unless request
36
+
37
+ stash[:request] = request
38
+ if (user = Airbrake::Rack::User.extract(request.env))
39
+ stash.merge!(user.as_json)
40
+ end
41
+
42
+ stash
43
+ end
26
44
  end
27
45
  end
28
46
  end
@@ -1,5 +1,5 @@
1
1
  # We use Semantic Versioning v2.0.0
2
2
  # More information: http://semver.org/
3
3
  module Airbrake
4
- AIRBRAKE_VERSION = '9.2.1'.freeze
4
+ AIRBRAKE_VERSION = '9.2.2'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrake
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.2.1
4
+ version: 9.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Airbrake Technologies, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-01 00:00:00.000000000 Z
11
+ date: 2019-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: airbrake-ruby
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '4.3'
19
+ version: '4.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '4.3'
26
+ version: '4.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -373,44 +373,6 @@ files:
373
373
  - lib/airbrake/version.rb
374
374
  - lib/generators/airbrake_generator.rb
375
375
  - lib/generators/airbrake_initializer.rb.erb
376
- - spec/apps/rack/dummy_app.rb
377
- - spec/apps/rails/dummy_app.rb
378
- - spec/apps/rails/dummy_task.rake
379
- - spec/apps/rails/logs/32.log
380
- - spec/apps/rails/logs/42.log
381
- - spec/apps/rails/logs/52.log
382
- - spec/apps/sinatra/sinatra_test_app.rb
383
- - spec/integration/rack/rack_spec.rb
384
- - spec/integration/rails/rails_spec.rb
385
- - spec/integration/rails/rake_spec.rb
386
- - spec/integration/shared_examples/rack_examples.rb
387
- - spec/integration/sinatra/sinatra_spec.rb
388
- - spec/spec_helper.rb
389
- - spec/support/matchers/a_notice_with.rb
390
- - spec/unit/logger_spec.rb
391
- - spec/unit/rack/context_filter_spec.rb
392
- - spec/unit/rack/http_headers_filter_spec.rb
393
- - spec/unit/rack/http_params_filter_spec.rb
394
- - spec/unit/rack/instrumentable_spec.rb
395
- - spec/unit/rack/middleware_spec.rb
396
- - spec/unit/rack/rack_spec.rb
397
- - spec/unit/rack/request_body_filter_spec.rb
398
- - spec/unit/rack/request_store_spec.rb
399
- - spec/unit/rack/route_filter_spec.rb
400
- - spec/unit/rack/session_filter_spec.rb
401
- - spec/unit/rack/user_filter_spec.rb
402
- - spec/unit/rack/user_spec.rb
403
- - spec/unit/rails/action_cable/notify_callback_spec.rb
404
- - spec/unit/rails/action_controller_notify_subscriber_spec.rb
405
- - spec/unit/rails/action_controller_performance_breakdown_subscriber_spec.rb
406
- - spec/unit/rails/action_controller_route_subscriber_spec.rb
407
- - spec/unit/rails/active_record_subscriber_spec.rb
408
- - spec/unit/rails/excon_spec.rb
409
- - spec/unit/rake/tasks_spec.rb
410
- - spec/unit/shoryuken_spec.rb
411
- - spec/unit/sidekiq/retryable_jobs_filter_spec.rb
412
- - spec/unit/sidekiq_spec.rb
413
- - spec/unit/sneakers_spec.rb
414
376
  homepage: https://airbrake.io
415
377
  licenses:
416
378
  - MIT
@@ -436,42 +398,4 @@ signing_key:
436
398
  specification_version: 4
437
399
  summary: Airbrake is an online tool that provides robust exception tracking in any
438
400
  of your Ruby applications.
439
- test_files:
440
- - spec/spec_helper.rb
441
- - spec/unit/sidekiq/retryable_jobs_filter_spec.rb
442
- - spec/unit/logger_spec.rb
443
- - spec/unit/rake/tasks_spec.rb
444
- - spec/unit/sidekiq_spec.rb
445
- - spec/unit/shoryuken_spec.rb
446
- - spec/unit/sneakers_spec.rb
447
- - spec/unit/rack/request_store_spec.rb
448
- - spec/unit/rack/request_body_filter_spec.rb
449
- - spec/unit/rack/http_params_filter_spec.rb
450
- - spec/unit/rack/http_headers_filter_spec.rb
451
- - spec/unit/rack/rack_spec.rb
452
- - spec/unit/rack/middleware_spec.rb
453
- - spec/unit/rack/session_filter_spec.rb
454
- - spec/unit/rack/context_filter_spec.rb
455
- - spec/unit/rack/user_filter_spec.rb
456
- - spec/unit/rack/instrumentable_spec.rb
457
- - spec/unit/rack/user_spec.rb
458
- - spec/unit/rack/route_filter_spec.rb
459
- - spec/unit/rails/action_controller_performance_breakdown_subscriber_spec.rb
460
- - spec/unit/rails/active_record_subscriber_spec.rb
461
- - spec/unit/rails/action_cable/notify_callback_spec.rb
462
- - spec/unit/rails/action_controller_notify_subscriber_spec.rb
463
- - spec/unit/rails/action_controller_route_subscriber_spec.rb
464
- - spec/unit/rails/excon_spec.rb
465
- - spec/integration/sinatra/sinatra_spec.rb
466
- - spec/integration/rack/rack_spec.rb
467
- - spec/integration/shared_examples/rack_examples.rb
468
- - spec/integration/rails/rake_spec.rb
469
- - spec/integration/rails/rails_spec.rb
470
- - spec/support/matchers/a_notice_with.rb
471
- - spec/apps/sinatra/sinatra_test_app.rb
472
- - spec/apps/rack/dummy_app.rb
473
- - spec/apps/rails/dummy_task.rake
474
- - spec/apps/rails/dummy_app.rb
475
- - spec/apps/rails/logs/42.log
476
- - spec/apps/rails/logs/52.log
477
- - spec/apps/rails/logs/32.log
401
+ test_files: []
@@ -1,17 +0,0 @@
1
- DummyApp = Rack::Builder.new do
2
- use Rack::ShowExceptions
3
- use Airbrake::Rack::Middleware
4
- use Warden::Manager
5
-
6
- map '/' do
7
- run(
8
- proc do |_env|
9
- [200, { 'Content-Type' => 'text/plain' }, ['Hello from index']]
10
- end
11
- )
12
- end
13
-
14
- map '/crash' do
15
- run(proc { |_env| raise AirbrakeTestError })
16
- end
17
- end
@@ -1,258 +0,0 @@
1
- require 'curb' unless Airbrake::JRUBY
2
- require 'excon'
3
-
4
- class DummyApp < Rails::Application
5
- # Rails requires these two keys.
6
- config.session_store :cookie_store, key: 'jiez4Mielu1AiHugog3shiiPhe3lai3faer'
7
- config.secret_token = 'ni6aeph6aeriBiphesh8omahv6cohpue5Quah5ceiMohtuvei8'
8
-
9
- if Gem::Version.new(Rails.version) > Gem::Version.new('3.2.0')
10
- config.secret_key_base = '62773890cad9d9d584b57320f8612f8f7378a90aadcabc6ee'
11
- end
12
-
13
- # Configure a logger, without it the tests can't run.
14
- vsn = Rails.version.split('').values_at(0, 2).join('')
15
- log_path = File.join(File.dirname(__FILE__), 'logs', "#{vsn}.log")
16
- config.logger = Logger.new(log_path)
17
- Rails.logger = config.logger
18
-
19
- config.active_support.deprecation = :stderr
20
-
21
- config.middleware.use Warden::Manager
22
-
23
- # In Rails 4.2.x Active Record suppresses errors raised within
24
- # 'after_rollback' & 'after_commit' callbacks and only print them to the
25
- # logs. In the next version, these errors will no longer be suppressed.
26
- # Instead, the errors will propagate normally just like in other Active Record
27
- # callbacks.
28
- config.active_record.raise_in_transactional_callbacks = true if vsn == '42'
29
-
30
- # Silences the warning, which says 'config.eager_load is set to nil'.
31
- config.eager_load = false
32
-
33
- routes.append do
34
- get '/' => 'dummy#index'
35
- get '/crash' => 'dummy#crash'
36
- get '/breakdown' => 'dummy#breakdown'
37
- get '/breakdown_view_only' => 'dummy#breakdown_view_only'
38
- get '/breakdown_http' => 'dummy#breakdown_http'
39
- get '/breakdown_curl_http' => 'dummy#breakdown_curl_http'
40
- get '/breakdown_curl_http_easy' => 'dummy#breakdown_curl_http_easy'
41
- get '/breakdown_curl_http_multi' => 'dummy#breakdown_curl_http_multi'
42
- get '/breakdown_excon' => 'dummy#breakdown_excon'
43
- get '/breakdown_http_rb' => 'dummy#breakdown_http_rb'
44
- get '/breakdown_http_client' => 'dummy#breakdown_http_client'
45
- get '/breakdown_typhoeus' => 'dummy#breakdown_typhoeus'
46
- get '/notify_airbrake_helper' => 'dummy#notify_airbrake_helper'
47
- get '/notify_airbrake_sync_helper' => 'dummy#notify_airbrake_sync_helper'
48
- get '/active_record_after_commit' => 'dummy#active_record_after_commit'
49
- get '/active_record_after_rollback' => 'dummy#active_record_after_rollback'
50
- get '/active_job' => 'dummy#active_job'
51
- get '/resque' => 'dummy#resque'
52
- get '/delayed_job' => 'dummy#delayed_job'
53
- end
54
- end
55
-
56
- class Book < ActiveRecord::Base
57
- after_commit :raise_error_after_commit
58
- after_rollback :raise_error_after_rollback
59
-
60
- def raise_error_after_commit
61
- raise AirbrakeTestError, 'after_commit'
62
- end
63
-
64
- def raise_error_after_rollback
65
- raise AirbrakeTestError, 'after_rollback'
66
- end
67
- end
68
-
69
- # ActiveJob.
70
- if Gem::Version.new(Rails.version) >= Gem::Version.new('4.2')
71
- class BingoJob < ActiveJob::Base
72
- queue_as :bingo
73
-
74
- class BingoWrapper
75
- def initialize(bingo)
76
- @bingo = bingo
77
- end
78
- end
79
-
80
- def perform(*_args)
81
- @wrapper = BingoWrapper.new(self)
82
- raise AirbrakeTestError, 'active_job error'
83
- end
84
- end
85
- end
86
-
87
- # Resque.
88
- class BingoWorker
89
- @queue = :bingo_workers_queue
90
-
91
- def self.perform(_bango, _bongo)
92
- raise AirbrakeTestError, 'resque error'
93
- end
94
- end
95
-
96
- # DelayedJob.
97
- BangoJob = Struct.new(:bingo, :bongo) do
98
- def perform
99
- raise AirbrakeTestError, 'delayed_job error'
100
- end
101
- end
102
-
103
- class DummyController < ActionController::Base
104
- layout 'application'
105
-
106
- self.view_paths = [
107
- ActionView::FixtureResolver.new(
108
- 'layouts/application.html.erb' => '<%= yield %>',
109
- 'dummy/index.html.erb' => 'Hello from index',
110
- 'dummy/notify_airbrake_helper.html.erb' => 'notify_airbrake_helper',
111
- 'dummy/notify_airbrake_sync_helper.html.erb' => 'notify_airbrake_helper_sync',
112
- 'dummy/active_record_after_commit.html.erb' => 'active_record_after_commit',
113
- 'dummy/active_record_after_rollback.html.erb' => 'active_record_after_rollback',
114
- 'dummy/active_job.html.erb' => 'active_job',
115
- 'dummy/resque.html.erb' => 'resque',
116
- 'dummy/delayed_job.html.erb' => 'delayed_job',
117
- 'dummy/breakdown.html.erb' => 'breakdown',
118
- 'dummy/breakdown_view_only.html.erb' => 'breakdown_view_only',
119
- 'dummy/breakdown_http.html.erb' => 'breakdown_http',
120
- 'dummy/breakdown_curl_http.html.erb' => 'breakdown_curl_http',
121
- 'dummy/breakdown_curl_http_easy.html.erb' => 'breakdown_curl_http_easy',
122
- 'dummy/breakdown_curl_http_multi.html.erb' => 'breakdown_curl_http_multi',
123
- 'dummy/breakdown_excon.erb' => 'breakdown_excon',
124
- 'dummy/breakdown_http_rb.erb' => 'breakdown_http_rb',
125
- 'dummy/breakdown_http_client.erb' => 'breakdown_http_client',
126
- 'dummy/breakdown_typhoeus.erb' => 'breakdown_typhoeus'
127
- )
128
- ]
129
-
130
- def index; end
131
-
132
- def crash
133
- Book.create(title: 'book')
134
- raise AirbrakeTestError
135
- end
136
-
137
- def breakdown
138
- Book.create(title: 'breakdown')
139
- Book.all
140
- end
141
-
142
- def breakdown_view_only
143
- render 'dummy/breakdown.html.erb'
144
- end
145
-
146
- def breakdown_http
147
- Net::HTTP.get('example.com', '/')
148
- render 'dummy/breakdown_http.html.erb'
149
- end
150
-
151
- def breakdown_curl_http
152
- Curl.get('example.com')
153
- render 'dummy/breakdown_curl_http.html.erb'
154
- end
155
-
156
- def breakdown_curl_http_easy
157
- Curl::Easy.perform('example.com')
158
- render 'dummy/breakdown_curl_http_easy.html.erb'
159
- end
160
-
161
- def breakdown_curl_http_multi
162
- Curl::Multi.get(['example.com'])
163
- render 'dummy/breakdown_curl_http_multi.html.erb'
164
- end
165
-
166
- def breakdown_excon
167
- Excon.get('http://example.com')
168
- render 'dummy/breakdown_excon.html.erb'
169
- end
170
-
171
- def breakdown_http_rb
172
- HTTP.get('http://example.com')
173
- render 'dummy/breakdown_http_rb.html.erb'
174
- end
175
-
176
- def breakdown_http_client
177
- HTTPClient.new.get('http://example.com')
178
- render 'dummy/breakdown_http_client.html.erb'
179
- end
180
-
181
- def breakdown_typhoeus
182
- Typhoeus.get('example.com')
183
- render 'dummy/breakdown_typhoeus.html.erb'
184
- end
185
-
186
- def notify_airbrake_helper
187
- notify_airbrake(AirbrakeTestError.new)
188
- end
189
-
190
- def notify_airbrake_sync_helper
191
- notify_airbrake_sync(AirbrakeTestError.new)
192
- end
193
-
194
- def active_record_after_commit
195
- Book.create(title: 'Bingo')
196
- end
197
-
198
- def active_record_after_rollback
199
- Book.transaction do
200
- Book.create(title: 'Bango')
201
- raise ActiveRecord::Rollback
202
- end
203
- end
204
-
205
- def active_job
206
- BingoJob.perform_later('bango', 'bongo')
207
- end
208
-
209
- def resque
210
- Resque.enqueue(BingoWorker, 'bango', 'bongo')
211
- end
212
-
213
- def delayed_job
214
- Delayed::Job.enqueue(BangoJob.new('bingo', 'bongo'))
215
- end
216
- end
217
-
218
- # Initializes middlewares and such.
219
- DummyApp.initialize!
220
-
221
- ActiveRecord::Base.connection.create_table(:books) do |t|
222
- t.string(:title)
223
- end
224
-
225
- ActiveRecord::Migration.verbose = false
226
-
227
- # Modified version of: https://goo.gl/q8uCJq
228
- migration_template = File.open(
229
- File.join(
230
- $LOAD_PATH.grep(/delayed_job/)[0],
231
- 'generators/delayed_job/templates/migration.rb'
232
- )
233
- )
234
-
235
- # need to eval the template with the migration_version intact
236
- migration_context = Class.new do
237
- # rubocop:disable Naming/AccessorMethodName
238
- def get_binding
239
- binding
240
- end
241
- # rubocop:enable Naming/AccessorMethodName
242
-
243
- def migration_version
244
- return unless ActiveRecord::VERSION::MAJOR >= 5
245
- "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
246
- end
247
- end
248
-
249
- migration_ruby =
250
- ERB.new(migration_template.read).result(migration_context.new.get_binding)
251
- migration_template.close
252
- # rubocop:disable Security/Eval
253
- eval(migration_ruby)
254
- # rubocop:enable Security/Eval
255
-
256
- ActiveRecord::Schema.define do
257
- CreateDelayedJobs.up
258
- end