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
 |