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