Module: Historiographer

Extended by:
ActiveSupport::Concern
Defined in:
lib/historiographer.rb,
lib/historiographer/safe.rb,
lib/historiographer/silent.rb,
lib/historiographer/history.rb,
lib/historiographer/version.rb,
lib/historiographer/relation.rb,
lib/historiographer/configuration.rb,
lib/historiographer/history_migration.rb,
lib/historiographer/history_migration_mysql.rb

Overview

See Historiographer for more details

Historiographer::History is a mixin that is automatically included in any History class (e.g. RetailerProductHistory).

A History record represents a snapshot of a primary record at a particular point in time.

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

E.g. You have a RetailerProduct (ID: 1) that makes the following changes:

1) rp = RetailerProduct.create(name: “Sabra”)

2) rp.update(name: “Sabra Hummus”)

3) rp.update(name: “Sabra Pine Nut Hummus”)

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

Your RetailerProduct record looks like this:

<#RetailerProduct:0x007fbf00c78f00 name: “Sabra Pine Nut Hummus”>

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

But your RetailerProductHistories look like this:

rp.histories

<#RetailerProductHistory:0x007fbf00c78f01 name: “Sabra”, history_started_at: 1.minute.ago, history_ended_at: 30.seconds.ago> <#RetailerProductHistory:0x007fbf00c78f02 name: “Sabra Hummus”, history_started_at: 30.seconds.ago, history_ended_at: 10.seconds.ago> <#RetailerProductHistory:0x007fbf00c78f03 name: “Sabra Pine Nut Hummus”, history_started_at: 10.seconds.ago, history_ended_at: nil>

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

Since these Histories are intended to represent a snapshot in time, they should never be deleted or modified directly. Historiographer will manage all of the nuances for you.

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

Your classes should be written like this:

class RetailerProduct < ActiveRecord::Base

include Historiographer

end

# This class is created automatically. You don’t # need to create a file yourself, unless you # want to add additional methods. # class RetailerProductHistory < ActiveRecord::Base

include Historiographer::History

end

Defined Under Namespace

Modules: History, HistoryMigration, HistoryMigrationMysql, Relation, Safe, Silent Classes: Configuration, HistoryUserIdMissingError

Constant Summary collapse

UTC =
Time.now.in_time_zone('UTC').time_zone
VERSION =
"4.1.4"

Instance Method Summary collapse

Instance Method Details

#is_history_class?Boolean

Returns:

  • (Boolean)


459
460
461
# File 'lib/historiographer.rb', line 459

def is_history_class?
  self.class.is_history_class?
end

#snapshot_mode?Boolean

Returns:

  • (Boolean)


463
464
465
# File 'lib/historiographer.rb', line 463

def snapshot_mode?
  (self.class.get_historiographer_mode.to_sym == :snapshot_only)
end