· 7 years ago · Oct 04, 2018, 06:24 AM
1class Credential
2 include ActiveModel::Validations
3
4 attr_accessor :screen_name, :oauth_token, :oauth_secret, :token, :description
5
6 validates_presence_of :screen_name, :oauth_token, :oauth_secret, :message => 'required'
7 validate :user_exists, :unless => :errors?
8
9 def initialize(attributes = {})
10 attributes.each { |k, v| set_recognized_attribute(k, v) }
11 end
12
13 def save
14 valid? && create_device
15 end
16
17 def api_key
18 @device.api_key
19 end
20
21 private
22
23 def errors?
24 errors.any?
25 end
26
27 def set_recognized_attribute(name, value)
28 setter_method = "#{name}="
29 self.send(setter_method, value) if respond_to?(setter_method)
30 end
31
32 def user
33 @user ||= User.by_screen_name(screen_name).where({
34 :oauth_token => oauth_token,
35 :oauth_secret => oauth_secret
36 }).first
37 end
38
39 def create_device
40 @device = Device.find_or_create_by_token!({
41 :token => token,
42 :description => description,
43 :user_id => user.id
44 })
45 !@device.nil?
46 end
47
48 def user_exists
49 errors.add(:user, 'not found') unless user.present?
50 end
51end