jekyll-categories 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in jekyll-categories.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "jekyll-categories/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "jekyll-categories"
7
+ s.version = Jekyll::Categories::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Roger López"]
10
+ s.email = ["roger@zroger.com"]
11
+ s.homepage = "http://github.com/zroger/jekyll-categories"
12
+ s.summary = %q{Category generators for Jekyll}
13
+ s.description = %q{Provides a category index page, category pages and category atom feeds for Jekyll.}
14
+
15
+ s.rubyforge_project = "jekyll-categories"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_runtime_dependency('jekyll', [">= 0.10.0"])
23
+ end
@@ -0,0 +1,121 @@
1
+ module Jekyll
2
+ module Categories
3
+ class CategoryIndex < Page
4
+ def initialize(site, base, dir, category)
5
+ @site = site
6
+ @base = base
7
+ @dir = dir
8
+ @name = 'index.html'
9
+
10
+ self.process(@name)
11
+ self.read_yaml(File.join(base, '_layouts'), 'category_index.html')
12
+ self.data['category'] = category
13
+
14
+ category_title_prefix = site.config['category_title_prefix'] || 'Category: '
15
+ self.data['title'] = "#{category_title_prefix}#{category}"
16
+ end
17
+ end
18
+
19
+ class CategoryFeed < Page
20
+ def initialize(site, base, dir, category)
21
+ @site = site
22
+ @base = base
23
+ @dir = dir
24
+ @name = 'atom.xml'
25
+
26
+ self.process(@name)
27
+ self.read_yaml(File.join(base, '_layouts'), 'category_feed.xml')
28
+ self.data['category'] = category
29
+
30
+ category_title_prefix = site.config['category_title_prefix'] || 'Category: '
31
+ self.data['title'] = "#{category_title_prefix}#{category}"
32
+ end
33
+ end
34
+
35
+ class CategoryList < Page
36
+ def initialize(site, base, dir, categories)
37
+ @site = site
38
+ @base = base
39
+ @dir = dir
40
+ @name = 'index.html'
41
+
42
+ self.process(@name)
43
+ self.read_yaml(File.join(base, '_layouts'), 'category_list.html')
44
+ self.data['categories'] = categories
45
+ end
46
+ end
47
+
48
+ class CategoryGenerator < Generator
49
+ safe true
50
+
51
+ def generate(site)
52
+ if site.layouts.key? 'category_index'
53
+ dir = site.config['category_dir'] || 'categories'
54
+ site.categories.keys.each do |category|
55
+ write_category_index(site, File.join(dir, category.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase), category)
56
+ end
57
+ end
58
+
59
+ if site.layouts.key? 'category_feed'
60
+ dir = site.config['category_dir'] || 'categories'
61
+ site.categories.keys.each do |category|
62
+ write_category_feed(site, File.join(dir, category.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase), category)
63
+ end
64
+ end
65
+
66
+ if site.layouts.key? 'category_list'
67
+ dir = site.config['category_dir'] || 'categories'
68
+ write_category_list(site, dir, site.categories.keys.sort)
69
+ end
70
+ end
71
+
72
+ def write_category_index(site, dir, category)
73
+ index = CategoryIndex.new(site, site.source, dir, category)
74
+ index.render(site.layouts, site.site_payload)
75
+ index.write(site.dest)
76
+ site.static_files << index
77
+ end
78
+
79
+ def write_category_feed(site, dir, category)
80
+ index = CategoryFeed.new(site, site.source, dir, category)
81
+ index.render(site.layouts, site.site_payload)
82
+ index.write(site.dest)
83
+ site.static_files << index
84
+ end
85
+
86
+ def write_category_list(site, dir, categories)
87
+ index = CategoryList.new(site, site.source, dir, categories)
88
+ index.render(site.layouts, site.site_payload)
89
+ index.write(site.dest)
90
+ site.static_files << index
91
+ end
92
+ end
93
+
94
+ # Returns a correctly formatted category url based on site configuration.
95
+ #
96
+ # Use without arguments to return the url of the category list page.
97
+ # {% category_url %}
98
+ #
99
+ # Use with argument to return the url of a specific catogory page. The
100
+ # argument can be either a string or a variable in the current context.
101
+ # {% category_url category_name %}
102
+ # {% category_url category_var %}
103
+ #
104
+ class CategoryUrlTag < Liquid::Tag
105
+ def initialize(tag_name, text, tokens)
106
+ super
107
+ @category = text
108
+ end
109
+
110
+ def render(context)
111
+ base_url = context.registers[:site].config['base-url'] || '/'
112
+ category_dir = context.registers[:site].config['category_dir'] || 'categories'
113
+
114
+ category = context[@category] || @category.strip.tr(' ', '-').downcase
115
+ category.empty? ? "#{base_url}#{category_dir}" : "#{base_url}#{category_dir}/#{category}"
116
+ end
117
+ end
118
+ end
119
+ end
120
+
121
+ Liquid::Template.register_tag('category_url', Jekyll::Categories::CategoryUrlTag)
@@ -0,0 +1,5 @@
1
+ module Jekyll
2
+ module Categories
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
data/readme.md ADDED
@@ -0,0 +1,37 @@
1
+ Jekyll Categories
2
+ =================
3
+
4
+ This gem provides a [Jekyll](http://github.com/mojombo/jekyll) generator for
5
+ category pages, category feeds and a category index.
6
+
7
+ Basic Setup
8
+ -----------
9
+ Install the gem:
10
+
11
+ [sudo] gem install jekyll-categories
12
+
13
+ In a plugin file within your Jekyll project's _plugins directory:
14
+
15
+ # _plugins/my-plugin.rb
16
+ require "jekyll-categories"
17
+
18
+ Create the following layouts:
19
+
20
+ - category_index.html
21
+ - category_list.html
22
+ - category_feed.xml
23
+
24
+ Bundler Setup
25
+ -------------
26
+ Already using bundler to manage gems for your Jekyll project? Then just add
27
+
28
+ gem "jekyll-categories"
29
+
30
+ to your gemfile and create the following plugin in your projects _plugins
31
+ directory. I've called mine bundler.rb. This will automatically require all
32
+ of the gems specified in your Gemfile.
33
+
34
+ # _plugins/bundler.rb
35
+ require "rubygems"
36
+ require "bundler/setup"
37
+ Bundler.require(:default)
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-categories
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - "Roger L\xC3\xB3pez"
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-06-30 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: jekyll
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 10
31
+ - 0
32
+ version: 0.10.0
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: Provides a category index page, category pages and category atom feeds for Jekyll.
36
+ email:
37
+ - roger@zroger.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - .gitignore
46
+ - Gemfile
47
+ - Rakefile
48
+ - jekyll-categories.gemspec
49
+ - lib/jekyll-categories.rb
50
+ - lib/jekyll-categories/version.rb
51
+ - readme.md
52
+ has_rdoc: true
53
+ homepage: http://github.com/zroger/jekyll-categories
54
+ licenses: []
55
+
56
+ post_install_message:
57
+ rdoc_options: []
58
+
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ requirements: []
78
+
79
+ rubyforge_project: jekyll-categories
80
+ rubygems_version: 1.3.7
81
+ signing_key:
82
+ specification_version: 3
83
+ summary: Category generators for Jekyll
84
+ test_files: []
85
+