Sha256: 66db8b07c1dc5778385927f778424cc78a53508197ea507dbd80e6c3fc30d0f2

Contents?: true

Size: 1.28 KB

Versions: 5

Compression:

Stored size: 1.28 KB

Contents

module Opal
  module RSpec
    module AsyncHelpers
      module ClassMethods        
        def async(desc, *args, &block)
          options = ::RSpec::Core::Metadata.build_hash_from(args)
          options.update(:skip => ::RSpec::Core::Pending::NOT_YET_IMPLEMENTED) unless block

          examples << Opal::RSpec::LegacyAsyncExample.new(self, desc, options, block)
          examples.last          
        end
      end
      
      attr_accessor :legacy_promise
      
      def self.included(base)
        base.extend ClassMethods
      end
      
      # Use {#async} instead.
      #
      # @deprecated
      def run_async(&block)
        async(&block)
      end
  
      def async(&block)
        begin
          instance_eval &block
          legacy_promise.resolve
        rescue Exception => e
          legacy_promise.reject e
        end
      end
    end
  end
end

class Opal::RSpec::LegacyAsyncExample < ::RSpec::Core::Example
  def initialize(example_group_class, description, user_metadata, example_block=nil)
    example = self
    legacy_promise_ex_block = lambda do
      self.legacy_promise = Promise.new
      instance_exec(example, &example_block)
      self.legacy_promise
    end
    
    super example_group_class, description, user_metadata, legacy_promise_ex_block
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
opal-connect-rspec-0.5.0 opal/opal/rspec/async/legacy.rb
opal-rspec-0.5.0 opal/opal/rspec/async/legacy.rb
opal-rspec-0.5.0.beta3 opal/opal/rspec/async/legacy.rb
opal-rspec-0.5.0.beta2 opal/opal/rspec/async/legacy.rb
opal-rspec-0.5.0.beta1 opal/opal/rspec/async/legacy.rb