Sha256: 0ae0f2f88cbfe2ba32986fe98bfd850867269b08970eb3acb2ae75e63c0ca2b0

Contents?: true

Size: 1.08 KB

Versions: 4

Compression:

Stored size: 1.08 KB

Contents

module AccessGranted
  class Permission
    attr_reader :action, :subject, :granted, :conditions

    def initialize(granted, action, subject, user = nil, conditions = {}, block = nil)
      @action     = action
      @user       = user
      @granted    = granted
      @subject    = subject
      @conditions = conditions
      @block      = block
    end

    def matches_action?(action)
      @action == action
    end

    def matches_subject?(subject)
      subject == @subject || subject.class <= @subject
    end

    def matches_conditions?(subject)
      if @block && !subject.is_a?(Class)
        @block.call(subject, @user)
      else
        matches_hash_conditions?(subject)
      end
    end

    def matches_hash_conditions?(subject)
      @conditions.each_pair do |name, value|
        return false if subject.send(name) != value
      end
      true
    end

    def eql?(other)
      other.class == self.class &&
        @action == other.action &&
          @subject == other.subject &&
            @granted == other.granted
    end

    def ==(other)
      eql?(other)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
access-granted-1.1.1 lib/access-granted/permission.rb
access-granted-1.1.0 lib/access-granted/permission.rb
access-granted-1.0.4 lib/access-granted/permission.rb
access-granted-1.0.3 lib/access-granted/permission.rb