Class: Sequent::Core::RecordSessions::ReplayEventsSession::Index
- Inherits:
-
Object
- Object
- Sequent::Core::RecordSessions::ReplayEventsSession::Index
- Defined in:
- lib/sequent/core/record_sessions/replay_events_session.rb
Instance Method Summary collapse
- #add(record_class, record) ⇒ Object
- #clear ⇒ Object
- #find(record_class, where_clause) ⇒ Object
-
#initialize(indexed_columns) ⇒ Index
constructor
A new instance of Index.
- #remove(record_class, record) ⇒ Object
- #update(record_class, record) ⇒ Object
- #use_index?(record_class, where_clause) ⇒ Boolean
Constructor Details
#initialize(indexed_columns) ⇒ Index
Returns a new instance of Index.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/sequent/core/record_sessions/replay_events_session.rb', line 57 def initialize(indexed_columns) @indexed_columns = Hash.new do |hash, record_class| if record_class.column_names.include? 'aggregate_id' hash[record_class] = [:aggregate_id] else hash[record_class] = [] end end @indexed_columns.merge!(indexed_columns) @index = {} @reverse_index = {} end |
Instance Method Details
#add(record_class, record) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/sequent/core/record_sessions/replay_events_session.rb', line 72 def add(record_class, record) return unless indexed?(record_class) get_keys(record_class, record).each do |key| @index[key.hash] = [] unless @index.has_key? key.hash @index[key.hash] << record @reverse_index[record.object_id.hash] = [] unless @reverse_index.has_key? record.object_id.hash @reverse_index[record.object_id.hash] << key.hash end end |
#clear ⇒ Object
111 112 113 114 |
# File 'lib/sequent/core/record_sessions/replay_events_session.rb', line 111 def clear @index = {} @reverse_index = {} end |
#find(record_class, where_clause) ⇒ Object
102 103 104 105 106 107 108 109 |
# File 'lib/sequent/core/record_sessions/replay_events_session.rb', line 102 def find(record_class, where_clause) key = [record_class.name] get_index(record_class, where_clause).each do |field| key << field key << where_clause[field] end @index[key.hash] || [] end |
#remove(record_class, record) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/sequent/core/record_sessions/replay_events_session.rb', line 84 def remove(record_class, record) return unless indexed?(record_class) keys = @reverse_index.delete(record.object_id.hash) { [] } return unless keys.any? keys.each do |key| @index[key].delete(record) @index.delete(key) if @index[key].count == 0 end end |
#update(record_class, record) ⇒ Object
97 98 99 100 |
# File 'lib/sequent/core/record_sessions/replay_events_session.rb', line 97 def update(record_class, record) remove(record_class, record) add(record_class, record) end |
#use_index?(record_class, where_clause) ⇒ Boolean
116 117 118 |
# File 'lib/sequent/core/record_sessions/replay_events_session.rb', line 116 def use_index?(record_class, where_clause) @indexed_columns.has_key?(record_class) && @indexed_columns[record_class].any? { |indexed_where| where_clause.keys.size == indexed_where.size && (where_clause.keys - indexed_where).empty? } end |