Sha256: c852e778ae312bd538cf38e8cc45d4cc755d56a799257523f11374b2dac231f8

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

module Zapata
  module Primitive
    class Send < Base
      def initialize(code)
        super

        if node.name == :private
          Diver.access_level = :private
        elsif node.name == :protected
          Diver.access_level = :protected
        elsif node.name == :public
          Diver.access_level = :public
        end
      end

      def to_a
        [value]
      end

      def node
        receiver, name, args = @code.to_a
        type = @code.type
        OpenStruct.new(type: type, name: name, args: args, receiver: receiver)
      end

      def raw_receiver
        return unless node.receiver
        Diver.dive(node.receiver).to_raw
      end

      def to_raw
        if raw_receiver and raw_receiver.type == :const
          Raw.new(:const_send, "#{Printer.print(raw_receiver)}.#{node.name}#{Predictor::Args.literal(node.args)}")
        elsif %i(+ - * /).include?(node.name)
          Raw.new(:super, node.name)
        else
          predicted = Predictor::Args.choose_value(node.name, self).to_raw

          if predicted.type == :missing
            Raw.new(:super, node.name)
          else
            predicted
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
zapata-0.0.1 lib/zapata/primitive/send.rb