jekyll-contentblocks 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0aae381c423e7d7a76af0fd169aa414e0f995ec4
4
- data.tar.gz: 1ffd4c35f2fd3e188ee8dbe5f1e224409d771e61
3
+ metadata.gz: ddeace684edb5376fdab5c280c88ced16731264b
4
+ data.tar.gz: d770dffb2fb6b82e75888a2d502e02177a713864
5
5
  SHA512:
6
- metadata.gz: c83a2a92e7822f7fee68b82230266131c4533c005f919409d33fde1b901833cbf68246b75ac5f27dd046ea8eb339ae5c79d71748184a03cb8bca317db71e4648
7
- data.tar.gz: 82de969458580e7bdd557d836d26509dbe2f30acb9fc1d662f2a691b6079f86952b6cadc23e228b3781624c5ce61accc52667b28af09dd1ef0b8726d341be348
6
+ metadata.gz: 06022becaeac04a221c70de8c345612cabbd96c61832faefb965085514a56265bfe916aa2476c54c7e8613de3a97db53d4032bc71b5a14e8e8441ab64bb07d1b
7
+ data.tar.gz: 0e8281ad795ef26b00cd522c73603a7b5adb37a2f6d1a0aaa54b5c4308ecf17975db901f2ed8b8c54e450c702d47016656ed6f78791ee00759314a978cf9e9af
data/Gemfile CHANGED
@@ -4,5 +4,7 @@ gem 'jekyll', '> 1.0.0'
4
4
  gem 'appraisal', '1.0.2'
5
5
 
6
6
  gem 'pry'
7
+ gem 'rspec', '~> 3.3.0'
8
+ gem 'nokogiri', '~> 1.6.6.0'
7
9
 
8
10
  gemspec
data/README.md CHANGED
@@ -42,17 +42,17 @@ require "jekyll-contentblocks"
42
42
  In your layout files, define `contentblock` blocks that say where content will end up. For example, say the file `_layouts/default.html` looks like this:
43
43
  ```html
44
44
  <html>
45
- <head>
46
- {% contentblock scripts %}
47
- </head>
48
- <body>
49
- <div class="main">
50
- {{ content }}
51
- </div>
52
- <div class="sidebar">
53
- {% contentblock sidebar %}
54
- </div>
55
- </body>
45
+ <head>
46
+ {% contentblock scripts %}
47
+ </head>
48
+ <body>
49
+ <div class="main">
50
+ {{ content }}
51
+ </div>
52
+ <div class="sidebar">
53
+ {% contentblock sidebar %}
54
+ </div>
55
+ </body>
56
56
  </html>
57
57
  ```
58
58
 
@@ -74,21 +74,27 @@ Here is my post content.
74
74
 
75
75
  Note that we didn't add anything to the `scripts` block in the post. That's OK, content blocks without any content will be ignored.
76
76
 
77
- ### Checking if contentblock exists
77
+ ### Checking if a block has content
78
78
 
