Sha256: 1110d501fbb13e923b6a12dae6a3e1bf114b286b858fd13d7feabeb4aaa3a38e

Contents?: true

Size: 895 Bytes

Versions: 8

Compression:

Stored size: 895 Bytes

Contents

module Devise::Oauth::Scopable
  extend ActiveSupport::Concern

  def scope=(scope)
    self.scope_mask = self.class.scope_to_mask(scope)
  end

  def scope
    self.class.mask_to_scope(scope_mask)
  end

  def has_scope?(scope)
    self.scope_mask & self.class.scope_to_mask(scope) > 0
  end

  def scope_to_response
    scope.join(" ")
  end

  module ClassMethods
    def scopes
      @@scopes ||= Devise::Oauth.scopes.map {|s| s.to_s}
    end

    def scope_to_mask(scope=[])
      return 0 if scope.blank?
      (scope.map(&:to_s) & scopes).map { |r| 2**scopes.index(r) }.sum
    end

    def mask_to_scope(mask)
      return [] if mask == 0
      scopes.reject {|r| (mask & 2**scopes.index(r)).zero? }
    end

    def where_scope(scope=[])
      if scope.blank?
        where "scope_mask = 0"
      else
        where "scope_mask & ? > 0", scope_to_mask(scope)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
devise_oauth-3.0.3 lib/devise/oauth/scopable.rb
devise_oauth-3.0.2 lib/devise/oauth/scopable.rb
devise_oauth-3.0.1 lib/devise/oauth/scopable.rb
devise_oauth-3.0.0 lib/devise/oauth/scopable.rb
devise_oauth-2.0.3 lib/devise/oauth/scopable.rb
devise_oauth-2.0.2 lib/devise/oauth/scopable.rb
devise_oauth-2.0.1 lib/devise/oauth/scopable.rb
devise_oauth-2.0.0 lib/devise/oauth/scopable.rb