dragonfly_svg 0.0.3 → 0.0.4
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/.gitignore +1 -0
- data/.travis.yml +2 -2
- data/README.md +9 -1
- data/lib/dragonfly_svg.rb +3 -7
- data/lib/dragonfly_svg/analysers/aspect_ratio_analyser.rb +17 -0
- data/lib/dragonfly_svg/analysers/base.rb +11 -0
- data/lib/dragonfly_svg/analysers/height_analyser.rb +16 -0
- data/lib/dragonfly_svg/analysers/landscape_analyser.rb +17 -0
- data/lib/dragonfly_svg/analysers/portrait_analyser.rb +17 -0
- data/lib/dragonfly_svg/analysers/svg_properties.rb +4 -6
- data/lib/dragonfly_svg/analysers/width_analyser.rb +16 -0
- data/lib/dragonfly_svg/plugin.rb +16 -20
- data/lib/dragonfly_svg/processors/extend_ids.rb +4 -6
- data/lib/dragonfly_svg/processors/remove_namespaces.rb +2 -3
- data/lib/dragonfly_svg/processors/set_attribute.rb +1 -3
- data/lib/dragonfly_svg/processors/set_dimensions.rb +4 -12
- data/lib/dragonfly_svg/processors/set_namespace.rb +2 -4
- data/lib/dragonfly_svg/processors/set_preserve_aspect_ratio.rb +3 -11
- data/lib/dragonfly_svg/processors/set_view_box.rb +3 -12
- data/lib/dragonfly_svg/version.rb +1 -1
- data/samples/sample.png +0 -0
- data/test/dragonfly_svg/analysers/svg_properties_test.rb +1 -3
- data/test/dragonfly_svg/plugin_test.rb +42 -3
- data/test/dragonfly_svg/processors/extend_ids_test.rb +1 -3
- data/test/dragonfly_svg/processors/remove_namespaces_test.rb +1 -3
- data/test/dragonfly_svg/processors/set_attribute_test.rb +3 -5
- data/test/dragonfly_svg/processors/set_dimensions_test.rb +1 -3
- data/test/dragonfly_svg/processors/set_namespace_test.rb +1 -3
- data/test/dragonfly_svg/processors/set_preserve_aspect_ratio_test.rb +4 -6
- data/test/dragonfly_svg/processors/set_view_box_test.rb +1 -3
- data/test/test_helper.rb +3 -3
- metadata +9 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0a80f5be599ee36aeef6e1fb8b3ac547eacfa5dd
         | 
| 4 | 
            +
              data.tar.gz: 3381778fb2df92c6c806404a39f8e873aee38193
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: daa3efc319ebe8457c22f460f1cf69e00c6bd8b9f270d98983d7d5d927b6d36c12dedf183ffe8f7d93c98014880bd0a795b7694ba98291a0c55a8ba1b48648fb
         | 
| 7 | 
            +
              data.tar.gz: bb23dfbe0b3f524e276962fe851bb95a8712fb442c7164df77d761d6baac63b7bf39af1595804a239cc2c14ac4422d94ecfe366eaca0f5d0c2e8c9d8d8afbbcb
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -60,6 +60,14 @@ Removes the `xmlns` namespace from the SVG. | |
| 60 60 | 
             
            svg.remove_namespaces
         | 
| 61 61 | 
             
            ```
         | 
| 62 62 |  | 
| 63 | 
            +
            ### SetAttribute
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            Allows to set attribute for specified `xpath`:
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            ```ruby
         | 
| 68 | 
            +
            svg.set_attribute('./*[name()="svg"]', 'style', 'margin: 50px;')
         | 
