Sha256: d85becddcddbb409ffb2fa9215126a38a8ec07ed712ef48f69ff87d9c973e8e5

Contents?: true

Size: 907 Bytes

Versions: 3

Compression:

Stored size: 907 Bytes

Contents

require "set"
require "virtus"

module Ddr::Auth
  module Roles
    #
    # Wraps a set of Roles
    #
    class RoleSet
      include Virtus.model
      include Enumerable
      include ActiveModel::Serializers::JSON

      attribute :roles, Set[Role]

      delegate :where, :agent, :scope, :role_type,
               :in_policy_scope, :in_resource_scope,
               to: :query

      delegate :each, :empty?, :clear, to: :roles

      def self.from_json(json)
        new.from_json(json.present? ? json : "{}")
      end

      def ==(other)
        instance_of?(other.class) && self.roles == other.roles
      end

      def merge(other)
        self.roles += other.roles
        self
      end

      def permissions
        map(&:permissions).flatten.uniq
      end

      def agents
        map(&:agent).uniq
      end

      def query
        RoleSetQuery.new(self)
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ddr-models-3.0.0.beta.3 lib/ddr/auth/roles/role_set.rb
ddr-models-3.0.0.beta.2 lib/ddr/auth/roles/role_set.rb
ddr-models-3.0.0.beta.1 lib/ddr/auth/roles/role_set.rb