class VirtualModule::BaseSourceProvider

Constants

KwargsConverter

Attributes

pkgs[RW]
source[RW]

Public Class Methods

new(builder, pkgs, transpiler=nil) click to toggle source
# File lib/virtual_module.rb, line 186
def initialize(builder, pkgs, transpiler=nil)
  @builder = builder
  @pkgs = pkgs
  @transpiler = transpiler.nil? ? ->(s){s} : transpiler
  @source = []
  @compiled_lib = ""
end

Public Instance Methods

lang() click to toggle source
# File lib/virtual_module.rb, line 198
def lang
  self.class.name.match(/\:\:(.*)SourceProvider/)[1].downcase.to_sym
end
load_packages() click to toggle source
# File lib/virtual_module.rb, line 194
def load_packages
  [] #to be overrieded
end
to_a()
Alias for: vclass
to_s()
Alias for: vclass
vclass() click to toggle source
# File lib/virtual_module.rb, line 202
def vclass
  raise Exception.new("An equivalent method for #{__method__} seems not supported in #{lang}.")
end
Also aliased as: vmethods, to_s, to_a
vmethods()
Alias for: vclass

Private Instance Methods

prepare_params(input_queue_path, gen_driver, conv_kwargs, name, *args, **kwargs) click to toggle source
# File lib/virtual_module.rb, line 210
def prepare_params(input_queue_path, gen_driver, conv_kwargs, name, *args, **kwargs)
  script, params = ["", []]
  if args.count == 1 && args[0].class == Symbol
    # do nothing - this will be called as "#name()"
  else
    type = ->(arg){
      arg.class == Module ? "serialized" : "msgpack"
    }
    args.each_with_index do |arg, i|
      File.write(
        "#{input_queue_path}.#{i}.#{type.call(arg)}",
        arg.class == Module ?
          arg.___proxy_object_transmitter.convert_to(@builder.object_id):
          MessagePack.pack(arg)
        )
      params << "params_#{i}"
      script += gen_driver.call(arg, input_queue_path, i, type.call(arg), params.last)
    end
    if kwargs.count>0
      script += "kwargs=#{conv_kwargs.initializer};"
      kwargs.each_with_index do |(k,v), i|
        File.write(
          "#{input_queue_path}.#{params.count+i}.#{type.call(v)}",
          v.class == Module ?
            v.___proxy_object_transmitter.convert_to(@builder.object_id):
            MessagePack.pack(v)
          )
        script += gen_driver.call(v, input_queue_path, params.count+i, type.call(v), conv_kwargs.setter.call(k))
      end
      params << conv_kwargs.varargs
    end
  end
  [script, name==:[] ?  "[#{params.join(',')}]" : "(#{params.join(',')})"]
end