saxon-rb 0.5.0-java → 0.6.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +41 -0
- data/lib/saxon/nokogiri.rb +1 -1
- data/lib/saxon/processor.rb +12 -0
- data/lib/saxon/serializer/destination.rb +80 -0
- data/lib/saxon/serializer/object.rb +93 -0
- data/lib/saxon/serializer/output_properties.rb +83 -0
- data/lib/saxon/serializer.rb +3 -137
- data/lib/saxon/version.rb +1 -1
- data/lib/saxon/xdm/node.rb +4 -3
- data/lib/saxon/xslt/executable.rb +21 -46
- data/lib/saxon/xslt/invocation.rb +96 -0
- data/saxon-rb.gemspec +1 -1
- metadata +8 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 2e9afbc5a2644034bc285b3c3cd4e78f852b715d7a096ff8f7a6386730501598
         | 
| 4 | 
            +
              data.tar.gz: fe9c135af6356690fcca7b4f1dc2d9656cce44018806c3b5f6c9f4b6407c576d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c59e0f986b8bbf4de77b18feba99a61c8e724df537679b0e674bc142a0d2b476026bb01579dcd2ec6e9b4f246493db3b892fbe7e997848eb06bf5c7bd8e2f5ea
         | 
| 7 | 
            +
              data.tar.gz: 182d383aced898a376d37eaedb60ff80461910d3451e119f2bf6e97ebe37d8c64e600563ba968efec22f49ae02f025ec3725f00a2cb9af10813af8e20fc13100
         | 
    
        data/README.md
    CHANGED
    
    | @@ -194,6 +194,47 @@ result = xslt.call_template('template-name', { | |
| 194 194 |  | 
| 195 195 | 
             
            Global and initial template parameters can be set at compiler creation time, compile time, or execution time. See [Setting parameters](#label-Setting+parameters) for details.
         | 
| 196 196 |  | 
| 197 | 
            +
            To serialize the document you can, of course, just call `#to_s` on the result:
         | 
| 198 | 
            +
             | 
| 199 | 
            +
            ```ruby
         | 
| 200 | 
            +
            result = xslt.apply_templates(input)
         | 
| 201 | 
            +
            puts result.to_s #=> '<?xml version="1.0"...'
         | 
| 202 | 
            +
            ```
         | 
| 203 | 
            +
             | 
| 204 | 
            +
            You can also serialize directly to a file path or to any IO instance.
         | 
| 205 | 
            +
             | 
| 206 | 
            +
            ```ruby
         | 
| 207 | 
            +
            result = xslt.apply_templates(input)
         | 
| 208 | 
            +
            result.serialize('/path/to/output.xml')
         | 
| 209 | 
            +
             | 
| 210 | 
            +
            result_2 = xslt.apply_templates(input)
         | 
| 211 | 
            +
            result_2.serialize($stderr)
         | 
| 212 | 
            +
            ```
         | 
| 213 | 
            +
             | 
| 214 | 
            +
            You can override serialization options that were set by `<xsl:output/>` in your XSLT:
         | 
| 215 | 
            +
             | 
| 216 | 
            +
            ```ruby
         | 
| 217 | 
            +
            result = xslt.apply_templates(input)
         | 
| 218 | 
            +
            result.serialize('/path/to/output.xml') {
         | 
| 219 | 
            +
              output_property[:indent] = 'yes'
         | 
| 220 | 
            +
            }
         | 
| 221 | 
            +
            ```
         | 
| 222 | 
            +
             | 
| 223 | 
            +
            You can also obtain the result of the transform as an XDM Value:
         | 
| 224 | 
            +
             | 
| 225 | 
            +
            ```ruby
         | 
| 226 | 
            +
            result = xslt.apply_templates(input)
         | 
| 227 | 
            +
            result.xdm_value #=> #<Saxon::XDM::Node...>
         | 
| 228 | 
            +
            ```
         | 
| 229 | 
            +
             | 
| 230 | 
            +
            You also have easy access to provide an instance of a class implementing Saxon's `net.sf.saxon.s9api.Destination` interface:
         | 
| 231 | 
            +
             | 
| 232 | 
            +
            ```ruby
         | 
| 233 | 
            +
            dom_document = javax.xml.parsers.DocumentBuilderFactory.newInstance.builder.newDocument
         | 
| 234 | 
            +
            destination = Saxon::S9API::DOMDestination.new(dom_document)
         | 
| 235 | 
            +
            result = xslt.apply_templates(input).to_destination(destination)
         | 
| 236 | 
            +
            ```
         | 
| 237 | 
            +
             | 
| 197 238 | 
             
            #### Setting parameters
         | 
| 198 239 |  | 
| 199 240 | 
             
            There are four kinds of parameters you can set: *Static parameters*, which are
         | 
    
        data/lib/saxon/nokogiri.rb
    CHANGED
    
    | @@ -44,7 +44,7 @@ module Saxon | |
| 44 44 | 
             
                  # @return [String] a serialization of the the input document
         | 
| 45 45 | 
             
                  def serialize(doc_node)
         | 
| 46 46 | 
             
                    s9_transformer = @s9_xslt_executable.load30
         | 
| 47 | 
            -
                    serializer = Saxon::Serializer.new(s9_transformer.newSerializer)
         | 
| 47 | 
            +
                    serializer = Saxon::Serializer::Object.new(s9_transformer.newSerializer)
         | 
| 48 48 | 
             
                    serializer.serialize(doc_node.to_java)
         | 
| 49 49 | 
             
                  end
         | 
| 50 50 |  | 
    
        data/lib/saxon/processor.rb
    CHANGED
    
    | @@ -4,6 +4,7 @@ require 'saxon/configuration' | |
| 4 4 | 
             
            require 'saxon/document_builder'
         | 
| 5 5 | 
             
            require 'saxon/xpath'
         | 
| 6 6 | 
             
            require 'saxon/xslt'
         | 
| 7 | 
            +
            require 'saxon/serializer'
         | 
| 7 8 |  | 
| 8 9 | 
             
            module Saxon
         | 
| 9 10 | 
             
              # Saxon::Processor wraps the S9API::Processor object. This is the object
         | 
| @@ -82,6 +83,17 @@ module Saxon | |
| 82 83 | 
             
                  Saxon::XSLT::Compiler.create(self, &block)
         | 
| 83 84 | 
             
                end
         | 
| 84 85 |  | 
| 86 | 
            +
                # Generate a new +Serializer+ for directly serializing XDM Values that uses
         | 
| 87 | 
            +
                # this +Processor+. +Serializer+s are effectively one-shot objects, and
         | 
| 88 | 
            +
                # shouldn't be reused.
         | 
| 89 | 
            +
                #
         | 
| 90 | 
            +
                # @yield the block passed will be called bound to the serializer instance. See
         | 
| 91 | 
            +
                #   {Saxon::Serializer::Object.create}
         | 
| 92 | 
            +
                # @return [Saxon::Serializer::Object]
         | 
| 93 | 
            +
                def serializer(&block)
         | 
| 94 | 
            +
                  Saxon::Serializer::Object.create(self, &block)
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 85 97 | 
             
                # @return [net.sf.saxon.s9api.Processor] The underlying Saxon processor
         | 
| 86 98 | 
             
                def to_java
         | 
| 87 99 | 
             
                  @s9_processor
         | 
| @@ -0,0 +1,80 @@ | |
| 1 | 
            +
            require_relative '../s9api'
         | 
| 2 | 
            +
            require_relative './output_properties'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Saxon
         | 
| 5 | 
            +
              module Serializer
         | 
| 6 | 
            +
                # A Saxon Serializer to be used as a Destination for a transformation rather
         | 
| 7 | 
            +
                # than being directly called with existing XDM objects
         | 
| 8 | 
            +
                class Destination
         | 
| 9 | 
            +
                  include OutputProperties
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  attr_reader :s9_serializer, :invocation_lambda
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  # @api private
         | 
| 14 | 
            +
                  def initialize(s9_serializer, invocation_lambda, &block)
         | 
| 15 | 
            +
                    @s9_serializer, @invocation_lambda = s9_serializer, invocation_lambda
         | 
| 16 | 
            +
                    if block_given?
         | 
| 17 | 
            +
                      instance_exec(&block)
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  # @overload serialize(io)
         | 
| 22 | 
            +
                  #   Serialize the transformation to an IO
         | 
| 23 | 
            +
                  #   @param [File, IO] io The IO to serialize to
         | 
| 24 | 
            +
                  #   @return [nil]
         | 
| 25 | 
            +
                  # @overload serialize(path)
         | 
| 26 | 
            +
                  #   Serialize the transformation to file <tt>path</tt>
         | 
| 27 | 
            +
                  #   @param [String, Pathname] path The path of the file to serialize to
         | 
| 28 | 
            +
                  #   @return [nil]
         | 
| 29 | 
            +
                  # @overload serialize
         | 
| 30 | 
            +
                  #   Serialize the transformation to a String
         | 
| 31 | 
            +
                  #   @return [String] The serialized XdmValue
         | 
| 32 | 
            +
                  def serialize(io_or_path = nil)
         | 
| 33 | 
            +
                    case io_or_path
         | 
| 34 | 
            +
                    when nil
         | 
| 35 | 
            +
                      serialize_to_string
         | 
| 36 | 
            +
                    when String, Pathname
         | 
| 37 | 
            +
                      serialize_to_file(io_or_path)
         | 
| 38 | 
            +
                    else
         | 
| 39 | 
            +
                      serialize_to_io(io_or_path)
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  # @return [Saxon::S9API::Serializer] The underlying Saxon Serializer object
         | 
| 44 | 
            +
                  def to_java
         | 
| 45 | 
            +
                    s9_serializer
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  private
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def run_transform!
         | 
| 51 | 
            +
                    invocation_lambda.call(self.to_java)
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  def serialize_to_string
         | 
| 55 | 
            +
                    str_encoding = output_property.fetch(:encoding, Encoding.default_internal || Encoding.default_external)
         | 
| 56 | 
            +
                    StringIO.open { |io|
         | 
| 57 | 
            +
                      io.binmode
         | 
| 58 | 
            +
                      set_output_io(io)
         | 
| 59 | 
            +
                      run_transform!
         | 
| 60 | 
            +
                      io.string.force_encoding(str_encoding)
         | 
| 61 | 
            +
                    }
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  def serialize_to_io(io)
         | 
| 65 | 
            +
                    set_output_io(io)
         | 
| 66 | 
            +
                    run_transform!
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  def set_output_io(io)
         | 
| 70 | 
            +
                    s9_serializer.setOutputStream(io.to_outputstream)
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  def serialize_to_file(path)
         | 
| 74 | 
            +
                    file = Java::JavaIO::File.new(path.to_s)
         | 
| 75 | 
            +
                    s9_serializer.setOutputFile(file)
         | 
| 76 | 
            +
                    run_transform!
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
            end
         | 
| @@ -0,0 +1,93 @@ | |
| 1 | 
            +
            require_relative '../s9api'
         | 
| 2 | 
            +
            require_relative './output_properties'
         | 
| 3 | 
            +
            require 'stringio'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Saxon
         | 
| 6 | 
            +
              module Serializer
         | 
| 7 | 
            +
                # A Saxon Serializer to be used directly with XDM Values rather than being
         | 
| 8 | 
            +
                # called as a Destination for a transformation.
         | 
| 9 | 
            +
                class Object
         | 
| 10 | 
            +
                  # Create a serializer from the passed in +Processor+. When called with a
         | 
| 11 | 
            +
                  # block, the block will be executed via instance-exec so that output
         | 
| 12 | 
            +
                  # properties can be set, e.g.
         | 
| 13 | 
            +
                  #
         | 
| 14 | 
            +
                  #     Serializer::Object.create(processor) {
         | 
| 15 | 
            +
                  #       output_property[:indent] = 'yes'
         | 
| 16 | 
            +
                  #     }
         | 
| 17 | 
            +
                  #
         | 
| 18 | 
            +
                  # @param processor [Saxon::Processor] the processor to create this
         | 
| 19 | 
            +
                  #   +Serializer::Object+ from
         | 
| 20 | 
            +
                  # @yield the passed block bound via instance-exec to the new serializer
         | 
| 21 | 
            +
                  def self.create(processor, &block)
         | 
| 22 | 
            +
                    new(processor.to_java.newSerializer, &block)
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  include OutputProperties
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  attr_reader :s9_serializer
         | 
| 28 | 
            +
                  private :s9_serializer
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  # @api private
         | 
| 31 | 
            +
                  def initialize(s9_serializer, &block)
         | 
| 32 | 
            +
                    @s9_serializer = s9_serializer
         | 
| 33 | 
            +
                    if block_given?
         | 
| 34 | 
            +
                      instance_exec(&block)
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  # @overload serialize(xdm_value, io)
         | 
| 39 | 
            +
                  #   Serialize an XdmValue to an IO
         | 
| 40 | 
            +
                  #   @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
         | 
| 41 | 
            +
                  #   @param [File, IO] io The IO to serialize to
         | 
| 42 | 
            +
                  #   @return [nil]
         | 
| 43 | 
            +
                  # @overload serialize(xdm_value, path)
         | 
| 44 | 
            +
                  #   Serialize an XdmValue to file <tt>path</tt>
         | 
| 45 | 
            +
                  #   @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
         | 
| 46 | 
            +
                  #   @param [String, Pathname] path The path of the file to serialize to
         | 
| 47 | 
            +
                  #   @return [nil]
         | 
| 48 | 
            +
                  # @overload serialize(xdm_value)
         | 
| 49 | 
            +
                  #   Serialize an XdmValue to a String
         | 
| 50 | 
            +
                  #   @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
         | 
| 51 | 
            +
                  #   @return [String] The serialized XdmValue
         | 
| 52 | 
            +
                  def serialize(xdm_value, io_or_path = nil)
         | 
| 53 | 
            +
                    case io_or_path
         | 
| 54 | 
            +
                    when nil
         | 
| 55 | 
            +
                      serialize_to_string(xdm_value)
         | 
| 56 | 
            +
                    when String, Pathname
         | 
| 57 | 
            +
                      serialize_to_file(xdm_value, io_or_path)
         | 
| 58 | 
            +
                    else
         | 
| 59 | 
            +
                      serialize_to_io(xdm_value, io_or_path)
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  # @return [Saxon::S9API::Serializer] The underlying Saxon Serializer object
         | 
| 64 | 
            +
                  def to_java
         | 
| 65 | 
            +
                    s9_serializer
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  private
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  def serialize_to_io(xdm_value, io)
         | 
| 71 | 
            +
                    s9_serializer.setOutputStream(io.to_outputstream)
         | 
| 72 | 
            +
                    s9_serializer.serializeXdmValue(xdm_value.to_java)
         | 
| 73 | 
            +
                    nil
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  def serialize_to_string(xdm_value)
         | 
| 77 | 
            +
                    str_encoding = output_property.fetch(:encoding, Encoding.default_internal || Encoding.default_external)
         | 
| 78 | 
            +
                    StringIO.open { |io|
         | 
| 79 | 
            +
                      io.binmode
         | 
| 80 | 
            +
                      serialize_to_io(xdm_value, io)
         | 
| 81 | 
            +
                      io.string.force_encoding(str_encoding)
         | 
| 82 | 
            +
                    }
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  def serialize_to_file(xdm_value, path)
         | 
| 86 | 
            +
                    file = Java::JavaIO::File.new(path.to_s)
         | 
| 87 | 
            +
                    s9_serializer.setOutputFile(file)
         | 
| 88 | 
            +
                    s9_serializer.serializeXdmValue(xdm_value.to_java)
         | 
| 89 | 
            +
                    nil
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
            end
         | 
| @@ -0,0 +1,83 @@ | |
| 1 | 
            +
            module Saxon
         | 
| 2 | 
            +
              module Serializer
         | 
| 3 | 
            +
                # Manage access to the serialization properties of this serializer, with
         | 
| 4 | 
            +
                # hash-like access.
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                # Properties can be set explicitly through this API, or via XSLT or XQuery
         | 
| 7 | 
            +
                # serialization options like +<xsl:output>+.
         | 
| 8 | 
            +
                #
         | 
| 9 | 
            +
                # Properties set explicitly here will override properties set through the
         | 
| 10 | 
            +
                # document by +<xsl:output>+.
         | 
| 11 | 
            +
                module OutputProperties
         | 
| 12 | 
            +
                  # @return [Saxon::Serializer::OutputProperties] hash-like access to the Output Properties
         | 
| 13 | 
            +
                  def output_property
         | 
| 14 | 
            +
                    @output_property ||= OutputProperties::Accessor.new(s9_serializer)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  # @api private
         | 
| 18 | 
            +
                  #
         | 
| 19 | 
            +
                  # The private wrapper class that manages getting and setting output
         | 
| 20 | 
            +
                  # properties on a Serializer in an idiomatic Ruby-like way.
         | 
| 21 | 
            +
                  class Accessor
         | 
| 22 | 
            +
                    # @api private
         | 
| 23 | 
            +
                    # Provides mapping between symbols and the underlying Saxon property
         | 
| 24 | 
            +
                    # instances
         | 
| 25 | 
            +
                    def self.output_properties
         | 
| 26 | 
            +
                      @output_properties ||= Hash[
         | 
| 27 | 
            +
                        Saxon::S9API::Serializer::Property.values.map { |property|
         | 
| 28 | 
            +
                          qname = property.getQName
         | 
| 29 | 
            +
                          key = [
         | 
| 30 | 
            +
                            qname.getPrefix,
         | 
| 31 | 
            +
                            qname.getLocalName.tr('-', '_')
         | 
| 32 | 
            +
                          ].reject { |str| str == '' }.join('_').to_sym
         | 
| 33 | 
            +
                          [key, property]
         | 
| 34 | 
            +
                        }
         | 
| 35 | 
            +
                      ]
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    attr_reader :s9_serializer
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    # @api private
         | 
| 41 | 
            +
                    def initialize(s9_serializer)
         | 
| 42 | 
            +
                      @s9_serializer = s9_serializer
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    # @param [Symbol, Saxon::S9API::Serializer::Property] property The property to fetch
         | 
| 46 | 
            +
                    def [](property)
         | 
| 47 | 
            +
                      s9_serializer.getOutputProperty(resolved_property(property))
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    # @param [Symbol, Saxon::S9API::Serializer::Property] property The property to set
         | 
| 51 | 
            +
                    # @param [String] value The string value of the property
         | 
| 52 | 
            +
                    def []=(property, value)
         | 
| 53 | 
            +
                      s9_serializer.setOutputProperty(resolved_property(property), value)
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    # @overload fetch(property)
         | 
| 57 | 
            +
                    #   @param [Symbol, Saxon::S9API::Serializer::Property] property The property to fetch
         | 
| 58 | 
            +
                    # @overload fetch(property, default)
         | 
| 59 | 
            +
                    #   @param property [Symbol, Saxon::S9API::Serializer::Property] The property to fetch
         | 
| 60 | 
            +
                    #   @param default [Object] The value to return if the property is unset
         | 
| 61 | 
            +
                    def fetch(property, default = nil)
         | 
| 62 | 
            +
                      explicit_value = self[property]
         | 
| 63 | 
            +
                      if explicit_value.nil? && !default.nil?
         | 
| 64 | 
            +
                        default
         | 
| 65 | 
            +
                      else
         | 
| 66 | 
            +
                        explicit_value
         | 
| 67 | 
            +
                      end
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                    private
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                    def resolved_property(property_key)
         | 
| 73 | 
            +
                      case property_key
         | 
| 74 | 
            +
                      when Symbol
         | 
| 75 | 
            +
                        self.class.output_properties.fetch(property_key)
         | 
| 76 | 
            +
                      else
         | 
| 77 | 
            +
                        property_key
         | 
| 78 | 
            +
                      end
         | 
| 79 | 
            +
                    end
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
            end
         | 
    
        data/lib/saxon/serializer.rb
    CHANGED
    
    | @@ -1,143 +1,9 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 1 | 
            +
            require_relative './serializer/destination.rb'
         | 
| 2 | 
            +
            require_relative './serializer/object.rb'
         | 
| 3 3 |  | 
| 4 4 | 
             
            module Saxon
         | 
| 5 5 | 
             
              # Serialize XDM objects.
         | 
| 6 | 
            -
               | 
| 7 | 
            -
                # Manage access to the serialization properties of this serializer, with
         | 
| 8 | 
            -
                # hash-like access.
         | 
| 9 | 
            -
                #
         | 
| 10 | 
            -
                # Properties can be set explicitly through this API, or via XSLT or XQuery
         | 
| 11 | 
            -
                # serialization options like `<xsl:output>`.
         | 
| 12 | 
            -
                #
         | 
| 13 | 
            -
                # Properties set explicitly here will override properties set through the
         | 
| 14 | 
            -
                # document like `<xsl:output>`.
         | 
| 15 | 
            -
                class OutputProperties
         | 
| 16 | 
            -
                  # @api private
         | 
| 17 | 
            -
                  # Provides mapping between symbols and the underlying Saxon property
         | 
| 18 | 
            -
                  # instances
         | 
| 19 | 
            -
                  def self.output_properties
         | 
| 20 | 
            -
                    @output_properties ||= Hash[
         | 
| 21 | 
            -
                      Saxon::S9API::Serializer::Property.values.map { |property|
         | 
| 22 | 
            -
                        qname = property.getQName
         | 
| 23 | 
            -
                        key = [
         | 
| 24 | 
            -
                          qname.getPrefix,
         | 
| 25 | 
            -
                          qname.getLocalName.tr('-', '_')
         | 
| 26 | 
            -
                        ].reject { |str| str == '' }.join('_').to_sym
         | 
| 27 | 
            -
                        [key, property]
         | 
| 28 | 
            -
                      }
         | 
| 29 | 
            -
                    ]
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  attr_reader :s9_serializer
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                  # @api private
         | 
| 35 | 
            -
                  def initialize(s9_serializer)
         | 
| 36 | 
            -
                    @s9_serializer = s9_serializer
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  # @param [Symbol, Saxon::S9API::Serializer::Property] property The property to fetch
         | 
| 40 | 
            -
                  def [](property)
         | 
| 41 | 
            -
                    s9_serializer.getOutputProperty(resolved_property(property))
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                  # @param [Symbol, Saxon::S9API::Serializer::Property] property The property to set
         | 
| 45 | 
            -
                  # @param [String] value The string value of the property
         | 
| 46 | 
            -
                  def []=(property, value)
         | 
| 47 | 
            -
                    s9_serializer.setOutputProperty(resolved_property(property), value)
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                  # @overload fetch(property)
         | 
| 51 | 
            -
                  #   @param [Symbol, Saxon::S9API::Serializer::Property] property The property to fetch
         | 
| 52 | 
            -
                  # @overload fetch(property, default)
         | 
| 53 | 
            -
                  #   @param property [Symbol, Saxon::S9API::Serializer::Property] The property to fetch
         | 
| 54 | 
            -
                  #   @param default [Object] The value to return if the property is unset
         | 
| 55 | 
            -
                  def fetch(property, default = nil)
         | 
| 56 | 
            -
                    explicit_value = self[property]
         | 
| 57 | 
            -
                    if explicit_value.nil? && !default.nil?
         | 
| 58 | 
            -
                      default
         | 
| 59 | 
            -
                    else
         | 
| 60 | 
            -
                      explicit_value
         | 
| 61 | 
            -
                    end
         | 
| 62 | 
            -
                  end
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                  private
         | 
| 65 | 
            -
                  def resolved_property(property_key)
         | 
| 66 | 
            -
                    case property_key
         | 
| 67 | 
            -
                    when Symbol
         | 
| 68 | 
            -
                      self.class.output_properties.fetch(property_key)
         | 
| 69 | 
            -
                    else
         | 
| 70 | 
            -
                      property_key
         | 
| 71 | 
            -
                    end
         | 
| 72 | 
            -
                  end
         | 
| 73 | 
            -
                end
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                attr_reader :s9_serializer
         | 
| 76 | 
            -
                private :s9_serializer
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                # @api private
         | 
| 79 | 
            -
                def initialize(s9_serializer)
         | 
| 80 | 
            -
                  @s9_serializer = s9_serializer
         | 
| 81 | 
            -
                end
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                # @return [Saxon::Serializer::OutputProperties] hash-like access to the Output Properties
         | 
| 84 | 
            -
                def output_property
         | 
| 85 | 
            -
                  @output_property ||= OutputProperties.new(s9_serializer)
         | 
| 86 | 
            -
                end
         | 
| 87 | 
            -
             | 
| 88 | 
            -
                # @overload serialize(xdm_value, io)
         | 
| 89 | 
            -
                #   Serialize an XdmValue to an IO
         | 
| 90 | 
            -
                #   @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
         | 
| 91 | 
            -
                #   @param [File, IO] io The IO to serialize to
         | 
| 92 | 
            -
                #   @return [nil]
         | 
| 93 | 
            -
                # @overload serialize(xdm_value, path)
         | 
| 94 | 
            -
                #   Serialize an XdmValue to file <tt>path</tt>
         | 
| 95 | 
            -
                #   @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
         | 
| 96 | 
            -
                #   @param [String, Pathname] path The path of the file to serialize to
         | 
| 97 | 
            -
                #   @return [nil]
         | 
| 98 | 
            -
                # @overload serialize(xdm_value)
         | 
| 99 | 
            -
                #   Serialize an XdmValue to a String
         | 
| 100 | 
            -
                #   @param [Saxon::XdmValue] xdm_value The XdmValue to serialize
         | 
| 101 | 
            -
                #   @return [String] The serialized XdmValue
         | 
| 102 | 
            -
                def serialize(xdm_value, io_or_path = nil)
         | 
| 103 | 
            -
                  case io_or_path
         | 
| 104 | 
            -
                  when nil
         | 
| 105 | 
            -
                    serialize_to_string(xdm_value)
         | 
| 106 | 
            -
                  when String, Pathname
         | 
| 107 | 
            -
                    serialize_to_file(xdm_value, io_or_path)
         | 
| 108 | 
            -
                  else
         | 
| 109 | 
            -
                    serialize_to_io(xdm_value, io_or_path)
         | 
| 110 | 
            -
                  end
         | 
| 111 | 
            -
                end
         | 
| 112 | 
            -
             | 
| 113 | 
            -
                # @return [Saxon::S9API::Serializer] The underlying Saxon Serializer object
         | 
| 114 | 
            -
                def to_java
         | 
| 115 | 
            -
                  s9_serializer
         | 
| 116 | 
            -
                end
         | 
| 117 | 
            -
             | 
| 118 | 
            -
                private
         | 
| 119 | 
            -
             | 
| 120 | 
            -
                def serialize_to_io(xdm_value, io)
         | 
| 121 | 
            -
                  s9_serializer.setOutputStream(io.to_outputstream)
         | 
| 122 | 
            -
                  s9_serializer.serializeXdmValue(xdm_value.to_java)
         | 
| 123 | 
            -
                  nil
         | 
| 124 | 
            -
                end
         | 
| 125 | 
            -
             | 
| 126 | 
            -
                def serialize_to_string(xdm_value)
         | 
| 127 | 
            -
                  str_encoding = output_property.fetch(:encoding, Encoding.default_internal || Encoding.default_external)
         | 
| 128 | 
            -
                  StringIO.open { |io|
         | 
| 129 | 
            -
                    io.binmode
         | 
| 130 | 
            -
                    serialize_to_io(xdm_value, io)
         | 
| 131 | 
            -
                    io.string.force_encoding(str_encoding)
         | 
| 132 | 
            -
                  }
         | 
| 133 | 
            -
                end
         | 
| 134 | 
            -
             | 
| 135 | 
            -
                def serialize_to_file(xdm_value, path)
         | 
| 136 | 
            -
                  file = Java::JavaIO::File.new(path)
         | 
| 137 | 
            -
                  s9_serializer.setOutputFile(file)
         | 
| 138 | 
            -
                  s9_serializer.serializeXdmValue(xdm_value.to_java)
         | 
| 139 | 
            -
                  nil
         | 
| 140 | 
            -
                end
         | 
| 6 | 
            +
              module Serializer
         | 
| 141 7 | 
             
              end
         | 
| 142 8 | 
             
            end
         | 
| 143 9 |  | 
    
        data/lib/saxon/version.rb
    CHANGED
    
    
    
        data/lib/saxon/xdm/node.rb
    CHANGED
    
    | @@ -33,9 +33,10 @@ module Saxon | |
| 33 33 | 
             
                    @node_name = node_name.nil? ? nil : Saxon::QName.new(node_name)
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 |  | 
| 36 | 
            -
                  # What kind of node this is. Returns one of +: | 
| 37 | 
            -
                  # +:attribute+, +:namespace+, +:comment+, | 
| 38 | 
            -
                  # +:comment+
         | 
| 36 | 
            +
                  # What kind of node this is. Returns one of +:document+, +:element+,
         | 
| 37 | 
            +
                  # +:text+, +:attribute+, +:namespace+, +:comment+,
         | 
| 38 | 
            +
                  # +:processing_instruction+, or +:comment+
         | 
| 39 | 
            +
                  #
         | 
| 39 40 | 
             
                  # @return [Symbol] the kind of node this is
         | 
| 40 41 | 
             
                  def node_kind
         | 
| 41 42 | 
             
                    @node_kind ||= case s9_xdm_node.nodeKind
         | 
| @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            require 'forwardable'
         | 
| 2 2 | 
             
            require_relative 'evaluation_context'
         | 
| 3 | 
            +
            require_relative 'invocation'
         | 
| 3 4 | 
             
            require_relative '../serializer'
         | 
| 4 5 | 
             
            require_relative '../xdm'
         | 
| 5 6 | 
             
            require_relative '../qname'
         | 
| @@ -96,7 +97,7 @@ module Saxon | |
| 96 97 | 
             
                  #   to pass to the first template matched. Setting already-defined
         | 
| 97 98 | 
             
                  #   parameters will replace their value for this invocation of the XSLT
         | 
| 98 99 | 
             
                  #   only, it won't affect the {XSLT::Compiler}'s context.
         | 
| 99 | 
            -
                  # @return [Saxon::XSLT:: | 
| 100 | 
            +
                  # @return [Saxon::XSLT::Invocation] the transformation result
         | 
| 100 101 | 
             
                  def apply_templates(source, opts = {})
         | 
| 101 102 | 
             
                    transformation(opts).apply_templates(source)
         | 
| 102 103 | 
             
                  end
         | 
| @@ -130,7 +131,7 @@ module Saxon | |
| 130 131 | 
             
                  #   to pass to the first template matched. Setting already-defined
         | 
| 131 132 | 
             
                  #   parameters will replace their value for this invocation of the XSLT
         | 
| 132 133 | 
             
                  #   only, it won't affect the {XSLT::Compiler}'s context.
         | 
| 133 | 
            -
                  # @return [Saxon::XSLT:: | 
| 134 | 
            +
                  # @return [Saxon::XSLT::Invocation] the transformation result
         | 
| 134 135 | 
             
                  def call_template(template_name = nil, opts = {})
         | 
| 135 136 | 
             
                    transformation(opts).call_template(template_name)
         | 
| 136 137 | 
             
                  end
         | 
| @@ -155,14 +156,14 @@ module Saxon | |
| 155 156 | 
             
                  #   Additional global parameters to set. Setting already-defined
         | 
| 156 157 | 
             
                  #   parameters will replace their value for this invocation of the XSLT
         | 
| 157 158 | 
             
                  #   only, it won't affect the {XSLT::Compiler}'s context.
         | 
| 158 | 
            -
                  # @return [Saxon::XSLT:: | 
| 159 | 
            +
                  # @return [Saxon::XSLT::Invocation] the transformation result
         | 
| 159 160 | 
             
                  def call_function(function_name, opts = {})
         | 
| 160 161 | 
             
                    args = opts.fetch(:args, [])
         | 
| 161 162 | 
             
                    transformation(opts.reject { |k, v| k == :args }).call_function(function_name, args)
         | 
| 162 163 | 
             
                  end
         | 
| 163 164 |  | 
| 164 165 | 
             
                  # @return [net.sf.saxon.s9api.XsltExecutable] the underlying Saxon
         | 
| 165 | 
            -
                  #    | 
| 166 | 
            +
                  #   +XsltExecutable+
         | 
| 166 167 | 
             
                  def to_java
         | 
| 167 168 | 
             
                    @s9_xslt_executable
         | 
| 168 169 | 
             
                  end
         | 
| @@ -213,6 +214,7 @@ module Saxon | |
| 213 214 | 
             
                    @default_initial_template ||= Saxon::QName.clark('{http://www.w3.org/1999/XSL/Transform}initial-template')
         | 
| 214 215 | 
             
                  end
         | 
| 215 216 |  | 
| 217 | 
            +
                  # @api private
         | 
| 216 218 | 
             
                  def initialize(args)
         | 
| 217 219 | 
             
                    @s9_transformer = args.fetch(:s9_transformer)
         | 
| 218 220 | 
             
                    @destination = args.fetch(:destination, nil)
         | 
| @@ -225,57 +227,48 @@ module Saxon | |
| 225 227 | 
             
                  # Apply templates to Source, using all the context set up when we were
         | 
| 226 228 | 
             
                  # created.
         | 
| 227 229 | 
             
                  def apply_templates(source)
         | 
| 228 | 
            -
                     | 
| 230 | 
            +
                    transformation_invocation(:applyTemplates, source.to_java)
         | 
| 229 231 | 
             
                  end
         | 
| 230 232 |  | 
| 231 233 | 
             
                  # Call the named template, using all the context set up when we were
         | 
| 232 234 | 
             
                  # created.
         | 
| 233 235 | 
             
                  def call_template(template_name)
         | 
| 234 | 
            -
                     | 
| 236 | 
            +
                    transformation_invocation(:callTemplate, resolve_template_name(template_name))
         | 
| 235 237 | 
             
                  end
         | 
| 236 238 |  | 
| 237 239 | 
             
                  # Call the named function, using all the context set up when we were
         | 
| 238 240 | 
             
                  # created.
         | 
| 239 241 | 
             
                  def call_function(function_name, args)
         | 
| 240 242 | 
             
                    function_name = Saxon::QName.resolve(function_name).to_java
         | 
| 241 | 
            -
                     | 
| 242 | 
            -
                    call_function_result(function_name, args)
         | 
| 243 | 
            +
                    transformation_invocation(:callFunction, function_name, function_args(args))
         | 
| 243 244 | 
             
                  end
         | 
| 244 245 |  | 
| 245 246 | 
             
                  private
         | 
| 246 247 |  | 
| 247 | 
            -
                  def  | 
| 248 | 
            +
                  def transformation_invocation(invocation_method, *invocation_args)
         | 
| 248 249 | 
             
                    set_opts!
         | 
| 249 | 
            -
                     | 
| 250 | 
            -
                    Result.new(result_xdm_value(s9_transformer.send(*transformer_args)), s9_transformer)
         | 
| 250 | 
            +
                    XSLT::Invocation.new(s9_transformer, invocation_lambda(invocation_method, invocation_args), raw?)
         | 
| 251 251 | 
             
                  end
         | 
| 252 252 |  | 
| 253 | 
            -
                  def  | 
| 254 | 
            -
                     | 
| 255 | 
            -
             | 
| 256 | 
            -
             | 
| 257 | 
            -
             | 
| 258 | 
            -
             | 
| 259 | 
            -
             | 
| 260 | 
            -
             | 
| 261 | 
            -
                    )
         | 
| 253 | 
            +
                  def invocation_lambda(invocation_method, invocation_args)
         | 
| 254 | 
            +
                    ->(destination) {
         | 
| 255 | 
            +
                      if destination.nil?
         | 
| 256 | 
            +
                        s9_transformer.send(invocation_method, *invocation_args)
         | 
| 257 | 
            +
                      else
         | 
| 258 | 
            +
                        s9_transformer.send(invocation_method, *invocation_args, destination.to_java)
         | 
| 259 | 
            +
                      end
         | 
| 260 | 
            +
                    }
         | 
| 262 261 | 
             
                  end
         | 
| 263 262 |  | 
| 264 263 | 
             
                  def resolve_template_name(template_name)
         | 
| 265 | 
            -
                    return self.class.default_initial_template if template_name.nil?
         | 
| 266 | 
            -
                    Saxon::QName.resolve(template_name)
         | 
| 264 | 
            +
                    return self.class.default_initial_template.to_java if template_name.nil?
         | 
| 265 | 
            +
                    Saxon::QName.resolve(template_name).to_java
         | 
| 267 266 | 
             
                  end
         | 
| 268 267 |  | 
| 269 268 | 
             
                  def function_args(args = [])
         | 
| 270 269 | 
             
                    args.map { |val| Saxon::XDM.Value(val).to_java }.to_java(S9API::XdmValue)
         | 
| 271 270 | 
             
                  end
         | 
| 272 271 |  | 
| 273 | 
            -
                  def destination
         | 
| 274 | 
            -
                    @destination ||= begin
         | 
| 275 | 
            -
                      Saxon::S9API::XdmDestination.new unless raw?
         | 
| 276 | 
            -
                    end
         | 
| 277 | 
            -
                  end
         | 
| 278 | 
            -
             | 
| 279 272 | 
             
                  def set_opts!
         | 
| 280 273 | 
             
                    opts.each do |opt, value|
         | 
| 281 274 | 
             
                      raise BadOptionError, opt unless VALID_OPTS.include?(opt)
         | 
| @@ -312,24 +305,6 @@ module Saxon | |
| 312 305 | 
             
                  end
         | 
| 313 306 | 
             
                end
         | 
| 314 307 |  | 
| 315 | 
            -
                # Represents the result of a transformation, providing a simple default
         | 
| 316 | 
            -
                # serializer as well
         | 
| 317 | 
            -
                class Result
         | 
| 318 | 
            -
                  attr_reader :xdm_value
         | 
| 319 | 
            -
             | 
| 320 | 
            -
                  # @api private
         | 
| 321 | 
            -
                  def initialize(xdm_value, s9_transformer)
         | 
| 322 | 
            -
                    @xdm_value, @s9_transformer = xdm_value, s9_transformer
         | 
| 323 | 
            -
                  end
         | 
| 324 | 
            -
             | 
| 325 | 
            -
                  # Serialize the result to a string using the options specified in
         | 
| 326 | 
            -
                  # +<xsl:output/>+ in the XSLT
         | 
| 327 | 
            -
                  def to_s
         | 
| 328 | 
            -
                    serializer = Serializer.new(@s9_transformer.newSerializer)
         | 
| 329 | 
            -
                    serializer.serialize(xdm_value.to_java)
         | 
| 330 | 
            -
                  end
         | 
| 331 | 
            -
                end
         | 
| 332 | 
            -
             | 
| 333 308 | 
             
                # Raised if a bad option name is passed in the options hash to
         | 
| 334 309 | 
             
                # Executable#apply_templates et al
         | 
| 335 310 | 
             
                class BadOptionError < StandardError
         | 
| @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            require_relative '../serializer'
         | 
| 2 | 
            +
            require_relative '../xdm/value'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Saxon
         | 
| 6 | 
            +
              module XSLT
         | 
| 7 | 
            +
                # Represents the invocation of a compiled and loaded transformation,
         | 
| 8 | 
            +
                # providing an idiomatic way to send the result a transformation to a
         | 
| 9 | 
            +
                # particular Destination, or to serialize it directly to a file, string, or
         | 
| 10 | 
            +
                # IO.
         | 
| 11 | 
            +
                class Invocation
         | 
| 12 | 
            +
                  attr_reader :s9_transformer, :invocation_lambda
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  # @api private
         | 
| 15 | 
            +
                  def initialize(s9_transformer, invocation_lambda, raw)
         | 
| 16 | 
            +
                    @s9_transformer, @invocation_lambda, @raw = s9_transformer, invocation_lambda, raw
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  # Serialize the result to a string using the options specified in
         | 
| 20 | 
            +
                  # +<xsl:output/>+ in the XSLT
         | 
| 21 | 
            +
                  #
         | 
| 22 | 
            +
                  # @return [String] the serialized result of the transformation
         | 
| 23 | 
            +
                  def to_s
         | 
| 24 | 
            +
                    serializer_destination.serialize
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  # Serialize the result of the transformation. When called with a
         | 
| 28 | 
            +
                  # block, the block will be executed via instance-exec so that output
         | 
| 29 | 
            +
                  # properties can be set, e.g.
         | 
| 30 | 
            +
                  #
         | 
| 31 | 
            +
                  #     result.serialize {
         | 
| 32 | 
            +
                  #       output_property[:indent] = 'yes'
         | 
| 33 | 
            +
                  #     }
         | 
| 34 | 
            +
                  #
         | 
| 35 | 
            +
                  # @overload serialize(io)
         | 
| 36 | 
            +
                  #   Serialize the transformation to an IO
         | 
| 37 | 
            +
                  #   @param [File, IO] io The IO to serialize to
         | 
| 38 | 
            +
                  #   @return [nil]
         | 
| 39 | 
            +
                  #   @yield the passed block bound via instance-exec to the new serializer
         | 
| 40 | 
            +
                  # @overload serialize(path)
         | 
| 41 | 
            +
                  #   Serialize the transformation to file <tt>path</tt>
         | 
| 42 | 
            +
                  #   @param [String, Pathname] path The path of the file to serialize to
         | 
| 43 | 
            +
                  #   @return [nil]
         | 
| 44 | 
            +
                  #   @yield the passed block bound via instance-exec to the new serializer
         | 
| 45 | 
            +
                  # @overload serialize
         | 
| 46 | 
            +
                  #   Serialize the transformation to a String
         | 
| 47 | 
            +
                  #   @return [String] The serialized XdmValue
         | 
| 48 | 
            +
                  def serialize(path_or_io = nil, &block)
         | 
| 49 | 
            +
                    serializer_destination(&block).serialize(path_or_io)
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  # Return the result of the transformation as an XDM Value, either as it is
         | 
| 53 | 
            +
                  # returned (if the XSLT::Executable was created with :raw => true), or
         | 
| 54 | 
            +
                  # wrapped in a Document node and sequence normalized.
         | 
| 55 | 
            +
                  #
         | 
| 56 | 
            +
                  # @return [Saxon::XDM::Value] the XDM value returned by the transformation
         | 
| 57 | 
            +
                  def xdm_value
         | 
| 58 | 
            +
                    if raw?
         | 
| 59 | 
            +
                      XDM.Value(invocation_lambda.call(nil))
         | 
| 60 | 
            +
                    else
         | 
| 61 | 
            +
                      invocation_lambda.call(s9_xdm_destination)
         | 
| 62 | 
            +
                      XDM.Value(s9_xdm_destination.getXdmNode)
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                  # Send the result of the transformation to the supplied Destination
         | 
| 67 | 
            +
                  #
         | 
| 68 | 
            +
                  # @param destination [net.sf.saxon.s9api.Destination] the Saxon
         | 
| 69 | 
            +
                  #   destination to use
         | 
| 70 | 
            +
                  # @return [nil]
         | 
| 71 | 
            +
                  def to_destination(s9_destination)
         | 
| 72 | 
            +
                    invocation_lambda.call(s9_destination)
         | 
| 73 | 
            +
                    nil
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  # Whether the transformation was invoked as a 'raw' transformation, where
         | 
| 77 | 
            +
                  # an XDM Value result will be returned without being wrapped in a Document
         | 
| 78 | 
            +
                  # node, and without sequence normalization.
         | 
| 79 | 
            +
                  #
         | 
| 80 | 
            +
                  # @return [Boolean] whether the transformation was invoked 'raw' or not
         | 
| 81 | 
            +
                  def raw?
         | 
| 82 | 
            +
                    @raw
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  private
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                  def serializer_destination(&block)
         | 
| 88 | 
            +
                    Saxon::Serializer::Destination.new(s9_transformer.newSerializer, invocation_lambda, &block)
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                  def s9_xdm_destination
         | 
| 92 | 
            +
                    @s9_xdm_destination ||= Saxon::S9API::XdmDestination.new
         | 
| 93 | 
            +
                  end
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
            end
         | 
    
        data/saxon-rb.gemspec
    CHANGED
    
    | @@ -34,6 +34,6 @@ It aims to provide an idiomatic Ruby wrapper around all of Saxon's features.} | |
| 34 34 | 
             
              spec.add_development_dependency 'addressable', '~> 2.4.0'
         | 
| 35 35 | 
             
              spec.add_development_dependency 'webmock', '~> 2.3.2'
         | 
| 36 36 | 
             
              spec.add_development_dependency 'yard', '~> 0.9.12'
         | 
| 37 | 
            -
              spec.add_development_dependency 'simplecov', '~> 0. | 
| 37 | 
            +
              spec.add_development_dependency 'simplecov', '~> 0.17.1'
         | 
| 38 38 | 
             
              spec.add_development_dependency 'rspec_junit_formatter'
         | 
| 39 39 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: saxon-rb
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
            platform: java
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Matt Patterson
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 11 | 
            +
            date: 2020-02-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -127,7 +127,7 @@ dependencies: | |
| 127 127 | 
             
                requirements:
         | 
| 128 128 | 
             
                - - "~>"
         | 
| 129 129 | 
             
                  - !ruby/object:Gem::Version
         | 
| 130 | 
            -
                    version:  | 
| 130 | 
            +
                    version: 0.17.1
         | 
| 131 131 | 
             
              name: simplecov
         | 
| 132 132 | 
             
              prerelease: false
         | 
| 133 133 | 
             
              type: :development
         | 
| @@ -135,7 +135,7 @@ dependencies: | |
| 135 135 | 
             
                requirements:
         | 
| 136 136 | 
             
                - - "~>"
         | 
| 137 137 | 
             
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            -
                    version:  | 
| 138 | 
            +
                    version: 0.17.1
         | 
| 139 139 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 140 140 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 141 141 | 
             
                requirements:
         | 
| @@ -191,6 +191,9 @@ files: | |
| 191 191 | 
             
            - lib/saxon/s9api.rb
         | 
| 192 192 | 
             
            - lib/saxon/sequence_type.rb
         | 
| 193 193 | 
             
            - lib/saxon/serializer.rb
         | 
| 194 | 
            +
            - lib/saxon/serializer/destination.rb
         | 
| 195 | 
            +
            - lib/saxon/serializer/object.rb
         | 
| 196 | 
            +
            - lib/saxon/serializer/output_properties.rb
         | 
| 194 197 | 
             
            - lib/saxon/source.rb
         | 
| 195 198 | 
             
            - lib/saxon/version.rb
         | 
| 196 199 | 
             
            - lib/saxon/xdm.rb
         | 
| @@ -213,6 +216,7 @@ files: | |
| 213 216 | 
             
            - lib/saxon/xslt/compiler.rb
         | 
| 214 217 | 
             
            - lib/saxon/xslt/evaluation_context.rb
         | 
| 215 218 | 
             
            - lib/saxon/xslt/executable.rb
         | 
| 219 | 
            +
            - lib/saxon/xslt/invocation.rb
         | 
| 216 220 | 
             
            - saxon-rb.gemspec
         | 
| 217 221 | 
             
            homepage: https://github.com/fidothe/saxon-rb
         | 
| 218 222 | 
             
            licenses:
         |