Module: Usesguid::ActiveRecordExtensions::ClassMethods

Defined in:
lib/usesguid/active_record_extensions.rb

Instance Method Summary collapse

Instance Method Details

#guid_columnObject



28
# File 'lib/usesguid/active_record_extensions.rb', line 28

def guid_column; class_eval { @guid_column || 'id' } end

#guid_column=(column) ⇒ Object



27
# File 'lib/usesguid/active_record_extensions.rb', line 27

def guid_column=(column); class_eval { @guid_column = column } end

#guid_compressionObject



25
# File 'lib/usesguid/active_record_extensions.rb', line 25

def guid_compression; class_eval { @guid_compression || 's' } end

#guid_compression=(compression) ⇒ Object



24
# File 'lib/usesguid/active_record_extensions.rb', line 24

def guid_compression=(compression); class_eval { @guid_compression = compression } end

#guid_generatorObject



22
# File 'lib/usesguid/active_record_extensions.rb', line 22

def guid_generator; class_eval { @guid_generator || :timestamp } end

#guid_generator=(generator) ⇒ Object

guid_generator can be :timestamp or :mysql



21
# File 'lib/usesguid/active_record_extensions.rb', line 21

def guid_generator=(generator); class_eval { @guid_generator = generator } end

#usesguid(options = {}) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/usesguid/active_record_extensions.rb', line 30

def usesguid(options = {})
  options[:as] ||= :primary_key

  class_eval do
    if options[:as] == :primary_key && options[:column]
      self.primary_key = options[:column]
    end

    before_validation :assign_guid

    def assign_guid
      self[ActiveRecord::Base.guid_column] ||= (ActiveRecord::Base.guid_generator == :database ?
                                          UUID.send( "#{ActiveRecord::Base.connection.adapter_name.downcase}_create" ) :
                                          UUID.timestamp_create).send( "to_#{ActiveRecord::Base.guid_compression}" )
    end

  end

end

#validate_guid(options = {}) ⇒ Object



50
51
52
53
54
# File 'lib/usesguid/active_record_extensions.rb', line 50

def validate_guid( options={} )
  validates_presence_of( ActiveRecord::Base.guid_column )
  validates_uniqueness_of( ActiveRecord::Base.guid_column )
  validates_length_of( ActiveRecord::Base.guid_column, :maximum => (ActiveRecord::Base.guid_compression == 's22' ? 22 : 36), :allow_blank => true )
end