jekyll-feed 0.4.0 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f446d429dab098b3e1f5223df91297057ddcb61
4
- data.tar.gz: 3b71084e350e4ce5f7c9ba4b8594b8b52c0bd239
3
+ metadata.gz: b161ab71c3a9ab3055433f765a4d8d0a983a84a4
4
+ data.tar.gz: b6effe491af09a724eb3578f2d7a1be2967deead
5
5
  SHA512:
6
- metadata.gz: dcd339a74b9f38edb29d218fa58d8432e4b48a957942980ecaab9c89f9824987e5363d284bebc3d9be5759be2f77c9c0e298147a6904296071018e44a3cfe14f
7
- data.tar.gz: 39b527846ec7e0a93150df7b22639a0a0e3b79c4857d64de71aa3b875912f812badce5f2e43494550c5cd05af51164d13b38729836cda176f7270333a45b259b
6
+ metadata.gz: 07717d6f03181c1bfcfdf60d122db21d22b4f140f45783976aceea4357cf0a3ccaa5c2090c26e11aea8bc1c3dba8433e132f63c4e4a4ddf8464c656427e4828f
7
+ data.tar.gz: 8dfb4ef9faf4a6457949ec64d083ed89220c26ecce4cb2121d37a27f08934728c35517475e2cc4baffd4d59715ef6e9b13cc570ee1e0c0bf004513bd9a83621b
data/.rubocop.yml ADDED
@@ -0,0 +1,29 @@
1
+ inherit_gem:
2
+ jekyll: .rubocop.yml
3
+
4
+ AllCops:
5
+ TargetRubyVersion: 1.9
6
+ Include:
7
+ - lib/*.rb
8
+
9
+ Exclude:
10
+ - .rubocop.yml
11
+ - .codeclimate.yml
12
+ - .travis.yml
13
+ - .gitignore
14
+ - .rspec
15
+
16
+ - Gemfile.lock
17
+ - CHANGELOG.md
18
+ - readme.md
19
+ - README.md
20
+ - Readme.md
21
+ - ReadMe.md
22
+ - COPYING
23
+ - LICENSE
24
+
25
+ - test/**/*
26
+ - vendor/**/*
27
+ - features/**/*
28
+ - script/**/*
29
+ - spec/**/*
data/.travis.yml CHANGED
@@ -1,19 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.2
4
- - 2.1
5
- - 2.0
6
- matrix:
7
- include:
8
- - # Ruby 1.9
9
- rvm: 1.9
10
- env: JEKYLL_VERSION=2.0
11
4
  env:
12
5
  global:
13
6
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
14
- matrix:
15
- - JEKYLL_VERSION=3.0
16
- - JEKYLL_VERSION=2.5
17
7
  cache: bundler
18
8
  sudo: false
19
9
  before_script: bundle update
