This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user