Module: RailsMarkup::ClientUuidMaintenance
- Defined in:
- lib/rails_markup/client_uuid_maintenance.rb
Constant Summary collapse
- UUID_PATTERN =
/\A[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\z/- UUID_INPUT_PATTERN =
/\A[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\z/i- COLLISION_UUID_NAMESPACE =
"102f1c26-3ad7-5b5c-871a-44c5f2392790"
Class Method Summary collapse
- .invalid_count(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) ⇒ Object
- .repair!(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) ⇒ Object
- .verify!(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) ⇒ Object
Class Method Details
.invalid_count(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) ⇒ Object
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rails_markup/client_uuid_maintenance.rb', line 25 def invalid_count(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) table = table_name.to_sym return 0 unless connection.table_exists?(table) && connection.column_exists?(table, :client_uuid) quoted_table = connection.quote_table_name(table) quoted_client_uuid = connection.quote_column_name(:client_uuid) connection.select_values("SELECT #{quoted_client_uuid} FROM #{quoted_table}").count do |value| !canonical_uuid?(value) end end |
.repair!(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) ⇒ Object
15 16 17 18 19 20 21 22 23 |
# File 'lib/rails_markup/client_uuid_maintenance.rb', line 15 def repair!(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) table = table_name.to_sym return 0 unless connection.table_exists?(table) connection.add_column(table, :client_uuid, :string, limit: 64) unless connection.column_exists?(table, :client_uuid) repaired = repair_rows(connection, table) ensure_unique_index(connection, table) repaired end |
.verify!(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/rails_markup/client_uuid_maintenance.rb', line 36 def verify!(connection: ActiveRecord::Base.connection, table_name: RailsMarkup.config.table_name) table = table_name.to_sym unless connection.table_exists?(table) && connection.column_exists?(table, :client_uuid) raise "Rails Markup client UUID storage is not installed" end invalid = invalid_count(connection:, table_name:) duplicates = casefold_duplicate_count(connection, table) raise "Rails Markup has #{duplicates} case-fold duplicate client UUID(s)" if duplicates.positive? raise "Rails Markup has #{invalid} annotation(s) without canonical client UUIDs" if invalid.positive? unless connection.indexes(table).any? { |index| full_unique_client_uuid_index?(index) } raise "Rails Markup client UUID unique index is missing" end true end |