Sha256: 0c2d99afdd8180babca5dbef488b4342ac11a54c095215e47c835527c787e50d

Contents?: true

Size: 1.27 KB

Versions: 2

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module Shark
  module Permissions
    class Resource
      attr_reader :name, :parts

      def initialize(value)
        @name = case value
                when String
                  value
                when Array
                  value.map(&:to_s).join(Shark::Permissions.delimiter)
                end
        @parts = @name.split(Shark::Permissions.delimiter)
      end

      def ancestors_and_self
        names = []
        parts.each_with_index do |_, i|
          names << parts[0..i].join(Shark::Permissions.delimiter)
        end

        names
      end

      def ancestors
        ancestors_and_self[0..-2]
      end

      def parent
        parent_name = parts[0..-2].join(Shark::Permissions.delimiter)
        parent_name.presence
      end

      def subresource_of?(value)
        return true if name == value

        regexp = value.gsub('*', '[a-z\-_0-9]*')
        "#{name}::".match(/\A#{regexp}::/).present?
      end

      def super_resource_of?(value)
        return true if name == value

        regexp = name.gsub('*', '[a-z\-_0-9]*')
        "#{value}::".match(/\A#{regexp}::/).present?
      end

      def wildcard?
        parts.last == Shark::Permissions.any_matcher
      end

      def to_s
        name
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
shark-permissions-core-0.2.0 lib/shark/permissions/resource.rb
shark-permissions-core-0.1.0 lib/shark/permissions/resource.rb