37 lines
859 B
Ruby
37 lines
859 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Sass
|
|
class Compiler
|
|
class Session
|
|
# The {Struct} class.
|
|
#
|
|
# It creates {::Struct}-like objects from {::Hash}.
|
|
class Struct
|
|
def initialize(hash, attrs: nil, methods: nil)
|
|
@hash = hash
|
|
@attrs = attrs
|
|
@methods = methods
|
|
end
|
|
|
|
def method_missing(symbol, ...)
|
|
return super unless @hash.key?(symbol)
|
|
|
|
if @attrs&.include?(symbol)
|
|
@hash.send(:[], symbol, ...)
|
|
elsif @methods&.include?(symbol)
|
|
@hash[symbol].call(...)
|
|
else
|
|
super
|
|
end
|
|
end
|
|
|
|
def respond_to_missing?(symbol, _include_all)
|
|
@hash.key?(symbol) && (@attrs&.include?(symbol) || @methods&.include?(symbol))
|
|
end
|
|
end
|
|
|
|
private_constant :Struct
|
|
end
|
|
end
|
|
end
|