Class: CleverSequence
- Inherits:
-
Object
show all
- Defined in:
- lib/demo_mode/clever_sequence.rb,
lib/demo_mode/clever_sequence/postgres_backend.rb,
lib/demo_mode/clever_sequence/in_memory_backend.rb,
lib/demo_mode/clever_sequence/lower_bound_finder.rb
Defined Under Namespace
Modules: InMemoryBackend, PostgresBackend
Classes: LowerBoundFinder
Constant Summary
collapse
- DEFAULT_BLOCK =
->(i) { i }
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(attribute, &block) ⇒ CleverSequence
Returns a new instance of CleverSequence.
56
57
58
59
|
# File 'lib/demo_mode/clever_sequence.rb', line 56
def initialize(attribute, &block)
@attribute = attribute.to_s
@block = block || DEFAULT_BLOCK
end
|
Instance Attribute Details
#attribute ⇒ Object
Returns the value of attribute attribute.
54
55
56
|
# File 'lib/demo_mode/clever_sequence.rb', line 54
def attribute
@attribute
end
|
#block ⇒ Object
Returns the value of attribute block.
54
55
56
|
# File 'lib/demo_mode/clever_sequence.rb', line 54
def block
@block
end
|
#klass ⇒ Object
Returns the value of attribute klass.
54
55
56
|
# File 'lib/demo_mode/clever_sequence.rb', line 54
def klass
@klass
end
|
Class Method Details
.last(klass, name) ⇒ Object
43
44
45
|
# File 'lib/demo_mode/clever_sequence.rb', line 43
def last(klass, name)
lookup(klass, name)&.last
end
|
.next(klass, name) ⇒ Object
39
40
41
|
# File 'lib/demo_mode/clever_sequence.rb', line 39
def next(klass, name)
lookup(klass, name)&.next
end
|
.reset! ⇒ Object
24
25
26
27
|
# File 'lib/demo_mode/clever_sequence.rb', line 24
def reset!
backend.reset!
sequences.each_value(&:reset!)
end
|
.snapshot_last_values ⇒ Object
35
36
37
|
# File 'lib/demo_mode/clever_sequence.rb', line 35
def snapshot_last_values
sequences.transform_values { |seq| seq.send(:last_value) }.compact
end
|
.with_sequence_adjustment ⇒ Object
29
30
31
32
33
|
# File 'lib/demo_mode/clever_sequence.rb', line 29
def with_sequence_adjustment(&)
last_values = snapshot_last_values
reset!
backend.with_sequence_adjustment(last_values:, &)
end
|
Instance Method Details
#last ⇒ Object
77
78
79
|
# File 'lib/demo_mode/clever_sequence.rb', line 77
def last
block.call(last_value || (klass ? self.class.backend.starting_value(klass, attribute, block) : 0))
end
|
#next ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'lib/demo_mode/clever_sequence.rb', line 67
def next
value = if klass
self.class.backend.nextval(klass, attribute, block)
else
(last_value || 0) + 1
end
self.last_value = value
last
end
|
#reset! ⇒ Object
81
82
83
|
# File 'lib/demo_mode/clever_sequence.rb', line 81
def reset!
clear_last_value
end
|
#with_class(klass) ⇒ Object
61
62
63
64
65
|
# File 'lib/demo_mode/clever_sequence.rb', line 61
def with_class(klass)
sequences[[klass.name, attribute.to_s]] = self if klass && !@klass
@klass ||= klass
self
end
|