50 lines
1.6 KiB
Ruby
50 lines
1.6 KiB
Ruby
|
##
|
||
|
## 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
|