Sha256: ac64bd3fe059689e8fdb96a279f95091e7a2de59308c28e526a6853a40056890

Contents?: true

Size: 1.15 KB

Versions: 9

Compression:

Stored size: 1.15 KB

Contents

module Zapata
  module Predictor
    class Args
      class << self
        def literal(args_node)
          return unless args_node

          raw_args = Diver.dive(args_node).to_raw
          chosen_args = choose_values(raw_args)
          Printer.print(chosen_args, args: true)
        end

        def choose_values(raw_args)
          case raw_args.type
          when :array
            array = raw_args.value.map do |arg|
              Value.new(arg.value, arg).choose.to_raw
            end

            Primitive::Raw.new(:array, array)
          when :hash
            hash = raw_args.value.each_with_object({}) do |(rkey, rval), obj|
              key = Value.new(rkey.value, rkey).choose.to_raw
              val = Value.new(rval.value, rval).choose.to_raw
              obj[key] = val
            end

            Primitive::Raw.new(:hash, hash)
          when :int
            Primitive::Raw.new(:int, raw_args.value)
          when :missing
            Primitive::Raw.new(:missing, raw_args.value)
          when :nil
            Primitive::Nil.new.to_raw
          else
            raise 'Not yet implemented'
          end
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
zapata-0.1.6 lib/zapata/predictor/args.rb
zapata-0.1.5 lib/zapata/predictor/args.rb
zapata-0.1.4 lib/zapata/predictor/args.rb
zapata-0.1.3 lib/zapata/predictor/args.rb
zapata-0.1.2 lib/zapata/predictor/args.rb
zapata-0.1.1 lib/zapata/predictor/args.rb
zapata-0.1.0 lib/zapata/predictor/args.rb
zapata-0.0.3 lib/zapata/predictor/args.rb
zapata-0.0.2 lib/zapata/predictor/args.rb