Sha256: ab5dcb778fce4dcf94dc19530cf09a3fb83ceaede1f940285a4bfeae8432e3a3

Contents?: true

Size: 836 Bytes

Versions: 10

Compression:

Stored size: 836 Bytes

Contents

module Aegis
  class Sieve

    def initialize(role_name, effect, block = nil)
      role_name = 'everyone' if role_name.blank?
      @role_name = role_name.to_s
      @effect = effect
      @block = block
    end

    def may?(context, *args)
      matches_role = @role_name == 'everyone' || @role_name == context.role.name
      if matches_role
        if @block
          block_result = context.instance_exec(*args, &@block)
          block_result ? @effect : !@effect
        else
          @effect
        end
      else
        nil
      end
    end

    def inspect
      "Sieve(#{{:role_name => @role_name, :effect => @effect ? :allow : :deny, :block => @block.present?}.inspect})"
    end

    def self.allow_to_all
      new('everyone', true)
    end

    def self.deny_to_all
      new('everyone', false)
    end

  end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
aegis-2.5.3 lib/aegis/sieve.rb
aegis-2.5.2 lib/aegis/sieve.rb
aegis-2.5.1 lib/aegis/sieve.rb
aegis-2.5.0 lib/aegis/sieve.rb
aegis-2.4.1 lib/aegis/sieve.rb
aegis-2.4.0 lib/aegis/sieve.rb
aegis-2.3.0 lib/aegis/sieve.rb
aegis-2.2.0 lib/aegis/sieve.rb
aegis-2.1.1 lib/aegis/sieve.rb
aegis-2.1.0 lib/aegis/sieve.rb