Module: Tokens::ActiveRecord::InstanceMethods

Defined in:
lib/tokens/active_record.rb

Instance Method Summary collapse

Instance Method Details

#add_token(name, options = {}) ⇒ Object

Add a new token.

@user.add_token(:api_key, token: 'abc123')
@user.add_token(:api_key, expires_at: nil)
@user.add_token(:api_key, size: 20)
@user.add_token(:api_key, data: {when: Time.now})


143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/tokens/active_record.rb', line 143

def add_token(name, options={})
  options.reverse_merge!({
    expires_at: 2.days.from_now,
    size: 12,
    data: nil
  })

  remove_token(name)
  attrs = {
    name: name.to_s,
    token: options[:token] || self.class.generate_token(options[:size]),
    expires_at: options[:expires_at],
    data: options.fetch(:data) || {}
  }

  self.tokens.create!(attrs)
end

#find_token(name, token) ⇒ Object

Find a token.

@user.find_token(:activation, "abcdefg")


106
107
108
109
110
111
112
# File 'lib/tokens/active_record.rb', line 106

def find_token(name, token)
  self.class.find_token(
    tokenizable_id: self.id,
    name: name.to_s,
    token: token
  )
end

#find_token_by_name(name) ⇒ Object

Find token by its name.



115
116
117
# File 'lib/tokens/active_record.rb', line 115

def find_token_by_name(name)
  self.tokens.where(name: name.to_s).first
end

#find_valid_token(name, token) ⇒ Object

Return Token instance when token is valid.



120
121
122
123
124
# File 'lib/tokens/active_record.rb', line 120

def find_valid_token(name, token)
  token = find_token(name, token)
  return unless token
  !token.expired? && token
end

#remove_token(name) ⇒ Object

Remove token.

@user.remove_token(:activate)


130
131
132
133
134
# File 'lib/tokens/active_record.rb', line 130

def remove_token(name)
  return if new_record?
  token = find_token_by_name(name)
  token && token.destroy
end

#valid_token?(name, hash) ⇒ Boolean

Verify if given token is valid.

@user.valid_token?(:active, "abcdefg")

Returns:

  • (Boolean)


98
99
100
# File 'lib/tokens/active_record.rb', line 98

def valid_token?(name, hash)
  self.tokens.where(name: name.to_s, token: hash.to_s).first != nil
end