Showing posts with label Sequel. Show all posts
Showing posts with label Sequel. Show all posts

Monday, September 2, 2013

Using factory_bot with Sequel Models

factory_bot builds objects. Sequel is a database toolkit with support for models and model validation. It's very easy to use factory_bot to test Sequel models.

Out of the box, factory_bot can build non-persisted instances of Sequel models by calling FactoryBot.build(:symbol). It just can't create them and save them in a single method call with FactoryBot.create(:symbol). In fact, if you try calling factory_bot's create method, you will get an error message that looks like this:

NoMethodError: undefined method `save!' for #<Model:...>

There are two ways around this:
  1. Call FactoryBot.build(:symbol) to build a non-persisted Model instance and then call that instance's create() method
  2. Modify your FactoryBot definitions to specify a different method to call on create() 
Method #2 is better because your testing code becomes clearer. Just put this at the top of your FactoryBot definitions for Sequel models:

to_create { |i| i.save }

2018-08-12 Edit: 'factory_girl' was renamed to 'factory_bot' in 2017 and I found out about it today :-) Also updated the link to Sequel.

Monday, August 6, 2012

InvalidURIError For pg Gem - Connection String Issue

While working on my Sinatra & PostgreSQL-powered web-site (using Sequel 3.37.0 and pg 0.14.0), I encountered an odd URI-related error message. When connecting to the server, the resulting error message looked like this:

Error: URI::InvalidURIError: the scheme postgres does not accept registry part:

The root cause was that part of the connection string has a question mark in it. A question mark is used to separate the query string part of a URL from the rest of the URL. In the above connection string example, Ruby's URI-related code seems to treat the part of the connection string past the question mark as an invalid query string.
To resolve the problem, call CGI.escape to fix issues with the conection string.

Thanks

Stack Overflow - In Ruby, how do I replace the question mark character in a string?

This SO question (and the accepted answer by kmkaplan) suggested the use of CGI's escape method.