Class: JFuture

Inherits:
BasicObject
Defined in:
lib/j_future.rb,
lib/j_future/version.rb,
lib/j_future/callable.rb,
lib/j_future/executor_factory.rb,
lib/j_future/daemon_thread_factory.rb

Defined Under Namespace

Classes: Callable, DaemonThreadFactory, ExecutorFactory

Constant Summary collapse

MILLIS =
::Java::JavaUtilConcurrent::TimeUnit::MILLISECONDS
METHODS =
[:is_done?, :on_complete]
VERSION =
"0.0.1"

Instance Method Summary collapse

Constructor Details

#initialize(executor: :default, access_timeout_millis: nil, &block) ⇒ JFuture

Returns a new instance of JFuture.



10
11
12
13
14
15
16
17
18
19
# File 'lib/j_future.rb', line 10

def initialize(executor: :default, access_timeout_millis: nil, &block)
  @access_timeout_millis = access_timeout_millis
  callable = Callable.new(&block)
  if (executor.is_a? ::Java::JavaUtilConcurrent::AbstractExecutorService)
    @executor = executor
  else
    @executor = ExecutorFactory.get_executor(executor)
  end
  @future = @executor.submit callable
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/j_future.rb', line 39

def method_missing(name, *args, &block)
  if @access_timeout_millis.nil?
    @future.get.send(name, *args, &block)
  else
    @future.get(@access_timeout_millis.to_i, MILLIS).send(name, *args, &block)
  end
end

Instance Method Details

#is_done?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/j_future.rb', line 30

def is_done?
  @future.isDone
end

#on_complete(&block) ⇒ Object



34
35
36
37
# File 'lib/j_future.rb', line 34

def on_complete(&block)
  callback = Callable.new(self, &block)
  @executor.submit callback
end

#respond_to?(id, *args) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
24
25
26
27
28
# File 'lib/j_future.rb', line 21

def respond_to?(id, *args)
  return true if METHODS.include?(id)
  if @access_timeout_millis.nil?
    @future.get.respond_to?(id, *args)
  else
    @future.get(@access_timeout_millis.to_i, MILLIS).respond_to?(id, *args)
  end
end