Module: CleverSequence::PostgresBackend
- Defined in:
- lib/demo_mode/clever_sequence/postgres_backend.rb
Defined Under Namespace
Modules: SequenceResult
Classes: SequenceNotFoundError
Constant Summary
collapse
- SEQUENCE_PREFIX =
'cs_'
Class Method Summary
collapse
Class Method Details
.nextval(klass, attribute, block) ⇒ Object
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/demo_mode/clever_sequence/postgres_backend.rb', line 48
def nextval(klass, attribute, block)
name = sequence_name(klass, attribute)
log "[DemoMode] nextval called for #{klass.name}##{attribute} (sequence: #{name})"
if sequence_exists?(name)
nextval_from_sequence(name, klass, attribute, block)
else
nextval_without_sequence(name, klass, attribute, block)
end
end
|
.reset! ⇒ Object
27
28
29
|
# File 'lib/demo_mode/clever_sequence/postgres_backend.rb', line 27
def reset!
Thread.current[:clever_sequence_cache] = {}
end
|
.sequence_cache ⇒ Object
68
69
70
|
# File 'lib/demo_mode/clever_sequence/postgres_backend.rb', line 68
def sequence_cache
Thread.current[:clever_sequence_cache] ||= {}
end
|
.sequence_name(klass, attribute) ⇒ Object
59
60
61
62
63
64
65
66
|
# File 'lib/demo_mode/clever_sequence/postgres_backend.rb', line 59
def sequence_name(klass, attribute)
table = klass.table_name.gsub(/[^a-z0-9_]/i, '_')
attr = attribute.to_s.gsub(/[^a-z0-9_]/i, '_')
limit = (63 - SEQUENCE_PREFIX.length) / 2
"#{SEQUENCE_PREFIX}#{table[0, limit]}_#{attr[0, limit]}".downcase
end
|
.starting_value(klass, attribute, block) ⇒ Object
31
32
33
|
# File 'lib/demo_mode/clever_sequence/postgres_backend.rb', line 31
def starting_value(klass, attribute, block)
calculate_sequence_value(klass, attribute, block)
end
|
.with_sequence_adjustment(last_values: {}) ⇒ Object
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/demo_mode/clever_sequence/postgres_backend.rb', line 35
def with_sequence_adjustment(last_values: {})
previous = Thread.current[:clever_sequence_adjustment_enabled]
previous_last_values = Thread.current[:clever_sequence_last_values]
log "[DemoMode] Enabling sequence adjustment for retry"
Thread.current[:clever_sequence_adjustment_enabled] = true
Thread.current[:clever_sequence_last_values] = last_values
yield
ensure
Thread.current[:clever_sequence_adjustment_enabled] = previous
Thread.current[:clever_sequence_last_values] = previous_last_values
log "[DemoMode] Disabled sequence adjustment"
end
|