Sha256: 50fe70ed636de26f5bbd2b321291444378bf41bc7ffefeff859ac9756d8227a4

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 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
        @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

2 entries across 2 versions & 1 rubygems

Version Path
access-granted-1.0.2 lib/access-granted/permission.rb
access-granted-1.0.1 lib/access-granted/permission.rb