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