class Ephemeron::Store

Public Instance Methods

add(model, opts = {}) click to toggle source
# File lib/ephemeron/writers/store.rb, line 19
def add(model, opts = {})
  return unless Validators::StoreElement.call(model)

  in_store_before = stored?(model)
  store[to_store_key(model)] = model unless stored?(model)
  Logger.log(model, :fetched) if opts[:log]
  add_alias(model, opts[:as], in_store_before)
  model
end
aliases() click to toggle source
# File lib/ephemeron/writers/store.rb, line 11
def aliases
  self.ts_aliases ||= {}
end
destroy(model) click to toggle source
# File lib/ephemeron/writers/store.rb, line 51
def destroy(model)
  key = Convert.call model
  return if store[key].nil?

  store.delete key
end
get(key) click to toggle source
# File lib/ephemeron/writers/store.rb, line 29
def get(key)
  model = store[key]
  model ||= store[aliases[key]]
  Logger.log(model, :used) if model
  model
end
has?(model, as_new_record: false) click to toggle source
# File lib/ephemeron/writers/store.rb, line 15
def has?(model, as_new_record: false)
  !store[Convert.call(model, as_new_record: as_new_record)].nil?
end
persist() click to toggle source
# File lib/ephemeron/writers/store.rb, line 40
def persist
  changed_models = store.filter { |_, v| v.changed? }.values
                        .filter { |model| !Logger.has?(model, :skip_save) }
  ActiveRecord::Base.transaction do
    changed_models.each do |model|
      Ephemeron.allow_save! model
      model.save!
    end
  end
end
reset() click to toggle source
# File lib/ephemeron/writers/store.rb, line 58
def reset
  self.ts_store = {}
  self.ts_aliases = {}
end
store() click to toggle source
# File lib/ephemeron/writers/store.rb, line 7
def store
  self.ts_store ||= {}
end
validate() click to toggle source
# File lib/ephemeron/writers/store.rb, line 36
def validate
  Validators::Store.call
end

Private Instance Methods

add_alias(model, as, in_store_before) click to toggle source
# File lib/ephemeron/writers/store.rb, line 73
def add_alias(model, as, in_store_before)
  if !as.nil?
    aliases[as] = to_store_key(model)
  elsif in_store_before && !Store::AllowFetch.call(model)
    raise StoreError, "#{to_store_key(model)} is already in the store"
  end
end
stored?(model) click to toggle source
# File lib/ephemeron/writers/store.rb, line 69
def stored?(model)
  !store[to_store_key(model)].nil?
end
to_store_key(model) click to toggle source
# File lib/ephemeron/writers/store.rb, line 65
def to_store_key(model)
  Convert.call(model)
end