diff --git a/spec/test-triggers.cr b/spec/test-triggers.cr new file mode 100644 index 0000000..2ccb221 --- /dev/null +++ b/spec/test-triggers.cr @@ -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