Sha256: e45c47ef07e81958cc28f1a34c6fe97f3d7b740d9c6bf010eb8f2bd3c8ac95a1

Contents?: true

Size: 1.21 KB

Versions: 26

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

class Code
  class Node
    class Dictionary < Node
      class KeyValue < Node
        def initialize(parsed)
          return if parsed.blank?

          if parsed.key?(:statement)
            @key = Node::Statement.new(parsed.delete(:statement).presence)
          elsif parsed.key?(:name)
            @key = Node::String.new([{ text: parsed.delete(:name).presence }])
          end

          return unless parsed[:value].presence

          @value = Node::Code.new(parsed.delete(:value).presence)
        end

        def evaluate(**args)
          key = @key&.evaluate(**args) || Object::Nothing.new

          if @value
            value = @value.evaluate(**args)
            [key, value]
          else
            [key, key]
          end
        end
      end

      def initialize(parsed)
        return if parsed.blank?

        @key_values = parsed.presence || []
        @key_values.map! do |key_value|
          Node::Dictionary::KeyValue.new(key_value)
        end
      end

      def evaluate(**args)
        ::Code::Object::Dictionary.new(
          (@key_values || [])
            .map { |key_value| key_value.evaluate(**args) }
            .to_h
        )
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
code-ruby-1.0.0 lib/code/node/dictionary.rb
code-ruby-0.15.16 lib/code/node/dictionary.rb
code-ruby-0.15.15 lib/code/node/dictionary.rb
code-ruby-0.15.14 lib/code/node/dictionary.rb
code-ruby-0.15.13 lib/code/node/dictionary.rb
code-ruby-0.15.12 lib/code/node/dictionary.rb
code-ruby-0.15.11 lib/code/node/dictionary.rb
code-ruby-0.15.10 lib/code/node/dictionary.rb
code-ruby-0.15.9 lib/code/node/dictionary.rb
code-ruby-0.15.8 lib/code/node/dictionary.rb
code-ruby-0.15.7 lib/code/node/dictionary.rb
code-ruby-0.15.6 lib/code/node/dictionary.rb
code-ruby-0.15.5 lib/code/node/dictionary.rb
code-ruby-0.15.4 lib/code/node/dictionary.rb
code-ruby-0.15.3 lib/code/node/dictionary.rb
code-ruby-0.15.2 lib/code/node/dictionary.rb
code-ruby-0.15.0 lib/code/node/dictionary.rb
code-ruby-0.14.9 lib/code/node/dictionary.rb
code-ruby-0.14.8 lib/code/node/dictionary.rb
code-ruby-0.14.6 lib/code/node/dictionary.rb