17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/has_token.rb', line 17
def has_token(*args)
options = args..symbolize_keys
options.reverse_merge!(HasToken::Configuration.options)
options.merge!(
:column => args.first || :token
).reverse_merge!(
:length => 6,
:characters => [('a'..'z'), ('A'..'Z'), ('0'..'9')].map(&:to_a).sum,
:constructor => proc(&:generate_token),
:to_param => false,
:readonly => true,
:dependent => :nullify,
:callback => :before_create
)
class_inheritable_accessor :has_token_options
return false unless has_token_options.nil?
self.has_token_options = options
if options[:to_param]
define_method(:to_param_with_token) do
read_attribute(options[:column])
end
alias_method_chain :to_param, :token
end
if options[:readonly]
attr_readonly(options[:column])
end
has_one :global_token, :class_name => 'Token', :as => :parent, :dependent => options[:dependent]
include InstanceMethods
send has_token_options[:callback], :create_token
end
|