Advertisement
Guest User

Untitled

a guest
Dec 24th, 2016
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.00 KB | None | 0 0
  1. # == Schema Information
  2. #
  3. # Table name: users
  4. #
  5. # id :integer not null, primary key
  6. # name :string(255)
  7. # email :string(255)
  8. # created_at :datetime
  9. # updated_at :datetime
  10. # password_digest :string(255)
  11. # remember_token :string(255)
  12. # admin :boolean default(FALSE)
  13. # password_reset_token :string(255)
  14. # password_reset_sent_at :datetime
  15. # admin_note :text(800)
  16. # applications_count :integer
  17. # admin_link :string(255)
  18. # sourced :boolean default(FALSE)
  19. #
  20.  
  21. class User < ActiveRecord::Base
  22. VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
  23. default_scope { order('users.id DESC') }
  24.  
  25. before_save { self.email = email.downcase }
  26. before_create :create_remember_token
  27. before_create :ensure_common_app
  28. before_create :ensure_admin_link
  29.  
  30. has_one :common_app, dependent: :destroy, inverse_of: :user
  31. has_one :video, inverse_of: :user, dependent: :destroy
  32. has_one :extra_info, inverse_of: :user, dependent: :destroy
  33. has_many :cities, through: :common_app
  34. has_many :industries, through: :common_app
  35. has_many :applications, dependent: :destroy
  36. has_many :jobs, through: :applications
  37.  
  38. has_secure_password validations: false
  39.  
  40. validates :name, presence: true,
  41. length: { maximum: 50 }
  42.  
  43. validates :email, presence: true,
  44. format: { with: VALID_EMAIL_REGEX },
  45. uniqueness: { case_sensitive: false }
  46.  
  47. validates :password, length: { minimum: 6 }, allow_blank: true
  48. validates :password, presence: true, on: :create
  49.  
  50. accepts_nested_attributes_for :common_app,
  51. reject_if: :all_blank,
  52. allow_destroy: true
  53.  
  54. accepts_nested_attributes_for :extra_info,
  55. reject_if: :all_blank,
  56. allow_destroy: true
  57.  
  58. scope :proactive, -> { where(sourced: false) }
  59. scope :sourced, -> { where(sourced: true) }
  60.  
  61. scope :with_dependents, -> do
  62. User.includes(:common_app)
  63. .includes(:video)
  64. .includes(:applications)
  65. .includes(:jobs)
  66. end
  67.  
  68. scope :for_profile, -> do
  69. User.includes(applications: :job)
  70. .includes(:video)
  71. .includes(common_app: [:cities, :industries])
  72. end
  73.  
  74. searchable do
  75. text :name, :email, :admin_note
  76.  
  77. text :current_city do
  78. common_app.try(:current_city)
  79. end
  80.  
  81. text :nationality do
  82. common_app.try(:nationality)
  83. end
  84.  
  85. text :china_contrib do
  86. common_app.try(:china_contrib)
  87. end
  88.  
  89. text :china_time do
  90. common_app.try(:china_time)
  91. end
  92.  
  93. text :job_interest do
  94. common_app.try(:job_interest)
  95. end
  96.  
  97. text :china_goals do
  98. common_app.try(:china_goals)
  99. end
  100.  
  101. integer :grad_year do
  102. common_app.try(:grad_year)
  103. end
  104.  
  105. integer :city_ids, multiple: true do
  106. common_app.try(:city_ids)
  107. end
  108.  
  109. integer :industry_ids, multiple: true do
  110. common_app.try(:industry_ids)
  111. end
  112.  
  113. integer :role_type_ids, multiple: true do
  114. common_app.try(:role_type_ids)
  115. end
  116.  
  117. boolean :has_video do
  118. common_app.try(:has_video)
  119. end
  120.  
  121. text :extra_info_education do
  122. extra_info.try(:education)
  123. end
  124.  
  125. text :extra_info_experience_1 do
  126. extra_info.try(:experience_1)
  127. end
  128.  
  129. text :extra_info_experience_2 do
  130. extra_info.try(:experience_2)
  131. end
  132. end
  133.  
  134. def potential_jobs
  135. Job.includes(:cities, :industries)
  136. .where('cities.id IN (?)', self.common_app.city_ids)
  137. .where('industries.id IN (?)', self.common_app.industry_ids)
  138. .where('jobs.id NOT IN (?)', self.jobs.map(&:id).concat([0]))
  139. end
  140.  
  141. def self.works(param)
  142. !param.blank?
  143. end
  144.  
  145. def self.encrypt(token)
  146. Digest::SHA1.hexdigest(token.to_s)
  147. end
  148.  
  149. def self.new_remember_token
  150. SecureRandom.urlsafe_base64
  151. end
  152.  
  153. def first_name
  154. self.name.split(" ").first
  155. end
  156.  
  157. def last_name
  158. self.name.split(" ").last
  159. end
  160.  
  161. def generate_email
  162. email_tag = "#{self.first_name}-#{self.last_name}-#{Time.now.to_date.to_s}"
  163. self.email = "#{email_tag}@atlas-china.com"
  164.  
  165. self
  166. end
  167.  
  168. def generate_pass
  169. self.password = ("a".."z").to_a.sample(8).join("")
  170.  
  171. self
  172. end
  173.  
  174. def generate_token(column)
  175. begin
  176. self[column] = SecureRandom.urlsafe_base64
  177. end while User.exists?(column => self[column])
  178. end
  179.  
  180. def generate_password_reset
  181. generate_token(:password_reset_token)
  182. self.password_reset_sent_at = Time.zone.now
  183. save!
  184.  
  185. self.password_reset_token
  186. end
  187.  
  188. def send_password_reset
  189. generate_password_reset
  190. UserMailer.password_reset(self).deliver
  191. end
  192.  
  193. private
  194. def ensure_common_app
  195. self.common_app || self.build_common_app
  196. end
  197.  
  198. def create_remember_token
  199. self.remember_token = User.encrypt(User.new_remember_token)
  200. end
  201.  
  202. def ensure_admin_link
  203. self.generate_token(:admin_link)
  204. end
  205. end
  206.  
  207. scope :with_dependents, -> { includes(:common_app, :video, :applications, :jobs) }
  208.  
  209. class PasswordManager
  210. attr_reader :user
  211.  
  212. def initialize(user)
  213. @user = user
  214. end
  215.  
  216. def generate_password
  217. user.password = ("a".."z").to_a.sample(8).join("")
  218. end
  219. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement