nanoc-conref-fs 0.6.10 → 0.7.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 +4 -4
- data/.rubocop.yml +10 -0
- data/.travis.yml +8 -1
- data/Rakefile +4 -0
- data/lib/nanoc-conref-fs.rb +1 -0
- data/lib/nanoc-conref-fs/conref-fs.rb +22 -46
- data/lib/nanoc-conref-fs/conrefifier.rb +2 -2
- data/lib/nanoc-conref-fs/datafiles.rb +1 -1
- data/lib/nanoc-conref-fs/variables.rb +1 -1
- data/nanoc-conref-fs.gemspec +9 -5
- data/test/conref_fs_test.rb +0 -10
- data/test/fixtures/Rules +2 -2
- data/test/fixtures/content/children/hash_children.html +1 -1
- data/test/fixtures/content/children/no_children.html +2 -2
- data/test/fixtures/content/datafiles/deep.html +1 -1
- data/test/fixtures/content/datafiles/retrieve.html +1 -2
- data/test/fixtures/content/frontmatter/audience.html +1 -1
- data/test/fixtures/content/frontmatter/different.html +1 -1
- data/test/fixtures/content/frontmatter/title.html +1 -1
- data/test/fixtures/content/liquid/raw.html +1 -1
- data/test/fixtures/content/maliciousness/asterisk_double.html +1 -1
- data/test/fixtures/content/maliciousness/asterisk_single.html +1 -1
- data/test/fixtures/content/maliciousness/unknown.html +1 -1
- data/test/fixtures/content/parents/array_parents.html +1 -2
- data/test/fixtures/content/parents/missing_title.html +1 -1
- data/test/fixtures/content/parents/single_parent.html +1 -2
- data/test/fixtures/content/parents/two_parents.html +1 -2
- data/test/test_helper.rb +1 -0
- metadata +72 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62064e24b4596e3eff0b6ef03a865da1840efdc5
|
4
|
+
data.tar.gz: f097cb00de1ad5f31e33701bcbb4c394241e5b4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed8578d2747086afd9e6cf48d80bc7e17880ec584aeaca948a81f1b3d443cf1af3bc6bbbb006c0b94381ef171c94b39828fd533ee8c47bf755ce70fceab63c54
|
7
|
+
data.tar.gz: 244555f171ef8570d934be049ecb5ba80770effafcd04c560419af2ce489f29cdae53b4eeed1ebe62b782b90f4472d9726868d5fa30bcdfffa8ef767e8901544
|
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.3
|
3
|
+
- 2.3.6
|
4
|
+
- 2.4.3
|
5
|
+
- 2.5.0
|
4
6
|
env:
|
5
7
|
global:
|
6
8
|
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
@@ -10,3 +12,8 @@ cache: bundler
|
|
10
12
|
|
11
13
|
git:
|
12
14
|
depth: 10
|
15
|
+
|
16
|
+
matrix:
|
17
|
+
include:
|
18
|
+
- script: bundle exec rake rubocop
|
19
|
+
rvm: 2.5.0
|
data/Rakefile
CHANGED
data/lib/nanoc-conref-fs.rb
CHANGED
@@ -2,8 +2,21 @@ require_relative 'conrefifier'
|
|
2
2
|
require 'active_support/core_ext/hash'
|
3
3
|
require 'active_support/core_ext/string'
|
4
4
|
|
5
|
+
class Nanoc::DataSources::Filesystem::Parser
|
6
|
+
alias_method :old_parse_metadata, :parse_metadata
|
7
|
+
# There are a lot of problems when trying to parse liquid
|
8
|
+
# out of the frontmatter—all of them dealing with collision between
|
9
|
+
# the { character in Liquid and its signfigance in YAML. We'll overload
|
10
|
+
# the parse method here to resolve those issues ahead of time.
|
11
|
+
def parse_metadata(data, filename)
|
12
|
+
wrapped_data = data.gsub(/^([^:]+): (\{\{.+)/, '\1: \'\2\'')
|
13
|
+
|
14
|
+
old_parse_metadata(wrapped_data, filename)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
5
18
|
class ConrefFS < Nanoc::DataSources::Filesystem
|
6
|
-
DEFAULT_DATA_DIR =
|
19
|
+
DEFAULT_DATA_DIR = 'data'.freeze
|
7
20
|
|
8
21
|
include NanocConrefFS::Variables
|
9
22
|
include NanocConrefFS::Ancestry
|
@@ -29,7 +42,7 @@ class ConrefFS < Nanoc::DataSources::Filesystem
|
|
29
42
|
|
30
43
|
def self.apply_attributes(config, item, rep)
|
31
44
|
page_vars = NanocConrefFS::Conrefifier.file_variables(config[:page_variables], item[:filename], rep)
|
32
|
-
frontmatter_vars = { :
|
45
|
+
frontmatter_vars = { page: page_vars }.merge(NanocConrefFS::Variables.variables[rep])
|
33
46
|
|
34
47
|
unless page_vars[:data_association].nil?
|
35
48
|
association = page_vars[:data_association]
|
@@ -64,44 +77,7 @@ class ConrefFS < Nanoc::DataSources::Filesystem
|
|
64
77
|
end
|
65
78
|
end
|
66
79
|
|
67
|
-
#
|
68
|
-
# out of the frontmatter—all of them dealing with collision between
|
69
|
-
# the { character in Liquid and its signfigance in YAML. We'll overload
|
70
|
-
# the parse method here to resolve those issues ahead of time.
|
71
|
-
def parse_with_frontmatter(content_filename)
|
72
|
-
# Read data
|
73
|
-
data = read(content_filename)
|
74
|
-
|
75
|
-
# Check presence of metadata section
|
76
|
-
if data !~ /\A-{3,5}\s*$/
|
77
|
-
return ParseResult.new(content: data, attributes: {}, attributes_data: '')
|
78
|
-
end
|
79
|
-
|
80
|
-
# Split data
|
81
|
-
pieces = data.split(/^(-{5}|-{3})[ \t]*\r?\n?/, 3)
|
82
|
-
if pieces.size < 4
|
83
|
-
raise RuntimeError.new(
|
84
|
-
"The file '#{content_filename}' appears to start with a metadata section (three or five dashes at the top) but it does not seem to be in the correct format.",
|
85
|
-
)
|
86
|
-
end
|
87
|
-
|
88
|
-
# N.B. the only change to the original function
|
89
|
-
pieces[2].gsub!(/^([^:]+): (\{\{.+)/, '\1: \'\2\'')
|
90
|
-
|
91
|
-
# Parse
|
92
|
-
begin
|
93
|
-
meta = YAML.load(pieces[2]) || {}
|
94
|
-
rescue Exception => e
|
95
|
-
raise "Could not parse YAML for #{content_filename}: #{e.message}"
|
96
|
-
end
|
97
|
-
verify_meta(meta, content_filename)
|
98
|
-
content = pieces[4]
|
99
|
-
|
100
|
-
# Done
|
101
|
-
ParseResult.new(content: content, attributes: meta, attributes_data: pieces[2])
|
102
|
-
end
|
103
|
-
|
104
|
-
# Some of the static class methods below (and elsewhere in the Gem) require
|
80
|
+
# Some of the static class methods below (and elsewhere in the Gem) require
|
105
81
|
# access to the `data_dir` value from the config. This need comes about
|
106
82
|
# *before* Nanoc has a chance to properly load up the configuration file,
|
107
83
|
# so we're doing a bare-bones load here to gain access to that configuration
|
@@ -114,21 +90,21 @@ class ConrefFS < Nanoc::DataSources::Filesystem
|
|
114
90
|
# Returns:
|
115
91
|
# - Custom `data_dir` attribute from the 'conref-fs' data_source
|
116
92
|
# - Default `data_dir` of 'data' if none is configured in `nanoc.yaml`
|
117
|
-
def self.data_dir_name(config=nil)
|
93
|
+
def self.data_dir_name(config = nil)
|
118
94
|
config ||= YAML.load_file('nanoc.yaml')
|
119
|
-
config = config.to_h.with_indifferent_access
|
95
|
+
config = config.to_h.with_indifferent_access
|
120
96
|
|
121
97
|
# In certain parts of the nanoc pipeline the config is rooted at the
|
122
98
|
# data-source already.
|
123
|
-
data_dir = config.fetch(
|
99
|
+
data_dir = config.fetch('data_dir') { nil }
|
124
100
|
return data_dir if data_dir
|
125
101
|
|
126
|
-
data_sources = config.fetch(
|
102
|
+
data_sources = config.fetch('data_sources') { nil }
|
127
103
|
return DEFAULT_DATA_DIR unless data_sources
|
128
104
|
|
129
|
-
data_source = data_sources.find { |ds| ds[
|
105
|
+
data_source = data_sources.find { |ds| ds['type'] == 'conref-fs' }
|
130
106
|
|
131
|
-
data_dir = data_source.fetch(
|
107
|
+
data_dir = data_source.fetch('data_dir') { nil }
|
132
108
|
return DEFAULT_DATA_DIR unless data_dir
|
133
109
|
return data_dir
|
134
110
|
end
|
@@ -32,7 +32,7 @@ module NanocConrefFS
|
|
32
32
|
|
33
33
|
def self.liquify(config, path:, content:, rep:)
|
34
34
|
page_vars = NanocConrefFS::Conrefifier.file_variables(config[:page_variables], path, rep)
|
35
|
-
page_vars = { :
|
35
|
+
page_vars = { page: page_vars }.merge(NanocConrefFS::Variables.variables[rep])
|
36
36
|
|
37
37
|
# we must obfuscate essential ExtendedMarkdownFilter content
|
38
38
|
content = content.gsub(/\{\{\s*#(\S+)\s*\}\}/, '[[#\1]]')
|
@@ -62,7 +62,7 @@ module NanocConrefFS
|
|
62
62
|
|
63
63
|
def self.apply_liquid(content, data_vars)
|
64
64
|
data_vars['page'] = data_vars[:page].stringify_keys
|
65
|
-
result = Liquid::Template.parse(content, :
|
65
|
+
result = Liquid::Template.parse(content, error_mode: :warn).render(data_vars)
|
66
66
|
# This second pass renders any previously inserted
|
67
67
|
# data conditionals within the body. If a Liquid parse
|
68
68
|
# returns a blank string, we'll return the original
|
@@ -9,7 +9,7 @@ module NanocConrefFS
|
|
9
9
|
|
10
10
|
def self.apply_conditionals(config, path:, content:, rep:)
|
11
11
|
vars = Conrefifier.file_variables(config[:data_variables], path, rep)
|
12
|
-
data_vars = { :
|
12
|
+
data_vars = { page: vars, site: { config: config } }
|
13
13
|
|
14
14
|
content = obfuscate_and_liquify(content, data_vars)
|
15
15
|
begin
|
data/nanoc-conref-fs.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'nanoc-conref-fs'
|
6
|
-
spec.version = '0.
|
6
|
+
spec.version = '0.7.0'
|
7
7
|
spec.authors = ['Garen Torikian']
|
8
8
|
spec.email = ['gjtorikian@gmail.com']
|
9
9
|
spec.summary = 'A Nanoc filesystem to permit using conrefs/reusables in your content.'
|
@@ -15,11 +15,15 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.test_files = spec.files.grep(%r{^(test)/})
|
16
16
|
spec.require_paths = ['lib']
|
17
17
|
|
18
|
-
spec.add_runtime_dependency 'nanoc', '~> 4.3'
|
19
18
|
spec.add_runtime_dependency 'activesupport', '~> 4.2'
|
20
|
-
spec.add_runtime_dependency 'liquid', '
|
19
|
+
spec.add_runtime_dependency 'liquid', '~> 4.0'
|
20
|
+
spec.add_runtime_dependency 'nanoc', '~> 4.9'
|
21
21
|
|
22
|
-
spec.add_development_dependency 'rake'
|
23
|
-
spec.add_development_dependency 'minitest', '~> 5.8'
|
24
22
|
spec.add_development_dependency 'awesome_print'
|
23
|
+
spec.add_development_dependency 'minitest', '~> 5.8'
|
24
|
+
spec.add_development_dependency 'minitest-focus', '~> 1.1'
|
25
|
+
spec.add_development_dependency 'pry', '~> 0.10.0'
|
26
|
+
spec.add_development_dependency 'rake'
|
27
|
+
spec.add_development_dependency 'rubocop'
|
28
|
+
spec.add_development_dependency 'rubocop-github'
|
25
29
|
end
|
data/test/conref_fs_test.rb
CHANGED
@@ -42,16 +42,6 @@ class DatafilesTest < MiniTest::Test
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
def test_it_renders_nested_conrefs
|
46
|
-
with_site do |site|
|
47
|
-
site.compile
|
48
|
-
|
49
|
-
output_file = read_output_file('datafiles', 'deep')
|
50
|
-
test_file = read_test_file('datafiles', 'deep')
|
51
|
-
assert_equal output_file, test_file
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
45
|
def test_it_applies_any_attribute
|
56
46
|
with_site do |site|
|
57
47
|
site.compile
|
data/test/fixtures/Rules
CHANGED
@@ -21,7 +21,7 @@ compile '/**/*.md' do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
compile '/multiple/single_var.md', :
|
24
|
+
compile '/multiple/single_var.md', rep: :X do
|
25
25
|
filter :'conref-fs-filter'
|
26
26
|
filter :erb
|
27
27
|
layout '/default.*'
|
@@ -31,7 +31,7 @@ route '/**/*.md' do
|
|
31
31
|
item.identifier.without_ext + '/index.html'
|
32
32
|
end
|
33
33
|
|
34
|
-
route '/multiple/single_var.md', :
|
34
|
+
route '/multiple/single_var.md', rep: :X do
|
35
35
|
item.identifier.without_ext + '_x/index.html'
|
36
36
|
end
|
37
37
|
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
<body>
|
10
10
|
|
11
|
-
For example, to list a project's name, you might write something like `The project is called {{ site.github.project_title }}` or to list an organization's open source repositories, you might use the following:
|
11
|
+
For example, to list a project's name, you might write something like `The project is called {{ site.github.project_title }}` or to list an organization's open source repositories, you might use the following:
|
12
12
|
|
13
13
|
``` liquid
|
14
14
|
{% for repository in site.github.public_repositories %}
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<body>
|
10
10
|
**Two-factor authentication**, or 2FA, is a way of logging into websites that requires more than just a password. Using a password to log into a website is susceptible to security threats, because it represents a _single_ piece of information a malicious person needs to acquire. The added security that 2FA provides is requiring _additional information_ to sign in.
|
11
11
|
|
12
|
-
*Ta-da!*
|
12
|
+
*Ta-da!*
|
13
13
|
|
14
14
|
</body>
|
15
15
|
</html>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<body>
|
10
10
|
*Two-factor authentication*, or 2FA, is a way of logging into websites that requires more than just a password. Using a password to log into a website is susceptible to security threats, because it represents a _single_ piece of information a malicious person needs to acquire. The added security that 2FA provides is requiring _additional information_ to sign in.
|
11
11
|
|
12
|
-
*Ta-da!*
|
12
|
+
*Ta-da!*
|
13
13
|
|
14
14
|
</body>
|
15
15
|
</html>
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
<body>
|
10
10
|
|
11
|
-
You may also wish to add the `{% feed_meta %}` tag to your layout's `<head>` section to allow browsers to more easily discover your site's feed.
|
11
|
+
You may also wish to add the `{% feed_meta %}` tag to your layout's `<head>` section to allow browsers to more easily discover your site's feed.
|
12
12
|
|
13
13
|
</body>
|
14
14
|
</html>
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,59 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc-conref-fs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garen Torikian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '4.
|
19
|
+
version: '4.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '4.
|
26
|
+
version: '4.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: liquid
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '4.
|
33
|
+
version: '4.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '4.
|
40
|
+
version: '4.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: nanoc
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '4.9'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '4.9'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: awesome_print
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -81,7 +81,63 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '5.8'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: minitest-focus
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.10.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.10.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop-github
|
85
141
|
requirement: !ruby/object:Gem::Requirement
|
86
142
|
requirements:
|
87
143
|
- - ">="
|
@@ -102,6 +158,7 @@ extensions: []
|
|
102
158
|
extra_rdoc_files: []
|
103
159
|
files:
|
104
160
|
- ".gitignore"
|
161
|
+
- ".rubocop.yml"
|
105
162
|
- ".travis.yml"
|
106
163
|
- Gemfile
|
107
164
|
- LICENSE.txt
|