nanoc-conref-fs 0.6.9 → 0.6.10

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: 58f928b401b32dbe172ff593c8d10d6931978e66
4
- data.tar.gz: b9972a4724904bb445cd596e99f2ba4c454565bf
3
+ metadata.gz: af97546774d5b23e33b691e8d3aab9e115061fcd
4
+ data.tar.gz: 97ce0cf24a1b572201b2f2322d216774ae2039ca
5
5
  SHA512:
6
- metadata.gz: a3872c011533ec5d6b10a3d5eea7c2370d357ad064c7edb7c80d78e1d015ed59e8329c8eef2e89292991c85b30d994fba0b9f10585d3aea5450efdd87f701cbd
7
- data.tar.gz: f4759a8fc5b0f0e36e9a2089c1f834d92ae1c28cd6e664e26ce0aee3c37fe3d0fecbfa3b4d660be95bedb6c0bdeb0019027aea3317bf5501f282fd40f34921d2
6
+ metadata.gz: 8fa4d77ccfaf3cbdfdc68e930c98f860b30288b24519e1cfc1f11b8546843572ec71831104058759c0fe598c5b64d3bec919f1ae889da533ed795f5e3a65a065
7
+ data.tar.gz: b67e5b5ff20ea6754c65a81421d21f02608397c664bc953a061ede33de5eedb9a4c4ae145de0d8983094b9bbb800f38a68164b688e475859b1a12e5007174887
@@ -1,7 +1,10 @@
1
1
  require_relative 'conrefifier'
2
+ require 'active_support/core_ext/hash'
2
3
  require 'active_support/core_ext/string'
3
4
 
4
5
  class ConrefFS < Nanoc::DataSources::Filesystem
6
+ DEFAULT_DATA_DIR = "data".freeze
7
+
5
8
  include NanocConrefFS::Variables
6
9
  include NanocConrefFS::Ancestry
7
10
 
@@ -10,22 +13,18 @@ class ConrefFS < Nanoc::DataSources::Filesystem
10
13
  # Before iterating over the file objects, this method loads the data folder
11
14
  # and applies it to an ivar for later usage.
12
15
  def up
13
- data_files = NanocConrefFS::Datafiles.collect_data(data_dir_name)
16
+ data_files = NanocConrefFS::Datafiles.collect_data(ConrefFS.data_dir_name(config))
14
17
  NanocConrefFS::Variables.data_files = data_files
15
18
  NanocConrefFS::Variables.variables = {}
16
19
  reps = @config[:reps] || [:default]
17
20
  reps.each { |rep| ConrefFS.load_data_folder(@site_config, rep) }
18
21
  end
19
22
 
20
- def data_dir_name
21
- config.fetch(:data_dir) { |_| 'data' }
22
- end
23
-
24
23
  def self.load_data_folder(config, rep)
25
24
  return unless NanocConrefFS::Variables.variables[rep].nil?
26
25
  data_files = NanocConrefFS::Variables.data_files
27
26
  data = NanocConrefFS::Datafiles.process(data_files, config, rep)
28
- NanocConrefFS::Variables.variables[rep] = { 'site' => { 'config' => config, 'data' => data } }
27
+ NanocConrefFS::Variables.variables[rep] = { 'site' => { 'config' => config, data_dir_name => data } }
29
28
  end
30
29
 
31
30
  def self.apply_attributes(config, item, rep)
@@ -102,12 +101,46 @@ class ConrefFS < Nanoc::DataSources::Filesystem
102
101
  ParseResult.new(content: content, attributes: meta, attributes_data: pieces[2])
103
102
  end
104
103
 
