Sha256: dcf2195d7c94c1ded621b6a942333d9764190e0f4af794e06be4279412d2a20f
Contents?: true
Size: 1.3 KB
Versions: 2
Compression:
Stored size: 1.3 KB
Contents
# frozen_string_literal: true require "active_support/subscriber" # Subscriber that is attached to ActiveRecord and will handle writing # migration SQL to the output stream. module CaptureMigrationSql class SqlSubscriber < ::ActiveSupport::Subscriber IGNORE_PAYLOAD_NAMES = ["SCHEMA", "EXPLAIN"] SHOW_STATEMENT = /\ASHOW\b/i EXPLAIN_STATEMENT = /\AEXPLAIN\b/i SELECT_SCHEMA_MIGRATIONS = /\ASELECT.*FROM.*schema_migrations/i SELECT_INFORMATION_SCHEMA = /\ASELECT.*information_schema/im SQLLITE_VERSION = /\ASELECT sqlite_version\(/i IGNORE_STATEMENTS = Regexp.union(SHOW_STATEMENT, EXPLAIN_STATEMENT, SELECT_SCHEMA_MIGRATIONS, SELECT_INFORMATION_SCHEMA, SQLLITE_VERSION) class << self def attach_if_necessary unless defined?(@attached) && @attached attach_to(:active_record) @attached = true end end end def sql(event) stream = CaptureMigrationSql.capture_stream return unless stream && CaptureMigrationSql.capture_enabled? payload = event.payload return if IGNORE_PAYLOAD_NAMES.include?(payload[:name]) sql = payload[:sql] return if sql.nil? || IGNORE_STATEMENTS.match(sql) sql = sql.strip sql = "#{sql};" unless sql.end_with?(";") stream.write("#{sql}\n\n") end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
capture_migration_sql-1.0.4 | lib/capture_migration_sql/sql_subscriber.rb |
capture_migration_sql-1.0.3 | lib/capture_migration_sql/sql_subscriber.rb |