nanoc 4.0.0b1 → 4.0.0b2
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/Gemfile.lock +1 -1
 - data/NEWS.md +26 -2
 - data/README.md +1 -1
 - data/lib/nanoc/base.rb +3 -1
 - data/lib/nanoc/base/checksummer.rb +1 -3
 - data/lib/nanoc/base/compilation/compiler.rb +3 -3
 - data/lib/nanoc/base/compilation/compiler_dsl.rb +3 -3
 - data/lib/nanoc/base/compilation/item_rep_proxy.rb +1 -1
 - data/lib/nanoc/base/core_ext/array.rb +0 -11
 - data/lib/nanoc/base/core_ext/hash.rb +0 -11
 - data/lib/nanoc/base/identifiable_collection.rb +81 -0
 - data/lib/nanoc/base/source_data/identifier.rb +9 -9
 - data/lib/nanoc/base/source_data/site.rb +7 -5
 - data/lib/nanoc/base/views/identifiable_collection.rb +78 -0
 - data/lib/nanoc/base/views/item_collection.rb +1 -86
 - data/lib/nanoc/base/views/layout_collection.rb +1 -57
 - data/lib/nanoc/base/views/mutable_identifiable_collection.rb +17 -0
 - data/lib/nanoc/base/views/mutable_item_collection.rb +2 -14
 - data/lib/nanoc/base/views/mutable_layout_collection.rb +2 -14
 - data/lib/nanoc/cli/commands/create-site.rb +44 -40
 - data/lib/nanoc/data_sources/filesystem.rb +1 -1
 - data/lib/nanoc/data_sources/filesystem_unified.rb +3 -3
 - data/lib/nanoc/data_sources/filesystem_verbose.rb +3 -3
 - data/lib/nanoc/filters/erb.rb +2 -2
 - data/lib/nanoc/filters/rdiscount.rb +1 -1
 - data/lib/nanoc/filters/redcarpet.rb +1 -1
 - data/lib/nanoc/version.rb +1 -1
 - data/tasks/test.rake +1 -0
 - data/test/base/core_ext/array_spec.rb +0 -8
 - data/test/base/core_ext/hash_spec.rb +0 -26
 - data/test/base/test_compiler.rb +1 -1
 - data/test/base/test_compiler_dsl.rb +13 -10
 - data/test/base/test_item.rb +0 -6
 - data/test/base/test_item_array.rb +8 -276
 - data/test/base/test_layout.rb +1 -5
 - data/test/base/test_outdatedness_checker.rb +9 -2
 - data/test/base/test_site.rb +5 -5
 - data/test/cli/commands/test_compile.rb +14 -0
 - data/test/cli/commands/test_create_site.rb +40 -2
 - data/test/cli/commands/test_prune.rb +19 -4
 - data/test/data_sources/test_filesystem.rb +1 -1
 - data/test/data_sources/test_filesystem_unified.rb +6 -6
 - data/test/extra/checking/checks/test_stale.rb +2 -2
 - data/test/helper.rb +8 -1
 - data/test/helpers/test_blogging.rb +0 -235
 - data/test/helpers/test_breadcrumbs.rb +31 -23
 - data/test/helpers/test_xml_sitemap.rb +38 -29
 - metadata +5 -3
 - data/lib/nanoc/base/source_data/item_array.rb +0 -86
 
| 
         @@ -4,38 +4,46 @@ class Nanoc::Helpers::BreadcrumbsTest < Nanoc::TestCase 
     | 
|
| 
       4 
4 
     | 
    
         
             
              include Nanoc::Helpers::Breadcrumbs
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              def test_breadcrumbs_trail_at_root
         
     | 
| 
       7 
     | 
    
         
            -
                @items = Nanoc::Int:: 
     | 
| 
       8 
     | 
    
         
            -
                 
     | 
| 
       9 
     | 
    
         
            -
                @ 
     | 
| 
      
 7 
     | 
    
         
            +
                @items = Nanoc::Int::IdentifiableCollection.new({})
         
     | 
| 
      
 8 
     | 
    
         
            +
                item = Nanoc::Int::Item.new('root', {}, '/')
         
     | 
| 
      
 9 
     | 
    
         
            +
                @items << item
         
     | 
