class Rpromise
Constants
- Handler
- VERSION
Attributes
state[R]
thread[R]
Public Class Methods
from_method(obj, method_name, *args, &block)
click to toggle source
# File lib/rpromise.rb, line 73 def self.from_method(obj, method_name, *args, &block) Rpromise.new do |resolve, reject| resolve.call(obj.method(method_name).call(*args,&block)) end end
new() { |method(:resolve!), method(:reject!)| ... }
click to toggle source
# File lib/rpromise.rb, line 15 def initialize() @state = State::PENDING @defered = nil @thread = Thread.new do begin yield(method(:resolve!), method(:reject!)) rescue => e reject!(e) end end @thread.abort_on_exception = true end
Public Instance Methods
pending?()
click to toggle source
# File lib/rpromise.rb, line 38 def pending? return @state == State::PENDING end
reject!(value = nil)
click to toggle source
# File lib/rpromise.rb, line 64 def reject!(value = nil) @state = State::REJECTED @value = value unless @defered.nil? handle(@defered) end end
rejected?()
click to toggle source
# File lib/rpromise.rb, line 46 def rejected? return @state == State::REJECTED end
resolve!(value = nil)
click to toggle source
# File lib/rpromise.rb, line 50 def resolve!(value = nil) if value.is_a?(::Rpromise) value.then(method(:resolve!), method(:reject!)) return end @state = State::RESOLVED @value = value unless @defered.nil? handle(@defered) end end
resolved?()
click to toggle source
# File lib/rpromise.rb, line 42 def resolved? return @state == State::RESOLVED end
then(on_resolved = nil, on_rejected = nil)
click to toggle source
# File lib/rpromise.rb, line 28 def then(on_resolved = nil, on_rejected = nil) raise ArgumentError unless is_valid_block?(on_resolved) raise ArgumentError unless is_valid_block?(on_rejected) return self if on_resolved.nil? && on_rejected.nil? return ::Rpromise.new do |resolve, reject| handler = Handler.new(on_resolved, on_rejected, resolve, reject) handle(handler) end end
Protected Instance Methods
handle(handler)
click to toggle source
# File lib/rpromise.rb, line 85 def handle(handler) if pending? @defered = handler return nil end callback = nil if resolved? callback = handler.on_resolved else callback = handler.on_rejected end unless callback.nil? output = nil output = callback.call(@value) handler.resolve.call(output) unless handler.resolve.nil? end end
is_valid_block?(arg)
click to toggle source
# File lib/rpromise.rb, line 81 def is_valid_block?(arg) return arg.nil? || arg.is_a?(Proc) || arg.is_a?(Method) end