Add a template of trigger.

This commit is contained in:
Philippe Pittoli 2024-12-18 18:58:30 +01:00
parent aa51e07211
commit 0f6607b54d

58
spec/test-triggers.cr Normal file
View file

@ -0,0 +1,58 @@
require "spec"
require "./db-cars.cr"
class DODB::Trigger::Virtual(V) < DODB::Trigger(V)
# Indexes a value, used for **internal operations**.
def index(key : String, value : V)
puts "index: key #{key}, value #{value}"
end
# Removes the index of a value, used for **internal operations**.
def deindex(key : String, value : V)
puts "deindex: key #{key}, value #{value}"
end
# Verifies whether a new value will create a collision with the index of
# currently stored value, used for **internal operations**.
def check!(key : String, value : V, old_value : V?)
puts "check!: key #{key}, value #{value}, old_value #{old_value}"
false
end
# Name of the index, such as *id* or *color* for example.
# This is an arbitrary value, mostly to create the index directory.
def name : String
name = "some name"
puts "name: #{name}"
name
end
# Directory where the values will be written.
def trigger_directory : String
dir = "something"
puts "trigger directory: #{dir}"
dir
end
# Removes all the index entries, removes the `#trigger_directory` by default.
def nuke_trigger
puts "nuke trigger"
end
end
car0 = Car.new "Corvet-0", "red", [] of String
car1 = Car.new "Corvet-1", "red", [] of String
car2 = Car.new "Corvet-2", "red", [] of String
car3 = Car.new "Corvet-3", "red", [] of String
db = SPECDB::Common(Car).new "test-triggers", 2
db.triggers << DODB::Trigger::Virtual(Car).new
db << car0
db.delete 0
db << car0
db << car1
carm = car1
carm.name = "modified"
db << carm
db << car2
db << car3