Skip to content

gristmill/code_spike

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CodeSpike

CodeSpike is a simple Gem for spiking ActiveRecord models. It uses an in memory sqlite3 database and requires all the necessary libs for unit testing. In addition it provides a DSL for creating the database schema as well calling test methods.

I created this Gem because when working on complex ActiveRecord associations, I like to hop outside of Rails to isolate the problem. Setting up ActiveRecord outside of Rails is easy enough, but the setup is a little verbose and I can never quite remember all the libraries or the exact syntax. So I spend time googling or looking back through old code, which I don't like doing if I've already solved the problem.

This Gem just wraps the setup and adds a simple DSL that I can remember, so I can move right into the problem I'm working on!

Installation

gem install code_spike

Usage

require 'code_spike'

schema do
  create_table(:people ){ |t| t.string :name }
end

class Person < ActiveRecord::Base; end

units do
  test "person create" do
    assert Person.create!
  end
end

For comparison, this is how you would do the same thing without this Gem.

require 'test/unit'
require 'active_support/core_ext/class/subclasses'
require 'active_support/test_case'
require 'active_record'

ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
ActiveRecord::Migration.verbose = false

ActiveRecord::Schema.define do
  create_table(:people ){ |t| t.string :name }
end

class Person < ActiveRecord::Base; end

class CodeSpikeTest < ActiveSupport::TestCase
  teardown { ActiveRecord::Base.subclasses.each { |klass| klass.destroy_all} }

  test "person create" do
    assert Person.create!
  end
end

Using Fixtures

You can also use fixtures to load up seed data for your tests. You have to provide the directory to the YAML files. Here is an example using fixtures.

require 'code_spike'

# In ./companies.yml
#
# one:
#   name: Gristmill
fixtures_directory '.'

schema do
  create_table :companies { |t| t.string :name }
end

class Company < ActiveRecord::Base; end

units do
  test "company" do
    assert_equal "Gristmill", Company.first.name
  end
end

Releases

No releases published

Packages

No packages published

Languages