Sha256: 82670fa2913217c871e20db8cb27fe603d7c1c5304ab5a52704f5f37a335dc02
Contents?: true
Size: 1.75 KB
Versions: 3
Compression:
Stored size: 1.75 KB
Contents
# frozen_string_literal: true module Jekyll module Filters # YAML to SCSS module YamlToScss # Converts a YAML object into SCSS. Only supports one level # values. # # Optionally give it an schema to filter out keys. # # @param :yaml [Hash,Jekyll::Drops::DocumentDrop] # @param :schema [Hash] # @return [String] def yaml_to_scss(yaml, schema = yaml) yaml = yaml.to_h if yaml.is_a? Jekyll::Drops::DocumentDrop unless yaml.is_a? Hash raise Liquid::ArgumentError, "#{yaml.inspect} needs to be a Hash" if @context.strict_filters return yaml end yaml.slice(*schema.keys).map do |key, value| next if value.nil? escape = schema[key].is_a?(Hash) && %w[image file].include?(schema.dig(key, 'type')) key = key_to_scss key case value when Array values = value.compact.map(&:to_s).reject(&:empty?).map do |v| escape ? v.dump : v end "$#{key}: (#{values.join(',')},);" when Hash values = value.map do |k, v| next if v.nil? next if v.to_s.empty? v = v.dump if escape "\"#{key_to_scss k}\": #{v}" end "$#{key}: (#{values.join(',')},);" else next if value.to_s.empty? value = value.dump if escape "$#{key}: #{value};" end end.join("\n") end private # Dasherize key # # @param :key [String] # @return [String] def key_to_scss(key) key.to_s.tr '_', '-' end end end end Liquid::Template.register_filter(Jekyll::Filters::YamlToScss)
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
sutty-liquid-0.11.8 | lib/jekyll/filters/yaml_to_scss.rb |
sutty-liquid-0.11.7 | lib/jekyll/filters/yaml_to_scss.rb |
sutty-liquid-0.11.6 | lib/jekyll/filters/yaml_to_scss.rb |