Class: Object

Inherits:
BasicObject
Defined in:
lib/jruby/scala_support.rb

Overview

Scala <-> Ruby interoperability.

Instance Method Summary collapse

Instance Method Details

#from_scalaObject



433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
# File 'lib/jruby/scala_support.rb', line 433

def from_scala
  case self
  when Java::jruby.collection.MapWrapper
    self.rubyHash
  when Java::scala.collection.mutable.Map
    JRuby::ScalaSupport::Map::Mutable.new(self)
  when Java::scala.collection.Map, Java::scala.collection.immutable.Map
    JRuby::ScalaSupport::Map::Immutable.new(self)
  when Java::jruby.collection.ListWrapper
    self.rubyArray
  when Java::scala.collection.mutable.Seq
    JRuby::ScalaSupport::Seq::Mutable.new(self)
  when Java::scala.collection.Seq, Java::scala.collection.immutable.Seq
    JRuby::ScalaSupport::Seq::Immutable.new(self)
  when Java::scala.Product
    # Sometimes tuples have some wraping classes, like "#<Class:...>" on top
    # of them. Some magic is needed to find actual tuple name.
    match = nil
    self.class.ancestors.find do |klass|
      match = klass.to_s.match(/^Java::Scala::Tuple(\d+)$/)
      ! match.nil?
    end

    if match
      size = match[1].to_i
      JRuby::ScalaSupport::Tuple.new(self, size)
    else
      self
    end
  when Java::jruby.collection.SetWrapper
    self.rubySet
  when Java::scala.collection.mutable.Set
    JRuby::ScalaSupport::Set::Mutable.new(self)
  when Java::scala.collection.Set, Java::scala.collection.immutable.Set,
    JRuby::ScalaSupport::Set::Immutable.new(self)
  when Java::scala.Symbol
    self.name.to_sym
  else
    self
  end
end

#to_scalaObject



416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
# File 'lib/jruby/scala_support.rb', line 416

def to_scala
  case self
  when JRuby::ScalaSupport::Common
    self.scala_collection
  when Hash
    Java::jruby.collection.MapWrapper.new(self)
  when Set
    Java::jruby.collection.SetWrapper.new(self)
  when Array
    Java::jruby.collection.ListWrapper.new(self)
  when Symbol
    Java::scala.Symbol.apply(to_s)
  else
    self.to_java
  end
end