From bb9fcf46c88313415df1d34d2053375d530c68fb Mon Sep 17 00:00:00 2001 From: pyromaniac Date: Wed, 26 Sep 2012 14:44:29 +0700 Subject: [PATCH] Fixed uuid field type for migrations, added ability to specify uuid as primary key --- README.mkd | 2 +- lib/activeuuid/railtie.rb | 19 +++++++++++-------- lib/activeuuid/uuid.rb | 5 +++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/README.mkd b/README.mkd index 4dbccd4..9bed49c 100644 --- a/README.mkd +++ b/README.mkd @@ -12,7 +12,7 @@ Add `binary(16)` UUIDs to ActiveRecord. class CreateEmails < ActiveRecord::Migration def self.up create_table :emails, :id => false do |t| - t.uuid :id, :unique => true + t.uuid :id, :primary_key => true t.uuid :sender_id # belongs_to :sender t.string :subject diff --git a/lib/activeuuid/railtie.rb b/lib/activeuuid/railtie.rb index b17f091..8231e00 100644 --- a/lib/activeuuid/railtie.rb +++ b/lib/activeuuid/railtie.rb @@ -4,17 +4,20 @@ module ActiveUUID class Railtie < Rails::Railtie railtie_name :activeuuid - initializer "activeuuid.configure_rails_initialization" do - module ActiveRecord::ConnectionAdapters - class Table - def uuid (*args) - options = args.extract_options! - column_names = args - column_names.each { |name| column(name, 'binary(16)', options) } - end + + module Migrations + def uuid(*args) + options = args.extract_options! + column_names = args + column_names.each do |name| + column(name, "binary(16)#{' primary key' if options.delete(:primary_key)}", options) end end + end + initializer "activeuuid.configure_rails_initialization" do + ActiveRecord::ConnectionAdapters::Table.send :include, Migrations if defined? ActiveRecord::ConnectionAdapters::Table + ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Migrations if defined? ActiveRecord::ConnectionAdapters::TableDefinition end end end diff --git a/lib/activeuuid/uuid.rb b/lib/activeuuid/uuid.rb index e2bf6ba..ef10abe 100644 --- a/lib/activeuuid/uuid.rb +++ b/lib/activeuuid/uuid.rb @@ -78,6 +78,7 @@ def dump(uuid) private def parse_string str + return nil if str.blank? if str.length == 36 UUIDTools::UUID.parse str elsif str.length == 32 @@ -112,7 +113,7 @@ def uuid_attributes def uuid_generator(generator_name=nil) @_activeuuid_kind = generator_name if generator_name @_activeuuid_kind || :random - end + end def uuids(*attributes) @_activeuuid_attributes = attributes.collect(&:intern).each do |attribute| @@ -146,6 +147,6 @@ def generate_uuids_if_needed self.send("#{attr}=", create_uuid) unless self.send(attr) end end - + end end