slimmer 3.0.0 → 3.1.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.
- data/CHANGELOG.md +5 -0
- data/lib/slimmer/artefact.rb +19 -5
- data/lib/slimmer/headers.rb +14 -0
- data/lib/slimmer/processors/logo_class_inserter.rb +2 -12
- data/lib/slimmer/processors/related_items_inserter.rb +3 -21
- data/lib/slimmer/processors/section_inserter.rb +28 -11
- data/lib/slimmer/skin.rb +5 -2
- data/lib/slimmer/test_template.rb +7 -6
- data/lib/slimmer/version.rb +1 -1
- data/test/artefact_test.rb +65 -0
- data/test/fixtures/related.raw.html.erb +10 -13
- data/test/headers_test.rb +20 -0
- data/test/processors/logo_class_inserter_test.rb +2 -2
- data/test/processors/related_items_inserter_test.rb +1 -1
- data/test/processors/section_inserter_test.rb +138 -53
- data/test/skin_test.rb +28 -1
- data/test/typical_usage_test.rb +7 -18
- metadata +5 -5
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/lib/slimmer/artefact.rb
    CHANGED
    
    | @@ -8,12 +8,24 @@ class Slimmer::Artefact | |
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 10 | 
             
              def tags_of_type(type)
         | 
| 11 | 
            -
                return [] unless  | 
| 12 | 
            -
                 | 
| 11 | 
            +
                return [] unless self.tags
         | 
| 12 | 
            +
                self.tags.select do |t|
         | 
| 13 13 | 
             
                  t["details"]["type"] == type
         | 
| 14 14 | 
             
                end
         | 
| 15 15 | 
             
              end
         | 
| 16 16 |  | 
| 17 | 
            +
              def primary_section
         | 
| 18 | 
            +
                tags_of_type("section").first
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def primary_root_section
         | 
| 22 | 
            +
                section = primary_section
         | 
| 23 | 
            +
                while section and section["parent"]
         | 
| 24 | 
            +
                  section = section["parent"]
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
                section
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 17 29 | 
             
              def legacy_sources
         | 
| 18 30 | 
             
                tags_of_type('legacy_source').map do |t|
         | 
| 19 31 | 
             
                  id_to_slug(t["id"])
         | 
| @@ -21,14 +33,16 @@ class Slimmer::Artefact | |
| 21 33 | 
             
              end
         | 
| 22 34 |  | 
| 23 35 | 
             
              def related_artefacts
         | 
| 24 | 
            -
                return [] unless  | 
| 25 | 
            -
                 | 
| 36 | 
            +
                return [] unless self.related
         | 
| 37 | 
            +
                self.related.map do |r|
         | 
| 26 38 | 
             
                  self.class.new(r)
         | 
| 27 39 | 
             
                end
         | 
| 28 40 | 
             
              end
         | 
| 29 41 |  | 
| 30 42 | 
             
              def method_missing(name, *args)
         | 
| 31 | 
            -
                 | 
| 43 | 
            +
                value = @data[name.to_s]
         | 
| 44 | 
            +
                value ||= @data["details"][name.to_s] if @data["details"]
         | 
| 45 | 
            +
                value
         | 
| 32 46 | 
             
              end
         | 
| 33 47 |  | 
| 34 48 | 
             
              private
         | 
    
        data/lib/slimmer/headers.rb
    CHANGED
    
    | @@ -31,5 +31,19 @@ module Slimmer | |
| 31 31 | 
             
                  artefact = artefact_input.dup
         | 
| 32 32 | 
             
                  headers[ARTEFACT_HEADER] = artefact.to_json
         | 
| 33 33 | 
             
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def set_slimmer_dummy_artefact(details = {})
         | 
| 36 | 
            +
                  artefact = {}
         | 
| 37 | 
            +
                  artefact["title"] = details[:title] if details[:title]
         | 
| 38 | 
            +
                  if details[:section_name] and details[:section_link]
         | 
| 39 | 
            +
                    tag = {
         | 
| 40 | 
            +
                      "title" => details[:section_name],
         | 
| 41 | 
            +
                      "details" => {"type" => "section"},
         | 
| 42 | 
            +
                      "content_with_tag" => {"web_url" => details[:section_link]},
         | 
| 43 | 
            +
                    }
         | 
| 44 | 
            +
                    artefact["tags"] = [tag]
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
                  headers[ARTEFACT_HEADER] = artefact.to_json
         | 
| 47 | 
            +
                end
         | 
| 34 48 | 
             
              end
         | 
| 35 49 | 
             
            end
         | 
| @@ -8,23 +8,13 @@ module Slimmer | |
| 8 8 | 
             
                  end
         | 
| 9 9 |  | 
| 10 10 | 
             
                  def filter(source, dest)
         | 
| 11 | 
            -
                    return unless @artefact | 
| 12 | 
            -
                    classes_to_use = LOGO_CLASSES & legacy_sources
         | 
| 11 | 
            +
                    return unless @artefact
         | 
| 12 | 
            +
                    classes_to_use = LOGO_CLASSES & @artefact.legacy_sources
         | 
| 13 13 | 
             
                    wrapper = dest.css('#wrapper')
         | 
| 14 14 | 
             
                    classes_to_use.each do |klass|
         | 
| 15 15 | 
             
                      wrapper.add_class(klass)
         | 
| 16 16 | 
             
                    end
         | 
| 17 17 | 
             
                  end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                  def legacy_sources
         | 
| 20 | 
            -
                    legacy_source_tags = @artefact["tags"].select do |tag| 
         | 
| 21 | 
            -
                      tag["details"]["type"] == "legacy_source"
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
                    legacy_sources = legacy_source_tags.map do |tag| 
         | 
| 24 | 
            -
                      tag["id"].split("/").last.chomp(".json")
         | 
| 25 | 
            -
                    end
         | 
| 26 | 
            -
                    legacy_sources
         | 
| 27 | 
            -
                  end
         | 
| 28 18 | 
             
                end
         | 
| 29 19 | 
             
              end
         | 
