Class: PaperTrailDiff::PreparedRecordState

Inherits:
Object
  • Object
show all
Defined in:
lib/paper_trail_diff/prepared_record_index.rb,
sig/generated/paper_trail_diff/prepared_record_index.rbs

Overview

Immutable scalar state from a PaperTrail version or live-record fallback.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record) ⇒ PreparedRecordState

: (untyped) -> void

Parameters:

  • (Object)


11
12
13
14
15
# File 'lib/paper_trail_diff/prepared_record_index.rb', line 11

def initialize(record)
  @model_class = record.class
  @attributes = Support.immutable_copy(record.attributes)
  freeze
end

Instance Attribute Details

#attributesHash[untyped, untyped] (readonly)

Signature:

  • Hash[untyped, untyped]

Returns:

  • (Hash[untyped, untyped])


8
9
10
# File 'lib/paper_trail_diff/prepared_record_index.rb', line 8

def attributes
  @attributes
end

#model_classObject (readonly)

Signature:

  • untyped

Returns:

  • (Object)


7
8
9
# File 'lib/paper_trail_diff/prepared_record_index.rb', line 7

def model_class
  @model_class
end

Class Method Details

.from_attributes(model_class, attributes) ⇒ PreparedRecordState

: (untyped, Hash[untyped, untyped]) -> PreparedRecordState

Parameters:

  • (Object)
  • (Hash[untyped, untyped])

Returns:



18
19
20
21
22
# File 'lib/paper_trail_diff/prepared_record_index.rb', line 18

def self.from_attributes(model_class, attributes)
  state = allocate
  state.send(:initialize_attributes, model_class, attributes)
  state
end

Instance Method Details

#initialize_attributes(model_class, attributes) ⇒ void

This method returns an undefined value.

: (untyped, Hash[untyped, untyped]) -> void

Parameters:

  • (Object)
  • (Hash[untyped, untyped])


37
38
39
40
41
# File 'lib/paper_trail_diff/prepared_record_index.rb', line 37

def initialize_attributes(model_class, attributes)
  @model_class = model_class
  @attributes = Support.immutable_copy(attributes)
  freeze
end

#instantiateObject

Mirrors PaperTrail's reifier, which writes attributes directly. Mass assignment would route reconstructed state through application-defined attribute writers and reify a different record than the version stored. : () -> untyped

Returns:

  • (Object)


28
29
30
31
32
# File 'lib/paper_trail_diff/prepared_record_index.rb', line 28

def instantiate
  record = @model_class.new
  @attributes.each { |name, value| record[name] = value }
  record
end