Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
getfitter-core / app / models / core / user.rb
Size: Mime:
module Core
  class User < ActiveRecord::Base
    include UserMergeConcern
    include FacebookGraphConcern

    devise :database_authenticatable, :registerable, :lockable, :recoverable,
           :rememberable, :trackable, :validatable,
           :omniauthable, omniauth_providers: [:gplus, :facebook]

    has_one :organisation, foreign_key: 'owner_id'
    has_many :bookings, dependent: :destroy
    has_many :pass_purchases, dependent: :destroy
    has_many :oauth_applications,
             class_name: 'Doorkeeper::Application', as: :owner,
             dependent: :destroy

    validates :name, presence: true
    validates :email, presence: true, uniqueness: true

    default_scope { order('created_at') }

    def booking_email
      "bookings+#{Zlib.crc32(email)}@getfitter.co"
    end

    def active_pass_purchases
      active = []

      pass_purchases.includes(:pass).each do |purchase|
        expires = purchase.purchased_date.advance(days: purchase.pass.duration)
        active << purchase if expires >= DateTime.now
      end

      active
    end

    def active_passes
      passes = []

      active_pass_purchases.each do |purchase|
        passes << purchase.pass
      end

      passes
    end

    def valid_pass?(event)
      result = false

      active_pass_purchases.each do |purchase|
        result = true if purchase.pass.organisation == event.organisation
      end

      result
    end

    def self.from_omniauth(auth)
      where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
        user.email = auth.info.email
        user.password = Devise.friendly_token[0, 20]
        user.name = auth.info.name
      end
    end

    def self.from_hash(auth)
      where(provider: auth[:provider],
            uid: auth[:id]).first_or_create! do |user|
        user.email = auth[:info][:email]
        user.password = Devise.friendly_token[0, 20]
        user.name = auth[:info][:name]
      end
    end
  end
end