| 30 20 | 
             
            end
         | 
| @@ -12,29 +12,11 @@ class Slimmer::Processors::RelatedItemsInserter | |
| 12 12 | 
             
                end
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 | 
            +
              private
         | 
| 16 | 
            +
             | 
| 15 17 | 
             
              def related_item_block
         | 
| 16 18 | 
             
                artefact = @artefact
         | 
| 17 | 
            -
                 | 
| 18 | 
            -
                related_block_template = @skin.template('related.raw')
         | 
| 19 | 
            -
                html = ERB.new(related_block_template).result(binding)
         | 
| 19 | 
            +
                html = ERB.new(@skin.template('related.raw')).result(binding)
         | 
| 20 20 | 
             
                Nokogiri::HTML.fragment(html)
         | 
| 21 21 | 
             
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              # Duplicated in Frontend
         | 
| 24 | 
            -
              def root_primary_section(artefact)
         | 
| 25 | 
            -
                primary_section = artefact["tags"].detect do |tag| 
         | 
| 26 | 
            -
                  tag["details"]["type"] == "section"
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                if primary_section.nil?
         | 
| 30 | 
            -
                  nil
         | 
| 31 | 
            -
                else
         | 
| 32 | 
            -
                  if primary_section["parent"]
         | 
| 33 | 
            -
                    primary_section["parent"]
         | 
| 34 | 
            -
                  else
         | 
| 35 | 
            -
                    primary_section
         | 
| 36 | 
            -
                  end
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
              end
         | 
| 39 | 
            -
             | 
| 40 22 | 
             
            end
         | 
| @@ -1,20 +1,37 @@ | |
| 1 1 | 
             
            module Slimmer::Processors
         | 
| 2 2 | 
             
              class SectionInserter
         | 
| 3 | 
            +
                def initialize(artefact)
         | 
| 4 | 
            +
                  @artefact = artefact
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
             | 
| 3 7 | 
             
                def filter(src,dest)
         | 
| 4 | 
            -
                   | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 8 | 
            +
                  if @artefact and (list = dest.at_css('.header-context nav[role=navigation] ol'))
         | 
| 9 | 
            +
                    if (section = @artefact.primary_section)
         | 
| 10 | 
            +
                      append_tag(list, section["parent"]) if section["parent"]
         | 
| 11 | 
            +
                      append_tag(list, section)
         | 
| 12 | 
            +
                    end
         | 
| 13 | 
            +
                    append_text(list, @artefact.title) if @artefact.title and @artefact.title !~ /\A\s*\z/
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 7 16 |  | 
| 8 | 
            -
             | 
| 9 | 
            -
                    link_node = Nokogiri::XML::Node.new('a', dest)
         | 
| 10 | 
            -
                    link_node['href'] = meta_link['content']
         | 
| 11 | 
            -
                    link_node.content = meta_name['content']
         | 
| 17 | 
            +
                private
         | 
| 12 18 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 19 | 
            +
                def append_tag(list, tag)
         | 
| 20 | 
            +
                  link_node = Nokogiri::XML::Node.new('a', list)
         | 
| 21 | 
            +
                  link_node['href'] = tag["content_with_tag"]["web_url"]
         | 
| 22 | 
            +
                  link_node.content = tag["title"]
         | 
| 15 23 |  | 
| 16 | 
            -
             | 
| 17 | 
            -
                   | 
| 24 | 
            +
                  list_item = Nokogiri::XML::Node.new('li', list)
         | 
| 25 | 
            +
                  list_item.add_child(link_node)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  list.add_child(list_item)
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def append_text(list, text)
         | 
| 31 | 
            +
                  list_item = Nokogiri::XML::Node.new('li', list)
         | 
| 32 | 
            +
                  list_item.content = text
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  list.add_child(list_item)
         | 
| 18 35 | 
             
                end
         | 
| 19 36 | 
             
              end
         | 
| 20 37 | 
             
            end
         | 
    
        data/lib/slimmer/skin.rb
    CHANGED
    
    | @@ -128,7 +128,7 @@ module Slimmer | |
| 128 128 | 
             
                    Processors::BodyInserter.new(options[:wrapper_id] || 'wrapper'),
         | 
| 129 129 | 
             
                    Processors::BodyClassCopier.new,
         | 
| 130 130 | 
             
                    Processors::HeaderContextInserter.new(),
         | 
| 131 | 
            -
                    Processors::SectionInserter.new(),
         | 
| 131 | 
            +
                    Processors::SectionInserter.new(artefact),
         | 
| 132 132 | 
             
                    Processors::GoogleAnalyticsConfigurator.new(response),
         | 
| 133 133 | 
             
                    Processors::SearchPathSetter.new(response),
         | 
| 134 134 | 
             
                    Processors::RelatedItemsInserter.new(self, artefact),
         | 
| @@ -149,10 +149,13 @@ module Slimmer | |
| 149 149 |  | 
| 150 150 | 
             
                def artefact_from_header(response)
         | 
| 151 151 | 
             
                  if response.headers.include?(Headers::ARTEFACT_HEADER)
         | 
| 152 | 
            -
                    JSON.parse(response.headers[Headers::ARTEFACT_HEADER])
         | 
| 152 | 
            +
                    Artefact.new JSON.parse(response.headers[Headers::ARTEFACT_HEADER])
         | 
| 153 153 | 
             
                  else
         | 
| 154 154 | 
             
                    nil
         | 
| 155 155 | 
             
                  end
         | 
| 156 | 
            +
                rescue JSON::ParserError => e
         | 
| 157 | 
            +
                  logger.error "Slimmer: Failed while parsing artefact header: #{[ e.message, e.backtrace ].flatten.join("\n")}"
         | 
| 158 | 
            +
                  nil
         | 
| 156 159 | 
             
                end
         | 
| 157 160 | 
             
              end
         | 
| 158 161 | 
             
            end
         | 
| @@ -19,12 +19,13 @@ module Slimmer::TestTemplate | |
| 19 19 | 
             
                    <script src="http://static.preview.alphagov.co.uk/static/jquery.tabs.js" defer></script>
         | 
| 20 20 | 
             
                  </head>
         | 
| 21 21 | 
             
                  <body>
         | 
| 22 | 
            -
                    < | 
| 23 | 
            -
                      < | 
| 24 | 
            -
                        < | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 22 | 
            +
                    <div class="header-context">
         | 
| 23 | 
            +
                      <nav role="navigation">
         | 
| 24 | 
            +
                        <ol class="group">
         | 
| 25 | 
            +
                          <li><a href="/">Home</a></li>
         | 
| 26 | 
            +
                        </ol>
         | 
| 27 | 
            +
                      </nav>
         | 
| 28 | 
            +
                    </div>
         | 
| 28 29 |  | 
| 29 30 | 
             
                    <div id="wrapper"></div>
         | 
| 30 31 | 
             
                  </body>
         | 
    
        data/lib/slimmer/version.rb
    CHANGED
    
    
    
        data/test/artefact_test.rb
    CHANGED
    
    | @@ -9,6 +9,66 @@ describe Slimmer::Artefact do | |
| 9 9 | 
             
                assert_equal 'vat-rates', a.slug
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 | 
            +
              describe "Primary section" do
         | 
| 13 | 
            +
                before do
         | 
| 14 | 
            +
                  @data = artefact_for_slug('something')
         | 
| 15 | 
            +
                  @tag1 = tag_for_slug("fooey", "section")
         | 
| 16 | 
            +
                  @tag2 = tag_for_slug("gooey", "section")
         | 
| 17 | 
            +
                  @data["tags"] << @tag1 << @tag2
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                it "should return the first section tag" do
         | 
| 21 | 
            +
                  assert_equal @tag1, Slimmer::Artefact.new(@data).primary_section
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                it "should ignore other tag types" do
         | 
| 25 | 
            +
                  @data["tags"].unshift(tag_for_slug("businesslink", "legacy_source"))
         | 
| 26 | 
            +
                  assert_equal @tag1, Slimmer::Artefact.new(@data).primary_section
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it "should return nil if there are no sections" do
         | 
| 30 | 
            +
                  @data["tags"] = [tag_for_slug("businesslink", "legacy_source")]
         | 
| 31 | 
            +
                  assert_equal nil, Slimmer::Artefact.new(@data).primary_section
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                it "should return nil if there is no tags element" do
         | 
| 35 | 
            +
                  @data.delete("tags")
         | 
| 36 | 
            +
                  assert_equal nil, Slimmer::Artefact.new(@data).primary_section
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              describe "Primary root section" do
         | 
| 41 | 
            +
                before do
         | 
| 42 | 
            +
                  @artefact = Slimmer::Artefact.new(artefact_for_slug('something'))
         | 
| 43 | 
            +
                  @tag1 = tag_for_slug("fooey", "section")
         | 
| 44 | 
            +
                  @tag2 = tag_for_slug("gooey", "section")
         | 
| 45 | 
            +
                  @tag3 = tag_for_slug("kablooie", "section")
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                it "should return the primary section if it has no parent" do
         | 
| 49 | 
            +
                  @artefact.stubs(:primary_section).returns(@tag1)
         | 
| 50 | 
            +
                  assert_equal @tag1, @artefact.primary_root_section
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                it "should return the primary section's parent" do
         | 
| 54 | 
            +
                  @tag1["parent"] = @tag2
         | 
| 55 | 
            +
                  @artefact.stubs(:primary_section).returns(@tag1)
         | 
| 56 | 
            +
                  assert_equal @tag2, @artefact.primary_root_section
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                it "should support arbitrarily deep heirarchies" do
         | 
| 60 | 
            +
                  @tag1["parent"] = @tag3
         | 
| 61 | 
            +
                  @tag3["parent"] = @tag2
         | 
| 62 | 
            +
                  @artefact.stubs(:primary_section).returns(@tag1)
         | 
| 63 | 
            +
                  assert_equal @tag2, @artefact.primary_root_section
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                it "should return nil if there is no primary section" do
         | 
| 67 | 
            +
                  @artefact.stubs(:primary_section).returns(nil)
         | 
| 68 | 
            +
                  assert_equal nil, @artefact.primary_root_section
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 12 72 | 
             
              describe "Related artefacts" do
         | 
| 13 73 | 
             
                before do
         | 
| 14 74 | 
             
                  @data = artefact_for_slug('something')
         | 
| @@ -74,5 +134,10 @@ describe Slimmer::Artefact do | |
| 74 134 | 
             
                it "should return nil if the field doesn't exist" do
         | 
| 75 135 | 
             
                  assert_equal nil, @a.non_existent
         | 
| 76 136 | 
             
                end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                it "should not blow up if the details attribute doesn't exist" do
         | 
| 139 | 
            +
                  @data.delete("details")
         | 
| 140 | 
            +
                  assert_equal nil, @a.non_existent
         | 
| 141 | 
            +
                end
         | 
| 77 142 | 
             
              end
         | 
| 78 143 | 
             
            end
         | 
| @@ -10,21 +10,18 @@ | |
| 10 10 | 
             
                    <h2>More like this:</h2>
         | 
| 11 11 | 
             
                    <nav role="navigation">
         | 
| 12 12 | 
             
                      <ul>
         | 
| 13 | 
            -
                         | 
| 14 | 
            -
                        <% if artefact | 
| 15 | 
            -
                          <%  | 
| 16 | 
            -
                             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
                                <a href="<%= h item["web_url"] %>"><%= h item["title"] %></a>
         | 
| 20 | 
            -
                              </li>
         | 
| 21 | 
            -
                            <% end %>
         | 
| 13 | 
            +
                        <%# Content API style Artefact %>
         | 
| 14 | 
            +
                        <% if artefact.respond_to?(:related_artefacts) %>
         | 
| 15 | 
            +
                          <% artefact.related_artefacts.each do |item| %>
         | 
| 16 | 
            +
                            <li>
         | 
| 17 | 
            +
                              <a href="<%= h item.web_url %>"><%= h item.title %></a>
         | 
| 18 | 
            +
                            </li>
         | 
| 22 19 | 
             
                          <% end %>
         | 
| 23 | 
            -
                          <% if root_primary_section %>
         | 
| 24 | 
            -
                            <li class="related-topic"><a href="<%=  | 
| 25 | 
            -
                              >More from the <span><%= h  | 
| 20 | 
            +
                          <% if root_section = artefact.root_primary_section %>
         | 
| 21 | 
            +
                            <li class="related-topic"><a href="<%= h root_section["content_with_tag"]["web_url"] %>"
         | 
| 22 | 
            +
                              >More from the <span><%= h root_section["title"] %></span> category</a></li>
         | 
| 26 23 | 
             
                          <% end %>
         | 
| 27 | 
            -
                        <% else %>  | 
| 24 | 
            +
                        <% else %> <%# Panopticon API style Artefact (deprecated) %>
         | 
| 28 25 | 
             
                          <% if artefact["related_items"].any? %>
         | 
| 29 26 | 
             
                            <% artefact["related_items"].each do |item| %>
         | 
| 30 27 | 
             
                              <% if item["artefact"] %>
         | 
    
        data/test/headers_test.rb
    CHANGED
    
    | @@ -84,4 +84,24 @@ describe Slimmer::Headers do | |
| 84 84 | 
             
                  assert_equal artefact_copy, artefact
         | 
| 85 85 | 
             
                end
         | 
| 86 86 | 
             
              end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
              describe "setting a dummy artefact in the artefact header" do
         | 
| 89 | 
            +
                it "should setup an artefact title" do
         | 
| 90 | 
            +
                  self.set_slimmer_dummy_artefact(:title => "Foo")
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                  artefact = JSON.parse(headers[Slimmer::Headers::ARTEFACT_HEADER])
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                  assert_equal "Foo", artefact["title"]
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                it "should setup a section tag for the given name and link" do
         | 
| 98 | 
            +
                  self.set_slimmer_dummy_artefact(:section_name => "Foo", :section_link => "/something/foo")
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  artefact = JSON.parse(headers[Slimmer::Headers::ARTEFACT_HEADER])
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  assert_equal "Foo", artefact["tags"][0]["title"]
         | 
| 103 | 
            +
                  assert_equal "section", artefact["tags"][0]["details"]["type"]
         | 
| 104 | 
            +
                  assert_equal "/something/foo", artefact["tags"][0]["content_with_tag"]["web_url"]
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
              end
         | 
| 87 107 | 
             
            end
         | 
| @@ -9,7 +9,7 @@ describe Slimmer::Processors::LogoClassInserter do | |
| 9 9 | 
             
                legacy_sources.each do |legacy_source|
         | 
| 10 10 | 
             
                  artefact["tags"] << tag_for_slug(legacy_source, "legacy_source")
         | 
| 11 11 | 
             
                end
         | 
| 12 | 
            -
                artefact
         | 
| 12 | 
            +
                Slimmer::Artefact.new(artefact)
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 15 | 
             
              def business_link_artefact
         | 
| @@ -68,7 +68,7 @@ describe Slimmer::Processors::LogoClassInserter do | |
| 68 68 |  | 
| 69 69 | 
             
              it "should do nothing if the artefact has no tag_ids" do
         | 
| 70 70 | 
             
                template = example_template
         | 
| 71 | 
            -
                artefact = artefact_for_slug("vat")
         | 
| 71 | 
            +
                artefact = Slimmer::Artefact.new(artefact_for_slug("vat"))
         | 
| 72 72 | 
             
                process(artefact, template)
         | 
| 73 73 | 
             
                assert_in template, "div#wrapper"
         | 
| 74 74 | 
             
              end
         | 
| @@ -8,7 +8,7 @@ class RelatedItemsInserterTest < MiniTest::Unit::TestCase | |
| 8 8 | 
             
                super
         | 
| 9 9 | 
             
                @related_template = File.read( File.dirname(__FILE__) + "/../fixtures/related.raw.html.erb" )
         | 
| 10 10 | 
             
                @skin = stub("Skin", :template => @related_template)
         | 
| 11 | 
            -
                @artefact = artefact_for_slug_with_related_artefacts("vat", ["vat-rates", "starting-to-import"])
         | 
| 11 | 
            +
                @artefact = Slimmer::Artefact.new artefact_for_slug_with_related_artefacts("vat", ["vat-rates", "starting-to-import"])
         | 
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 14 | 
             
              def test_should_add_related_items
         | 
| @@ -1,105 +1,190 @@ | |
| 1 1 | 
             
            require_relative "../test_helper"
         | 
| 2 | 
            +
            require 'gds_api/test_helpers/content_api'
         | 
| 2 3 |  | 
| 3 4 | 
             
            class SectionInserterTest < MiniTest::Unit::TestCase
         | 
| 5 | 
            +
              include GdsApi::TestHelpers::ContentApi
         | 
| 4 6 |  | 
| 5 | 
            -
               | 
| 6 | 
            -
             | 
| 7 | 
            +
              def create_artefact(slug, attributes = {})
         | 
| 8 | 
            +
                if section_slug = attributes.delete("section_slug")
         | 
| 9 | 
            +
                  if subsection_slug = attributes.delete("subsection_slug")
         | 
| 10 | 
            +
                    a = artefact_for_slug_in_a_subsection(slug, "#{section_slug}/#{subsection_slug}")
         | 
| 11 | 
            +
                  else
         | 
| 12 | 
            +
                    a = artefact_for_slug_in_a_section(slug, section_slug)
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                else
         | 
| 15 | 
            +
                  a = artefact_for_slug(slug)
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
                Slimmer::Artefact.new(a.merge(attributes))
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def test_should_add_section_link_and_title_to_breadcrumb
         | 
| 21 | 
            +
                artefact = create_artefact("something",
         | 
| 22 | 
            +
                                           "section_slug" => "business",
         | 
| 23 | 
            +
                                           "title" => "Something gooey")
         | 
