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