Repository URL to install this package:
|
Version:
0.2.0 ▾
|
# frozen_string_literal: true
module MovingDay
class FrontMatter
def self.to_toml(**attributes)
new(attributes).to_toml
end
def self.to_yaml(**attributes)
new(attributes).to_yaml
end
def initialize(**attributes)
@attributes = attributes
end
def to_toml
@attributes.map do |key, value|
toml_attribute_line(key, value)
end.prepend('+++').append('+++').join("\n")
end
def to_yaml
@attributes.map do |key, value|
yaml_attribute_line(key, value)
end.prepend('---').append('---').join("\n")
end
private
def toml_attribute_line(key, value)
if front_matter_raw_datatypes.include?(value.class)
%(#{key} = #{value})
else
%(#{key} = "#{value}")
end
end
def yaml_attribute_line(key, value)
if value.is_a?(Array)
"#{key}:\n" + value.map { |val| %(\t- #{val}) }.join("\n")
elsif front_matter_raw_datatypes.include?(value.class)
%(#{key}: #{value})
else
%(#{key}: "#{value}")
end
end
def front_matter_raw_datatypes
[Date, Time, ActiveSupport::TimeWithZone, TrueClass, FalseClass, Array]
end
end
end