KirbyBase, Table Default Values not being assigned

Hi Ive been using KirbyBase and got it up and working and been fine with
basic stuff such as inserting and selecting. I create my own record
class as well to retrieve and pass data to the table.

The problem is with using default values. I cant seem to get the db to
substitiute any blank (nil) values in my custom record class with the
default values I specified when creating the table. When i check the
table in a text editor after an insert the values are kb_nil - hence its
not substituting like it should during the insert operation. Hence when
I do a select on the table in question i get nil values back rather than
the default values.

I experimented in irb and when i dont create a custom record class it
seems to work but i cant find anything in the docs that suggest i should
be doing anything different if i use my own custom record class.

heres is some code for you to use in irb which makes use of a custom
record class called task (im making a todo list) which replicates the

require ‘kirbybase’

class Task
attr_accessor(:recno, :title)

def Task.kb_create(recno, title) do |x|
x.recno = recno
x.title = title

def initialize(&block)

db =
tbl = db.create_table(:deleteme, :title, {:DataType=>:String,
:Default=>‘No Title’}) do |t|
t.record_class = Task

a_task = {|r| r.title = nil}

the result of the above select

=> [#<Task:0x4ec71e8 @title=nil, @recno=1>]

title should not be nil. It should be “No Title”.

here is the table file after insert

000001|000000|Task|recno:Integer|title:String:Default->No Title

can anyone tell me where im going wrong on this???

im still banging my head against a wall on this one. I have no idea what
im doing wrong…are there any other kirbybase users out there who can
test the code ive supplied and see if they get the same error???

Adam, from quickly browsing through the KirbyBase code, it looks like
the normal default value mechanism doesn’t work if you use custom
record classes. A default value for a column is used only if the data
passed to #insert doesn’t contain a value for the column. An instance
of your custom record class always has accessors for all columns, so
the default values are never used. I think you have to handle default
values in your custom class.


Thanks Pit for that, ive decided to scrap the class and just work with
hashses and structs.