| 
      
 10 
     | 
    
         
            +
                @item = item
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
                assert_equal [ 
     | 
| 
      
 12 
     | 
    
         
            +
                assert_equal [item], breadcrumbs_trail
         
     | 
| 
       12 
13 
     | 
    
         
             
              end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
              def test_breadcrumbs_trail_with_1_parent
         
     | 
| 
       15 
     | 
    
         
            -
                @items = Nanoc::Int:: 
     | 
| 
       16 
     | 
    
         
            -
                 
     | 
| 
       17 
     | 
    
         
            -
                 
     | 
| 
       18 
     | 
    
         
            -
                @ 
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                 
     | 
| 
      
 16 
     | 
    
         
            +
                @items = Nanoc::Int::IdentifiableCollection.new({})
         
     | 
| 
      
 17 
     | 
    
         
            +
                parent_item = Nanoc::Int::Item.new('parent', {}, '/')
         
     | 
| 
      
 18 
     | 
    
         
            +
                child_item  = Nanoc::Int::Item.new('child',  {}, '/foo/')
         
     | 
| 
      
 19 
     | 
    
         
            +
                @items << parent_item
         
     | 
| 
      
 20 
     | 
    
         
            +
                @items << child_item
         
     | 
| 
      
 21 
     | 
    
         
            +
                @item = child_item
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                assert_equal [parent_item, child_item], breadcrumbs_trail
         
     | 
| 
       21 
24 
     | 
    
         
             
              end
         
     | 
| 
       22 
25 
     | 
    
         | 
| 
       23 
26 
     | 
    
         
             
              def test_breadcrumbs_trail_with_many_parents
         
     | 
| 
       24 
     | 
    
         
            -
                @items = Nanoc::Int:: 
     | 
| 
       25 
     | 
    
         
            -
                 
     | 
| 
       26 
     | 
    
         
            -
                 
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
       28 
     | 
    
         
            -
                @ 
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                 
     | 
| 
      
 27 
     | 
    
         
            +
                @items = Nanoc::Int::IdentifiableCollection.new({})
         
     | 
| 
      
 28 
     | 
    
         
            +
                grandparent_item = Nanoc::Int::Item.new('grandparent', {}, '/')
         
     | 
| 
      
 29 
     | 
    
         
            +
                parent_item      = Nanoc::Int::Item.new('parent',      {}, '/foo/')
         
     | 
| 
      
 30 
     | 
    
         
            +
                child_item       = Nanoc::Int::Item.new('child',       {}, '/foo/bar/')
         
     | 
| 
      
 31 
     | 
    
         
            +
                @items << grandparent_item
         
     | 
| 
      
 32 
     | 
    
         
            +
                @items << parent_item
         
     | 
| 
      
 33 
     | 
    
         
            +
                @items << child_item
         
     | 
| 
      
 34 
     | 
    
         
            +
                @item = child_item
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                assert_equal [grandparent_item, parent_item, child_item], breadcrumbs_trail
         
     | 
| 
       31 
37 
     | 
    
         
             
              end
         
     | 
| 
       32 
38 
     | 
    
         | 
| 
       33 
39 
     | 
    
         
             
              def test_breadcrumbs_trail_with_nils
         
     | 
| 
       34 
     | 
    
         
            -
                @items = Nanoc::Int:: 
     | 
| 
       35 
     | 
    
         
            -
                 
     | 
| 
       36 
     | 
    
         
            -
                 
     | 
| 
       37 
     | 
    
         
            -
                @ 
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                 
     | 
| 
      
 40 
     | 
    
         
            +
                @items = Nanoc::Int::IdentifiableCollection.new({})
         
     | 
| 
      
 41 
     | 
    
         
            +
                grandparent_item = Nanoc::Int::Item.new('grandparent', {}, '/')
         
     | 
| 
      
 42 
     | 
    
         
            +
                child_item       = Nanoc::Int::Item.new('child',       {}, '/foo/bar/')
         
     | 
| 
      
 43 
     | 
    
         
            +
                @items << grandparent_item
         
     | 
| 
      
 44 
     | 
    
         
            +
                @items << child_item
         
     | 
| 
      
 45 
     | 
    
         
            +
                @item = child_item
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal [grandparent_item, nil, child_item], breadcrumbs_trail
         
     | 
| 
       40 
48 
     | 
    
         
             
              end
         
     | 
| 
       41 
49 
     | 
    
         
             
            end
         
     | 
| 
         @@ -14,25 +14,29 @@ class Nanoc::Helpers::XMLSitemapTest < Nanoc::TestCase 
     | 
|
| 
       14 
14 
     | 
    
         
             
              def test_xml_sitemap
         
     | 
| 
       15 
15 
     | 
    
         
             
                if_have 'builder', 'nokogiri' do
         
     | 
| 
       16 
16 
     | 
    
         
             
                  # Create items
         
     | 
| 
       17 
     | 
    
         
            -
                  @items =  
     | 
| 
      
 17 
     | 
    
         
            +
                  @items = Nanoc::Int::IdentifiableCollection.new({})
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                  # Create item 1
         
     | 
| 
       20 
     | 
    
         
            -
                   
     | 
| 
       21 
     | 
    
         
            -
                   
     | 
| 
       22 
     | 
    
         
            -
                  create_item_rep( 
     | 
| 
      
 20 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 1', {}, '/item-one/'))
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @items << item
         
     | 
| 
      
 22 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :one_a, '/item-one/a/')
         
     | 
| 
      
 23 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :one_b, '/item-one/b/')
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
                  # Create item 2
         
     | 
