38 lines
839 B
Ruby
38 lines
839 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Sass
|
|
class Compiler
|
|
class Host
|
|
# The {Structifier} module.
|
|
#
|
|
# It converts {::Hash} to {Struct}-like objects.
|
|
module Structifier
|
|
module_function
|
|
|
|
def to_struct(obj, *symbols)
|
|
return obj unless obj.is_a?(Hash)
|
|
|
|
struct = Object.new
|
|
symbols.each do |key|
|
|
next unless obj.key?(key)
|
|
|
|
value = obj[key]
|
|
if value.respond_to?(:call)
|
|
struct.define_singleton_method key do |*args, **kwargs|
|
|
value.call(*args, **kwargs)
|
|
end
|
|
else
|
|
struct.define_singleton_method key do
|
|
value
|
|
end
|
|
end
|
|
end
|
|
struct
|
|
end
|
|
end
|
|
|
|
private_constant :Structifier
|
|
end
|
|
end
|
|
end
|