Sha256: a5fb66c11fa13b6354ae3457243b012dde055300970362b8f1ce6f60422e38ce

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

module Middleman
  module Sitemap
    module Extensions
      # Class to handle managing ignores
      class Ignores < Extension
        # Expose `create_ignore` as `app.ignore`
        expose_to_application ignore: :create_ignore

        # Expose `create_ignore` to config as `ignore`
        expose_to_config ignore: :create_ignore

        def initialize(app, config={}, &block)
          super

          # Array of callbacks which can assign ignored
          @ignored_callbacks = Set.new

          @app.sitemap.define_singleton_method(:ignored?, &method(:ignored?))
        end

        # Ignore a path or add an ignore callback
        # @param [String, Regexp] path Path glob expression, or path regex
        # @return [void]
        Contract Maybe[Or[String, Regexp]], Maybe[Proc] => Any
        def create_ignore(path=nil, &block)
          if path.is_a? Regexp
            @ignored_callbacks << proc { |p| p =~ path }
          elsif path.is_a? String
            path_clean = ::Middleman::Util.normalize_path(path)
            if path_clean.include?('*') # It's a glob
              @ignored_callbacks << proc { |p| File.fnmatch(path_clean, p) }
            else
              # Add a specific-path ignore unless that path is already covered
              return if ignored?(path_clean)
              @ignored_callbacks << proc { |p| p == path_clean }
            end
          elsif block_given?
            @ignored_callbacks << block
          end

          @app.sitemap.invalidate_resources_not_ignored_cache!
        end

        # Whether a path is ignored
        # @param [String] path
        # @return [Boolean]
        Contract String => Bool
        def ignored?(path)
          path_clean = ::Middleman::Util.normalize_path(path)
          @ignored_callbacks.any? { |b| b.call(path_clean) }
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
middleman-core-4.0.0.beta.2 lib/middleman-core/sitemap/extensions/ignores.rb