Module: LaserLemon::HasToken::ClassMethods

Defined in:
lib/has_token.rb

Instance Method Summary collapse

Instance Method Details

#has_token(*args) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/has_token.rb', line 10

def has_token(*args)
  options = args.extract_options!.symbolize_keys
  options[:column] = (args.first || :token)
  options.reverse_merge!(
    :length => 6,
    :characters => [('a'..'z'), ('A'..'Z'), ('0'..'9')].map(&:to_a).sum,
    :constructor => proc(&:has_token_value),
    :to_param => false,
    :readonly => true
  )
  
  cattr_accessor :has_token_options
  return(false) if self.has_token_options.present?
  self.has_token_options = options
  
  attr_readonly(options[:column]) if options[:readonly]
  define_method(:to_param){ read_attribute(options[:column]) } if options[:to_param]
  
  has_one :global_token, :class_name => 'Token', :as => :parent, :autosave => true, :dependent => :nullify
  
  include InstanceMethods
  before_create :set_token
end