Class: Ephemeron::Store
- Inherits:
-
ThreadStore
- Object
- ActiveSupport::CurrentAttributes
- ThreadStore
- Ephemeron::Store
show all
- Defined in:
- lib/ephemeron/store/update.rb,
lib/ephemeron/store/convert.rb,
lib/ephemeron/writers/store.rb
Defined Under Namespace
Modules: Update
Classes: Convert
Instance Method Summary
collapse
Instance Method Details
#add(model, opts = {}) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/ephemeron/writers/store.rb', line 19
def add(model, opts = {})
return unless Validators::StoreElement.call(model)
key = Convert.call model
in_store = !store[key].nil?
store[key] = model unless in_store
if !opts[:as].nil?
aliases[opts[:as]] = key
elsif in_store
raise StoreError, "#{key} is already in the store"
end
model
end
|
#aliases ⇒ Object
11
12
13
|
# File 'lib/ephemeron/writers/store.rb', line 11
def aliases
self.ts_aliases ||= {}
end
|
#destroy(model) ⇒ Object
55
56
57
58
59
60
|
# File 'lib/ephemeron/writers/store.rb', line 55
def destroy(model)
key = Convert.call model
return if store[key].nil?
store.delete key
end
|
#get(key) ⇒ Object
33
34
35
36
37
38
|
# File 'lib/ephemeron/writers/store.rb', line 33
def get(key)
model = store[key]
model ||= store[aliases[key]]
Logger.log(model, :used) if model
model
end
|
#has?(model, as_new_record: false) ⇒ Boolean
15
16
17
|
# 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 ⇒ Object
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/ephemeron/writers/store.rb', line 44
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 ⇒ Object
62
63
64
65
|
# File 'lib/ephemeron/writers/store.rb', line 62
def reset
self.ts_store = {}
self.ts_aliases = {}
end
|
#store ⇒ Object
7
8
9
|
# File 'lib/ephemeron/writers/store.rb', line 7
def store
self.ts_store ||= {}
end
|
#validate ⇒ Object
40
41
42
|
# File 'lib/ephemeron/writers/store.rb', line 40
def validate
Validators::Store.call
end
|