This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Jekyll
|
||||
module GitHubMetadata
|
||||
module Sanitizer
|
||||
extend self
|
||||
# Sanitize an object.
|
||||
# When the resource is either `false`, `true`, `nil` or a number,
|
||||
# it returns the resource as-is. When the resource is an array,
|
||||
# it maps over the entire array, sanitizing each of its values.
|
||||
# When the resource responds to the #to_hash method, it returns
|
||||
# the value of #sanitize_resource (see below). If none of the
|
||||
# aforementioned conditions are met, the return value of #to_s
|
||||
# is used.
|
||||
#
|
||||
# resource - an Object
|
||||
#
|
||||
# Returns the sanitized resource.
|
||||
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength
|
||||
def sanitize(resource)
|
||||
case resource
|
||||
when Array
|
||||
resource.map { |item| sanitize(item) }
|
||||
when Numeric, Time
|
||||
resource
|
||||
when FalseClass
|
||||
false
|
||||
when TrueClass
|
||||
true
|
||||
when NilClass
|
||||
nil
|
||||
when String
|
||||
resource
|
||||
when Value
|
||||
resource.render
|
||||
else
|
||||
if resource.respond_to?(:to_hash)
|
||||
sanitize_resource(resource)
|
||||
else
|
||||
resource.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/MethodLength
|
||||
|
||||
# Sanitize the Sawyer Resource or Hash
|
||||
# Note: the object must respond to :to_hash for this to work.
|
||||
# Consider using #sanitize instead of this method directly.
|
||||
#
|
||||
# resource - an Object which responds to :to_hash
|
||||
#
|
||||
# Returns the sanitized sawyer resource or hash as a hash.
|
||||
def sanitize_resource(resource)
|
||||
resource.to_hash.each_with_object({}) do |(k, v), result|
|
||||
result[k.to_s] = sanitize(v)
|
||||
result
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user