Module: NanocConrefFS::Datafiles
- Defined in:
- lib/nanoc-conref-fs/datafiles.rb
Constant Summary collapse
- OBFUSCATION =
'~~#~~'
Class Method Summary collapse
- .apply_conditionals(config, path:, content:, rep:) ⇒ Object
- .collect_data(dir) ⇒ Object
- .create_nested_hash(keys, final) ⇒ Object
- .obfuscate_and_liquify(content, data_vars) ⇒ Object
- .process(data_files, config, rep) ⇒ Object
Class Method Details
.apply_conditionals(config, path:, content:, rep:) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/nanoc-conref-fs/datafiles.rb', line 10 def self.apply_conditionals(config, path:, content:, rep:) vars = Conrefifier.file_variables(config[:data_variables], path, rep) data_vars = { page: vars, site: { config: config } } content = obfuscate_and_liquify(content, data_vars) begin doc = YAML.load(content) rescue Psych::SyntaxError => e STDERR.puts "\nCould not convert following file:\n#{content}" raise "#{e.}: #{e.inspect}" end path = path.dup path.slice!("#{ConrefFS.data_dir_name(config)}/") # Beware the slashes, they are important for tokenization path.sub!(/\.[yaml]{3,4}\z/, '') data_keys = path.split('/') # we don't need to create a nested hash for root-level data files if data_keys.length == 1 { data_keys.first => doc } else create_nested_hash(data_keys, doc) end end |
.collect_data(dir) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/nanoc-conref-fs/datafiles.rb', line 45 def self.collect_data(dir) data_files = {} Dir["#{dir}/**/*.{yaml,yml}"].each do |filename| data_files[filename] = File.read(filename, encoding: 'UTF-8') end data_files end |
.create_nested_hash(keys, final) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/nanoc-conref-fs/datafiles.rb', line 35 def self.create_nested_hash(keys, final) keys.reverse.inject do |mem, var| if mem == keys.last { var => { mem => final } } else { var => mem } end end end |
.obfuscate_and_liquify(content, data_vars) ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/nanoc-conref-fs/datafiles.rb', line 62 def self.obfuscate_and_liquify(content, data_vars) # We must obfuscate Liquid variables while replacing conditionals, # else they get wiped out content.gsub!(/\{\{/, OBFUSCATION) content = Conrefifier.apply_liquid(content, data_vars) content.gsub(OBFUSCATION, '{{') end |
.process(data_files, config, rep) ⇒ Object
53 54 55 56 57 58 59 60 |
# File 'lib/nanoc-conref-fs/datafiles.rb', line 53 def self.process(data_files, config, rep) data = {} data_files.each_pair do |filename, content| conditionals = apply_conditionals(config, path: filename, content: content, rep: rep) data = data.deep_merge(conditionals) end data end |