module Locomotive::Steam::Liquid::Filters::Json

Public Instance Methods

json(input, fields = []) click to toggle source
# File lib/locomotive/steam/liquid/filters/json.rb, line 7
def json(input, fields = [])
  if fields && fields.is_a?(String)
    fields = fields.split(',').map(&:strip)
  end

  if input.is_a?(Hash)
    object_to_json(input, fields)
  elsif input.respond_to?(:each)
    '[' + input.map do |object|
      fields.size == 1 ? object[fields.first].to_json : object_to_json(object, fields)
    end.join(',') + ']'
  else
    object_to_json(input, fields)
  end
end
open_json(input) click to toggle source

without the leading and trailing braces/brackets useful to add a prperty to an object or an element to an array

# File lib/locomotive/steam/liquid/filters/json.rb, line 25
def open_json(input)
  if input =~ /\A[\{\[](.*)[\}\]]\Z/m
    $1
  else
    input
  end
end

Protected Instance Methods

object_to_json(input, fields) click to toggle source
# File lib/locomotive/steam/liquid/filters/json.rb, line 35
def object_to_json(input, fields)
  if input.respond_to?(:as_json)
    options = fields.blank? ? {} : { only: fields }
    input.as_json(options).to_json
  else
    input.to_json
  end
end