104
+ # Some of the static class methods below (and elsewhere in the Gem) require
105
+ # access to the `data_dir` value from the config. This need comes about
106
+ # *before* Nanoc has a chance to properly load up the configuration file,
107
+ # so we're doing a bare-bones load here to gain access to that configuration
108
+ # item.
109
+ #
110
+ # Parameters:
111
+ # - An optional already-loaded config, so that this can be used later in the
112
+ # Nanoc pipeline.
113
+ #
114
+ # Returns:
115
+ # - Custom `data_dir` attribute from the 'conref-fs' data_source
116
+ # - Default `data_dir` of 'data' if none is configured in `nanoc.yaml`
117
+ def self.data_dir_name(config=nil)
118
+ config ||= YAML.load_file('nanoc.yaml')
119
+ config = config.to_h.with_indifferent_access()
120
+
121
+ # In certain parts of the nanoc pipeline the config is rooted at the
122
+ # data-source already.
123
+ data_dir = config.fetch("data_dir") { nil }
124
+ return data_dir if data_dir
125
+
126
+ data_sources = config.fetch("data_sources") { nil }
127
+ return DEFAULT_DATA_DIR unless data_sources
128
+
129
+ data_source = data_sources.find { |ds| ds["type"] == "conref-fs" }
130
+
131
+ data_dir = data_source.fetch("data_dir") { nil }
132
+ return DEFAULT_DATA_DIR unless data_dir
133
+ return data_dir
134
+ end
135
+
105
136
  def self.create_ignore_rules(rep, file)
106
137
  current_articles = NanocConrefFS::Variables.fetch_data_file(file, rep)
107
138
  current_articles = flatten_list(current_articles).flatten
108
139
  current_articles = fix_nested_content(current_articles)
109
140
 
