Module: Upkeep::Runtime::ChangeEvents
- Defined in:
- lib/upkeep/runtime.rb
Class Method Summary collapse
- .active_record_commit(record) ⇒ Object
- .active_record_destroy(record) ⇒ Object
- .active_record_update_columns(record, changed_attributes:, new_values: {}) ⇒ Object
- .bulk_delete(table:, model:, changed_attributes:, predicate_sql:, predicate_coverage:, predicate_table_columns:, id: nil) ⇒ Object
- .bulk_update(table:, model:, changed_attributes:, predicate_sql:, predicate_coverage:, predicate_table_columns:, new_values: {}, id: nil) ⇒ Object
- .created_record?(record, attribute_changes) ⇒ Boolean
- .previous_changes(changes, model_class) ⇒ Object
- .serialize_attribute_value(model_class, attribute, value) ⇒ Object
Class Method Details
.active_record_commit(record) ⇒ Object
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 |
# File 'lib/upkeep/runtime.rb', line 372 def active_record_commit(record) return active_record_destroy(record) if record.destroyed? attribute_changes = previous_changes(record.previous_changes, record.class) { type: created_record?(record, attribute_changes) ? "create" : "update", table: record.class.table_name, model: record.class.name, id: record.id, changed_attributes: attribute_changes.keys.sort, old_values: attribute_changes.transform_values { |change| change.fetch(:old) }, new_values: attribute_changes.transform_values { |change| change.fetch(:new) }, attribute_changes: attribute_changes } end |
.active_record_destroy(record) ⇒ Object
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 |
# File 'lib/upkeep/runtime.rb', line 389 def active_record_destroy(record) old_values = record.attributes.to_h do |attribute, value| [attribute.to_s, serialize_attribute_value(record.class, attribute, value)] end { type: "destroy", table: record.class.table_name, model: record.class.name, id: record.id, changed_attributes: old_values.keys.sort, old_values: old_values, new_values: {}, attribute_changes: old_values.transform_values { |value| { old: value, new: nil } } } end |
.active_record_update_columns(record, changed_attributes:, new_values: {}) ⇒ Object
406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 |
# File 'lib/upkeep/runtime.rb', line 406 def active_record_update_columns(record, changed_attributes:, new_values: {}) changed_attributes = Array(changed_attributes).map(&:to_s).sort new_values = new_values.to_h do |attribute, value| attribute = attribute.to_s [attribute, serialize_attribute_value(record.class, attribute, value)] end { type: "update", table: record.class.table_name, model: record.class.name, id: record.class.primary_key && record.public_send(record.class.primary_key), changed_attributes: changed_attributes, old_values: {}, new_values: new_values, attribute_changes: changed_attributes.to_h do |attribute| [attribute, { old: nil, new: new_values[attribute] }] end } end |
.bulk_delete(table:, model:, changed_attributes:, predicate_sql:, predicate_coverage:, predicate_table_columns:, id: nil) ⇒ Object
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 |
# File 'lib/upkeep/runtime.rb', line 449 def bulk_delete(table:, model:, changed_attributes:, predicate_sql:, predicate_coverage:, predicate_table_columns:, id: nil) changed_attributes = Array(changed_attributes).map(&:to_s).sort event = { type: "bulk_delete", table: table, model: model, changed_attributes: changed_attributes, old_values: {}, new_values: {}, attribute_changes: changed_attributes.to_h { |attribute| [attribute, { old: nil, new: nil }] }, predicate_sql: predicate_sql, predicate_coverage: predicate_coverage, predicate_table_columns: predicate_table_columns } event[:id] = id unless id.nil? event end |
.bulk_update(table:, model:, changed_attributes:, predicate_sql:, predicate_coverage:, predicate_table_columns:, new_values: {}, id: nil) ⇒ Object
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 |
# File 'lib/upkeep/runtime.rb', line 427 def bulk_update(table:, model:, changed_attributes:, predicate_sql:, predicate_coverage:, predicate_table_columns:, new_values: {}, id: nil) changed_attributes = Array(changed_attributes).map(&:to_s).sort new_values = new_values.transform_keys(&:to_s) event = { type: "bulk_update", table: table, model: model, changed_attributes: changed_attributes, old_values: {}, new_values: new_values, attribute_changes: changed_attributes.to_h do |attribute| [attribute, { old: nil, new: new_values[attribute] }] end, predicate_sql: predicate_sql, predicate_coverage: predicate_coverage, predicate_table_columns: predicate_table_columns } event[:id] = id unless id.nil? event end |
.created_record?(record, attribute_changes) ⇒ Boolean
484 485 486 487 488 489 490 |
# File 'lib/upkeep/runtime.rb', line 484 def created_record?(record, attribute_changes) primary_key = record.class.primary_key return false unless primary_key primary_key_change = attribute_changes[primary_key.to_s] primary_key_change && primary_key_change.fetch(:old).nil? && !primary_key_change.fetch(:new).nil? end |
.previous_changes(changes, model_class) ⇒ Object
468 469 470 471 472 473 474 475 476 |
# File 'lib/upkeep/runtime.rb', line 468 def previous_changes(changes, model_class) changes.to_h do |attribute, (old_value, new_value)| attribute = attribute.to_s [attribute, { old: serialize_attribute_value(model_class, attribute, old_value), new: serialize_attribute_value(model_class, attribute, new_value) }] end end |
.serialize_attribute_value(model_class, attribute, value) ⇒ Object
478 479 480 481 482 |
# File 'lib/upkeep/runtime.rb', line 478 def serialize_attribute_value(model_class, attribute, value) model_class.type_for_attribute(attribute.to_s).serialize(value) rescue StandardError value end |