_plugins/iterator.rb
8698a276
 ##
 ## Author: Jose Gonzalez - https://github.com/josegonzalez
 ## Source URL: https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/iterator.rb
 ##
 
 #module Jekyll
   #class Site
     #alias_method :orig_site_payload, :site_payload
 
     ## Constuct an array of hashes that will allow the user, using Liquid, to
     ## iterate through the keys of _kv_hash_ and be able to iterate through the
     ## elements under each key.
     ##
     ## Example:
     ##   categories = { 'Ruby' => [<Post>, <Post>] }
     ##   make_iterable(categories, :index => 'name', :items => 'posts')
     ## Will allow the user to iterate through all categories and then iterate
     ## though each post in the current category like so:
     ##   {% for category in site.categories %}
     ##     h1. {{ category.name }}
     ##     <ul>
     ##       {% for post in category.posts %}
     ##         <li>{{ post.title }}</li>
     ##       {% endfor %}
     ##       </ul>
     ##   {% endfor %}
     ##
     ## Returns [ {<index> => <kv_hash_key>, <items> => kv_hash[<kv_hash_key>]}, ... ]
 
     #def make_iterable(kv_hash, options)
       #options = {:index => 'name', :items => 'items'}.merge(options)
       #result = []
       #kv_hash.sort.each do |key, value|
         #result << { options[:index] => key, options[:items] => value }
       #end
       #result
     #end
 
     #def site_payload
       #payload = orig_site_payload
       #payload['site']['iterable'].merge!({
         #'categories'  => make_iterable(self.categories, :index => 'name', :items => 'posts'),
         #'tags'        => make_iterable(self.tags, :index => 'name', :items => 'posts')
       #})
       #payload
     #end
 
   #end
 #end