| 
       25 
     | 
    
         
            -
                   
     | 
| 
      
 26 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 2', { is_hidden: true }, '/item-two/'))
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @items << item
         
     | 
| 
       26 
28 
     | 
    
         | 
| 
       27 
29 
     | 
    
         
             
                  # Create item 3
         
     | 
| 
       28 
30 
     | 
    
         
             
                  attrs = { mtime: Time.parse('2004-07-12'), changefreq: 'daily', priority: 0.5 }
         
     | 
| 
       29 
     | 
    
         
            -
                   
     | 
| 
       30 
     | 
    
         
            -
                   
     | 
| 
       31 
     | 
    
         
            -
                  create_item_rep( 
     | 
| 
      
 31 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 3', attrs, '/item-three/'))
         
     | 
| 
      
 32 
     | 
    
         
            +
                  @items << item
         
     | 
| 
      
 33 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :three_a, '/item-three/a/')
         
     | 
| 
      
 34 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :three_b, '/item-three/b/')
         
     | 
| 
       32 
35 
     | 
    
         | 
| 
       33 
36 
     | 
    
         
             
                  # Create item 4
         
     | 
| 
       34 
     | 
    
         
            -
                   
     | 
| 
       35 
     | 
    
         
            -
                   
     | 
| 
      
 37 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 4', {}, '/item-four/'))
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @items << item
         
     | 
| 
      
 39 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :four_a, nil)
         
     | 
| 
       36 
40 
     | 
    
         | 
| 
       37 
41 
     | 
    
         
             
                  # Create sitemap item
         
     | 
| 
       38 
42 
     | 
    
         
             
                  @item = Nanoc::ItemView.new(Nanoc::Int::Item.new('sitemap content', {}, '/sitemap/'))
         
     | 
| 
         @@ -71,11 +75,12 @@ class Nanoc::Helpers::XMLSitemapTest < Nanoc::TestCase 
     | 
|
| 
       71 
75 
     | 
    
         
             
              def test_sitemap_with_items_as_param
         
     | 
| 
       72 
76 
     | 
    
         
             
                if_have 'builder', 'nokogiri' do
         
     | 
| 
       73 
77 
     | 
    
         
             
                  # Create items
         
     | 
| 
       74 
     | 
    
         
            -
                  @items =  
     | 
| 
      
 78 
     | 
    
         
            +
                  @items = Nanoc::Int::IdentifiableCollection.new({})
         
     | 
| 
       75 
79 
     | 
    
         
             
                  @items << nil
         
     | 
| 
       76 
     | 
    
         
            -
                   
     | 
| 
       77 
     | 
    
         
            -
                   
     | 
| 
       78 
     | 
    
         
            -
                  create_item_rep( 
     | 
| 
      
 80 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 1', {}, '/item-one/'))
         
     | 
| 
      
 81 
     | 
    
         
            +
                  @items << item
         
     | 
| 
      
 82 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :one_a, '/item-one/a/')
         
     | 
| 
      
 83 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :one_b, '/item-one/b/')
         
     | 
| 
       79 
84 
     | 
    
         
             
                  @items << nil
         
     | 
| 
       80 
85 
     | 
    
         | 
| 
       81 
86 
     | 
    
         
             
                  # Create sitemap item
         
     | 
| 
         @@ -85,7 +90,7 @@ class Nanoc::Helpers::XMLSitemapTest < Nanoc::TestCase 
     | 
|
| 
       85 
90 
     | 
    
         
             
                  @config = Nanoc::ConfigView.new({ base_url: 'http://example.com' })
         
     | 
| 
       86 
91 
     | 
    
         | 
| 
       87 
92 
     | 
    
         
             
                  # Build sitemap
         
     | 