data/History.markdown CHANGED
@@ -1,3 +1,25 @@
1
+ ## 0.5.0 / 2016-04-13
2
+
3
+ * Consolidate regexps for stripping whitespace (#82)
4
+ * Only test against Jekyll 3 (#99)
5
+ * Think about how i18n might work (#75)
6
+ * Find author by reference (#106)
7
+ * Drop support for Jekyll 2 (#105)
8
+ * Add support for post image (#104)
9
+
10
+ ### Minor Enhancements
11
+
12
+ * Use Module#method_defined? (#83)
13
+ * Use site.title for meta tag if available (#100)
14
+
15
+ ### Development Fixes
16
+
17
+ * Do not require [**jekyll-last-modified-at**](https://github.com/gjtorikian/jekyll-last-modified-at) in tests (#87)
18
+ * Add Rubocop (#81)
19
+ * Correct typo in tests (#102)
20
+ * Simplify testing feed_meta tag (#101)
21
+ * Quiet known warnings in tests (#103)
22
+
1
23
  ## 0.4.0 / 2015-12-30
2
24
 
3
25
  * Feed uses `site.title`, or `site.name` if `title` doesn't exist (#72)
data/README.md CHANGED
@@ -27,13 +27,10 @@ The plugin will automatically generate an Atom feed at `/feed.xml`.
27
27
 
28
28
  The plugin will automatically use any of the following configuration variables, if they are present in your site's `_config.yml` file.
29
29
 
30
- * `name` - The title of the site, e.g., "My awesome site"
30
+ * `title` or `name` - The title of the site, e.g., "My awesome site"
31
31
  * `description` - A longer description of what your site is about, e.g., "Where I blog about Jekyll and other awesome things"
32
32
  * `url` - The URL to your site, e.g., `http://example.com`. If none is provided, the plugin will try to use `site.github.url`.
33
- * `author` - Your name, e.g., "Dr. Jekyll." This can be a string (with the author's name), or an object with the following properties:
34
- - `name` - **Required** Display name of the author
35
- - `email` - Email address of the author
36
- - `uri` - Webpage where more information about the author can be found
33
+ * `author` - Global author information (see below)
37
34
 
38
35
  ### Already have a feed path?
39
36
 
@@ -59,7 +56,63 @@ The plugin will use the following post metadata, automatically generated by Jeky
59
56
 
60
57
  Additionally, the plugin will use the following values, if present in a post's YAML front matter:
61
58
 
62
- * `author` - The author of the post, e.g., "Dr. Jekyll". If none is given, feed readers will look to the feed author as defined in `_config.yml`. Like the feed author, this can also be an object.
59
+ * `author` - The author of the post, e.g., "Dr. Jekyll". If none is given, feed readers will look to the feed author as defined in `_config.yml`. Like the feed author, this can also be an object or a reference to an author in `_data/authors.yml` (see below).
60
+
61
+ ### Author information
62
+
63
+ *TL;DR: In most cases, put `author: [your name]` in the document's front matter, for sites with multiple authors. If you need something more complicated, read on.*
64
+
65
+ There are several ways to convey author-specific information. Author information is found in the following order of priority:
66
+
67
+ 1. An `author` object, in the documents's front matter, e.g.:
68
+
69
+ ```yml
70
+ author:
71
+ twitter: benbalter
72
+ ```
73
+
74
+ 2. An `author` object, in the site's `_config.yml`, e.g.:
75
+
76
+ ```yml
77
+ author:
78
+ twitter: benbalter
79
+ ```
80
+
81
+ 3. `site.data.authors[author]`, if an author is specified in the document's front matter, and a corresponding key exists in `site.data.authors`. E.g., you have the following in the document's front matter:
82
+
83
+ ```yml
84
+ author: benbalter
85
+ ```
86
+
87
+ And you have the following in `_data/authors.yml`:
88
+
89
+ ```yml
90
+ benbalter:
91
+ picture: /img/benbalter.png
92
+ twitter: jekyllrb
93
+
94
+ potus:
95
+ picture: /img/potus.png
96
+ twitter: whitehouse
97
+ ```
98
+
99
+ In the above example, the author `benbalter`'s Twitter handle will be resolved to `@jekyllrb`. This allows you to centralize author information in a single `_data/authors` file for site with many authors that require more than just the author's username.
100
+
101
+ *Pro-tip: If `authors` is present in the document's front matter as an array (and `author` is not), the plugin will use the first author listed.*
102
+
103
+ 4. An author in the document's front matter (the simplest way), e.g.:
104
+
105
+ ```yml
106
+ author: benbalter
107
+ ```
108
+
109
+ 5. An author in the site's `_config.yml`, e.g.:
110
+
111
+ ```yml
112
+ author: benbalter
113
+ ```
114
+
115
+ * `image` - URL of an image that is representative of the post.
63
116
 
64
117
  ### Meta tags
65
118
 
data/jekyll-feed.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "jekyll-feed"
5
- spec.version = "0.4.0"
5
+ spec.version = "0.5.0"
6
6
  spec.authors = ["Ben Balter"]
7
7
  spec.email = ["ben.balter@github.com"]
8
8
  spec.summary = "A Jekyll plugin to generate an Atom feed of your Jekyll posts"
@@ -14,11 +14,11 @@ Gem::Specification.new do |spec|
14
14
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
15
  spec.require_paths = ["lib"]
16
16
 
17
- spec.add_development_dependency "jekyll", ">= 2.4.0", "< 3.1.0"
17
+ spec.add_development_dependency "jekyll", ">= 3.0.0", "< 3.2.0"
18
18
  spec.add_development_dependency "bundler", "~> 1.6"
19
19
  spec.add_development_dependency "rake", "~> 10.0"
20
20
  spec.add_development_dependency "rspec", "~> 3.0"
21
21
  spec.add_development_dependency "typhoeus", "~> 0.7"
22
22
  spec.add_development_dependency "nokogiri", "~> 1.6"
23
- spec.add_development_dependency "jekyll-last-modified-at", "0.3.4"
23
+ spec.add_development_dependency "rubocop"
24
24
  end
data/lib/feed.xml CHANGED
@@ -4,10 +4,10 @@
4
4
  {% else %}
5
5
  {% assign url_base = site.github.url %}
6
6
  {% endif %}
7
- <feed xmlns="http://www.w3.org/2005/Atom">
7
+ <feed xmlns="http://www.w3.org/2005/Atom"{% if site.lang %} xml:lang="{{ site.lang }}"{% endif %}>
8
8
  <generator uri="http://jekyllrb.com" version="{{ jekyll.version }}">Jekyll</generator>
9
9
  <link href="{{ page.url | prepend: url_base }}" rel="self" type="application/atom+xml" />
10
- <link href="{{ url_base }}/" rel="alternate" type="text/html" />
10
+ <link href="{{ url_base }}/" rel="alternate" type="text/html" {% if site.lang %}hreflang="{{ site.lang }}" {% endif %}/>
11
11
  <updated>{{ site.time | date_to_xmlschema }}</updated>
12
12
  <id>{{ url_base | xml_escape }}/</id>
13
13
 
@@ -38,7 +38,8 @@
38
38
  {% endif %}
39
39
 
40
40
  {% for post in site.posts limit: 10 %}
41
- <entry>
41
+ {% unless post.draft %}
42
+ <entry{% if post.lang %} xml:lang="{{ post.lang }}"{% endif %}>
42
43
  <title>{{ post.title | markdownify | strip_html | replace: '\n', ' ' | strip | xml_escape }}</title>
43
44
  <link href="{{ post.url | prepend: url_base }}" rel="alternate" type="text/html" title="{{ post.title | xml_escape }}" />
44
45
  <published>{{ post.date | date_to_xmlschema }}</published>
@@ -51,18 +52,34 @@
51
52
  <id>{{ post.id | prepend: url_base | xml_escape }}</id>
52
53
  <content type="html" xml:base="{{ post.url | prepend: url_base | xml_escape }}">{{ post.content | strip | xml_escape }}</content>
53
54
 
54
- {% if post.author %}
55
- <author>
56
- {% if post.author.name %}
57
- <name>{{ post.author.name | xml_escape }}</name>
58
- {% else %}
59
- <name>{{ post.author | xml_escape }}</name>
55
+ {% assign post_author = post.author | default: post.authors[0] | default: site.author %}
56
+ {% assign post_author_email = false %}
57
+ {% assign post_author_uri = false %}
58
+ {% if post_author %}
59
+ {% if post_author.email %}
60
+ {% assign post_author_email = post_author.email %}
61
+ {% else %}
62
+ {% if site.data.authors and site.data.authors[post_author] %}
63
+ {% assign post_author_email = site.data.authors[post_author].email %}
64
+ {% endif %}
65
+ {% endif %}
66
+ {% if post_author.uri %}
67
+ {% assign post_author_uri = post_author.uri %}
68
+ {% else %}
69
+ {% if site.data.authors and site.data.authors[post_author] %}
70
+ {% assign post_author_email = site.data.authors[post_author].uri %}
60
71
  {% endif %}
61
- {% if post.author.email %}
62
- <email>{{ post.author.email | xml_escape }}</email>
72
+ {% endif %}
73
+ {% if post_author.name %}
74
+ {% assign post_author = post_author.name %}
75
+ {% endif %}
76
+ <author>
77
+ <name>{{ post_author | xml_escape }}</name>
78
+ {% if post_author_email %}
79
+ <email>{{ post_author_email | xml_escape }}</email>
63
80
  {% endif %}
64
- {% if post.author.uri %}
65
- <uri>{{ post.author.uri | xml_escape }}</uri>
81
+ {% if post_author_uri %}
82
+ <uri>{{ post_author_uri | xml_escape }}</uri>
66
83
  {% endif %}
67
84
  </author>
68
85
  {% endif %}
@@ -78,6 +95,15 @@
78
95
  {% if post.excerpt and post.excerpt != empty %}
79
96
  <summary>{{ post.excerpt | strip_html | replace: '\n', ' ' | strip | xml_escape }}</summary>
80
97
  {% endif %}
98
+
99
+ {% assign post_image = post.image %}
100
+ {% if post_image %}
101
+ {% unless post_image contains "://" %}
102
+ {% assign post_image = post_image | prepend: url_base | xml_escape %}
103
+ {% endunless %}
104
+ <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="{{ post_image }}" />
105
+ {% endif %}
81
106
  </entry>
107
+ {% endunless %}
82
108
  {% endfor %}
83
109
  </feed>
data/lib/jekyll-feed.rb CHANGED
@@ -1,94 +1,4 @@
1
- require "fileutils"
2
-
3
- module Jekyll
4
- class PageWithoutAFile < Page
5
- def read_yaml(*)
6
- @data ||= {}
7
- end
8
- end
9
-
10
- module StripWhitespace
11
- def strip(input)
12
- input.to_s.strip
13
- end
14
- end
15
-
16
- class FeedMetaTag < Liquid::Tag
17
- def config
18
- @context.registers[:site].config
19
- end
20
-
21
- def path
22
- if config["feed"] && config["feed"]["path"]
23
- config["feed"]["path"]
24
- else
25
- "feed.xml"
26
- end
27
- end
28
-
29
- def url
30
- if config["url"]
31
- config["url"]
32
- elsif config["github"] && config["github"]["url"]
33
- config["github"]["url"]
34
- end
35
- end
36
-
37
- def render(context)
38
- @context = context
39
- "<link type=\"application/atom+xml\" rel=\"alternate\" href=\"#{url}/#{path}\" title=\"#{config["name"]}\" />"
40
- end
41
- end
42
-
43
- class JekyllFeed < Jekyll::Generator
44
- safe true
45
- priority :lowest
46
-
47
- # Path to feed from config, or feed.xml for default
48
- def path
49
- if @site.config["feed"] && @site.config["feed"]["path"]
50
- @site.config["feed"]["path"]
51
- else
52
- "feed.xml"
53
- end
54
- end
55
-
56
- # Main plugin action, called by Jekyll-core
57
- def generate(site)
58
- @site = site
59
- @site.config["time"] = Time.new
60
- unless feed_exists?
61
- @site.pages << feed_content
62
- end
63
- end
64
-
65
- # Path to feed.xml template file
66
- def source_path
67
- File.expand_path "feed.xml", File.dirname(__FILE__)
68
- end
69
-
70
- def feed_content
71
- feed = PageWithoutAFile.new(@site, File.dirname(__FILE__), "", path)
72
- feed.content = File.read(source_path).gsub(/\s*\n\s*/, "\n").gsub(/\s+{%/, "{%").gsub(/\s+</,"<")
73
- feed.data["layout"] = nil
74
- feed.data["sitemap"] = false
75
- feed.output
76
- feed
77
- end
78
-
79
- # Checks if a feed already exists in the site source
80
- def feed_exists?
81
- if @site.respond_to?(:in_source_dir)
82
- File.exists? @site.in_source_dir(path)
83
- else
84
- File.exists? Jekyll.sanitized_path(@site.source, path)
85
- end
86
- end
87
- end
88
- end
89
-
90
- unless defined? Liquid::StandardFilters.strip
91
- Liquid::Template.register_filter(Jekyll::StripWhitespace)
92
- end
93
-
94
- Liquid::Template.register_tag("feed_meta", Jekyll::FeedMetaTag)
1
+ require "jekyll/feed_meta_tag"
2
+ require "jekyll/jekyll-feed"
3
+ require "jekyll/page_without_a_file"
4
+ require "jekyll/strip_whitespace"
@@ -0,0 +1,46 @@
1
+ module Jekyll
2
+ class FeedMetaTag < Liquid::Tag
3
+ def render(context)
4
+ @context = context
5
+ attrs = attributes.map { |k, v| %(#{k}="#{v}") }.join(' ')
6
+ "<link #{attrs} />"
7
+ end
8
+
9
+ private
10
+
11
+ def config
12
+ @context.registers[:site].config
13
+ end
14
+
15
+ def attributes
16
+ {
17
+ :type => 'application/atom+xml',
18
+ :rel => 'alternate',
19
+ :href => "#{url}/#{path}",
20
+ :title => title
21
+ }.keep_if { |_, v| v }
22
+ end
23
+
24
+ def path
25
+ if config["feed"] && config["feed"]["path"]
26
+ config["feed"]["path"]
27
+ else
28
+ "feed.xml"
29
+ end
30
+ end
31
+
32
+ def url
33
+ if config["url"]
34
+ URI.join(config["url"], config["baseurl"])
35
+ elsif config["github"] && config["github"]["url"]
36
+ config["github"]["url"]
37
+ end
38
+ end
39
+
40
+ def title
41
+ config["title"] || config["name"]
42
+ end
43
+ end
44
+ end
45
+
46
+ Liquid::Template.register_tag("feed_meta", Jekyll::FeedMetaTag)
@@ -0,0 +1,51 @@
1
+ require "fileutils"
2
+
3
+ module Jekyll
4
+ class JekyllFeed < Jekyll::Generator
5
+ safe true
6
+ priority :lowest
7
+
8
+ # Main plugin action, called by Jekyll-core
9
+ def generate(site)
10
+ @site = site
11
+ @site.config["time"] = Time.new
12
+ unless feed_exists?
13
+ @site.pages << feed_content
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ # Path to feed from config, or feed.xml for default
20
+ def path
21
+ if @site.config["feed"] && @site.config["feed"]["path"]
22
+ @site.config["feed"]["path"]
23
+ else
24
+ "feed.xml"
25
+ end
26
+ end
27
+
28
+ # Path to feed.xml template file
29
+ def source_path
30
+ File.expand_path "../feed.xml", File.dirname(__FILE__)
31
+ end
32
+
33
+ def feed_content
34
+ feed = PageWithoutAFile.new(@site, File.dirname(__FILE__), "", path)
35
+ feed.content = File.read(source_path).gsub(/\s+([{<])/, '\1')
36
+ feed.data["layout"] = nil
37
+ feed.data["sitemap"] = false
38
+ feed.output
39
+ feed
40
+ end
41
+
42
+ # Checks if a feed already exists in the site source
43
+ def feed_exists?
44
+ if @site.respond_to?(:in_source_dir)
45
+ File.exist? @site.in_source_dir(path)
46
+ else
47
+ File.exist? Jekyll.sanitized_path(@site.source, path)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,7 @@
1
+ module Jekyll
2
+ class PageWithoutAFile < Page
3
+ def read_yaml(*)
4
+ @data ||= {}
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ # The `strip` filter was added to Liquid in version 3
2
+ # Jekyll did not require Liquid 3 until Jekyll 3.0.0
3
+ # This shim is needed for compatibility with Jekyll 2.x
4
+
5
+ module Jekyll
6
+ module StripWhitespace
7
+ def strip(input)
8
+ input.to_s.strip
9
+ end
10
+ end
11
+ end
12
+
13
+ unless Liquid::StandardFilters.method_defined?(:strip)
14
+ Liquid::Template.register_filter(Jekyll::StripWhitespace)
15
+ end
data/script/cibuild CHANGED
@@ -3,4 +3,5 @@
3
3
  set -e
4
4
 
5
5
  bundle exec rspec
6
+ bundle exec rubocop -S -D
6
7
  bundle exec rake build
@@ -1,8 +1,5 @@
1
1
  timezone: UTC
2
2
 
3
- gems:
4
- - jekyll-last-modified-at
5
-
6
3
  defaults:
7
4
  -
8
5
  scope:
@@ -0,0 +1,4 @@
1
+ ---
2
+ ---
3
+
4
+ This is a draft.
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  excerpt: "Foo"
3
+ image: "/image.png"
3
4
  ---
4
5
 
5
6
  # December the twelfth, actually.
@@ -1,4 +1,5 @@
1
1
  ---
2
+ image: "https://cdn.example.org/absolute.png"
2
3
  ---
3
4
 
4
5
  March the second!
@@ -1,4 +1,5 @@
1
1
  ---
2
+ last_modified_at: 2015-05-12T13:27:59+00:00
2
3
  ---
3
4
 
4
5
  Please don't modify this file. It's modified time is important.
@@ -7,6 +7,7 @@ describe(Jekyll::JekyllFeed) do
7
7
  "full_rebuild" => true,
8
8
  "source" => source_dir,
9
9
  "destination" => dest_dir,
10
+ "show_drafts" => true,
10
11
  "url" => "http://example.org",
11
12
  "name" => "My awesome site",
12
13
  "author" => {
@@ -20,6 +21,8 @@ describe(Jekyll::JekyllFeed) do
20
21
  end
21
22
  let(:site) { Jekyll::Site.new(config) }
22
23
  let(:contents) { File.read(dest_dir("feed.xml")) }
24
+ let(:context) { make_context(site: site) }
25
+ let(:feed_meta) { Liquid::Template.parse("{% feed_meta %}").render!(context, {}) }
23
26
  before(:each) do
24
27
  site.process
25
28
  end
@@ -41,6 +44,7 @@ describe(Jekyll::JekyllFeed) do
41
44
  expect(contents).to match /http:\/\/example\.org\/2014\/03\/04\/march-the-fourth\.html/
42
45
  expect(contents).to match /http:\/\/example\.org\/2014\/03\/02\/march-the-second\.html/
43
46
  expect(contents).to match /http:\/\/example\.org\/2013\/12\/12\/dec-the-second\.html/
47
+ expect(contents).to_not match /http:\/\/example\.org\/2016\/02\/09\/a-draft\.html/
44
48
  end
45
49
 
46
50
  it "does not include assets or any static files that aren't .html" do
@@ -68,7 +72,7 @@ describe(Jekyll::JekyllFeed) do
68
72
  expect(contents).to match /&lt;p&gt;March the second!&lt;\/p&gt;/
69
73
  end
70
74
 
71
- it "converts uses last_modified_at where available" do
75
+ it "uses last_modified_at where available" do
72
76
  expect(contents).to match /<updated>2015-05-12T13:27:59\+00:00<\/updated>/
73
77
  end
74
78
 
@@ -81,6 +85,11 @@ describe(Jekyll::JekyllFeed) do
81
85
  expect(contents).not_to match /Liquid is not rendered\./
82
86
  end
83
87
 
88
+ it "includes the item image" do
89
+ expect(contents).to include('<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://example.org/image.png" />')
90
+ expect(contents).to include('<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn.example.org/absolute.png" />')
91
+ end
92
+
84
93
  context "parsing" do
85
94
  let(:feed) { RSS::Parser.parse(contents) }
86
95
 
@@ -161,6 +170,13 @@ describe(Jekyll::JekyllFeed) do
161
170
  result.css("warning").each do |warning|
162
171
  # Quiet a warning that results from us passing the feed as a string
163
172
  next if warning.css("text").text =~ /Self reference doesn't match document location/
173
+
174
+ # Quiet expected warning that results from blank summary test case
175
+ next if warning.css("text").text =~ /(content|summary) should not be blank/
176
+
177
+ # Quiet expected warning about multiple posts with same updated time
178
+ next if warning.css("text").text =~ /Two entries with the same value for atom:updated/
179
+
164
180
  warn "Validation warning: #{warning.css("text").text} on line #{warning.css("line").text} column #{warning.css("column").text}"
165
181
  end
166
182
 
@@ -182,13 +198,31 @@ describe(Jekyll::JekyllFeed) do
182
198
  expect(contents).to match /http:\/\/example\.org\/bass\/2014\/03\/02\/march-the-second\.html/
183
199
  expect(contents).to match /http:\/\/example\.org\/bass\/2013\/12\/12\/dec-the-second\.html/
184
200
  end
201
+
202
+ it "renders the feed meta" do
203
+ expected = 'href="http://example.org/bass/feed.xml"'
204
+ expect(feed_meta).to include(expected)
205
+ end
185
206
  end
186
207
 
187
208
  context "feed meta" do
188
209
  it "renders the feed meta" do
189
- index = File.read(dest_dir("index.html"))
190
210
  expected = '<link type="application/atom+xml" rel="alternate" href="http://example.org/feed.xml" title="My awesome site" />'
191
- expect(index).to include(expected)
211
+ expect(feed_meta).to eql(expected)
212
+ end
213
+
214
+ context "with a blank site name" do
215
+ let(:config) do
216
+ Jekyll.configuration({
217
+ "source" => source_dir,
218
+ "destination" => dest_dir,
219
+ "url" => "http://example.org"
220
+ })
221
+ end
222
+
223
+ it "does not output blank title" do
224
+ expect(feed_meta).not_to include('title=')
225
+ end
192
226
  end
193
227
  end
194
228
 
@@ -206,9 +240,8 @@ describe(Jekyll::JekyllFeed) do
206
240
  end
207
241
 
208
242
  it "renders the feed meta with custom feed path" do
209
- index = File.read(dest_dir("index.html"))
210
- expected = '<link type="application/atom+xml" rel="alternate" href="http://example.org/atom.xml" title="My awesome site" />'
211
- expect(index).to include(expected)
243
+ expected = 'href="http://example.org/atom.xml"'
244
+ expect(feed_meta).to include(expected)
212
245
  end
213
246
  end
214
247
  end
data/spec/spec_helper.rb CHANGED
@@ -21,4 +21,8 @@ RSpec.configure do |config|
21
21
  def dest_dir(*files)
22
22
  File.join(DEST_DIR, *files)
23
23
  end
24
+
25
+ def make_context(registers = {})
26
+ Liquid::Context.new({}, {}, { site: site }.merge(registers))
27
+ end
24
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-feed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Balter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-30 00:00:00.000000000 Z
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.4.0
19
+ version: 3.0.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: 3.1.0
22
+ version: 3.2.0
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 2.4.0
29
+ version: 3.0.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: 3.1.0
32
+ version: 3.2.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -101,19 +101,19 @@ dependencies:
101
101
  - !ruby/object:Gem::Version
102
102
  version: '1.6'
103
103
  - !ruby/object:Gem::Dependency
104
- name: jekyll-last-modified-at
104
+ name: rubocop
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - '='
107
+ - - ">="
108
108
  - !ruby/object:Gem::Version
109
- version: 0.3.4
109
+ version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - '='
114
+ - - ">="
115
115
  - !ruby/object:Gem::Version
116
- version: 0.3.4
116
+ version: '0'
117
117
  description:
118
118
  email:
119
119
  - ben.balter@github.com
@@ -123,6 +123,7 @@ extra_rdoc_files: []
123
123
  files:
124
124
  - ".gitignore"
125
125
  - ".rspec"
126
+ - ".rubocop.yml"
126
127
  - ".travis.yml"
127
128
  - Gemfile
128
129
  - History.markdown
@@ -132,10 +133,15 @@ files:
132
133
  - jekyll-feed.gemspec
133
134
  - lib/feed.xml
134
135
  - lib/jekyll-feed.rb
136
+ - lib/jekyll/feed_meta_tag.rb
137
+ - lib/jekyll/jekyll-feed.rb
138
+ - lib/jekyll/page_without_a_file.rb
139
+ - lib/jekyll/strip_whitespace.rb
135
140
  - script/bootstrap
136
141
  - script/cibuild
137
142
  - script/release
138
143
  - spec/fixtures/_config.yml
144
+ - spec/fixtures/_drafts/2015-01-12-a-draft.md
139
145
  - spec/fixtures/_layouts/some_default.html
140
146
  - spec/fixtures/_posts/2013-12-12-dec-the-second.md
141
147
  - spec/fixtures/_posts/2014-03-02-march-the-second.md
@@ -145,7 +151,6 @@ files:
145
151
  - spec/fixtures/_posts/2015-05-12-liquid.md
146
152
  - spec/fixtures/_posts/2015-05-12-pre.html
147
153
  - spec/fixtures/_posts/2015-05-18-author-detail.md
148
- - spec/fixtures/index.html
149
154
  - spec/jekyll-feed_spec.rb
150
155
  - spec/spec_helper.rb
151
156
  homepage: https://github.com/jekyll/jekyll-feed
@@ -168,12 +173,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
173
  version: '0'
169
174
  requirements: []
170
175
  rubyforge_project:
171
- rubygems_version: 2.2.5
176
+ rubygems_version: 2.5.1
172
177
  signing_key:
173
178
  specification_version: 4
174
179
  summary: A Jekyll plugin to generate an Atom feed of your Jekyll posts
175
180
  test_files:
176
181
  - spec/fixtures/_config.yml
182
+ - spec/fixtures/_drafts/2015-01-12-a-draft.md
177
183
  - spec/fixtures/_layouts/some_default.html
178
184
  - spec/fixtures/_posts/2013-12-12-dec-the-second.md
179
185
  - spec/fixtures/_posts/2014-03-02-march-the-second.md
@@ -183,6 +189,5 @@ test_files:
183
189
  - spec/fixtures/_posts/2015-05-12-liquid.md
184
190
  - spec/fixtures/_posts/2015-05-12-pre.html
185
191
  - spec/fixtures/_posts/2015-05-18-author-detail.md
186
- - spec/fixtures/index.html
187
192
  - spec/jekyll-feed_spec.rb
188
193
  - spec/spec_helper.rb
@@ -1,4 +0,0 @@
1
- ---
2
- ---
3
-
4
- HERE IS MY SITE I AM SO EXCITED TO BE USING GITHUB PAGES