summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/sass-embedded-1.101.0-arm64-darwin/lib/sass/compiler/session/struct.rb
blob: a5d3e81959b3405e6809ba7e6dddac2ab03c1d45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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