58 lines
1.5 KiB
Crystal
58 lines
1.5 KiB
Crystal
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
|