Class: PaperTrailDiff::CollectionIdentityIndex
- Inherits:
-
Object
- Object
- PaperTrailDiff::CollectionIdentityIndex
- Defined in:
- lib/paper_trail_diff/collection_identity_index.rb,
sig/generated/paper_trail_diff/collection_identity_index.rbs
Overview
Immutable positions for one collection membership and ordering.
Instance Method Summary collapse
-
#initialize(records) ⇒ CollectionIdentityIndex
constructor
: (Array) -> void.
-
#position(type, id) ⇒ Integer?
: (untyped, untyped) -> Integer?.
-
#position_for_id(id) ⇒ Integer?
: (untyped) -> Integer?.
-
#register(record, index) ⇒ void
: (untyped, Integer) -> void.
-
#register_id(id, index) ⇒ void
: (untyped, Integer) -> void.
Constructor Details
#initialize(records) ⇒ CollectionIdentityIndex
: (Array) -> void
8 9 10 11 12 13 14 15 16 17 |
# File 'lib/paper_trail_diff/collection_identity_index.rb', line 8 def initialize(records) @positions = {} #: Hash[Array[untyped], Integer] @serialized_positions = {} #: Hash[Array[String], Integer] @id_positions = {} #: Hash[String, Integer?] records.each_with_index { |record, index| register(record, index) } @positions.freeze @serialized_positions.freeze @id_positions.freeze freeze end |
Instance Method Details
#position(type, id) ⇒ Integer?
: (untyped, untyped) -> Integer?
20 21 22 |
# File 'lib/paper_trail_diff/collection_identity_index.rb', line 20 def position(type, id) @serialized_positions[[type.to_s, id.to_s]] end |
#position_for_id(id) ⇒ Integer?
: (untyped) -> Integer?
25 26 27 |
# File 'lib/paper_trail_diff/collection_identity_index.rb', line 25 def position_for_id(id) @id_positions[id.to_s] end |
#register(record, index) ⇒ void
This method returns an undefined value.
: (untyped, Integer) -> void
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/paper_trail_diff/collection_identity_index.rb', line 36 def register(record, index) identity = record.identity if @positions.key?(identity) raise ArgumentError, "duplicate record identity: #{identity.inspect}" end @positions[identity] = index @serialized_positions[[record.type.to_s, record.id.to_s]] = index register_id(record.id, index) end |
#register_id(id, index) ⇒ void
This method returns an undefined value.
: (untyped, Integer) -> void
48 49 50 51 |
# File 'lib/paper_trail_diff/collection_identity_index.rb', line 48 def register_id(id, index) key = id.to_s @id_positions[key] = @id_positions.key?(key) ? nil : index end |