| 7 24 |  | 
| 8 | 
            -
              def test_should_add_section_link_to_breadcrumb
         | 
| 9 25 | 
             
                template = as_nokogiri %{
         | 
| 10 26 | 
             
                  <html>
         | 
| 11 | 
            -
                    <head>
         | 
| 12 | 
            -
                      <meta content="Business" name="x-section-name">
         | 
| 13 | 
            -
                      <meta content="/browse/business" name="x-section-link">
         | 
| 14 | 
            -
                    </head>
         | 
| 15 27 | 
             
                    <body>
         | 
| 16 | 
            -
                      < | 
| 17 | 
            -
                        < | 
| 18 | 
            -
             | 
| 28 | 
            +
                      <div class="header-context">
         | 
| 29 | 
            +
                        <nav role="navigation">
         | 
| 30 | 
            +
                          <ol class="group">
         | 
| 31 | 
            +
                            <li><a href="/">Home</a></li>
         | 
| 32 | 
            +
                          </ol>
         | 
| 33 | 
            +
                        </nav>
         | 
| 34 | 
            +
                      </div>
         | 
| 19 35 | 
             
                    </body>
         | 
| 20 36 | 
             
                  </html>
         | 
| 21 37 | 
             
                }
         | 
| 22 38 |  | 
| 23 | 
            -
                Slimmer::Processors::SectionInserter.new.filter(:any_source, template)
         | 
| 24 | 
            -
                 | 
| 25 | 
            -
                assert_in  | 
| 39 | 
            +
                Slimmer::Processors::SectionInserter.new(artefact).filter(:any_source, template)
         | 
| 40 | 
            +
                list = template.at_css(".header-context nav[role=navigation] ol")
         | 
| 41 | 
            +
                assert_in list, "li:nth-child(1)", %{<a href="/">Home</a>}
         | 
| 42 | 
            +
                assert_in list, "li:nth-child(2)", %{<a href="https://www.test.gov.uk/browse/business">Business</a>}
         | 
| 43 | 
            +
                assert_in list, "li:nth-child(3)", %{Something gooey}
         | 
| 26 44 | 
             
              end
         | 
| 27 45 |  | 
| 28 | 
            -
              def  | 
| 46 | 
            +
              def test_should_add_section_link_subsection_link_and_title_to_breadcrumb
         | 
| 47 | 
            +
                artefact = create_artefact("something",
         | 
| 48 | 
            +
                                           "section_slug" => "business",
         | 
| 49 | 
            +
                                           "subsection_slug" => "employing-people",
         | 
| 50 | 
            +
                                           "title" => "Something gooey")
         | 
| 51 | 
            +
             | 
| 29 52 | 
             
                template = as_nokogiri %{
         | 
| 30 53 | 
             
                  <html>
         | 
| 31 | 
            -
                    <head>
         | 
| 32 | 
            -
                      <meta content="Business" name="x-section-name">
         | 
| 33 | 
            -
                      <meta content="/browse/business" name="x-section-link">
         | 
| 34 | 
            -
                    </head>
         | 
| 35 54 | 
             
                    <body>
         | 
| 36 | 
            -
                      < | 
| 37 | 
            -
                        < | 
| 38 | 
            -
                          <li><a href="/">Home</a></li>
         | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
                      </nav>
         | 
| 55 | 
            +
                      <div class="header-context">
         | 
| 56 | 
            +
                        <nav role="navigation">
         | 
| 57 | 
            +
                          <ol class="group"><li><a href="/">Home</a></li></ol>
         | 
| 58 | 
            +
                        </nav>
         | 
| 59 | 
            +
                      </div>
         | 
| 42 60 | 
             
                    </body>
         | 
| 43 61 | 
             
                  </html>
         | 
| 44 62 | 
             
                }
         | 
| 45 63 |  | 
| 46 | 
            -
                Slimmer::Processors::SectionInserter.new.filter(:any_source, template)
         | 
| 47 | 
            -
                 | 
| 48 | 
            -
                assert_in  | 
| 49 | 
            -
                assert_in  | 
| 64 | 
            +
                Slimmer::Processors::SectionInserter.new(artefact).filter(:any_source, template)
         | 
| 65 | 
            +
                list = template.at_css(".header-context nav[role=navigation] ol")
         | 
| 66 | 
            +
                assert_in list, "li:nth-child(1)", %{<a href="/">Home</a>}
         | 
| 67 | 
            +
                assert_in list, "li:nth-child(2)", %{<a href="https://www.test.gov.uk/browse/business">Business</a>}
         | 
| 68 | 
            +
                assert_in list, "li:nth-child(3)", %{<a href="https://www.test.gov.uk/browse/business/employing-people">Employing people</a>}
         | 
| 69 | 
            +
                assert_in list, "li:nth-child(4)", %{Something gooey}
         | 
| 50 70 | 
             
              end
         | 
| 51 71 |  | 
| 52 | 
            -
              def  | 
| 72 | 
            +
              def test_should_not_append_title_if_its_blank
         | 
| 73 | 
            +
                artefact = create_artefact("something",
         | 
| 74 | 
            +
                                           "section_slug" => "business",
         | 
| 75 | 
            +
                                           "subsection_slug" => "employing-people",
         | 
| 76 | 
            +
                                           "title" => nil)
         | 
| 77 | 
            +
             | 
| 53 78 | 
             
                template = as_nokogiri %{
         | 
| 54 79 | 
             
                  <html>
         | 
| 55 | 
            -
                    <head>
         | 
| 56 | 
            -
                      <meta content="/browse/business" name="x-section-link">
         | 
| 57 | 
            -
                    </head>
         | 
| 58 80 | 
             
                    <body>
         | 
| 59 | 
            -
                      < | 
| 60 | 
            -
                        < | 
| 61 | 
            -
             | 
| 81 | 
            +
                      <div class="header-context">
         | 
| 82 | 
            +
                        <nav role="navigation">
         | 
| 83 | 
            +
                          <ol class="group"><li><a href="/">Home</a></li></ol>
         | 
| 84 | 
            +
                        </nav>
         | 
| 85 | 
            +
                      </div>
         | 
| 62 86 | 
             
                    </body>
         | 
| 63 87 | 
             
                  </html>
         | 
| 64 88 | 
             
                }
         | 