| 
       88 
     | 
    
         
            -
                  res = xml_sitemap(items: [ 
     | 
| 
      
 93 
     | 
    
         
            +
                  res = xml_sitemap(items: [item])
         
     | 
| 
       89 
94 
     | 
    
         | 
| 
       90 
95 
     | 
    
         
             
                  # Check
         
     | 
| 
       91 
96 
     | 
    
         
             
                  doc = Nokogiri::XML(res)
         
     | 
| 
         @@ -107,10 +112,11 @@ class Nanoc::Helpers::XMLSitemapTest < Nanoc::TestCase 
     | 
|
| 
       107 
112 
     | 
    
         
             
              def test_filter
         
     | 
| 
       108 
113 
     | 
    
         
             
                if_have 'builder', 'nokogiri' do
         
     | 
| 
       109 
114 
     | 
    
         
             
                  # Create items
         
     | 
| 
       110 
     | 
    
         
            -
                  @items =  
     | 
| 
       111 
     | 
    
         
            -
                   
     | 
| 
       112 
     | 
    
         
            -
                   
     | 
| 
       113 
     | 
    
         
            -
                  create_item_rep( 
     | 
| 
      
 115 
     | 
    
         
            +
                  @items = Nanoc::Int::IdentifiableCollection.new({})
         
     | 
| 
      
 116 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 1', {}, '/item-one/'))
         
     | 
| 
      
 117 
     | 
    
         
            +
                  @items << item
         
     | 
| 
      
 118 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :one_a, '/item-one/a/')
         
     | 
| 
      
 119 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :one_b, '/item-one/b/')
         
     | 
| 
       114 
120 
     | 
    
         | 
| 
       115 
121 
     | 
    
         
             
                  # Create sitemap item
         
     | 
| 
       116 
122 
     | 
    
         
             
                  @item = Nanoc::ItemView.new(Nanoc::Int::Item.new('sitemap content', {}, '/sitemap/'))
         
     | 
| 
         @@ -137,16 +143,19 @@ class Nanoc::Helpers::XMLSitemapTest < Nanoc::TestCase 
     | 
|
| 
       137 
143 
     | 
    
         
             
              def test_sorted
         
     | 
| 
       138 
144 
     | 
    
         
             
                if_have 'builder', 'nokogiri' do
         
     | 
| 
       139 
145 
     | 
    
         
             
                  # Create items
         
     | 
| 
       140 
     | 
    
         
            -
                  @items =  
     | 
| 
       141 
     | 
    
         
            -
                   
     | 
| 
       142 
     | 
    
         
            -
                   
     | 
| 
       143 
     | 
    
         
            -
                  create_item_rep( 
     | 
| 
       144 
     | 
    
         
            -
                   
     | 
| 
       145 
     | 
    
         
            -
                   
     | 
| 
       146 
     | 
    
         
            -
                   
     | 
| 
       147 
     | 
    
         
            -
                   
     | 
| 
       148 
     | 
    
         
            -
                  create_item_rep( 
     | 
| 
       149 
     | 
    
         
            -
                   
     | 
| 
      
 146 
     | 
    
         
            +
                  @items = Nanoc::Int::IdentifiableCollection.new({})
         
     | 
| 
      
 147 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 1', {}, '/george/'))
         
     | 
| 
      
 148 
     | 
    
         
            +
                  @items << item
         
     | 
| 
      
 149 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :a_alice,   '/george/alice/')
         
     | 
| 
      
 150 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :b_zoey,    '/george/zoey/')
         
     | 
| 
      
 151 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 1', {}, '/walton/'))
         
     | 
| 
      
 152 
     | 
    
         
            +
                  @items << item
         
     | 
| 
      
 153 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :a_eve,     '/walton/eve/')
         
     | 
| 
      
 154 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :b_bob,     '/walton/bob/')
         
     | 
| 
      
 155 
     | 
    
         
            +
                  item = Nanoc::ItemView.new(Nanoc::Int::Item.new('some content 1', {}, '/lucas/'))
         
     | 
| 
      
 156 
     | 
    
         
            +
                  @items << item
         
     | 
| 
      
 157 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :a_trudy,   '/lucas/trudy/')
         
     | 
| 
      
 158 
     | 
    
         
            +
                  create_item_rep(item.unwrap, :b_mallory, '/lucas/mallory/')
         
     | 
| 
       150 
159 
     | 
    
         | 
| 
       151 
160 
     | 
    
         
             
                  # Create sitemap item
         
     | 
| 
       152 