| 69 | 
            +
            ```
         | 
| 70 | 
            +
             | 
| 63 71 | 
             
            ### SetDimensions
         | 
| 64 72 |  | 
| 65 73 | 
             
            Sets the dimensions of the SVG. Takes two parameters: `width` and `height`
         | 
| @@ -100,4 +108,4 @@ svg.set_viewbox(0, 0, 400, 600)       # viewBox="0 0 400 600" | |
| 100 108 | 
             
            2. Create your feature branch (`git checkout -b my-new-feature`)
         | 
| 101 109 | 
             
            3. Commit your changes (`git commit -am 'Add some feature'`)
         | 
| 102 110 | 
             
            4. Push to the branch (`git push origin my-new-feature`)
         | 
| 103 | 
            -
            5. Create a new Pull Request
         | 
| 111 | 
            +
            5. Create a new Pull Request
         | 
    
        data/lib/dragonfly_svg.rb
    CHANGED
    
    
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            module DragonflySvg
         | 
| 2 | 
            +
              module Analysers
         | 
| 3 | 
            +
                class AspectRatioAnalyser < Base
         | 
| 4 | 
            +
                  def initialize(app)
         | 
| 5 | 
            +
                    original = app.analysers.items[:aspect_ratio]
         | 
| 6 | 
            +
                    app.add_analyser(:aspect_ratio) do |content|
         | 
| 7 | 
            +
                      if is_svg?(content)
         | 
| 8 | 
            +
                        attrs = content.analyse(:svg_properties)
         | 
| 9 | 
            +
                        attrs[:width].to_f / attrs[:height]
         | 
| 10 | 
            +
                      elsif original
         | 
| 11 | 
            +
                        original.call(content)
         | 
| 12 | 
            +
                      end
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            module DragonflySvg
         | 
| 2 | 
            +
              module Analysers
         | 
| 3 | 
            +
                class HeightAnalyser < Base
         | 
| 4 | 
            +
                  def initialize(app)
         | 
| 5 | 
            +
                    original = app.analysers.items[:height]
         | 
| 6 | 
            +
                    app.add_analyser(:height) do |content|
         | 
| 7 | 
            +
                      if is_svg?(content)
         | 
| 8 | 
            +
                        content.analyse(:svg_properties)[:height]
         | 
| 9 | 
            +
                      elsif original
         | 
| 10 | 
            +
                        original.call(content)
         | 
| 11 | 
            +
                      end
         | 
| 12 | 
            +
                    end
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            module DragonflySvg
         | 
| 2 | 
            +
              module Analysers
         | 
| 3 | 
            +
                class LandscapeAnalyser < Base
         | 
| 4 | 
            +
                  def initialize(app)
         | 
| 5 | 
            +
                    original = app.analysers.items[:landscape]
         | 
| 6 | 
            +
                    app.add_analyser(:landscape) do |content|
         | 
| 7 | 
            +
                      if is_svg?(content)
         | 
| 8 | 
            +
                        attrs = content.analyse(:svg_properties)
         | 
| 9 | 
            +
                        attrs[:width] >= attrs[:height]
         | 
| 10 | 
            +
                      elsif original
         | 
| 11 | 
            +
                        original.call(content)
         | 
| 12 | 
            +
                      end
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            module DragonflySvg
         | 
| 2 | 
            +
              module Analysers
         | 
| 3 | 
            +
                class PortraitAnalyser < Base
         | 
| 4 | 
            +
                  def initialize(app)
         | 
| 5 | 
            +
                    original = app.analysers.items[:portrait]
         | 
| 6 | 
            +
                    app.add_analyser(:portrait) do |content|
         | 
| 7 | 
            +
                      if is_svg?(content)
         | 
| 8 | 
            +
                        attrs = content.analyse(:svg_properties)
         | 
| 9 | 
            +
                        attrs[:width] <= attrs[:height]
         | 
| 10 | 
            +
                      elsif original
         | 
| 11 | 
            +
                        original.call(content)
         | 
| 12 | 
            +
                      end
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -3,24 +3,22 @@ require 'nokogiri' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Analysers
         | 
| 5 5 | 
             
                class SvgProperties
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  def call content
         | 
| 6 | 
            +
                  def call(content)
         | 
| 8 7 | 
             
                    node = svg_node(content)
         | 
| 9 8 |  | 
| 10 9 | 
             
                    {
         | 
| 11 10 | 
             
                      width: node.get_attribute('width').to_f,
         | 
| 12 11 | 
             
                      height: node.get_attribute('height').to_f,
         | 
| 13 | 
            -
                      id: node.get_attribute('id') | 
| 12 | 
            +
                      id: node.get_attribute('id')
         | 
| 14 13 | 
             
                    }
         | 
| 15 14 | 
             
                  end
         | 
| 16 15 |  | 
| 17 16 | 
             
                  private # =============================================================
         | 
| 18 17 |  | 
| 19 | 
            -
                  def svg_node | 
| 18 | 
            +
                  def svg_node(content)
         | 
| 20 19 | 
             
                    return unless doc = Nokogiri::XML(content.data)
         | 
| 21 20 | 
             
                    doc.xpath("//*[name()='svg']").first
         | 
| 22 21 | 
             
                  end
         | 
| 23 | 
            -
             | 
| 24 22 | 
             
                end
         | 
| 25 23 | 
             
              end
         | 
| 26 | 
            -
            end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            module DragonflySvg
         | 
| 2 | 
            +
              module Analysers
         | 
| 3 | 
            +
                class WidthAnalyser < Base
         | 
| 4 | 
            +
                  def initialize(app)
         | 
| 5 | 
            +
                    original = app.analysers.items[:width]
         | 
| 6 | 
            +
                    app.add_analyser(:width) do |content|
         | 
| 7 | 
            +
                      if is_svg?(content)
         | 
| 8 | 
            +
                        content.analyse(:svg_properties)[:width]
         | 
| 9 | 
            +
                      elsif original
         | 
| 10 | 
            +
                        original.call(content)
         | 
| 11 | 
            +
                      end
         | 
| 12 | 
            +
                    end
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
    
        data/lib/dragonfly_svg/plugin.rb
    CHANGED
    
    | @@ -1,4 +1,12 @@ | |
| 1 | 
            +
            require 'dragonfly_svg/analysers/base'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'dragonfly_svg/analysers/aspect_ratio_analyser'
         | 
| 4 | 
            +
            require 'dragonfly_svg/analysers/height_analyser'
         | 
| 5 | 
            +
            require 'dragonfly_svg/analysers/landscape_analyser'
         | 
| 6 | 
            +
            require 'dragonfly_svg/analysers/portrait_analyser'
         | 
| 1 7 | 
             
            require 'dragonfly_svg/analysers/svg_properties'
         | 
| 8 | 
            +
            require 'dragonfly_svg/analysers/width_analyser'
         | 
| 9 | 
            +
             | 
| 2 10 | 
             
            require 'dragonfly_svg/processors/extend_ids'
         | 
| 3 11 | 
             
            require 'dragonfly_svg/processors/remove_namespaces'
         | 
| 4 12 | 
             
            require 'dragonfly_svg/processors/set_attribute'
         | 
| @@ -9,26 +17,15 @@ require 'dragonfly_svg/processors/set_view_box' | |
| 9 17 |  | 
| 10 18 | 
             
            module DragonflySvg
         | 
| 11 19 | 
             
              class Plugin
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                def call app, opts={}
         | 
| 20 | 
            +
                def call(app, _opts = {})
         | 
| 14 21 | 
             
                  app.add_analyser :svg_properties, DragonflySvg::Analysers::SvgProperties.new
         | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                   | 
| 18 | 
            -
                  app | 
| 19 | 
            -
             | 
| 20 | 
            -
                   | 
| 21 | 
            -
             | 
| 22 | 
            -
                    attrs = content.analyse(:svg_properties)
         | 
| 23 | 
            -
                    attrs[:width].to_f / attrs[:height].to_f
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
                  app.add_analyser :portrait do |content|
         | 
| 26 | 
            -
                    attrs = content.analyse(:svg_properties)
         | 
| 27 | 
            -
                    attrs[:width] <= attrs[:height]
         | 
| 28 | 
            -
                  end
         | 
| 29 | 
            -
                  app.add_analyser :landscape do |content|
         | 
| 30 | 
            -
                    !content.analyse(:portrait)
         | 
| 31 | 
            -
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  DragonflySvg::Analysers::WidthAnalyser.new(app)
         | 
| 24 | 
            +
                  DragonflySvg::Analysers::HeightAnalyser.new(app)
         | 
| 25 | 
            +
                  DragonflySvg::Analysers::AspectRatioAnalyser.new(app)
         | 
| 26 | 
            +
                  DragonflySvg::Analysers::PortraitAnalyser.new(app)
         | 
| 27 | 
            +
                  DragonflySvg::Analysers::LandscapeAnalyser.new(app)
         | 
| 28 | 
            +
             | 
| 32 29 | 
             
                  app.add_analyser :id do |content|
         | 
| 33 30 | 
             
                    content.analyse(:svg_properties)[:id]
         | 
| 34 31 | 
             
                  end
         | 
| @@ -45,7 +42,6 @@ module DragonflySvg | |
| 45 42 | 
             
                  app.add_processor :set_preserve_aspect_ratio, DragonflySvg::Processors::SetPreserveAspectRatio.new
         | 
| 46 43 | 
             
                  app.add_processor :set_view_box, DragonflySvg::Processors::SetViewBox.new
         | 
| 47 44 | 
             
                end
         | 
| 48 | 
            -
             | 
| 49 45 | 
             
              end
         | 
| 50 46 | 
             
            end
         | 
| 51 47 |  | 
| @@ -3,25 +3,23 @@ require 'nokogiri' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                class ExtendIds
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  def call content, append_str=SecureRandom.urlsafe_base64(8)
         | 
| 6 | 
            +
                  def call(content, append_str = SecureRandom.urlsafe_base64(8))
         | 
| 8 7 | 
             
                    doc = Nokogiri::XML(content.data)
         | 
| 9 8 |  | 
| 10 9 | 
             
                    # nodes with id attributes
         | 
| 11 | 
            -
                    doc.xpath( | 
| 10 | 
            +
                    doc.xpath('//*[@id]').each do |node|
         | 
| 12 11 | 
             
                      node_id = node.get_attribute 'id'
         | 
| 13 12 | 
             
                      node.set_attribute 'id', [node_id, append_str].join('-')
         | 
| 14 13 | 
             
                    end
         | 
| 15 14 |  | 
| 16 15 | 
             
                    # nodes with id references
         | 
| 17 | 
            -
                    doc.xpath( | 
| 16 | 
            +
                    doc.xpath('//*[@href]').each do |node|
         | 
| 18 17 | 
             
                      node_href = node.get_attribute 'href'
         | 
| 19 18 | 
             
                      node.set_attribute 'href', [node_href, append_str].join('-')
         | 
| 20 19 | 
             
                    end
         | 
| 21 20 |  | 
| 22 21 | 
             
                    content.update(doc.to_xml)
         | 
| 23 22 | 
             
                  end
         | 
| 24 | 
            -
             | 
| 25 23 | 
             
                end
         | 
| 26 24 | 
             
              end
         | 
| 27 | 
            -
            end
         | 
| 25 | 
            +
            end
         | 
| @@ -3,8 +3,7 @@ require 'nokogiri' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                class RemoveNamespaces
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  def call content
         | 
| 6 | 
            +
                  def call(content)
         | 
| 8 7 | 
             
                    doc = Nokogiri::XML(content.data)
         | 
| 9 8 |  | 
| 10 9 | 
             
                    doc.remove_namespaces!
         | 
| @@ -13,4 +12,4 @@ module DragonflySvg | |
| 13 12 | 
             
                  end
         | 
| 14 13 | 
             
                end
         | 
| 15 14 | 
             
              end
         | 
| 16 | 
            -
            end
         | 
| 15 | 
            +
            end
         | 
| @@ -3,8 +3,7 @@ require 'nokogiri' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                class SetAttribute
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  def call content, xpath, attribute_name, value
         | 
| 6 | 
            +
                  def call(content, xpath, attribute_name, value)
         | 
| 8 7 | 
             
                    doc = Nokogiri::XML(content.data)
         | 
| 9 8 |  | 
| 10 9 | 
             
                    doc.xpath(xpath).each do |node|
         | 
| @@ -13,7 +12,6 @@ module DragonflySvg | |
| 13 12 |  | 
| 14 13 | 
             
                    content.update(doc.to_xml)
         | 
| 15 14 | 
             
                  end
         | 
| 16 | 
            -
             | 
| 17 15 | 
             
                end
         | 
| 18 16 | 
             
              end
         | 
| 19 17 | 
             
            end
         | 
| @@ -3,18 +3,10 @@ require 'nokogiri' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                class SetDimensions
         | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
                     | 
| 9 | 
            -
             | 
| 10 | 
            -
                    if svg_node = doc.xpath("//*[name()='svg']").first
         | 
| 11 | 
            -
                      svg_node.set_attribute 'width', width unless width.nil?
         | 
| 12 | 
            -
                      svg_node.set_attribute 'height', height unless height.nil?
         | 
| 13 | 
            -
                    end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                    content.update(doc.to_xml)
         | 
| 6 | 
            +
                  def call(content, width, height)
         | 
| 7 | 
            +
                    SetAttribute.new.call(content, "//*[name()='svg']", 'width', width) if width
         | 
| 8 | 
            +
                    SetAttribute.new.call(content, "//*[name()='svg']", 'height', height) if height
         | 
| 16 9 | 
             
                  end
         | 
| 17 | 
            -
             | 
| 18 10 | 
             
                end
         | 
| 19 11 | 
             
              end
         | 
| 20 | 
            -
            end
         | 
| 12 | 
            +
            end
         | 
| @@ -3,8 +3,7 @@ require 'nokogiri' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                class SetNamespace
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  def call content, namespace="http://www.w3.org/2000/svg"
         | 
| 6 | 
            +
                  def call(content, namespace = 'http://www.w3.org/2000/svg')
         | 
| 8 7 | 
             
                    doc = Nokogiri::XML(content.data)
         | 
| 9 8 |  | 
| 10 9 | 
             
                    if svg_node = doc.xpath("//*[name()='svg']").first
         | 
| @@ -16,7 +15,6 @@ module DragonflySvg | |
| 16 15 |  | 
| 17 16 | 
             
                    content.update(doc.to_xml)
         | 
| 18 17 | 
             
                  end
         | 
| 19 | 
            -
             | 
| 20 18 | 
             
                end
         | 
| 21 19 | 
             
              end
         | 
| 22 | 
            -
            end
         | 
| 20 | 
            +
            end
         | 
| @@ -3,17 +3,9 @@ require 'nokogiri' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                class SetPreserveAspectRatio
         | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
                    doc = Nokogiri::XML(content.data)
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                    if svg_node = doc.xpath("//*[name()='svg']").first
         | 
| 11 | 
            -
                      svg_node.set_attribute 'preserveAspectRatio', value
         | 
| 12 | 
            -
                    end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                    content.update(doc.to_xml)
         | 
| 6 | 
            +
                  def call(content, value = 'xMinYMin meet')
         | 
| 7 | 
            +
                    SetAttribute.new.call(content, "//*[name()='svg']", 'preserveAspectRatio', value)
         | 
| 15 8 | 
             
                  end
         | 
| 16 | 
            -
             | 
| 17 9 | 
             
                end
         | 
| 18 10 | 
             
              end
         | 
| 19 | 
            -
            end
         | 
| 11 | 
            +
            end
         | 
| @@ -3,19 +3,10 @@ require 'nokogiri' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                class SetViewBox
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  def call content, min_x, min_y, width, height
         | 
| 8 | 
            -
                    doc = Nokogiri::XML(content.data)
         | 
| 9 | 
            -
             | 
| 6 | 
            +
                  def call(content, min_x, min_y, width, height)
         | 
| 10 7 | 
             
                    value = [min_x, min_y, width, height].map(&:to_s).join(' ')
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                    if svg_node = doc.xpath("//*[name()='svg']").first
         | 
| 13 | 
            -
                      svg_node.set_attribute 'viewBox', value
         | 
| 14 | 
            -
                    end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                    content.update(doc.to_xml)
         | 
| 8 | 
            +
                    SetAttribute.new.call(content, "//*[name()='svg']", 'viewBox', value)
         | 
| 17 9 | 
             
                  end
         | 
| 18 | 
            -
             | 
| 19 10 | 
             
                end
         | 
| 20 11 | 
             
              end
         | 
| 21 | 
            -
            end
         | 
| 12 | 
            +
            end
         | 
    
        data/samples/sample.png
    ADDED
    
    | Binary file | 
| @@ -3,7 +3,6 @@ require 'test_helper' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Analysers
         | 
| 5 5 | 
             
                describe SvgProperties do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  let(:app) { test_app.configure_with(:svg) }
         | 
| 8 7 | 
             
                  let(:analyser) { DragonflySvg::Analysers::SvgProperties.new }
         | 
| 9 8 | 
             
                  let(:svg) { app.fetch_file(SAMPLES_DIR.join('sample.svg')) }
         | 
| @@ -28,7 +27,6 @@ module DragonflySvg | |
| 28 27 | 
             
                      svg_properties[:id].must_equal 'sample_id'
         | 
| 29 28 | 
             
                    end
         | 
| 30 29 | 
             
                  end
         | 
| 31 | 
            -
             | 
| 32 30 | 
             
                end
         | 
| 33 31 | 
             
              end
         | 
| 34 | 
            -
            end
         | 
| 32 | 
            +
            end
         | 
| @@ -2,7 +2,6 @@ require 'test_helper' | |
| 2 2 |  | 
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              describe Plugin do
         | 
| 5 | 
            -
             | 
| 6 5 | 
             
                let(:app) { test_app.configure_with(:svg) }
         | 
| 7 6 | 
             
                let(:svg) { app.fetch_file(SAMPLES_DIR.join('sample.svg')) }
         | 
| 8 7 |  | 
| @@ -15,19 +14,60 @@ module DragonflySvg | |
| 15 14 |  | 
| 16 15 | 
             
                  it 'adds #width' do
         | 
| 17 16 | 
             
                    svg.must_respond_to :width
         | 
| 17 | 
            +
                    svg.width.must_equal 200.0
         | 
| 18 18 | 
             
                  end
         | 
| 19 19 |  | 
| 20 20 | 
             
                  it 'adds #height' do
         | 
| 21 21 | 
             
                    svg.must_respond_to :height
         | 
| 22 | 
            +
                    svg.height.must_equal 300.0
         | 
| 22 23 | 
             
                  end
         | 
| 23 24 |  | 
| 24 25 | 
             
                  it 'adds #aspect_ratio' do
         | 
| 25 26 | 
             
                    svg.must_respond_to :aspect_ratio
         | 
| 27 | 
            +
                    svg.aspect_ratio.must_equal 0.6666666666666666
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  it 'adds #portrait' do
         | 
| 31 | 
            +
                    svg.must_respond_to :portrait
         | 
| 32 | 
            +
                    svg.portrait.must_equal true
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  it 'adds #landscape' do
         | 
| 36 | 
            +
                    svg.must_respond_to :landscape
         | 
| 37 | 
            +
                    svg.landscape.must_equal false
         | 
| 26 38 | 
             
                  end
         | 
| 27 39 |  | 
| 28 40 | 
             
                  it 'adds #id' do
         | 
| 29 41 | 
             
                    svg.must_respond_to :id
         | 
| 30 42 | 
             
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  describe "when handling non svg files" do
         | 
| 45 | 
            +
                    let(:png) { app.fetch_file(SAMPLES_DIR.join('sample.png')) }
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    before do
         | 
| 48 | 
            +
                      test_app.configure_with(:image_magick)
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    it 'still works to get the width' do
         | 
| 52 | 
            +
                      png.width.must_equal 1
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                    it 'still works to get the height' do
         | 
| 56 | 
            +
                      png.height.must_equal 1
         | 
| 57 | 
            +
                    end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                    it 'still works to get the aspect ratio' do
         | 
| 60 | 
            +
                      png.aspect_ratio.must_equal 1.0
         | 
| 61 | 
            +
                    end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                    it 'still works to ask for portrait' do
         | 
| 64 | 
            +
                      png.portrait.must_equal true
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                    it 'still works to ask for landscape' do
         | 
| 68 | 
            +
                      png.landscape.must_equal false
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
                  end
         | 
| 31 71 | 
             
                end
         | 
| 32 72 |  | 
| 33 73 | 
             
                # ---------------------------------------------------------------------
         | 
| @@ -57,6 +97,5 @@ module DragonflySvg | |
| 57 97 | 
             
                    svg.must_respond_to :set_view_box
         | 
| 58 98 | 
             
                  end
         | 
| 59 99 | 
             
                end
         | 
| 60 | 
            -
             | 
| 61 100 | 
             
              end
         | 
| 62 | 
            -
            end
         | 
| 101 | 
            +
            end
         | 
| @@ -3,7 +3,6 @@ require 'test_helper' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                describe ExtendIds do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  let(:app) { test_app.configure_with(:svg) }
         | 
| 8 7 | 
             
                  let(:processor) { DragonflySvg::Processors::ExtendIds.new }
         | 
| 9 8 | 
             
                  let(:analyser) { DragonflySvg::Analysers::SvgProperties.new }
         | 
| @@ -22,7 +21,6 @@ module DragonflySvg | |
| 22 21 | 
             
                    processor.call(svg, 'foo')
         | 
| 23 22 | 
             
                    analyser.call(svg)[:id].must_equal "#{@orig_id}-foo"
         | 
| 24 23 | 
             
                  end
         | 
| 25 | 
            -
             | 
| 26 24 | 
             
                end
         | 
| 27 25 | 
             
              end
         | 
| 28 | 
            -
            end
         | 
| 26 | 
            +
            end
         | 
| @@ -3,7 +3,6 @@ require 'test_helper' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                describe RemoveNamespaces do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  let(:app) { test_app.configure_with(:svg) }
         | 
| 8 7 | 
             
                  let(:processor) { DragonflySvg::Processors::RemoveNamespaces.new }
         | 
| 9 8 | 
             
                  let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
         | 
| @@ -12,7 +11,6 @@ module DragonflySvg | |
| 12 11 | 
             
                    processor.call(svg)
         | 
| 13 12 | 
             
                    svg.data.wont_include 'xmlns='
         | 
| 14 13 | 
             
                  end
         | 
| 15 | 
            -
             | 
| 16 14 | 
             
                end
         | 
| 17 15 | 
             
              end
         | 
| 18 | 
            -
            end
         | 
| 16 | 
            +
            end
         | 
| @@ -3,7 +3,6 @@ require 'test_helper' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                describe SetAttribute do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  let(:app) { test_app.configure_with(:svg) }
         | 
| 8 7 | 
             
                  let(:processor) { DragonflySvg::Processors::SetAttribute.new }
         | 
| 9 8 | 
             
                  let(:analyser) { DragonflySvg::Analysers::SvgProperties.new }
         | 
| @@ -11,17 +10,16 @@ module DragonflySvg | |
| 11 10 |  | 
| 12 11 | 
             
                  let(:xpath) { "./*[name()='svg']" }
         | 
| 13 12 | 
             
                  let(:attribute_name) { 'style' }
         | 
| 14 | 
            -
                  let(: | 
| 13 | 
            +
                  let(:attribute_value) { 'margin: 50px;' }
         | 
| 15 14 |  | 
| 16 15 | 
             
                  before do
         | 
| 17 | 
            -
                    processor.call(svg, xpath, attribute_name,  | 
| 16 | 
            +
                    processor.call(svg, xpath, attribute_name, attribute_value)
         | 
| 18 17 | 
             
                  end
         | 
| 19 18 |  | 
| 20 19 | 
             
                  it 'sets attribute' do
         | 
| 21 20 | 
             
                    Nokogiri::XML(svg.data).xpath(xpath).count.must_equal 1
         | 
| 22 | 
            -
                    Nokogiri::XML(svg.data).xpath(xpath).first.get_attribute('style').must_equal  | 
| 21 | 
            +
                    Nokogiri::XML(svg.data).xpath(xpath).first.get_attribute('style').must_equal attribute_value
         | 
| 23 22 | 
             
                  end
         | 
| 24 | 
            -
             | 
| 25 23 | 
             
                end
         | 
| 26 24 | 
             
              end
         | 
| 27 25 | 
             
            end
         | 
| @@ -3,7 +3,6 @@ require 'test_helper' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                describe SetDimensions do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  let(:app) { test_app.configure_with(:svg) }
         | 
| 8 7 | 
             
                  let(:processor) { DragonflySvg::Processors::SetDimensions.new }
         | 
| 9 8 | 
             
                  let(:analyser) { DragonflySvg::Analysers::SvgProperties.new }
         | 
| @@ -20,7 +19,6 @@ module DragonflySvg | |
| 20 19 | 
             
                  it 'sets height' do
         | 
| 21 20 | 
             
                    analyser.call(svg)[:height].must_equal 600
         | 
| 22 21 | 
             
                  end
         | 
| 23 | 
            -
             | 
| 24 22 | 
             
                end
         | 
| 25 23 | 
             
              end
         | 
| 26 | 
            -
            end
         | 
| 24 | 
            +
            end
         | 
| @@ -3,7 +3,6 @@ require 'test_helper' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                describe SetNamespace do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  let(:app) { test_app.configure_with(:svg) }
         | 
| 8 7 | 
             
                  let(:processor) { DragonflySvg::Processors::SetNamespace.new }
         | 
| 9 8 | 
             
                  let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
         | 
| @@ -17,7 +16,6 @@ module DragonflySvg | |
| 17 16 | 
             
                    processor.call(svg, 'custom_namespace')
         | 
| 18 17 | 
             
                    svg.data.must_include 'custom_namespace'
         | 
| 19 18 | 
             
                  end
         | 
| 20 | 
            -
             | 
| 21 19 | 
             
                end
         | 
| 22 20 | 
             
              end
         | 
| 23 | 
            -
            end
         | 
| 21 | 
            +
            end
         | 
| @@ -3,7 +3,6 @@ require 'test_helper' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                describe SetPreserveAspectRatio do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  let(:app) { test_app.configure_with(:svg) }
         | 
| 8 7 | 
             
                  let(:processor) { DragonflySvg::Processors::SetPreserveAspectRatio.new }
         | 
| 9 8 | 
             
                  let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
         | 
| @@ -11,22 +10,21 @@ module DragonflySvg | |
| 11 10 | 
             
                  describe 'with default value' do
         | 
| 12 11 | 
             
                    it 'adds preserveAspectRatio attribute' do
         | 
| 13 12 | 
             
                      processor.call(svg)
         | 
| 14 | 
            -
                      svg.data.must_include  | 
| 13 | 
            +
                      svg.data.must_include 'preserveAspectRatio'
         | 
| 15 14 | 
             
                    end
         | 
| 16 15 |  | 
| 17 16 | 
             
                    it 'sets default value' do
         | 
| 18 17 | 
             
                      processor.call(svg)
         | 
| 19 | 
            -
                      svg.data.must_include  | 
| 18 | 
            +
                      svg.data.must_include 'xMinYMin meet'
         | 
| 20 19 | 
             
                    end
         | 
| 21 20 | 
             
                  end
         | 
| 22 21 |  | 
| 23 22 | 
             
                  describe 'with specified value' do
         | 
| 24 23 | 
             
                    it 'adds preserveAspectRatio with specified value' do
         | 
| 25 24 | 
             
                      processor.call(svg, 'xMidYMid meet')
         | 
| 26 | 
            -
                      svg.data.must_include  | 
| 25 | 
            +
                      svg.data.must_include 'xMidYMid meet'
         | 
| 27 26 | 
             
                    end
         | 
| 28 27 | 
             
                  end
         | 
| 29 | 
            -
             | 
| 30 28 | 
             
                end
         | 
| 31 29 | 
             
              end
         | 
| 32 | 
            -
            end
         | 
| 30 | 
            +
            end
         | 
| @@ -3,7 +3,6 @@ require 'test_helper' | |
| 3 3 | 
             
            module DragonflySvg
         | 
| 4 4 | 
             
              module Processors
         | 
| 5 5 | 
             
                describe SetViewBox do
         | 
| 6 | 
            -
             | 
| 7 6 | 
             
                  let(:app) { test_app.configure_with(:svg) }
         | 
| 8 7 | 
             
                  let(:processor) { DragonflySvg::Processors::SetViewBox.new }
         | 
| 9 8 | 
             
                  let(:svg) { Dragonfly::Content.new(app, SAMPLES_DIR.join('sample.svg')) }
         | 
| @@ -15,7 +14,6 @@ module DragonflySvg | |
| 15 14 | 
             
                  it 'sets view box' do
         | 
| 16 15 | 
             
                    svg.data.must_include '0 0 400 600'
         | 
| 17 16 | 
             
                  end
         | 
| 18 | 
            -
             | 
| 19 17 | 
             
                end
         | 
| 20 18 | 
             
              end
         | 
| 21 | 
            -
            end
         | 
| 19 | 
            +
            end
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    | @@ -13,9 +13,9 @@ SAMPLES_DIR = Pathname.new(File.expand_path('../../samples', __FILE__)) | |
| 13 13 |  | 
| 14 14 | 
             
            # ---------------------------------------------------------------------
         | 
| 15 15 |  | 
| 16 | 
            -
            def test_app  | 
| 16 | 
            +
            def test_app(name = nil)
         | 
| 17 17 | 
             
              app = Dragonfly::App.instance(name)
         | 
| 18 18 | 
             
              app.datastore = Dragonfly::MemoryDataStore.new
         | 
| 19 | 
            -
              app.secret =  | 
| 19 | 
            +
              app.secret = 'test secret'
         | 
| 20 20 | 
             
              app
         | 
| 21 | 
            -
            end
         | 
| 21 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: dragonfly_svg
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Tomas Celizna
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2016-04-24 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: dragonfly
         | 
| @@ -125,7 +125,13 @@ files: | |
| 125 125 | 
             
            - Rakefile
         | 
| 126 126 | 
             
            - dragonfly_svg.gemspec
         | 
| 127 127 | 
             
            - lib/dragonfly_svg.rb
         | 
| 128 | 
            +
            - lib/dragonfly_svg/analysers/aspect_ratio_analyser.rb
         | 
| 129 | 
            +
            - lib/dragonfly_svg/analysers/base.rb
         | 
| 130 | 
            +
            - lib/dragonfly_svg/analysers/height_analyser.rb
         | 
| 131 | 
            +
            - lib/dragonfly_svg/analysers/landscape_analyser.rb
         | 
| 132 | 
            +
            - lib/dragonfly_svg/analysers/portrait_analyser.rb
         | 
| 128 133 | 
             
            - lib/dragonfly_svg/analysers/svg_properties.rb
         | 
| 134 | 
            +
            - lib/dragonfly_svg/analysers/width_analyser.rb
         | 
| 129 135 | 
             
            - lib/dragonfly_svg/plugin.rb
         | 
| 130 136 | 
             
            - lib/dragonfly_svg/processors/extend_ids.rb
         | 
| 131 137 | 
             
            - lib/dragonfly_svg/processors/remove_namespaces.rb
         | 
| @@ -135,6 +141,7 @@ files: | |
| 135 141 | 
             
            - lib/dragonfly_svg/processors/set_preserve_aspect_ratio.rb
         | 
| 136 142 | 
             
            - lib/dragonfly_svg/processors/set_view_box.rb
         | 
| 137 143 | 
             
            - lib/dragonfly_svg/version.rb
         | 
| 144 | 
            +
            - samples/sample.png
         | 
| 138 145 | 
             
            - samples/sample.svg
         | 
| 139 146 | 
             
            - test/dragonfly_svg/analysers/svg_properties_test.rb
         | 
| 140 147 | 
             
            - test/dragonfly_svg/plugin_test.rb
         |