| 65 89 |  | 
| 66 | 
            -
                 | 
| 67 | 
            -
                 | 
| 68 | 
            -
                 | 
| 90 | 
            +
                t = template.dup
         | 
| 91 | 
            +
                Slimmer::Processors::SectionInserter.new(artefact).filter(:any_source, t)
         | 
| 92 | 
            +
                list = t.at_css(".header-context nav[role=navigation] ol")
         | 
| 93 | 
            +
                assert_not_in list, "li:nth-child(4)"
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                artefact = create_artefact("something",
         | 
| 96 | 
            +
                                           "section_slug" => "business",
         | 
| 97 | 
            +
                                           "subsection_slug" => "employing-people",
         | 
| 98 | 
            +
                                           "title" => "")
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                Slimmer::Processors::SectionInserter.new(artefact).filter(:any_source, template)
         | 
| 101 | 
            +
                list = template.at_css(".header-context nav[role=navigation] ol")
         | 
| 102 | 
            +
                assert_not_in list, "li:nth-child(4)"
         | 
| 69 103 | 
             
              end
         | 
| 70 104 |  | 
| 71 | 
            -
              def  | 
| 105 | 
            +
              def test_should_add_links_after_last_item_in_breadcrumb
         | 
| 106 | 
            +
                artefact = create_artefact("something",
         | 
| 107 | 
            +
                                           "section_slug" => "business",
         | 
| 108 | 
            +
                                           "subsection_slug" => "employing-people",
         | 
| 109 | 
            +
                                           "title" => "Something gooey")
         | 
| 110 | 
            +
             | 
| 72 111 | 
             
                template = as_nokogiri %{
         | 
| 73 112 | 
             
                  <html>
         | 
| 74 | 
            -
                    <head>
         | 
| 75 | 
            -
                      <meta content="Business" name="x-section-name">
         | 
| 76 | 
            -
                    </head>
         | 
| 77 113 | 
             
                    <body>
         | 
| 78 | 
            -
                      < | 
| 79 | 
            -
                        < | 
| 80 | 
            -
             | 
| 114 | 
            +
                      <div class="header-context">
         | 
| 115 | 
            +
                        <nav role="navigation">
         | 
| 116 | 
            +
                          <ol class="group">
         | 
| 117 | 
            +
                            <li><a href="/">Home</a></li>
         | 
| 118 | 
            +
                            <li><a href="/browse">All Sections</a></li>
         | 
| 119 | 
            +
                          </ol>
         | 
| 120 | 
            +
                        </nav>
         | 
| 121 | 
            +
                      </div>
         | 
| 81 122 | 
             
                    </body>
         | 
| 82 123 | 
             
                  </html>
         | 
| 83 124 | 
             
                }
         | 
| 84 125 |  | 
| 85 | 
            -
                Slimmer::Processors::SectionInserter.new.filter(:any_source, template)
         | 
| 86 | 
            -
                 | 
| 87 | 
            -
                 | 
| 126 | 
            +
                Slimmer::Processors::SectionInserter.new(artefact).filter(:any_source, template)
         | 
| 127 | 
            +
                list = template.at_css(".header-context nav[role=navigation] ol")
         | 
| 128 | 
            +
                assert_in list, "li:nth-child(1)", %{<a href="/">Home</a>}
         | 
| 129 | 
            +
                assert_in list, "li:nth-child(2)", %{<a href="/browse">All Sections</a>}
         | 
| 130 | 
            +
                assert_in list, "li:nth-child(3)", %{<a href="https://www.test.gov.uk/browse/business">Business</a>}
         | 
| 131 | 
            +
                assert_in list, "li:nth-child(4)", %{<a href="https://www.test.gov.uk/browse/business/employing-people">Employing people</a>}
         | 
| 132 | 
            +
                assert_in list, "li:nth-child(5)", %{Something gooey}
         | 
| 88 133 | 
             
              end
         | 
| 89 134 |  | 
| 90 135 | 
             
              def test_should_do_nothing_if_navigation_not_in_template
         | 
| 136 | 
            +
                artefact = create_artefact("something")
         | 
| 91 137 | 
             
                template = as_nokogiri %{
         | 
| 92 138 | 
             
                  <html>
         | 
| 93 | 
            -
                    <head>
         | 
| 94 | 
            -
                      <meta content="Business" name="x-section-name">
         | 
| 95 | 
            -
                      <meta content="/browse/business" name="x-section-link">
         | 
| 96 | 
            -
                    </head>
         | 
| 97 139 | 
             
                    <body>
         | 
| 98 140 | 
             
                    </body>
         | 
| 99 141 | 
             
                  </html>
         | 
| 100 142 | 
             
                }
         | 
| 101 143 |  | 
| 102 | 
            -
                Slimmer::Processors::SectionInserter.new.filter(:any_source, template)
         | 
| 144 | 
            +
                Slimmer::Processors::SectionInserter.new(artefact).filter(:any_source, template)
         | 
| 103 145 | 
             
                assert_not_in template, "nav[role=navigation]"
         | 
| 104 146 | 
             
              end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
              def test_should_do_nothing_with_no_artefact
         | 
| 149 | 
            +
                template = as_nokogiri %{
         | 
| 150 | 
            +
                  <html>
         | 
| 151 | 
            +
                    <body>
         | 
| 152 | 
            +
                      <div class="header-context">
         | 
| 153 | 
            +
                        <nav role="navigation">
         | 
| 154 | 
            +
                          <ol class="group"><li><a href="/">Home</a></li></ol>
         | 
| 155 | 
            +
                        </nav>
         | 
| 156 | 
            +
                      </div>
         | 
| 157 | 
            +
                    </body>
         | 
| 158 | 
            +
                  </html>
         | 
| 159 | 
            +
                }
         | 
| 160 | 
            +
             | 
