/app/models/user.rb

https://github.com/PopulateTools/gobierto · Ruby · 74 lines · 55 code · 18 blank · 1 comment · 5 complexity · 713327465d6a9dae489967c4bd756cb8 MD5 · raw file

  1. class User < ApplicationRecord
  2. include Authentication::Authenticable
  3. include Authentication::Confirmable
  4. include Authentication::Recoverable
  5. include Session::Trackable
  6. include User::Subscriber
  7. EMAIL_ADDRESS_REGEXP = /\A(.+)@(.+\..+)\z/
  8. belongs_to :site
  9. has_many :verifications, class_name: "User::Verification", dependent: :destroy
  10. has_many :census_verifications, class_name: "User::Verification::CensusVerification"
  11. has_many :id_number_verifications, class_name: "User::Verification::IdNumber"
  12. has_many :subscriptions, dependent: :destroy
  13. has_many :notifications, dependent: :destroy
  14. has_many :api_tokens, dependent: :destroy, class_name: "User::ApiToken"
  15. has_many :custom_records, dependent: :destroy, class_name: "GobiertoCommon::CustomUserFieldRecord"
  16. after_create :primary_api_token!
  17. # GobiertoData
  18. has_many :queries, dependent: :destroy, class_name: "GobiertoData::Query"
  19. has_many :visualizations, dependent: :destroy, class_name: "GobiertoData::Visualization"
  20. has_many :data_favorites, dependent: :destroy, class_name: "GobiertoData::Favorite"
  21. accepts_nested_attributes_for :custom_records
  22. validates :email, uniqueness: { scope: :site }
  23. scope :census_verified, -> { where(census_verified: true) }
  24. scope :sorted, -> { order(created_at: :desc) }
  25. scope :by_site, ->(site) { where(site: site) }
  26. enum gender: { male: 0, female: 1 }
  27. enum notification_frequency: {
  28. disabled: 0, immediate: 1, hourly: 2, daily: 3, weekly: 4
  29. }, _suffix: :notifications
  30. def verified_in_site?(site)
  31. site_verification(site).present?
  32. end
  33. def site_verification(site)
  34. @user_verifications ||= {}
  35. @user_verifications[site] ||= census_verifications.find_by(site_id: site.id, user_id: self.id, verified: true)
  36. @user_verifications[site]
  37. end
  38. def id_hmac
  39. SecretAttribute.hmac(id)
  40. end
  41. def age
  42. now = Time.now.utc.to_date
  43. now.year - date_of_birth.year - ((now.month > date_of_birth.month || (now.month == date_of_birth.month && now.day >= date_of_birth.day)) ? 0 : 1)
  44. end
  45. def email=(value)
  46. if value.present?
  47. super(value.downcase)
  48. end
  49. end
  50. def primary_api_token!
  51. @primary_api_token = api_tokens.primary.take || api_tokens.primary.create
  52. end
  53. def primary_api_token
  54. @primary_api_token ||= api_tokens.primary.take
  55. end
  56. end