Sha256: 4ad620332ff6586744be74d9e613156b15945865a6f6392a47028b5a087497ba

Contents?: true

Size: 1.83 KB

Versions: 29

Compression:

Stored size: 1.83 KB

Contents

require 'middleman-core/contracts'

module Middleman
  module Util
    include Contracts

    module_function

    # Extract the text of a Rack response as a string.
    # Useful for extensions implemented as Rack middleware.
    # @param response The response from #call
    # @return [String] The whole response as a string.
    Contract RespondTo[:each] => String
    def extract_response_text(response)
      # The rack spec states all response bodies must respond to each
      result = ''
      response.each do |part, _|
        result << part
      end
      result
    end

    Contract String, String, ArrayOf[String], IsA['::Middleman::Application'], Proc => String
    def rewrite_paths(body, path, exts, app, &_block)
      matcher = /([\'\"\(,]\s*|# sourceMappingURL=)([^\s\'\"\)\(>]+(#{::Regexp.union(exts)}))/

      url_fn_prefix = 'url('

      body.dup.gsub(matcher) do |match|
        opening_character = $1
        asset_path = $2

        if asset_path.start_with?(url_fn_prefix)
          opening_character << url_fn_prefix
          asset_path = asset_path[url_fn_prefix.length..-1]
        end

        current_resource = app.sitemap.find_resource_by_destination_path(path)

        begin
          uri = ::Middleman::Util.parse_uri(asset_path)

          if uri.relative? && uri.host.nil? && !(asset_path =~ /^[^\/].*[a-z]+\.[a-z]+\/.*/)
            dest_path = ::Middleman::Util.url_for(app, asset_path, relative: false, current_resource: current_resource)

            resource = app.sitemap.find_resource_by_destination_path(dest_path)

            if resource && (result = yield(asset_path))
              "#{opening_character}#{result}"
            else
              match
            end
          else
            match
          end
        rescue ::Addressable::URI::InvalidURIError
          match
        end
      end
    end
  end
end

Version data entries

29 entries across 29 versions & 3 rubygems

Version Path
middleman-core-4.6.0 lib/middleman-core/util/rack.rb
middleman-core-4.5.1 lib/middleman-core/util/rack.rb
middleman-core-4.5.0 lib/middleman-core/util/rack.rb
middleman-core-4.4.3 lib/middleman-core/util/rack.rb
middleman-core-4.4.2 lib/middleman-core/util/rack.rb
middleman-core-4.4.0 lib/middleman-core/util/rack.rb
middleman-core-4.3.11 lib/middleman-core/util/rack.rb
middleman-core-4.3.10 lib/middleman-core/util/rack.rb
middleman-core-4.3.8 lib/middleman-core/util/rack.rb
middleman-core-4.3.7 lib/middleman-core/util/rack.rb
files.com-1.0.55 docs/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.3.3/lib/middleman-core/util/rack.rb
middleman-core-4.3.6 lib/middleman-core/util/rack.rb
middleman-core-4.3.5 lib/middleman-core/util/rack.rb
middleman-core-4.3.4 lib/middleman-core/util/rack.rb
middleman-core-4.3.3 lib/middleman-core/util/rack.rb
middleman-core-4.3.2 lib/middleman-core/util/rack.rb
middleman-core-4.3.1 lib/middleman-core/util/rack.rb
middleman-core-4.3.0 lib/middleman-core/util/rack.rb
middleman-core-with-external-sources-watch-fix-4.1.10 lib/middleman-core/util/rack.rb
middleman-core-4.3.0.rc.1 lib/middleman-core/util/rack.rb