| 161 | 
            +
                Slimmer::Processors::SectionInserter.new(nil).filter(:any_source, template)
         | 
| 162 | 
            +
                list = template.at_css(".header-context nav[role=navigation] ol")
         | 
| 163 | 
            +
                assert_in list, "li:nth-child(1)", %{<a href="/">Home</a>}
         | 
| 164 | 
            +
                assert_not_in list, "li:nth-child(2)"
         | 
| 165 | 
            +
              end
         | 
| 166 | 
            +
             | 
| 167 | 
            +
              def test_should_not_fail_with_no_sections
         | 
| 168 | 
            +
                artefact = create_artefact("something",
         | 
| 169 | 
            +
                                           "title" => "Something gooey")
         | 
| 170 | 
            +
             | 
| 171 | 
            +
                template = as_nokogiri %{
         | 
| 172 | 
            +
                  <html>
         | 
| 173 | 
            +
                    <body>
         | 
| 174 | 
            +
                      <div class="header-context">
         | 
| 175 | 
            +
                        <nav role="navigation">
         | 
| 176 | 
            +
                          <ol class="group">
         | 
| 177 | 
            +
                            <li><a href="/">Home</a></li>
         | 
| 178 | 
            +
                          </ol>
         | 
| 179 | 
            +
                        </nav>
         | 
| 180 | 
            +
                      </div>
         | 
| 181 | 
            +
                    </body>
         | 
| 182 | 
            +
                  </html>
         | 
| 183 | 
            +
                }
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                Slimmer::Processors::SectionInserter.new(artefact).filter(:any_source, template)
         | 
| 186 | 
            +
                list = template.at_css(".header-context nav[role=navigation] ol")
         | 
| 187 | 
            +
                assert_in list, "li:nth-child(1)", %{<a href="/">Home</a>}
         | 
| 188 | 
            +
                assert_in list, "li:nth-child(2)", %{Something gooey}
         | 
| 189 | 
            +
              end
         | 
| 105 190 | 
             
            end
         | 
    
        data/test/skin_test.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            require_relative "test_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            class SkinTest < MiniTest::Unit::TestCase
         | 
| 4 4 | 
             
              def test_template_can_be_loaded
         | 
| @@ -54,3 +54,30 @@ class SkinTest < MiniTest::Unit::TestCase | |
| 54 54 | 
             
                end
         | 
| 55 55 | 
             
              end
         | 
| 56 56 | 
             
            end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            describe Slimmer::Skin do
         | 
| 59 | 
            +
             | 
| 60 | 
            +
              describe "parsing artefact from header" do
         | 
| 61 | 
            +
                before do
         | 
| 62 | 
            +
                  @skin = Slimmer::Skin.new
         | 
| 63 | 
            +
                  @headers = {}
         | 
| 64 | 
            +
                  @response = stub("Response", :headers => @headers)
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                it "should construct and return an artefact with the parsed json" do
         | 
| 68 | 
            +
                  data = {"foo" => "bar", "baz" => 1}
         | 
| 69 | 
            +
                  @headers[Slimmer::Headers::ARTEFACT_HEADER] = data.to_json
         | 
| 70 | 
            +
                  Slimmer::Artefact.expects(:new).with(data).returns(:an_artefact)
         | 
| 71 | 
            +
                  assert_equal :an_artefact, @skin.artefact_from_header(@response)
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                it "should return nil if there is no artefact header" do
         | 
| 75 | 
            +
                  assert_equal nil, @skin.artefact_from_header(@response)
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                it "should return nil if there is invalid JSON in the artefact header" do
         | 
| 79 | 
            +
                  @headers[Slimmer::Headers::ARTEFACT_HEADER] = "fooey"
         | 
| 80 | 
            +
                  assert_equal nil, @skin.artefact_from_header(@response)
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
            end
         | 
    
        data/test/typical_usage_test.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            require_relative "test_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            module TypicalUsage
         | 
| 4 4 |  | 
| @@ -52,8 +52,6 @@ module TypicalUsage | |
| 52 52 | 
             
                  <html>
         | 
| 53 53 | 
             
                  <head><title>The title of the page</title>
         | 
| 54 54 | 
             
                  <meta name="something" content="yes">
         | 
| 55 | 
            -
                  <meta name="x-section-name" content="This section">
         | 
| 56 | 
            -
                  <meta name="x-section-link" content="/this_section">
         | 
| 57 55 | 
             
                  <script src="blah.js"></script>
         | 
| 58 56 | 
             
                  <link href="app.css" rel="stylesheet" type="text/css">
         | 
| 59 57 | 
             
                  </head>
         | 
| @@ -72,14 +70,12 @@ module TypicalUsage | |
| 72 70 | 
             
              class NormalResponseTest < SlimmerIntegrationTest
         | 
| 73 71 | 
             
                def setup
         | 
| 74 72 | 
             
                  super
         | 
| 75 | 
            -
                  @artefact =  | 
| 73 | 
            +
                  @artefact = artefact_for_slug_in_a_section("some-article", 'this-section')
         | 
| 76 74 | 
             
                  @artefact["tags"] << tag_for_slug("directgov", "legacy_source")
         | 
