nanoc-conref-fs 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -1
- data/lib/nanoc-conref-fs/conref-fs.rb +76 -12
- data/nanoc-conref-fs.gemspec +1 -1
- data/test/conref_fs_test.rb +53 -1
- data/test/datafiles_test.rb +1 -1
- data/test/fixtures/Rules +2 -0
- data/test/fixtures/content/attributes/attribute.html +13 -0
- data/test/fixtures/content/attributes/attribute.md +3 -0
- data/test/fixtures/content/children/array_children.html +14 -0
- data/test/fixtures/content/children/array_children.md +3 -0
- data/test/fixtures/content/children/hash_children.html +18 -0
- data/test/fixtures/content/children/hash_children.md +5 -0
- data/test/fixtures/content/children/later_hash_children.html +16 -0
- data/test/fixtures/content/children/later_hash_children.md +3 -0
- data/test/fixtures/content/parents/array_parents.html +16 -0
- data/test/fixtures/content/parents/array_parents.md +5 -0
- data/test/fixtures/data/categories/category.yml +4 -0
- data/test/fixtures/data/categories/simple.yml +5 -0
- data/test/fixtures/layouts/children.html +16 -0
- data/test/fixtures/layouts/default.html +1 -1
- data/test/fixtures/nanoc.yaml +13 -0
- data/test/variable_mixin_test.rb +20 -0
- metadata +28 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cf69ee6e85496e24ff25128d9013457aba33741
|
4
|
+
data.tar.gz: dbed8da256b719eb52d1bda8640919060b3ab3e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab9faf957d43bc03944a47499989ae4f3fca7bcefe1a0976ad0c81a9776bc4315736a5d60fec3eac23203888a592882617f6b767dedb974845313bc7c7688c20
|
7
|
+
data.tar.gz: 751bdef5e71b825daffc335964334be1e14c237cbd5be52055ca83fcc5fcd2d8aa69c971614aac9bede21efffd8df655d2e184747dc609727f3a1d4cc1559f8b
|
data/README.md
CHANGED
@@ -76,8 +76,15 @@ See the tests for further usage of these conditionals. In both cases, `path` is
|
|
76
76
|
|
77
77
|
### Associating files with data
|
78
78
|
|
79
|
-
If you have a special `data_association` value, additional metadata to items will be applied
|
79
|
+
If you have a special `data_association` value, additional metadata to items will be applied:
|
80
|
+
|
81
|
+
* An attribute called `:parents`, which adds the parent "map topic" to an item.
|
82
|
+
* An attribute called `:children`, which adds any children of a "map topic."
|
80
83
|
|
81
84
|
### Retrieving variables
|
82
85
|
|
83
86
|
You can retrieve the stored data at any time (for example, in a layout) by calling `VariableMixin.variables`.
|
87
|
+
|
88
|
+
### Retrieving data files
|
89
|
+
|
90
|
+
You can fetch anything in the *data* folder by passing in a string, demarcated with `.`s, to `VariableMixin.fetch_data_file`. For example, `VariableMixin.fetch_data_file('reusables.intro')` will fetch the file in *data/reusables/intro.yml*.
|
@@ -9,6 +9,16 @@ module VariableMixin
|
|
9
9
|
def self.variables=(variables)
|
10
10
|
@variables = variables
|
11
11
|
end
|
12
|
+
|
13
|
+
def self.fetch_data_file(association)
|
14
|
+
reference = association.split('.')
|
15
|
+
variables = VariableMixin.variables
|
16
|
+
data = variables['site']['data']
|
17
|
+
while key = reference.shift
|
18
|
+
data = data[key]
|
19
|
+
end
|
20
|
+
data
|
21
|
+
end
|
12
22
|
end
|
13
23
|
|
14
24
|
class ConrefFS < Nanoc::DataSource
|
@@ -28,28 +38,47 @@ class ConrefFS < Nanoc::DataSource
|
|
28
38
|
super
|
29
39
|
end
|
30
40
|
|
31
|
-
def self.fetch_variables
|
32
|
-
@variables
|
33
|
-
end
|
34
|
-
|
35
41
|
# This function calls the parent super, then adds additional metadata to the item.
|
36
42
|
def parse(content_filename, meta_filename, _kind)
|
37
43
|
meta, content = super
|
38
44
|
page_vars = Conrefifier.file_variables(@site_config[:page_variables], content_filename)
|
39
45
|
unless page_vars[:data_association].nil?
|
40
46
|
association = page_vars[:data_association]
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
+
toc = VariableMixin.fetch_data_file(association)
|
48
|
+
meta['parents'] = if toc.is_a?(Array)
|
49
|
+
find_array_parents(toc, meta['title'])
|
50
|
+
else
|
51
|
+
find_hash_parents(toc, meta['title'])
|
52
|
+
end
|
53
|
+
|
54
|
+
meta['children'] = if toc.is_a?(Array)
|
55
|
+
find_array_children(toc, meta['title'])
|
56
|
+
else
|
57
|
+
find_hash_children(toc, meta['title'])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
page_vars.each_pair do |name, value|
|
61
|
+
meta[name.to_s] = value
|
47
62
|
end
|
48
63
|
[meta, content]
|
49
64
|
end
|
50
65
|
|
51
|
-
# Given a category file, this method finds
|
52
|
-
|
66
|
+
# Given a category file that's an array, this method finds
|
67
|
+
# the parent of an item
|
68
|
+
def find_array_parents(toc, title)
|
69
|
+
parents = ''
|
70
|
+
toc.each do |item|
|
71
|
+
if item.is_a?(Hash)
|
72
|
+
parents = find_hash_parents(item, title)
|
73
|
+
break unless parents.empty?
|
74
|
+
end
|
75
|
+
end
|
76
|
+
parents
|
77
|
+
end
|
78
|
+
|
79
|
+
# Given a category file that's a hash, this method finds
|
80
|
+
# the parent of an item
|
81
|
+
def find_hash_parents(toc, title)
|
53
82
|
parents = ''
|
54
83
|
toc.keys.each do |key|
|
55
84
|
toc[key].each do |item|
|
@@ -73,6 +102,41 @@ class ConrefFS < Nanoc::DataSource
|
|
73
102
|
parents
|
74
103
|
end
|
75
104
|
|
105
|
+
|
106
|
+
# Given a category file that's an array, this method finds
|
107
|
+
# the children of an item, probably a map topic
|
108
|
+
def find_array_children(toc, title)
|
109
|
+
children = ''
|
110
|
+
toc.each do |item|
|
111
|
+
next unless item.is_a?(Hash)
|
112
|
+
item.each_pair do |key, values|
|
113
|
+
if key == title
|
114
|
+
children = values.flatten
|
115
|
+
break
|
116
|
+
end
|
117
|
+
end
|
118
|
+
break unless children.empty?
|
119
|
+
end
|
120
|
+
children
|
121
|
+
end
|
122
|
+
|
123
|
+
# Given a category file that's a hash, this method finds
|
124
|
+
# the children of an item, probably a map topic
|
125
|
+
def find_hash_children(toc, title)
|
126
|
+
children = ''
|
127
|
+
toc.keys.each do |key|
|
128
|
+
toc[key].each do |item|
|
129
|
+
next unless item.is_a?(Hash)
|
130
|
+
unless item[title].nil?
|
131
|
+
children = item.values.flatten
|
132
|
+
break
|
133
|
+
end
|
134
|
+
end
|
135
|
+
break unless children.empty?
|
136
|
+
end
|
137
|
+
children
|
138
|
+
end
|
139
|
+
|
76
140
|
# This file reads each piece of content as it comes in. It also applies the conref variables
|
77
141
|
# (demarcated by Liquid's {{ }} tags) using both the data/ folder and any variables defined
|
78
142
|
# within the nanoc.yaml config file
|
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.3.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.'
|
data/test/conref_fs_test.rb
CHANGED
@@ -86,7 +86,19 @@ class DatafilesTest < MiniTest::Test
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
-
def
|
89
|
+
def test_it_renders_array_parents
|
90
|
+
with_site(name: FIXTURES_DIR) do |site|
|
91
|
+
|
92
|
+
site = Nanoc::Int::SiteLoader.new.new_from_cwd
|
93
|
+
site.compile
|
94
|
+
|
95
|
+
output_file = read_output_file('parents', 'array_parents')
|
96
|
+
test_file = read_test_file('parents', 'array_parents')
|
97
|
+
assert_equal output_file, test_file
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_missing_category_title_does_not_blow_up_parents
|
90
102
|
with_site(name: FIXTURES_DIR) do |site|
|
91
103
|
|
92
104
|
site = Nanoc::Int::SiteLoader.new.new_from_cwd
|
@@ -98,6 +110,18 @@ class DatafilesTest < MiniTest::Test
|
|
98
110
|
end
|
99
111
|
end
|
100
112
|
|
113
|
+
def test_it_applies_any_attribute
|
114
|
+
with_site(name: FIXTURES_DIR) do |site|
|
115
|
+
|
116
|
+
site = Nanoc::Int::SiteLoader.new.new_from_cwd
|
117
|
+
site.compile
|
118
|
+
|
119
|
+
output_file = read_output_file('attributes', 'attribute')
|
120
|
+
test_file = read_test_file('attributes', 'attribute')
|
121
|
+
assert_equal output_file, test_file
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
101
125
|
def test_it_obfuscates_content
|
102
126
|
with_site(name: FIXTURES_DIR) do |site|
|
103
127
|
|
@@ -124,4 +148,32 @@ class DatafilesTest < MiniTest::Test
|
|
124
148
|
assert_equal output_file, test_file
|
125
149
|
end
|
126
150
|
end
|
151
|
+
|
152
|
+
def test_it_renders_hash_children
|
153
|
+
with_site(name: FIXTURES_DIR) do |site|
|
154
|
+
|
155
|
+
site = Nanoc::Int::SiteLoader.new.new_from_cwd
|
156
|
+
site.compile
|
157
|
+
|
158
|
+
output_file = read_output_file('children', 'hash_children')
|
159
|
+
test_file = read_test_file('children', 'hash_children')
|
160
|
+
assert_equal output_file, test_file
|
161
|
+
|
162
|
+
output_file = read_output_file('children', 'later_hash_children')
|
163
|
+
test_file = read_test_file('children', 'later_hash_children')
|
164
|
+
assert_equal output_file, test_file
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_it_renders_array_children
|
169
|
+
with_site(name: FIXTURES_DIR) do |site|
|
170
|
+
|
171
|
+
site = Nanoc::Int::SiteLoader.new.new_from_cwd
|
172
|
+
site.compile
|
173
|
+
|
174
|
+
output_file = read_output_file('children', 'array_children')
|
175
|
+
test_file = read_test_file('children', 'array_children')
|
176
|
+
assert_equal output_file, test_file
|
177
|
+
end
|
178
|
+
end
|
127
179
|
end
|
data/test/datafiles_test.rb
CHANGED
@@ -7,7 +7,7 @@ class DatafilesTest < MiniTest::Test
|
|
7
7
|
|
8
8
|
def test_it_collects_the_files
|
9
9
|
files = Datafiles.collect_data(File.join(FIXTURES_DIR, 'data'))
|
10
|
-
names = %w(categories/category reusables/intro reusables/names variables/empty variables/product)
|
10
|
+
names = %w(categories/category categories/simple reusables/intro reusables/names variables/empty variables/product)
|
11
11
|
names.map! { |name| File.join(FIXTURES_DIR, 'data', "#{name}.yml") }
|
12
12
|
assert_equal files, names
|
13
13
|
end
|
data/test/fixtures/Rules
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>
|
5
|
+
Managing branches in your repository
|
6
|
+
</title>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body>
|
10
|
+
|
11
|
+
|
12
|
+
Here they are!
|
13
|
+
|
14
|
+
|
15
|
+
["About branches", "Setting the default branch", "Viewing branches in your repository", "Creating and deleting branches within your repository"]
|
16
|
+
|
17
|
+
</body>
|
18
|
+
</html>
|
data/test/fixtures/nanoc.yaml
CHANGED
@@ -13,6 +13,19 @@ page_variables:
|
|
13
13
|
values:
|
14
14
|
version: "dotcom"
|
15
15
|
data_association: "categories.category"
|
16
|
+
just_a_key: wow!
|
17
|
+
-
|
18
|
+
scope:
|
19
|
+
path: "array_parents"
|
20
|
+
values:
|
21
|
+
version: "dotcom"
|
22
|
+
data_association: "categories.simple"
|
23
|
+
-
|
24
|
+
scope:
|
25
|
+
path: "array_children"
|
26
|
+
values:
|
27
|
+
version: "dotcom"
|
28
|
+
data_association: "categories.simple"
|
16
29
|
-
|
17
30
|
scope:
|
18
31
|
path: "different"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class VariableMixinTest < MiniTest::Test
|
4
|
+
|
5
|
+
def test_it_fetches_variables
|
6
|
+
with_site(name: FIXTURES_DIR) do |site|
|
7
|
+
|
8
|
+
site = Nanoc::Int::SiteLoader.new.new_from_cwd
|
9
|
+
site.compile
|
10
|
+
|
11
|
+
assert_equal VariableMixin.variables.keys, ['site']
|
12
|
+
assert_equal VariableMixin.variables['site']['data'].keys, %w(categories reusables variables)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_it_fetches_datafiles
|
17
|
+
file = VariableMixin.fetch_data_file('reusables.intro')
|
18
|
+
assert_equal file['frontmatter_intro'], 'Here I am, in the front.'
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.3.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: 2015-10-
|
11
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nanoc
|
@@ -102,6 +102,14 @@ files:
|
|
102
102
|
- test/conref_fs_test.rb
|
103
103
|
- test/datafiles_test.rb
|
104
104
|
- test/fixtures/Rules
|
105
|
+
- test/fixtures/content/attributes/attribute.html
|
106
|
+
- test/fixtures/content/attributes/attribute.md
|
107
|
+
- test/fixtures/content/children/array_children.html
|
108
|
+
- test/fixtures/content/children/array_children.md
|
109
|
+
- test/fixtures/content/children/hash_children.html
|
110
|
+
- test/fixtures/content/children/hash_children.md
|
111
|
+
- test/fixtures/content/children/later_hash_children.html
|
112
|
+
- test/fixtures/content/children/later_hash_children.md
|
105
113
|
- test/fixtures/content/datafiles/deep.html
|
106
114
|
- test/fixtures/content/datafiles/deep.md
|
107
115
|
- test/fixtures/content/datafiles/retrieve.html
|
@@ -116,6 +124,8 @@ files:
|
|
116
124
|
- test/fixtures/content/obfuscation/admonitions.md
|
117
125
|
- test/fixtures/content/obfuscation/octicon.html
|
118
126
|
- test/fixtures/content/obfuscation/octicon.md
|
127
|
+
- test/fixtures/content/parents/array_parents.html
|
128
|
+
- test/fixtures/content/parents/array_parents.md
|
119
129
|
- test/fixtures/content/parents/missing_title.html
|
120
130
|
- test/fixtures/content/parents/missing_title.md
|
121
131
|
- test/fixtures/content/parents/single_parent.html
|
@@ -123,14 +133,17 @@ files:
|
|
123
133
|
- test/fixtures/content/parents/two_parents.html
|
124
134
|
- test/fixtures/content/parents/two_parents.md
|
125
135
|
- test/fixtures/data/categories/category.yml
|
136
|
+
- test/fixtures/data/categories/simple.yml
|
126
137
|
- test/fixtures/data/reusables/intro.yml
|
127
138
|
- test/fixtures/data/reusables/names.yml
|
128
139
|
- test/fixtures/data/variables/empty.yml
|
129
140
|
- test/fixtures/data/variables/product.yml
|
141
|
+
- test/fixtures/layouts/children.html
|
130
142
|
- test/fixtures/layouts/default.html
|
131
143
|
- test/fixtures/layouts/retrieve.html
|
132
144
|
- test/fixtures/nanoc.yaml
|
133
145
|
- test/test_helper.rb
|
146
|
+
- test/variable_mixin_test.rb
|
134
147
|
homepage: https://github.com/gjtorikian/nanoc-conref-fs
|
135
148
|
licenses:
|
136
149
|
- MIT
|
@@ -159,6 +172,14 @@ test_files:
|
|
159
172
|
- test/conref_fs_test.rb
|
160
173
|
- test/datafiles_test.rb
|
161
174
|
- test/fixtures/Rules
|
175
|
+
- test/fixtures/content/attributes/attribute.html
|
176
|
+
- test/fixtures/content/attributes/attribute.md
|
177
|
+
- test/fixtures/content/children/array_children.html
|
178
|
+
- test/fixtures/content/children/array_children.md
|
179
|
+
- test/fixtures/content/children/hash_children.html
|
180
|
+
- test/fixtures/content/children/hash_children.md
|
181
|
+
- test/fixtures/content/children/later_hash_children.html
|
182
|
+
- test/fixtures/content/children/later_hash_children.md
|
162
183
|
- test/fixtures/content/datafiles/deep.html
|
163
184
|
- test/fixtures/content/datafiles/deep.md
|
164
185
|
- test/fixtures/content/datafiles/retrieve.html
|
@@ -173,6 +194,8 @@ test_files:
|
|
173
194
|
- test/fixtures/content/obfuscation/admonitions.md
|
174
195
|
- test/fixtures/content/obfuscation/octicon.html
|
175
196
|
- test/fixtures/content/obfuscation/octicon.md
|
197
|
+
- test/fixtures/content/parents/array_parents.html
|
198
|
+
- test/fixtures/content/parents/array_parents.md
|
176
199
|
- test/fixtures/content/parents/missing_title.html
|
177
200
|
- test/fixtures/content/parents/missing_title.md
|
178
201
|
- test/fixtures/content/parents/single_parent.html
|
@@ -180,11 +203,14 @@ test_files:
|
|
180
203
|
- test/fixtures/content/parents/two_parents.html
|
181
204
|
- test/fixtures/content/parents/two_parents.md
|
182
205
|
- test/fixtures/data/categories/category.yml
|
206
|
+
- test/fixtures/data/categories/simple.yml
|
183
207
|
- test/fixtures/data/reusables/intro.yml
|
184
208
|
- test/fixtures/data/reusables/names.yml
|
185
209
|
- test/fixtures/data/variables/empty.yml
|
186
210
|
- test/fixtures/data/variables/product.yml
|
211
|
+
- test/fixtures/layouts/children.html
|
187
212
|
- test/fixtures/layouts/default.html
|
188
213
|
- test/fixtures/layouts/retrieve.html
|
189
214
|
- test/fixtures/nanoc.yaml
|
190
215
|
- test/test_helper.rb
|
216
|
+
- test/variable_mixin_test.rb
|