Sha256: 53dfaedd112ed7f1f77a076b50c0ee419f73e07b2425ec66901aff77c0e9df4d

Contents?: true

Size: 945 Bytes

Versions: 6

Compression:

Stored size: 945 Bytes

Contents

class Code
  class Object
    class Dictionnary < ::Code::Object
      attr_reader :raw

      def initialize(raw = {})
        @raw = raw
      end

      def call(**args)
        operator = args.fetch(:operator, nil)
        arguments = args.fetch(:arguments, [])

        if operator == "values"
          values(arguments)
        elsif key?(operator)
          fetch(operator)
        else
          super
        end
      end

      def fetch(key)
        raw.fetch(key)
      end

      def [](key)
        raw[key]
      end

      def []=(key, value)
        raw[key] = value
      end

      def key?(key)
        raw.key?(key)
      end

      def to_s
        "{#{raw.map { |key, value| "#{key.inspect} => #{value.inspect}" }.join(", ")}}"
      end

      def inspect
        to_s
      end

      private

      def values(arguments)
        sig(arguments)
        ::Code::Object::List.new(raw.values)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
code-ruby-0.2.4 lib/code/object/dictionnary.rb
template-ruby-0.2.4 lib/code/object/dictionnary.rb
template-ruby-0.2.3 lib/code/object/dictionnary.rb
template-ruby-0.2.2 lib/code/object/dictionnary.rb
template-ruby-0.2.1 lib/code/object/dictionnary.rb
template-ruby-0.2.0 lib/code/object/dictionnary.rb