Module: SnailTrail

Extended by:
Cleaner
Defined in:
lib/snail_trail.rb,
lib/snail_trail/config.rb,
lib/snail_trail/errors.rb,
lib/snail_trail/cleaner.rb,
lib/snail_trail/reifier.rb,
lib/snail_trail/request.rb,
lib/snail_trail/events/base.rb,
lib/snail_trail/model_config.rb,
lib/snail_trail/record_trail.rb,
lib/snail_trail/compatibility.rb,
lib/snail_trail/events/create.rb,
lib/snail_trail/events/update.rb,
lib/snail_trail/events/destroy.rb,
lib/snail_trail/record_history.rb,
lib/snail_trail/version_number.rb,
lib/snail_trail/has_snail_trail.rb,
lib/snail_trail/version_concern.rb,
lib/snail_trail/serializers/json.rb,
lib/snail_trail/serializers/yaml.rb,
lib/snail_trail/frameworks/cucumber.rb,
lib/snail_trail/frameworks/rails/railtie.rb,
lib/snail_trail/frameworks/rspec/helpers.rb,
lib/snail_trail/frameworks/rails/controller.rb,
lib/snail_trail/queries/versions/where_object.rb,
lib/generators/snail_trail/migration_generator.rb,
lib/generators/snail_trail/install/install_generator.rb,
lib/snail_trail/queries/versions/where_object_changes.rb,
lib/snail_trail/attribute_serializers/object_attribute.rb,
lib/snail_trail/queries/versions/where_attribute_changes.rb,
lib/snail_trail/queries/versions/where_object_changes_to.rb,
lib/snail_trail/queries/versions/where_object_changes_from.rb,
lib/snail_trail/type_serializers/postgres_array_serializer.rb,
lib/snail_trail/attribute_serializers/object_changes_attribute.rb,
lib/snail_trail/attribute_serializers/cast_attribute_serializer.rb,
lib/snail_trail/attribute_serializers/attribute_serializer_factory.rb,
lib/snail_trail/frameworks/active_record/models/snail_trail/version.rb,
lib/generators/snail_trail/update_item_subtype/update_item_subtype_generator.rb

Overview

An ActiveRecord extension that tracks changes to your models, for auditing or versioning.

Defined Under Namespace

Modules: AttributeSerializers, Cleaner, Compatibility, Cucumber, Events, Model, Queries, RSpec, Rails, Reifier, Request, Serializers, TypeSerializers, VERSION, VersionConcern Classes: Config, Error, InstallGenerator, InvalidOption, MigrationGenerator, ModelConfig, Railtie, RecordHistory, RecordTrail, UnsupportedColumnType, UnsupportedSchema, UpdateItemSubtypeGenerator, Version

Constant Summary collapse

E_TIMESTAMP_FIELD_CONFIG =
<<-EOS.squish.freeze
  SnailTrail.timestamp_field= has been removed, without replacement. It is no
  longer configurable. The timestamp column in the versions table must now be
  named created_at.
EOS

Class Method Summary collapse

Methods included from Cleaner

clean_versions!

Class Method Details

.active_record_gte_7_0?Boolean

Returns:

  • (Boolean)


122
123
124
# File 'lib/snail_trail.rb', line 122

def active_record_gte_7_0?
  @active_record_gte_7_0 ||= ::ActiveRecord.gem_version >= ::Gem::Version.new("7.0.0")
end

.config {|@config| ... } ⇒ Object Also known as: configure

Returns SnailTrail’s global configuration object, a singleton. These settings affect all threads.

Yields:



110
111
112
113
114
# File 'lib/snail_trail.rb', line 110

def config
  @config ||= SnailTrail::Config.instance
  yield @config if block_given?
  @config
end

.deprecatorObject



126
127
128
# File 'lib/snail_trail.rb', line 126

def deprecator
  @deprecator ||= ActiveSupport::Deprecation.new("16.0", "SnailTrail")
end

.enabled=(value) ⇒ Object

Switches SnailTrail on or off, for all threads.



44
45
46
# File 'lib/snail_trail.rb', line 44

def enabled=(value)
  SnailTrail.config.enabled = value
end

.enabled?Boolean

Returns ‘true` if SnailTrail is on, `false` otherwise. This is the on/off switch that affects all threads. Enabled by default.

Returns:

  • (Boolean)


51
52
53
# File 'lib/snail_trail.rb', line 51

def enabled?
  !!SnailTrail.config.enabled
end

.gem_versionObject

Returns SnailTrail’s ‘::Gem::Version`, convenient for comparisons. This is recommended over `::SnailTrail::VERSION::STRING`.

Added in 7.0.0



61
62
63
# File 'lib/snail_trail.rb', line 61

def gem_version
  ::Gem::Version.new(VERSION::STRING)
end

.request(options = nil, &block) ⇒ Object

Set variables for the current request, eg. whodunnit.

All request-level variables are now managed here, as of ST 9. Having the word “request” right there in your application code will remind you that these variables only affect the current request, not all threads.

Given a block, temporarily sets the given ‘options`, executes the block, and returns the value of the block.

Without a block, this currently just returns ‘SnailTrail::Request`. However, please do not use `SnailTrail::Request` directly. Currently, `Request` is a `Module`, but in the future it is quite possible we may make it a `Class`. If we make such a choice, we will not provide any warning and will not treat it as a breaking change. You’ve been warned :)



81
82
83
84
85
86
87
# File 'lib/snail_trail.rb', line 81

def request(options = nil, &block)
  if options.nil? && !block
    Request
  else
    Request.with(options, &block)
  end
end

.serializerObject

Get the SnailTrail serializer used by all threads.



103
104
105
# File 'lib/snail_trail.rb', line 103

def serializer
  SnailTrail.config.serializer
end

.serializer=(value) ⇒ Object

Set the SnailTrail serializer. This setting affects all threads.



97
98
99
# File 'lib/snail_trail.rb', line 97

def serializer=(value)
  SnailTrail.config.serializer = value
end

.timestamp_field=(_field_name) ⇒ Object

Set the field which records when a version was created.

Raises:



91
92
93
# File 'lib/snail_trail.rb', line 91

def timestamp_field=(_field_name)
  raise Error, E_TIMESTAMP_FIELD_CONFIG
end

.transaction?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/snail_trail.rb', line 38

def transaction?
  ::ActiveRecord::Base.connection.open_transactions.positive?
end

.versionObject



118
119
120
# File 'lib/snail_trail.rb', line 118

def version
  VERSION::STRING
end