xml-mapping_extensions 0.3.7 → 0.4.0
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
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 159f916e7e1a374d68857ce63626f37b763312e3
         | 
| 4 | 
            +
              data.tar.gz: 50ffcf3d3606eec904e7ce9faaecccf90905ac39
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: fdd87b9bb6d862300aac1b9bf993b9023f2704c6f788347868eb9eb89cd2a5911f92c321c4bba1af4a8520d3957f80b05678d7e75302b2b9e756bf61600d355a
         | 
| 7 | 
            +
              data.tar.gz: fbc3c1cc7ba3627c21c6fe6cf2711031620f4638554a1d53d97e46c43547cb86426be36ef46eb4fb7bfbc5f78a1a341937a6342867710cc0a35bd93ad74f58c3
         | 
    
        data/CHANGES.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -16,8 +16,8 @@ Additional mapping nodes and other utility code for working with | |
| 16 16 | 
             
                - [Example](#example)
         | 
| 17 17 | 
             
              - [Provided implementations](#provided-implementations)
         | 
| 18 18 | 
             
                - [Example](#example-1)
         | 
| 19 | 
            -
                - [Reading | 
| 20 | 
            -
                - [Writing | 
| 19 | 
            +
                - [Reading](#reading)
         | 
| 20 | 
            +
                - [Writing](#writing)
         | 
| 21 21 | 
             
            - [Namespaces](#namespaces)
         | 
| 22 22 |  | 
| 23 23 |  | 
| @@ -123,7 +123,7 @@ class MyElem | |
| 123 123 | 
             
            end
         | 
| 124 124 | 
             
            ```
         | 
| 125 125 |  | 
| 126 | 
            -
            #### Reading | 
| 126 | 
            +
            #### Reading
         | 
| 127 127 |  | 
| 128 128 | 
             
            ```ruby
         | 
| 129 129 | 
             
            xml_str = '<my_elem>
         | 
| @@ -156,7 +156,7 @@ Outputs | |
| 156 156 | 
             
            #<MIME::Type:0x007f864bdc4f78 @friendly={"en"=>"Text File"}, @system=nil, @obsolete=false, @registered=true, @use_instead=nil, @signature=false, @content_type="text/plain", @raw_media_type="text", @raw_sub_type="plain", @simplified="text/plain", @i18n_key="text.plain", @media_type="text", @sub_type="plain", @docs=[], @encoding="quoted-printable", @extensions=["txt", "asc", "c", "cc", "h", "hh", "cpp", "hpp", "dat", "hlp", "conf", "def", "doc", "in", "list", "log", "markdown", "md", "rst", "text", "textile"], @references=["IANA", "RFC2046", "RFC3676", "RFC5147"], @xrefs={"rfc"=>["rfc2046", "rfc3676", "rfc5147"]}>
         | 
| 157 157 | 
             
            ```
         | 
| 158 158 |  | 
| 159 | 
            -
            #### Writing | 
| 159 | 
            +
            #### Writing
         | 
| 160 160 |  | 
| 161 161 | 
             
            ```ruby
         | 
| 162 162 | 
             
            elem = MyElem.new
         | 
| @@ -189,7 +189,24 @@ The `Namespace` class encapsulates an XML namespace: | |
| 189 189 | 
             
            namespace = Namespace.new(uri: 'http://example.org/px', schema_location: 'http://example.org/px.xsd')
         | 
| 190 190 | 
             
            ```
         | 
| 191 191 |  | 
| 192 | 
            -
             | 
| 192 | 
            +
            The `Namespaced` module extends `XML::Mapping` to add a `namespace` attribute and write the namespace
         | 
| 193 | 
            +
            out when saving to XML.
         | 
| 194 | 
            +
             | 
| 195 | 
            +
            ```ruby
         | 
| 196 | 
            +
            class MyElem
         | 
| 197 | 
            +
              include XML::MappingExtensions::Namespaced # instead of XML::Mapping
         | 
| 198 | 
            +
             | 
| 199 | 
            +
              root_element_name 'my_elem'
         | 
| 200 | 
            +
             | 
| 201 | 
            +
              date_node :plain_date, 'plain_date'
         | 
| 202 | 
            +
              date_node :zulu_date, 'zulu_date', zulu: true
         | 
| 203 | 
            +
              time_node :time, 'time'
         | 
| 204 | 
            +
              uri_node :uri, 'uri'
         | 
| 205 | 
            +
              mime_type_node :mime_type, 'mime_type'
         | 
| 206 | 
            +
            end
         | 
| 207 | 
            +
            ```
         | 
| 208 | 
            +
             | 
| 209 | 
            +
            Setting a namespace on a namespaced object will cause that namespace to be written out when the object is saved
         | 
| 193 210 | 
             
            to XML:
         | 
| 194 211 |  | 
| 195 212 | 
             
            ```ruby
         | 
| @@ -20,8 +20,8 @@ module XML | |
| 20 20 | 
             
                  # @param prefix [String, nil] the namespace prefix
         | 
| 21 21 | 
             
                  # @param schema_location [String, nil] the schema location(s)
         | 
| 22 22 | 
             
                  def initialize(uri:, prefix: nil, schema_location: nil)
         | 
| 23 | 
            -
                    @uri | 
| 24 | 
            -
                    @prefix | 
| 23 | 
            +
                    @uri             = uri.to_s
         | 
| 24 | 
            +
                    @prefix          = prefix
         | 
| 25 25 | 
             
                    @schema_location = schema_location
         | 
| 26 26 | 
             
                  end
         | 
| 27 27 |  | 
| @@ -63,6 +63,7 @@ module XML | |
| 63 63 | 
             
                  def state
         | 
| 64 64 | 
             
                    [uri, prefix, schema_location]
         | 
| 65 65 | 
             
                  end
         | 
| 66 | 
            +
             | 
| 66 67 | 
             
                  protected :state
         | 
| 67 68 |  | 
| 68 69 | 
             
                  def set_prefix_recursive(elem) # rubocop:disable Style/AccessorMethodName
         | 
| @@ -71,35 +72,8 @@ module XML | |
| 71 72 | 
             
                    elem.name = "#{prefix}:#{elem.name}"
         | 
| 72 73 | 
             
                    elem.each_element { |e| set_prefix_recursive(e) }
         | 
| 73 74 | 
             
                  end
         | 
| 74 | 
            -
                  private :set_prefix_recursive
         | 
| 75 | 
            -
                end
         | 
| 76 | 
            -
              end
         | 
| 77 | 
            -
             | 
| 78 | 
            -
              # Patches `XML::Mapping` to add a namespace attribute and write the namespace
         | 
| 79 | 
            -
              # out when saving to XML.
         | 
| 80 | 
            -
              module NamespacedElement
         | 
| 81 | 
            -
             | 
| 82 | 
            -
                # @return [Namespace, nil] the namespace, if any
         | 
| 83 | 
            -
                attr_accessor :namespace
         | 
| 84 75 |  | 
| 85 | 
            -
             | 
| 86 | 
            -
                # on the generated element.
         | 
| 87 | 
            -
                def pre_save(options = { mapping: :_default })
         | 
| 88 | 
            -
                  xml = super(options)
         | 
| 89 | 
            -
                  namespace.set_default_namespace(xml) if namespace
         | 
| 90 | 
            -
                  xml
         | 
| 91 | 
            -
                end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
                # Overrides `XML::Mapping#save_to_xml` to set the XML namespace prefix on
         | 
| 94 | 
            -
                # the generated element, and all its descendants that have that namespace.
         | 
| 95 | 
            -
                def save_to_xml(options = { mapping: :_default })
         | 
| 96 | 
            -
                  xml = super(options)
         | 
| 97 | 
            -
                  namespace.set_prefix(xml) if namespace
         | 
| 98 | 
            -
                  xml
         | 
| 76 | 
            +
                  private :set_prefix_recursive
         | 
| 99 77 | 
             
                end
         | 
| 100 78 | 
             
              end
         | 
| 101 | 
            -
             | 
| 102 | 
            -
              module Mapping
         | 
| 103 | 
            -
                prepend NamespacedElement
         | 
| 104 | 
            -
              end
         | 
| 105 79 | 
             
            end
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            require 'uri'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module XML
         | 
| 4 | 
            +
              module MappingExtensions
         | 
| 5 | 
            +
                # Extends `XML::Mapping` to add a `namespace` attribute and write the namespace
         | 
| 6 | 
            +
                # out when saving to XML.
         | 
| 7 | 
            +
                module Namespaced
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def self.included(base)
         | 
| 10 | 
            +
                    base.extend(ClassMethods)
         | 
| 11 | 
            +
                    base.include(XML::Mapping)
         | 
| 12 | 
            +
                    base.include(InstanceMethods)
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  module ClassMethods
         | 
| 16 | 
            +
                    def namespace(ns = nil)
         | 
| 17 | 
            +
                      @namespace = ns if ns
         | 
| 18 | 
            +
                      @namespace
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def namespace
         | 
| 23 | 
            +
                    self.class.namespace
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  # Hack to make sure these don't get defined till after `XML::Mapping`'s include
         | 
| 27 | 
            +
                  # hooks have a chance to define their super methods
         | 
| 28 | 
            +
                  module InstanceMethods
         | 
| 29 | 
            +
                    # Overrides `XML::Mapping#pre_save` to set the XML namespace and schema location
         | 
| 30 | 
            +
                    # on the generated element.
         | 
| 31 | 
            +
                    def pre_save(options = {mapping: :_default})
         | 
| 32 | 
            +
                      xml = super(options)
         | 
| 33 | 
            +
                      namespace.set_default_namespace(xml) if namespace
         | 
| 34 | 
            +
                      xml
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    # Overrides `XML::Mapping#save_to_xml` to set the XML namespace prefix on
         | 
| 38 | 
            +
                    # the generated element, and all its descendants that have that namespace.
         | 
| 39 | 
            +
                    def save_to_xml(options = {mapping: :_default})
         | 
| 40 | 
            +
                      xml = super(options)
         | 
| 41 | 
            +
                      namespace.set_prefix(xml) if namespace
         | 
| 42 | 
            +
                      xml
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
| @@ -0,0 +1,53 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'xml/mapping_extensions/namespace'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module XML
         | 
| 6 | 
            +
              module MappingExtensions
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                UNPREFIXED = Namespace.new(uri: 'http://example.org/nse')
         | 
| 9 | 
            +
                PREFIXED   = Namespace.new(uri: 'http://example.org/nse', prefix: 'px')
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                # TODO: both versions with schema location
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                class Unprefixed
         | 
| 14 | 
            +
                  include Namespaced
         | 
| 15 | 
            +
                  namespace UNPREFIXED
         | 
| 16 | 
            +
                  root_element_name 'unprefixed'
         | 
| 17 | 
            +
                  text_node :attr, '@attr'
         | 
| 18 | 
            +
                  text_node :text, 'text()'
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                class Prefixed
         | 
| 22 | 
            +
                  include Namespaced
         | 
| 23 | 
            +
                  namespace PREFIXED
         | 
| 24 | 
            +
                  root_element_name 'prefixed'
         | 
| 25 | 
            +
                  text_node :attr, '@attr'
         | 
| 26 | 
            +
                  text_node :text, 'text()'
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                describe Namespaced do
         | 
| 30 | 
            +
                  describe '#save_to_xml' do
         | 
| 31 | 
            +
                    it 'writes XML with a default namespace' do
         | 
| 32 | 
            +
                      obj = Unprefixed.new
         | 
| 33 | 
            +
                      obj.attr = 'attr value'
         | 
| 34 | 
            +
                      obj.text = 'text value'
         | 
| 35 | 
            +
                      expected = '<unprefixed xmlns="http://example.org/nse" attr="attr value">text value</unprefixed>'
         | 
| 36 | 
            +
                      expect(obj.write_xml).to be_xml(expected)
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                    it 'writes XML with a prefixed namespace' do
         | 
| 39 | 
            +
                      obj = Prefixed.new
         | 
| 40 | 
            +
                      obj.attr = 'attr value'
         | 
| 41 | 
            +
                      obj.text = 'text value'
         | 
| 42 | 
            +
                      expected = '<px:prefixed xmlns:px="http://example.org/nse" attr="attr value">text value</unprefixed>'
         | 
| 43 | 
            +
                      expect(obj.write_xml).to be_xml(expected)
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  describe '#parse_xml' do
         | 
| 48 | 
            +
                    it 'parses XML with a default namespace'
         | 
| 49 | 
            +
                    it 'parses XML with a prefixed namespace'
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: xml-mapping_extensions
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - David Moles
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-05- | 
| 11 | 
            +
            date: 2016-05-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: mime-types
         | 
| @@ -191,6 +191,7 @@ files: | |
| 191 191 | 
             
            - lib/xml/mapping_extensions/date_node.rb
         | 
| 192 192 | 
             
            - lib/xml/mapping_extensions/mime_type_node.rb
         | 
| 193 193 | 
             
            - lib/xml/mapping_extensions/namespace.rb
         | 
| 194 | 
            +
            - lib/xml/mapping_extensions/namespaced.rb
         | 
| 194 195 | 
             
            - lib/xml/mapping_extensions/node_base.rb
         | 
| 195 196 | 
             
            - lib/xml/mapping_extensions/time_node.rb
         | 
| 196 197 | 
             
            - lib/xml/mapping_extensions/typesafe_enum_node.rb
         | 
| @@ -204,6 +205,7 @@ files: | |
| 204 205 | 
             
            - spec/unit/xml/mapping_extensions/mapping_extensions_spec.rb
         | 
| 205 206 | 
             
            - spec/unit/xml/mapping_extensions/mime_type_node_spec.rb
         | 
| 206 207 | 
             
            - spec/unit/xml/mapping_extensions/namespace_spec.rb
         | 
| 208 | 
            +
            - spec/unit/xml/mapping_extensions/namespaced_spec.rb
         | 
| 207 209 | 
             
            - spec/unit/xml/mapping_extensions/node_base_spec.rb
         | 
| 208 210 | 
             
            - spec/unit/xml/mapping_extensions/time_node_spec.rb
         | 
| 209 211 | 
             
            - spec/unit/xml/mapping_extensions/typesafe_enum_node_spec.rb
         | 
| @@ -242,6 +244,7 @@ test_files: | |
| 242 244 | 
             
            - spec/unit/xml/mapping_extensions/mapping_extensions_spec.rb
         | 
| 243 245 | 
             
            - spec/unit/xml/mapping_extensions/mime_type_node_spec.rb
         | 
| 244 246 | 
             
            - spec/unit/xml/mapping_extensions/namespace_spec.rb
         | 
| 247 | 
            +
            - spec/unit/xml/mapping_extensions/namespaced_spec.rb
         | 
| 245 248 | 
             
            - spec/unit/xml/mapping_extensions/node_base_spec.rb
         | 
| 246 249 | 
             
            - spec/unit/xml/mapping_extensions/time_node_spec.rb
         | 
| 247 250 | 
             
            - spec/unit/xml/mapping_extensions/typesafe_enum_node_spec.rb
         |