| 77 75 | 
             
                  given_response 200, %{
         | 
| 78 76 | 
             
                    <html>
         | 
| 79 77 | 
             
                    <head><title>The title of the page</title>
         | 
| 80 78 | 
             
                    <meta name="something" content="yes">
         | 
| 81 | 
            -
                    <meta name="x-section-name" content="This section">
         | 
| 82 | 
            -
                    <meta name="x-section-link" content="/this_section">
         | 
| 83 79 | 
             
                    <script src="blah.js"></script>
         | 
| 84 80 | 
             
                    <link href="app.css" rel="stylesheet" type="text/css">
         | 
| 85 81 | 
             
                    </head>
         | 
| @@ -114,8 +110,9 @@ module TypicalUsage | |
| 114 110 | 
             
                  assert_rendered_in_template "body.body_class"
         | 
| 115 111 | 
             
                end
         | 
| 116 112 |  | 
| 117 | 
            -
                def  | 
| 118 | 
            -
                  assert_rendered_in_template "nav[role=navigation] li a[href='/ | 
| 113 | 
            +
                def test_should_insert_section_links_into_the_navigation
         | 
| 114 | 
            +
                  assert_rendered_in_template "nav[role=navigation] li a[href='https://www.test.gov.uk/browse/this-section']", "This section"
         | 
| 115 | 
            +
                  assert_rendered_in_template "nav[role=navigation] li:last-child", "Some article"
         | 
| 119 116 | 
             
                end
         | 
| 120 117 |  | 
| 121 118 | 
             
                def test_should_add_logo_classes_to_wrapper
         | 
| @@ -173,8 +170,8 @@ module TypicalUsage | |
| 173 170 | 
             
                end
         | 
| 174 171 |  | 
| 175 172 | 
             
                def test_should_insert_related_items_block
         | 
| 176 | 
            -
                  assert_rendered_in_template "div.related nav li a | 
| 177 | 
            -
             | 
| 173 | 
            +
                  assert_rendered_in_template "div.related nav li a[href='https://www.test.gov.uk/how-to-test-computer-software-automatically']",
         | 
| 174 | 
            +
                    "How to test computer software automatically"
         | 
| 178 175 | 
             
                end
         | 
| 179 176 | 
             
              end
         | 
| 180 177 |  | 
| @@ -200,8 +197,6 @@ module TypicalUsage | |
| 200 197 | 
             
                  <html>
         | 
| 201 198 | 
             
                  <head><title>The title of the page</title>
         | 
| 202 199 | 
             
                  <meta name="something" content="yes">
         | 
| 203 | 
            -
                  <meta name="x-section-name" content="This section">
         | 
| 204 | 
            -
                  <meta name="x-section-link" content="/this_section">
         | 
| 205 200 | 
             
                  <script src="blah.js"></script>
         | 
| 206 201 | 
             
                  <link href="app.css" rel="stylesheet" type="text/css">
         | 
| 207 202 | 
             
                  </head>
         | 
| @@ -242,8 +237,6 @@ module TypicalUsage | |
| 242 237 | 
             
                  <html>
         | 
| 243 238 | 
             
                  <head><title>500 Error</title>
         | 
| 244 239 | 
             
                  <meta name="something" content="yes">
         | 
| 245 | 
            -
                  <meta name="x-section-name" content="This section">
         | 
| 246 | 
            -
                  <meta name="x-section-link" content="/this_section">
         | 
| 247 240 | 
             
                  <script src="blah.js"></script>
         | 
| 248 241 | 
             
                  <link href="app.css" rel="stylesheet" type="text/css">
         | 
| 249 242 | 
             
                  </head>
         | 
| @@ -273,8 +266,6 @@ module TypicalUsage | |
| 273 266 | 
             
                  <html>
         | 
| 274 267 | 
             
                  <head><title>404 Missing</title>
         | 
| 275 268 | 
             
                  <meta name="something" content="yes">
         | 
| 276 | 
            -
                  <meta name="x-section-name" content="This section">
         | 
| 277 | 
            -
                  <meta name="x-section-link" content="/this_section">
         | 
| 278 269 | 
             
                  <script src="blah.js"></script>
         | 
| 279 270 | 
             
                  <link href="app.css" rel="stylesheet" type="text/css">
         | 
| 280 271 | 
             
                  </head>
         | 
| @@ -304,8 +295,6 @@ module TypicalUsage | |
| 304 295 | 
             
                  <html>
         | 
| 305 296 | 
             
                  <head><title>406 Not Acceptable</title>
         | 
| 306 297 | 
             
                  <meta name="something" content="yes">
         | 
| 307 | 
            -
                  <meta name="x-section-name" content="This section">
         | 
| 308 | 
            -
                  <meta name="x-section-link" content="/this_section">
         | 
| 309 298 | 
             
                  <script src="blah.js"></script>
         | 
| 310 299 | 
             
                  <link href="app.css" rel="stylesheet" type="text/css">
         | 
| 311 300 | 
             
                  </head>
         | 
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: slimmer
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 3. | 
| 5 | 
            +
              version: 3.1.0
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors: 
         | 
| 8 8 | 
             
            - Ben Griffiths
         | 
| @@ -11,7 +11,7 @@ autorequire: | |
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 13 |  | 
| 14 | 
            -
            date: 2012-09- | 
| 14 | 
            +
            date: 2012-09-14 00:00:00 Z
         | 
| 15 15 | 
             
            dependencies: 
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 17 17 | 
             
              name: nokogiri
         | 
| @@ -141,7 +141,7 @@ dependencies: | |
| 141 141 | 
             
                requirements: 
         | 
| 142 142 | 
             
                - - "="
         | 
| 143 143 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 144 | 
            -
                    version: 1.9. | 
| 144 | 
            +
                    version: 1.9.2
         | 
| 145 145 | 
             
              type: :development
         | 
| 146 146 | 
             
              prerelease: false
         | 
| 147 147 | 
             
              version_requirements: *id012
         | 
| @@ -217,7 +217,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 217 217 | 
             
              requirements: 
         | 
| 218 218 | 
             
              - - ">="
         | 
| 219 219 | 
             
                - !ruby/object:Gem::Version 
         | 
| 220 | 
            -
                  hash:  | 
| 220 | 
            +
                  hash: 2041451578136689132
         | 
| 221 221 | 
             
                  segments: 
         | 
| 222 222 | 
             
                  - 0
         | 
| 223 223 | 
             
                  version: "0"
         | 
| @@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 226 226 | 
             
              requirements: 
         | 
| 227 227 | 
             
              - - ">="
         | 
| 228 228 | 
             
                - !ruby/object:Gem::Version 
         | 
| 229 | 
            -
                  hash:  | 
| 229 | 
            +
                  hash: 2041451578136689132
         | 
| 230 230 | 
             
                  segments: 
         | 
| 231 231 | 
             
                  - 0
         | 
| 232 232 | 
             
                  version: "0"
         |