79
- We might want to check if the particular contentblock exists before using it in our template:
80
-
81
- * [Capture](http://docs.shopify.com/themes/liquid-basics/logic) contents of the `sidebar` contentblock to a variable `result`
82
- * If `result` is not empty, output its contents surrounded with desired markup
79
+ We might want to check if the particular contentblock has content before using it in our template.
80
+ To do this, use the `ifhascontent` tag:
83
81
 
84
82
  ```liquid
85
- {% capture result %}{% contentblock sidebar %}{% endcapture %}
83
+ {% ifhascontent javascripts %}
84
+ <script type="text/javascript>
85
+ {% contentfor javascripts %}
86
+ </script>
87
+ {% endifhascontent %}
88
+ ```
89
+
90
+ Similarly, there's the opposite tag, `ifnothascontent`:
86
91
 
87
- {% if result != '' %}
88
- ...template markup...
89
- {{ result }}
90
- ...template markup...
91
- {% endif %}
92
+ ```liquid
93
+ {% ifnothascontent sidebar %}
94
+ <div>
95
+ This is our default sidebar.
96
+ </div>
97
+ {% endifnothascontent %}
92
98
  ```
93
99
 
94
100
  ## Contributing
@@ -98,3 +104,14 @@ We might want to check if the particular contentblock exists before using it in
98
104
  3. Commit your changes (`git commit -am 'Add some feature'`)
99
105
  4. Push to the branch (`git push origin my-new-feature`)
100
106
  5. Create new Pull Request
107
+
108
+ ### Running the tests
109
+
110
+ Try to make sure that your changes work with all of the latest point releases
111
+ of Jekyll. To do this, run the test suite:
112
+
113
+ ```bash
114
+ > bundle
115
+ > bundle exec appraisal install
116
+ > bundle exec appraisal rpsec
117
+ ```
data/Rakefile CHANGED
@@ -1,19 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
3
  require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
4
5
 
5
- desc 'Run the test'
6
- task :test do
7
- require 'jekyll'
8
- system 'rm -rf test/_site'
9
- version = `jekyll --version`.strip
10
- system 'jekyll build -s test/ -d test/_site &> /dev/null'
11
- unless system 'grep \'<h2 id=.sidebar.>SIDEBAR</h2>\' test/_site/index.html &> /dev/null'
12
- fail "#{version} failed!"
13
- end
14
- unless system 'grep "<p>3</p>" test/_site/index.html &> /dev/null'
15
- fail "#{version} failed!"
16
- end
17
- puts "#{version} pass!"
18
- end
19
-
6
+ RSpec::Core::RakeTask.new(:spec)
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "1.0.4"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "1.1.2"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "1.2.1"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "1.3.1"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "1.4.3"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "1.5.1"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "2.0.3"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "2.1.1"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "2.2.0"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "2.3.0"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "2.4.0"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -5,5 +5,7 @@ source "https://rubygems.org"
5
5
  gem "jekyll", "2.5.3"
6
6
  gem "appraisal", "1.0.2"
7
7
  gem "pry"
8
+ gem "rspec", "~> 3.3.0"
9
+ gem "nokogiri", "~> 1.6.6.0"
8
10
 
9
11
  gemspec :path => "../"
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'jekyll-contentblocks/version'
4
+ require 'jekyll/contentblocks/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = "jekyll-contentblocks"
@@ -1,8 +1,15 @@
1
- require "jekyll-contentblocks/version"
2
- require "jekyll-contentblocks/convertible"
3
- require "jekyll-contentblocks/common"
4
- require "jekyll-contentblocks/content_for"
5
- require "jekyll-contentblocks/content_block"
1
+ require 'jekyll'
2
+ require 'jekyll/convertible'
3
+ require File.expand_path('../jekyll/convertible', __FILE__)
4
+
5
+ require 'jekyll/contentblocks/version'
6
+ require 'jekyll/content_block_tag'
7
+ require 'jekyll/tags/content_for'
8
+ require 'jekyll/tags/if_has_content'
9
+ require 'jekyll/tags/if_not_has_content'
10
+ require 'jekyll/tags/content_block'
6
11
 
7
12
  Liquid::Template.register_tag('contentfor', Jekyll::Tags::ContentFor)
13
+ Liquid::Template.register_tag('ifhascontent', Jekyll::Tags::IfHasContent)
14
+ Liquid::Template.register_tag('ifnothascontent', Jekyll::Tags::IfNotHasContent)
8
15
  Liquid::Template.register_tag('contentblock', Jekyll::Tags::ContentBlock)
@@ -0,0 +1,28 @@
1
+ module Jekyll
2
+ module ContentBlockTag
3
+ def initialize(tag_name, block_name, tokens)
4
+ super
5
+ @block_name = get_content_block_name(tag_name, block_name)
6
+ end
7
+
8
+ private
9
+
10
+ def get_content_block_name(tag_name, block_name)
11
+ block_name = (block_name || '').strip
12
+ if block_name == ''
13
+ raise SyntaxError.new("No block name given in #{tag_name} tag")
14
+ end
15
+ block_name
16
+ end
17
+
18
+ def block_has_content?(context)
19
+ block_content = content_for_block(context).join
20
+ !(block_content.nil? || block_content.empty?)
21
+ end
22
+
23
+ def content_for_block(context)
24
+ context.environments.first['contentblocks'] ||= {}
25
+ context.environments.first['contentblocks'][@block_name] ||= []
26
+ end
27
+ end
28
+ end
@@ -1,5 +1,6 @@
1
1
  module Jekyll
2
2
  module ContentBlocks
3
- VERSION = "0.0.4"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
6
+
File without changes
@@ -1,12 +1,7 @@
1
1
  module Jekyll
2
2
  module Tags
3
3
  class ContentBlock < Liquid::Tag
4
- include ::Jekyll::ContentBlocks::Common
5
-
6
- def initialize(tag_name, block_name, tokens)
7
- super
8
- @block_name = get_content_block_name(tag_name, block_name)
9
- end
4
+ include ::Jekyll::ContentBlockTag
10
5
 
11
6
  def render(context)
12
7
  block_content = content_for_block(context).join
@@ -1,14 +1,9 @@
1
1
  module Jekyll
2
2
  module Tags
3
3
  class ContentFor < Liquid::Block
4
- include ::Jekyll::ContentBlocks::Common
4
+ include ::Jekyll::ContentBlockTag
5
5
  alias_method :render_block, :render
6
6
 
7
- def initialize(tag_name, block_name, tokens)
8
- super
9
- @block_name = get_content_block_name(tag_name, block_name)
10
- end
11
-
12
7
  def render(context)
13
8
  content_for_block(context) << render_block(context)
14
9
  ''
@@ -0,0 +1,14 @@
1
+ module Jekyll
2
+ module Tags
3
+ class IfHasContent < Liquid::Block
4
+ include ::Jekyll::ContentBlockTag
5
+ alias_method :render_block, :render
6
+
7
+ def render(context)
8
+ if block_has_content?(context)
9
+ render_block(context)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Jekyll
2
+ module Tags
3
+ class IfNotHasContent < Liquid::Block
4
+ include ::Jekyll::ContentBlockTag
5
+ alias_method :render_block, :render
6
+
7
+ def render(context)
8
+ unless block_has_content?(context)
9
+ render_block(context)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jekyll::ContentBlocks do
4
+ jekyll_version = `jekyll --version`.strip
5
+ puts jekyll_version
6
+
7
+ context "against #{jekyll_version}" do
8
+ before(:all) do
9
+ expect(generate_test_site).to be true
10
+ end
11
+
12
+ let(:page) { load_index_html.html }
13
+ let(:sidebar) { page.css('body > div > h2#sidebar').first }
14
+
15
+ it 'renders the sidebar content block' do
16
+ expect(sidebar).not_to be_nil
17
+ expect(sidebar.text).to eq 'SIDEBAR'
18
+ end
19
+
20
+ it 'renders Liquid within a content block' do
21
+ rendered_liquid = sidebar.css('+ p')
22
+ expect(rendered_liquid).not_to be_nil
23
+ expect(rendered_liquid.text).to eq '3'
24
+ end
25
+
26
+ it 'does not render a block without content' do
27
+ expect(page.css('head > style')).to be_empty
28
+ end
29
+
30
+ describe 'ifnothascontent' do
31
+ it 'renders defaults when content is not supplied' do
32
+ expect(page.css('div#footer')).not_to be_empty
33
+ end
34
+
35
+ it 'does not render when there is content' do
36
+ expect(page.css('div[class=sidebar-default]')).to be_empty
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,17 @@
1
+ require 'nokogiri'
2
+
3
+ module SpecHelpers
4
+ def generate_test_site
5
+ system 'rm -rf test/_site'
6
+ system 'jekyll build -s test/ -d test/_site &> /dev/null'
7
+ end
8
+
9
+ def load_index_html
10
+ index_html = File.read('test/_site/index.html')
11
+ Nokogiri::Slop(index_html)
12
+ end
13
+ end
14
+
15
+ RSpec.configure do |config|
16
+ config.include(SpecHelpers)
17
+ end
@@ -1,12 +1,33 @@
1
1
  <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
+ {% ifhascontent css %}
5
+ <style type="text/css">
6
+ {% contentblock css %}
7
+ </style>
8
+ {% endifhascontent %}
4
9
  </head>
10
+
5
11
  <body>
6
12
  {{ content }}
7
- <div>
8
- {% contentblock sidebar %}
13
+
14
+ {% ifhascontent sidebar %}
15
+ <div>
16
+ {% contentblock sidebar %}
17
+ </div>
18
+ {% endifhascontent %}
19
+
20
+ {% ifnothascontent sidebar %}
21
+ <div class="sidebar-default">
22
+ This is the default sidebar
23
+ </div>
24
+ {% endifnothascontent %}
25
+
26
+ {% ifnothascontent footer %}
27
+ <div id="footer">
28
+ This is the default footer.
9
29
  </div>
30
+ {% endifnothascontent %}
10
31
  </body>
11
32
  </html>
12
33
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-contentblocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rusty Geldmacher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-06 00:00:00.000000000 Z
11
+ date: 2015-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -52,11 +52,15 @@ files:
52
52
  - gemfiles/jekyll_2.5.3.gemfile
53
53
  - jekyll-contentblocks.gemspec
54
54
  - lib/jekyll-contentblocks.rb
55
- - lib/jekyll-contentblocks/common.rb
56
- - lib/jekyll-contentblocks/content_block.rb
57
- - lib/jekyll-contentblocks/content_for.rb
58
- - lib/jekyll-contentblocks/convertible.rb
59
- - lib/jekyll-contentblocks/version.rb
55
+ - lib/jekyll/content_block_tag.rb
56
+ - lib/jekyll/contentblocks/version.rb
57
+ - lib/jekyll/convertible.rb
58
+ - lib/jekyll/tags/content_block.rb
59
+ - lib/jekyll/tags/content_for.rb
60
+ - lib/jekyll/tags/if_has_content.rb
61
+ - lib/jekyll/tags/if_not_has_content.rb
62
+ - spec/jekyll_content_blocks_spec.rb
63
+ - spec/spec_helper.rb
60
64
  - test/_layouts/default.html
61
65
  - test/_plugins/bundler.rb
62
66
  - test/index.md
@@ -79,11 +83,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
83
  version: '0'
80
84
  requirements: []
81
85
  rubyforge_project:
82
- rubygems_version: 2.4.3
86
+ rubygems_version: 2.2.2
83
87
  signing_key:
84
88
  specification_version: 4
85
89
  summary: A Jekyll plugin kind of like Rails' content_for
86
90
  test_files:
91
+ - spec/jekyll_content_blocks_spec.rb
92
+ - spec/spec_helper.rb
87
93
  - test/_layouts/default.html
88
94
  - test/_plugins/bundler.rb
89
95
  - test/index.md
@@ -1,18 +0,0 @@
1
- module Jekyll
2
- module ContentBlocks
3
- module Common
4
- def get_content_block_name(tag_name, block_name)
5
- block_name = (block_name || '').strip
6
- if block_name == ''
7
- raise SyntaxError.new("No block name given in #{tag_name} tag")
8
- end
9
- block_name
10
- end
11
-
12
- def content_for_block(context)
13
- context.environments.first['contentblocks'] ||= {}
14
- context.environments.first['contentblocks'][@block_name] ||= []
15
- end
16
- end
17
- end
18
- end