Sha256: d6cc330f8e4403834041105227983ae4a33ae3c4b83ba9c7d9c2dbadaad8f16c
Contents?: true
Size: 1.71 KB
Versions: 1
Compression:
Stored size: 1.71 KB
Contents
module Polygon class ContentLoader def register(*extensions, &loader) raise ArgumentError, "Extensions expected" if extensions.empty? loaders << [extensions, loader] self end def extensions loaders.map(&:first).flatten end def load(file) file = Path(file) unless l = loader(file) raise "Unable to load #{file.basename} (unrecognized extension)" end l.call(file) end ################################################################### Loaders def enable_yaml!(*ext) require 'yaml' ext = [".yml", ".yaml"] if ext.empty? register(*ext) do |f| YAML.load(f.read) end end def enable_json!(*ext) require 'json' ext = [".json"] if ext.empty? register(*ext) do |f| JSON.load(f.read) end end def enable_ruby!(*ext) ext = [".rb", ".ruby"] if ext.empty? register(*ext) do |f| ::Kernel.eval(f.read, TOPLEVEL_BINDING, f.to_s) end end def enable_yaml_front_matter!(*ext) ext = [".md"] if ext.empty? register(*ext) do |f| content = f.read.force_encoding(Encoding::UTF_8) if content =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)/m YAML::load($1).merge("content" => $') else {"content" => content} end end end def enable_all! enable_yaml! enable_json! enable_ruby! enable_yaml_front_matter! end private def loaders @loaders ||= [] end def loader(file, extname = Path(file).extname) loader = loaders.find{|ext,_| ext.include?(extname)} loader && loader.last end end # class ContentLoader end # module Polygon
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
polygon-0.0.3 | lib/polygon/content_loader.rb |