authorization.rb 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. class Authorization < ApplicationModel
  2. belongs_to :user
  3. validates_presence_of :user_id, :uid, :provider
  4. validates_uniqueness_of :uid, :scope => :provider
  5. after_create :cache_delete
  6. after_update :cache_delete
  7. after_destroy :cache_delete
  8. def self.find_from_hash(hash)
  9. auth = Authorization.where( :provider => hash['provider'], :uid => hash['uid'] )
  10. if auth && auth.first then
  11. # raise auth.first.to_yaml
  12. # raise hash.to_yaml
  13. # update auth tokens
  14. auth.first.update_attributes(
  15. :token => hash['credentials']['token'],
  16. :secret => hash['credentials']['secret']
  17. )
  18. # update image if needed
  19. if hash['info']['image']
  20. user = User.where( :id => auth.first.user_id ).first
  21. user.update_attributes(
  22. :image => hash['info']['image']
  23. )
  24. # reset cache
  25. user.cache_delete
  26. end
  27. end
  28. return auth.first
  29. end
  30. def self.create_from_hash(hash, user = nil)
  31. if user then
  32. user.update_attributes(
  33. :username => hash['username'],
  34. :image => hash['info']['image']
  35. )
  36. else
  37. user = User.create_from_hash!(hash)
  38. end
  39. Authorization.create(
  40. :user => user,
  41. :uid => hash['uid'],
  42. :username => hash['username'],
  43. :provider => hash['provider'],
  44. :token => hash['credentials']['token'],
  45. :secret => hash['credentials']['secret']
  46. )
  47. # reset cache
  48. user.cache_delete
  49. end
  50. end