0

I wrote an app where I plan to save user data via DataMapper and sqlite3, and inventory items (several of them) using GDBM. When I run this with irb, User.new and inventory methods works fine however DataMapper says that my user model is not valid and does not save it. I worked with DataMapper previously and never encountered such an error, in fact I used the same user model (with password salt and hash) without any errors in a sinatra-datamapper app.

To be clear, I intend to save both the username and 'the path to the gdbm database file' as a string in datamapper. The gdbm creates its own db file and all methods work fine without complaints and all data is persistent. Since I am not trying to save the gdbm object but only a string in datamapper, I think there should be no problem of validation.

DataMapper::Model.raise_on_save_failure = true does not give a specific description of the error but save! method gives the following error:

DataObjects::IntegrityError: users.name may not be NULL (code: 19, sql state: , query: INSERT INTO "users" DEFAULT VALUES, uri: sqlite3:/home/barerd/game_inventory/users.db?scheme=sqlite3&user=...... but name attribute is not empty as I checked in irb.

Maybe the error originates from sqlite but I have no knowledge to test that. Can someone guide me how to inspect this error?

require 'gdbm'
require 'data_mapper'
require 'dm-validations'

DataMapper.setup :default, 'sqlite://' + Dir.pwd + '/users.db'

class User
  attr_reader :name, :inventory_db
  include DataMapper::Resource
  property id, Serial
  property :name, String, :required => true, :unique => true, :messages => { :presence =>...... etc }
  property :inventory_db, String

  def initialize name
    @name = name
    @inventory_db = Dir.pwd + '/#{name}_inventory.db'
  end

  def inventory
    GDBM.new @inventory_db, 0644, GDBM::WRCREAT
  end

..several methods related to inventory..
end

DataMapper.finalize.auto_migrate!
barerd
  • 835
  • 3
  • 11
  • 31

1 Answers1

0

Googling further, I found out that

there is a guard around defining property getter in dkubb/dm-core

via this link. After removing getter methods from the model, everything worked fine.

barerd
  • 835
  • 3
  • 11
  • 31