161 
     | 
    
         
             
                  @item = Nanoc::ItemView.new(Nanoc::Int::Item.new('sitemap content', {}, '/sitemap/'))
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: nanoc
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 4.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 4.0.0b2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Denis Defreyne
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-05-23 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: cri
         
     | 
| 
         @@ -96,6 +96,7 @@ files: 
     | 
|
| 
       96 
96 
     | 
    
         
             
            - lib/nanoc/base/directed_graph.rb
         
     | 
| 
       97 
97 
     | 
    
         
             
            - lib/nanoc/base/error.rb
         
     | 
| 
       98 
98 
     | 
    
         
             
            - lib/nanoc/base/errors.rb
         
     | 
| 
      
 99 
     | 
    
         
            +
            - lib/nanoc/base/identifiable_collection.rb
         
     | 
| 
       99 
100 
     | 
    
         
             
            - lib/nanoc/base/memoization.rb
         
     | 
| 
       100 
101 
     | 
    
         
             
            - lib/nanoc/base/notification_center.rb
         
     | 
| 
       101 
102 
     | 
    
         
             
            - lib/nanoc/base/pattern.rb
         
     | 
| 
         @@ -106,18 +107,19 @@ files: 
     | 
|
| 
       106 
107 
     | 
    
         
             
            - lib/nanoc/base/source_data/data_source.rb
         
     | 
| 
       107 
108 
     | 
    
         
             
            - lib/nanoc/base/source_data/identifier.rb
         
     | 
| 
       108 
109 
     | 
    
         
             
            - lib/nanoc/base/source_data/item.rb
         
     | 
| 
       109 
     | 
    
         
            -
            - lib/nanoc/base/source_data/item_array.rb
         
     | 
| 
       110 
110 
     | 
    
         
             
            - lib/nanoc/base/source_data/layout.rb
         
     | 
| 
       111 
111 
     | 
    
         
             
            - lib/nanoc/base/source_data/site.rb
         
     | 
| 
       112 
112 
     | 
    
         
             
            - lib/nanoc/base/store.rb
         
     | 
| 
       113 
113 
     | 
    
         
             
            - lib/nanoc/base/temp_filename_factory.rb
         
     | 
| 
       114 
114 
     | 
    
         
             
            - lib/nanoc/base/views/config.rb
         
     | 
| 
      
 115 
     | 
    
         
            +
            - lib/nanoc/base/views/identifiable_collection.rb
         
     | 
| 
       115 
116 
     | 
    
         
             
            - lib/nanoc/base/views/item.rb
         
     | 
| 
       116 
117 
     | 
    
         
             
            - lib/nanoc/base/views/item_collection.rb
         
     | 
| 
       117 
118 
     | 
    
         
             
            - lib/nanoc/base/views/item_rep.rb
         
     | 
| 
       118 
119 
     | 
    
         
             
            - lib/nanoc/base/views/layout.rb
         
     | 
| 
       119 
120 
     | 
    
         
             
            - lib/nanoc/base/views/layout_collection.rb
         
     | 
| 
       120 
121 
     | 
    
         
             
            - lib/nanoc/base/views/mutable_config.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
            - lib/nanoc/base/views/mutable_identifiable_collection.rb
         
     | 
| 
       121 
123 
     | 
    
         
             
            - lib/nanoc/base/views/mutable_item.rb
         
     | 
| 
       122 
124 
     | 
    
         
             
            - lib/nanoc/base/views/mutable_item_collection.rb
         
     | 
| 
       123 
125 
     | 
    
         
             
            - lib/nanoc/base/views/mutable_layout.rb
         
     | 
| 
         @@ -1,86 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # encoding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Nanoc::Int
         
     | 
| 
       4 
     | 
    
         
            -
              # Acts as an array, but allows fetching items using identifiers, e.g. `@items['/blah/']`.
         
     | 
| 
       5 
     | 
    
         
            -
              #
         
     | 
| 
       6 
     | 
    
         
            -
              # @api private
         
     | 
| 
       7 
     | 
    
         
            -
              class ItemArray
         
     | 
