Sha256: 50cf234eb59b830f529b47525ca2c4979eff16b2b342f4ebbe2454c951dff9d5

Contents?: true

Size: 1.07 KB

Versions: 2

Compression:

Stored size: 1.07 KB

Contents

module Owners
  # Represents a single line of an OWNERS file.
  #
  # It contains some useful methods for inspecting the
  # subscriptions themselves like the file, line, and
  # filter, and subscribers.
  #
  # @api public
  class Subscription
    COMMENT = /^\s*\/\//
    WILDCARD = /.*/

    attr_reader :file, :line, :root, :subscription

    def initialize(subscription, line, config)
      @subscribers, @filter = subscription.split(/\s+/, 2)
      @subscription = subscription
      @line = line
      @file = config.file.sub("./", "")
      @root = config.root
    end

    def filter
      Regexp.new(@filter || WILDCARD)
    end

    def metadata?
      comment? || empty?
    end

    def subscribed?(path)
      path =~ prefix && relative(path) =~ filter
    end

    def subscribers
      @subscribers.split(",").reject(&:empty?)
    end

    private

    def comment?
      subscription =~ COMMENT
    end

    def empty?
      subscription.strip.empty?
    end

    def prefix
      /\.?\/?#{root}\//
    end

    def relative(path)
      path.sub(prefix, "")
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
owners-0.1.0 lib/owners/subscription.rb
owners-0.0.9 lib/owners/subscription.rb