Sha256: 8ec3b585fcaf32d60a2e152595ffc2d06abac09d86badd9b966321a4eb57e04e

Contents?: true

Size: 1.15 KB

Versions: 9

Compression:

Stored size: 1.15 KB

Contents

# frozen_string_literal: true

module ShopifyAPI
  class ApiAccess
    SCOPE_DELIMITER = ','

    def initialize(scope_names)
      if scope_names.is_a?(String)
        scope_names = scope_names.to_s.split(SCOPE_DELIMITER)
      end

      store_scopes(scope_names)
    end

    def covers?(scopes)
      scopes.compressed_scopes <= expanded_scopes
    end

    def to_s
      to_a.join(SCOPE_DELIMITER)
    end

    def to_a
      compressed_scopes.to_a
    end

    def ==(other)
      other.class == self.class &&
        compressed_scopes == other.compressed_scopes
    end

    alias :eql? :==

    def hash
      compressed_scopes.hash
    end

    protected

    attr_reader :compressed_scopes, :expanded_scopes

    private

    def store_scopes(scope_names)
      scopes = scope_names.map(&:strip).reject(&:empty?).to_set
      implied_scopes = scopes.map { |scope| implied_scope(scope) }.compact

      @compressed_scopes = scopes - implied_scopes
      @expanded_scopes = scopes + implied_scopes
    end

    def implied_scope(scope)
      is_write_scope = scope =~ /\A(unauthenticated_)?write_(.*)\z/
      "#{$1}read_#{$2}" if is_write_scope
    end
  end
end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
shopify_api-9.5.2 lib/shopify_api/api_access.rb
ruby_shopify_api-1.2.0 lib/ruby_shopify_api/api_access.rb
ruby_shopify_api-1.1.0 lib/shopify_api/api_access.rb
ruby_shopify_api-1.0.0 lib/shopify_api/api_access.rb
shopify_api-9.5.1 lib/shopify_api/api_access.rb
shopify_api-9.5 lib/shopify_api/api_access.rb
shopify_api-9.4.1 lib/shopify_api/api_access.rb
shopify_api-9.4.0 lib/shopify_api/api_access.rb
shopify_api-9.3.0 lib/shopify_api/api_access.rb