Fix to accomodate non-standard PK columns.

This commit is contained in:
Mike Gunderloy 2009-03-21 06:28:27 -05:00
parent fc49421890
commit cd5e2a53f4
5 changed files with 38 additions and 7 deletions

5
README
View File

@ -55,3 +55,8 @@ db_populate includes two rake tasks:
rake db:populate loads all of the data for the current environment
rake db:migrate_and_populate is the same as calling rake db:migrate followed by rake db:populate
History
=======
2009-03-21 Patch from Ahmed El-Daly to allow PKs with names other than id
2008-10-11 Initial release

View File

@ -1,10 +1,10 @@
Gem::Specification.new do |s|
s.name = "db_populate"
s.version = "0.2.0"
s.date = "2008-10-11"
s.version = "0.2.1"
s.date = "2009-03-21"
s.summary = "Seed data populator for Rails"
s.email = "MikeG1@larkfarm.com"
s.homepage = "http://github.com/ffmike/db_populate"
s.homepage = "http://github.com/ffmike/db-populate/tree/master"
s.description = "db_populate provides rake and code support for adding seed data to Rails projects. Forked from a rake task by
Josh Knowles, plus code by Luke Francl."
s.has_rdoc = false

View File

@ -1,5 +1,6 @@
class ActiveRecord::Base
# given a hash of attributes including the ID, look up the record by ID.
# uses whatever the PK of the model is to do the lookup
# If it does not exist, it is created with the rest of the options.
# If it exists, it is updated with the given options.
#
@ -7,8 +8,8 @@ class ActiveRecord::Base
#
# Returns the record.
def self.create_or_update(options = {})
id = options.delete(:id)
record = find_by_id(id) || new
id = options.delete(primary_key.to_sym)
record = send("find_by_#{primary_key}", id) || new
record.id = id
record.attributes = options
record.save!

View File

@ -6,6 +6,10 @@ require 'mocha'
class User < ActiveRecord::Base
end
class Customer < ActiveRecord::Base
set_primary_key "cust_id"
end
class DbPopulateTest < Test::Unit::TestCase
def test_creates_new_record
@ -25,5 +29,22 @@ class DbPopulateTest < Test::Unit::TestCase
assert_equal u.name, "George"
end
def test_creates_new_record_with_nonstandard_pk
Customer.delete_all
Customer.create_or_update(:cust_id => 1, :name => "Fred")
assert_equal Customer.count, 1
c = Customer.find(:first)
assert_equal c.name, "Fred"
end
def test_updates_existing_record
Customer.delete_all
Customer.create_or_update(:cust_id => 1, :name => "Fred")
Customer.create_or_update(:cust_id => 1, :name => "George")
assert_equal Customer.count, 1
c = Customer.find(:first)
assert_equal c.name, "George"
end
end

View File

@ -4,4 +4,8 @@ ActiveRecord::Schema.define(:version => 0) do
t.string "name"
end
create_table "customers", :primary_key => 'cust_id', :force => true do |t|
t.string "name"
end
end