| 
       8 
     | 
    
         
            -
                include Enumerable
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                extend Forwardable
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                EXCLUDED_METHODS  = [
         
     | 
| 
       13 
     | 
    
         
            -
                  :[], :at, :slice, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone,
         
     | 
| 
       14 
     | 
    
         
            -
                  :freeze, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods,
         
     | 
| 
       15 
     | 
    
         
            -
                  :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?,
         
     | 
| 
       16 
     | 
    
         
            -
                  :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?,
         
     | 
| 
       17 
     | 
    
         
            -
                  :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :equal?,
         
     | 
| 
       18 
     | 
    
         
            -
                  :instance_eval, :instance_exec, :__send__, :__id__
         
     | 
| 
       19 
     | 
    
         
            -
                ]
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                DELEGATED_METHODS = (Array.instance_methods + Enumerable.instance_methods).map(&:to_sym) - EXCLUDED_METHODS
         
     | 
| 
       22 
     | 
    
         
            -
                def_delegators :@items, *DELEGATED_METHODS
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                def initialize(config)
         
     | 
| 
       25 
     | 
    
         
            -
                  @config = config
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                  @items = []
         
     | 
| 
       28 
     | 
    
         
            -
                end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                def freeze
         
     | 
| 
       31 
     | 
    
         
            -
                  @items.freeze
         
     | 
| 
       32 
     | 
    
         
            -
                  build_mapping
         
     | 
| 
       33 
     | 
    
         
            -
                  super
         
     | 
| 
       34 
     | 
    
         
            -
                end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                def [](*args)
         
     | 
| 
       37 
     | 
    
         
            -
                  if 1 == args.size && args.first.is_a?(String)
         
     | 
| 
       38 
     | 
    
         
            -
                    item_with_identifier(args.first) || item_matching_glob(args.first)
         
     | 
| 
       39 
     | 
    
         
            -
                  elsif 1 == args.size && args.first.is_a?(Regexp)
         
     | 
| 
       40 
     | 
    
         
            -
                    @items.select { |i| i.identifier.to_s =~ args.first }
         
     | 
| 
       41 
     | 
    
         
            -
                  else
         
     | 
| 
       42 
     | 
    
         
            -
                    @items[*args]
         
     | 
| 
       43 
     | 
    
         
            -
                  end
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
                alias_method :slice, :[]
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                def at(arg)
         
     | 
| 
       48 
     | 
    
         
            -
                  if arg.is_a?(String)
         
     | 
| 
       49 
     | 
    
         
            -
                    item_with_identifier(arg)
         
     | 
| 
       50 
     | 
    
         
            -
                  else
         
     | 
| 
       51 
     | 
    
         
            -
                    @items[arg]
         
     | 
| 
       52 
     | 
    
         
            -
                  end
         
     | 
| 
       53 
     | 
    
         
            -
                end
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                protected
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                def item_with_identifier(identifier)
         
     | 
| 
       58 
     | 
    
         
            -
                  if self.frozen?
         
     | 
| 
       59 
     | 
    
         
            -
                    @mapping[identifier.to_s]
         
     | 
| 
       60 
     | 
    
         
            -
                  else
         
     | 
| 
       61 
     | 
    
         
            -
                    @items.find { |i| i.identifier == identifier }
         
     | 
| 
       62 
     | 
    
         
            -
                  end
         
     | 
| 
       63 
     | 
    
         
            -
                end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                def item_matching_glob(glob)
         
     | 
| 
       66 
     | 
    
         
            -
                  if use_globs?
         
     | 
| 
       67 
     | 
    
         
            -
                    pat = Nanoc::Int::Pattern.from(glob)
         
     | 
| 
       68 
     | 
    
         
            -
                    @items.find { |i| pat.match?(i.identifier) }
         
     | 
| 
       69 
     | 
    
         
            -
                  else
         
     | 
| 
       70 
     | 
    
         
            -
                    nil
         
     | 
| 
       71 
     | 
    
         
            -
                  end
         
     | 
| 
       72 
     | 
    
         
            -
                end
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                def build_mapping
         
     | 
| 
       75 
     | 
    
         
            -
                  @mapping = {}
         
     | 
| 
       76 
     | 
    
         
            -
                  @items.each do |item|
         
     | 
| 
       77 
     | 
    
         
            -
                    @mapping[item.identifier.to_s] = item
         
     | 
| 
       78 
     | 
    
         
            -
                  end
         
     | 
| 
       79 
     | 
    
         
            -
                  @mapping.freeze
         
     | 
| 
       80 
     | 
    
         
            -
                end
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                def use_globs?
         
     | 
| 
       83 
     | 
    
         
            -
                  @config[:pattern_syntax] == 'glob'
         
     | 
| 
       84 
     | 
    
         
            -
                end
         
     | 
| 
       85 
     | 
    
         
            -
              end
         
     | 
| 
       86 
     | 
    
         
            -
            end
         
     |