= Include Processor Extension Example
:navtitle: Include Processor

Purpose::
Include a file from a URI.

TIP: Asciidoctor supports including content from a URI out of the box if you set the `allow-uri-read` attribute (not available if the safe mode is `secure`).

== sample-with-uri-include.adoc

[source,asciidoc]
....
:source-highlighter: coderay

.Gemfile
[,ruby]
----
\include::https://cdn.jsdelivr.net/gh/asciidoctor/asciidoctor/Gemfile[]
----
....

== UriIncludeProcessor

[,ruby]
----
class UriIncludeProcessor < Asciidoctor::Extensions::IncludeProcessor
  def handles? target
    target.start_with? 'https://', 'https://'
  end

  def process doc, reader, target, attributes
    content = (::OpenURI.open_uri target).readlines
    reader.push_include content, target, target, 1, attributes
    reader
  end
end
----

== Usage

[,ruby]
----
Asciidoctor::Extensions.register do
  include_processor UriIncludeProcessor
end

Asciidoctor.convert_file 'sample-with-uri-include.adoc', safe: :safe
----
