Sha256: f9f2753ddd4cf12d7dc0d408dd1f20c4c133f4780e5350a5a8a71e8548424e74

Contents?: true

Size: 1.77 KB

Versions: 9

Compression:

Stored size: 1.77 KB

Contents

require "rdf/isomorphic"

module Ddr
  module Auth
    module Roles
      #
      # Represents the assignment of a role to an agent within a scope.
      #
      class Role < ActiveTriples::Resource

        DEFAULT_SCOPE = Roles::RESOURCE_SCOPE

        include RDF::Isomorphic
        include Hydra::Validations

        configure type: Ddr::Vocab::Roles.Role
        property :role_type, predicate: Ddr::Vocab::Roles.type
        property :agent, predicate: Ddr::Vocab::Roles.agent
        property :scope, predicate: Ddr::Vocab::Roles.scope

        validates_presence_of :agent
        validates_inclusion_of :role_type, in: Roles.type_map.keys
        validates_inclusion_of :scope, in: Roles::SCOPES

        def self.build(args={})
          new.tap do |role|
            role.agent     = args.fetch(:agent).to_s
            role.scope     = args.fetch(:scope, DEFAULT_SCOPE).to_s
            role.role_type = args.fetch(:type).to_s
            if role.invalid?
              raise Ddr::Models::Error, "Invalid #{self.name}: #{role.errors.full_messages.join('; ')}"
            end
          end
        end

        # Roles are considered equivalent if the RDF graphs are isomorphic
        # @return [Boolean] the result
        def ==(other)
          isomorphic_with? other
        end

        def to_s
          to_h.to_s
        end

        def inspect
          "#<#{self.class.name} type=#{role_type.first.inspect}, " \
          "agent=#{agent.first.inspect}, scope=#{scope.first.inspect}>"
        end

        def to_h
          { type: role_type.first,
            scope: scope.first,
            agent: agent.first }
        end
        alias_method :to_hash, :to_h

        def permissions
          Roles.type_map[role_type.first].permissions
        end

      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ddr-models-1.17.1 lib/ddr/auth/roles/role.rb
ddr-models-1.17.0 lib/ddr/auth/roles/role.rb
ddr-models-1.16.2 lib/ddr/auth/roles/role.rb
ddr-models-1.16.1 lib/ddr/auth/roles/role.rb
ddr-models-1.16.0 lib/ddr/auth/roles/role.rb
ddr-models-1.15.0 lib/ddr/auth/roles/role.rb
ddr-models-1.14.2 lib/ddr/auth/roles/role.rb
ddr-models-1.14.1 lib/ddr/auth/roles/role.rb
ddr-models-1.14.0 lib/ddr/auth/roles/role.rb