110
- basic_yaml = NanocConrefFS::Variables.data_files["data/#{file.tr!('.', '/')}.yml"]
141
+ basic_yaml_path = "#{data_dir_name}/#{file.tr!('.', '/')}.yml"
142
+ basic_yaml = NanocConrefFS::Variables.data_files[basic_yaml_path]
143
+ raise "Could not locate #{basic_yaml_path} in the data files." unless basic_yaml
111
144
  basic_yaml.gsub!(/\{%.+/, '')
112
145
  full_file = YAML.load(basic_yaml)
113
146
 
@@ -20,7 +20,7 @@ module NanocConrefFS
20
20
  end
21
21
 
22
22
  path = path.dup
23
- path.slice!('data/')
23
+ path.slice!("#{ConrefFS.data_dir_name(config)}/") # Beware the slashes, they are important for tokenization
24
24
  path.sub!(/\.[yaml]{3,4}\z/, '')
25
25
  data_keys = path.split('/')
26
26
 
@@ -20,9 +20,13 @@ module NanocConrefFS
20
20
  def self.fetch_data_file(association, rep)
21
21
  return nil unless association
22
22
  reference = association.split('.')
23
- data = @variables[rep]['site']['data']
23
+ data = @variables[rep]['site'][ConrefFS.data_dir_name]
24
24
  while key = reference.shift
25
- data = data[key]
25
+ begin
26
+ data = data[key]
27
+ rescue Exception => ex
28
+ raise "Unable to locate #{key} in #{@variables[rep]['site'].inspect}"
29
+ end
26
30
  end
27
31
  data
28
32
  end
@@ -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.9'
6
+ spec.version = '0.6.10'
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.'
@@ -22,8 +22,11 @@ class DatafilesTest < MiniTest::Test
22
22
  result = NanocConrefFS::Datafiles.apply_conditionals(CONFIG, path: file, content: content, rep: :default)
23
23
  assert_includes result.to_s, 'No caveats!'
24
24
 
25
- CONFIG[:data_variables][0][:values][:version] = 'foof'
26
- result = NanocConrefFS::Datafiles.apply_conditionals(CONFIG, path: file, content: content, rep: :default)
25
+ # Don't modify the global constant, you break other tests.
26
+ config = YAML.load_file(File.join(FIXTURES_DIR, 'nanoc.yaml')).deep_symbolize_keys
27
+ config[:data_variables][0][:values][:version] = 'foof'
28
+
29
+ result = NanocConrefFS::Datafiles.apply_conditionals(config, path: file, content: content, rep: :default)
27
30
  assert_includes result.to_s, 'Well.....there is one.'
28
31
  end
29
32
 
@@ -42,4 +45,12 @@ class DatafilesTest < MiniTest::Test
42
45
  assert_includes result.to_s, 'About gists'
43
46
  refute_includes result.to_s, 'Deleting an anonymous gist'
44
47
  end
48
+
49
+ def test_it_can_use_a_custom_datafile
50
+ file = File.join(FIXTURES_DIR, 'data_custom', 'categories', 'custom.yml')
51
+ content = File.read(file)
52
+ config = YAML.load_file(File.join(FIXTURES_DIR, 'nanoc.custom_data_dir.yaml')).deep_symbolize_keys
53
+ result = NanocConrefFS::Datafiles.apply_conditionals(config, path: file, content: content, rep: :default)
54
+ assert_includes result.to_s, 'How to Use a Custom Data Directory'
55
+ end
45
56
  end
@@ -0,0 +1,4 @@
1
+ {% if page.version != 'cloud' %}
2
+ Custom Files:
3
+ - How to Use a Custom Data Directory
4
+ {% endif %}
@@ -0,0 +1,87 @@
1
+ data_variables:
2
+ -
3
+ scope:
4
+ path: ""
5
+ values:
6
+ version: "dotcom"
7
+ -
8
+ scope:
9
+ path: ""
10
+ reps:
11
+ - :X
12
+ values:
13
+ version: "X"
14
+
15
+ page_variables:
16
+ -
17
+ scope:
18
+ path: ""
19
+ values:
20
+ version: "dotcom"
21
+ data_association: "categories.category"
22
+ just_a_key: wow!
23
+ -
24
+ scope:
25
+ path: "array_parents"
26
+ values:
27
+ version: "dotcom"
28
+ data_association: "categories.simple"
29
+ -
30
+ scope:
31
+ path: "array_children"
32
+ values:
33
+ version: "dotcom"
34
+ data_association: "categories.simple"
35
+ -
36
+ scope:
37
+ path: "different"
38
+ values:
39
+ version: "2.0"
40
+ -
41
+ scope:
42
+ path: "empty-categories"
43
+ values:
44
+ version: "dotcom"
45
+ data_association: "categories.empty_category"
46
+ just_a_key: wow!
47
+ -
48
+ scope:
49
+ path: "multiple_versions"
50
+ values:
51
+ version: 2.2
52
+
53
+ string_pattern_type: glob
54
+
55
+ text_extensions: [ 'coffee', 'css', 'erb', 'haml', 'handlebars', 'hb', 'htm', 'html', 'js', 'less', 'markdown', 'md', 'ms', 'mustache', 'php', 'rb', 'rdoc', 'sass', 'scss', 'slim', 'txt', 'xhtml', 'xml' ]
56
+
57
+ output_dir: output
58
+
59
+ index_filenames: [ 'index.html' ]
60
+
61
+ enable_output_diff: false
62
+
63
+ prune:
64
+ auto_prune: true
65
+
66
+ exclude: [ '.git', '.hg', '.svn', 'CVS' ]
67
+
68
+ data_sources:
69
+ -
70
+ # The type is the identifier of the data source.
71
+ type: conref-fs
72
+
73
+ data_dir: 'data_custom/'
74
+
75
+ items_root: /
76
+ layouts_root: /
77
+
78
+ encoding: utf-8
79
+
80
+ identifier_type: full
81
+ reps:
82
+ - :default
83
+ - :X
84
+
85
+ checks:
86
+ internal_links:
87
+ exclude: []
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.6.9
4
+ version: 0.6.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-17 00:00:00.000000000 Z
11
+ date: 2017-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nanoc
@@ -175,10 +175,12 @@ files:
175
175
  - test/fixtures/data/variables/asterisks.yml
176
176
  - test/fixtures/data/variables/empty.yml
177
177
  - test/fixtures/data/variables/product.yml
178
+ - test/fixtures/data_custom/categories/custom.yml
178
179
  - test/fixtures/layouts/asterisk.html
179
180
  - test/fixtures/layouts/children.html
180
181
  - test/fixtures/layouts/default.html
181
182
  - test/fixtures/layouts/retrieve.html
183
+ - test/fixtures/nanoc.custom_data_dir.yaml
182
184
  - test/fixtures/nanoc.yaml
183
185
  - test/test_helper.rb
184
186
  - test/variable_mixin_test.rb
@@ -266,10 +268,12 @@ test_files:
266
268
  - test/fixtures/data/variables/asterisks.yml
267
269
  - test/fixtures/data/variables/empty.yml
268
270
  - test/fixtures/data/variables/product.yml
271
+ - test/fixtures/data_custom/categories/custom.yml
269
272
  - test/fixtures/layouts/asterisk.html
270
273
  - test/fixtures/layouts/children.html
271
274
  - test/fixtures/layouts/default.html
272
275
  - test/fixtures/layouts/retrieve.html
276
+ - test/fixtures/nanoc.custom_data_dir.yaml
273
277
  - test/fixtures/nanoc.yaml
274
278
  - test/test_helper.rb
275
279
  - test/variable_mixin_test.rb