Sha256: 3a58a757e9b7df07a2ced93ddce040ab0ae2089fe7c07026889a82c1384077ee
Contents?: true
Size: 1.3 KB
Versions: 1
Compression:
Stored size: 1.3 KB
Contents
module ActsAsKeyed def self.included(base) base.extend ClassMethods end module ClassMethods def acts_as_keyed(options={}) class_inheritable_accessor :options options[:size] ||= 10 options[:chars] ||= ('a'..'z').to_a + ('A'..'Z').to_a + (1..9).to_a - ['l','I','O'] self.options = options raise ArgumentError, "#{self.name} is missing key column" if columns_hash['key'].nil? before_validation_on_create :create_key attr_protected :key class << self def find(*args) if self.options[:as_param] && args.first.is_a?(String) find_by_key(args) else super(*args) end end end include InstanceMethods end end module InstanceMethods def to_param options[:as_param] ? self.key : self.id.to_s end def regenerate_key! self.create_key self.save end protected def create_key k = random_key while(self.class.count(:conditions => { :key => k }) > 0) k = random_key end self.key = k end def random_key code_array=[] 1.upto(options[:size]) { code_array << options[:chars][rand(options[:chars].length)] } code_array.to_s end end end ActiveRecord::Base.send :include, ActsAsKeyed
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
acts_as_keyed-0.0.5 | lib/acts_as_keyed.rb |