[DRE-commits] [ruby-delayer-deferred] 04/06: New upstream version 1.1.1

Daisuke Higuchi dai at moszumanska.debian.org
Mon Mar 20 01:45:39 UTC 2017


This is an automated email from the git hooks/post-receive script.

dai pushed a commit to branch exp/debian
in repository ruby-delayer-deferred.

commit 0a35222673608a9cd46c5de19f6a9704639de3bd
Author: HIGUCHI Daisuke (VDR dai) <dai at debian.org>
Date:   Mon Mar 20 10:29:04 2017 +0900

    New upstream version 1.1.1
---
 .gitignore                       |  3 ++-
 delayer-deferred.gemspec         |  3 +++
 lib/delayer/deferred/deferred.rb | 19 ++++++++++++++-----
 lib/delayer/deferred/tools.rb    |  4 ++--
 lib/delayer/deferred/version.rb  |  2 +-
 test/deferred_test.rb            | 41 ++++++++++++++++++++++++++++++++++++++++
 6 files changed, 63 insertions(+), 9 deletions(-)

diff --git a/.gitignore b/.gitignore
index f09ddf1..dcf865c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,4 +12,5 @@
 *.o
 *.a
 mkmf.log
-/vendor/
\ No newline at end of file
+/vendor/
+/Guardfile
diff --git a/delayer-deferred.gemspec b/delayer-deferred.gemspec
index 94f4cef..4ad228b 100644
--- a/delayer-deferred.gemspec
+++ b/delayer-deferred.gemspec
@@ -26,4 +26,7 @@ Gem::Specification.new do |spec|
   spec.add_development_dependency "rake", "~> 10.0"
   spec.add_development_dependency "minitest", "~> 5.7"
   spec.add_development_dependency "ruby-prof"
+  spec.add_development_dependency 'guard'
+  spec.add_development_dependency 'guard-shell'
+  spec.add_development_dependency 'guard-rake'
 end
diff --git a/lib/delayer/deferred/deferred.rb b/lib/delayer/deferred/deferred.rb
index 801d68c..02c5c41 100644
--- a/lib/delayer/deferred/deferred.rb
+++ b/lib/delayer/deferred/deferred.rb
@@ -51,12 +51,13 @@ module Delayer::Deferred
     end
 
     def self.fiber(&block)
-      @_fiber ||= Fiber.new do |b|
-        loop do
-          b = Fiber.yield(b.())
-        end
+      @_fiber ||= _gen_new_fiber
+      begin
+        result = @_fiber.resume(block)
+      rescue FiberError
+        @_fiber = _gen_new_fiber
+        result = @_fiber.resume(block)
       end
-      result = @_fiber.resume(block)
       if result.is_a?(Delayer::Deferred::ResultContainer)
         result
       else
@@ -65,5 +66,13 @@ module Delayer::Deferred
         return result, _fiber
       end
     end
+
+    def self._gen_new_fiber
+      Fiber.new do |b|
+        loop do
+          b = Fiber.yield(b.())
+        end
+      end
+    end
   end
 end
diff --git a/lib/delayer/deferred/tools.rb b/lib/delayer/deferred/tools.rb
index ffde7eb..12784ba 100644
--- a/lib/delayer/deferred/tools.rb
+++ b/lib/delayer/deferred/tools.rb
@@ -40,7 +40,7 @@ module Delayer::Deferred
     # Kernel#systemを呼び出して、コマンドが成功たら成功するDeferredを返す。
     # 失敗した場合、trap{}ブロックには $? の値(Process::Status)か、例外が発生した場合それが渡される
     # ==== Args
-    # [*args] Kernel#system の引数
+    # [*args] Kernel#spawn の引数
     # ==== Return
     # Deferred
     def system(*args)
@@ -50,7 +50,7 @@ module Delayer::Deferred
         if status && status.success?
           status
         else
-          raise ForeignCommandAborted.new("command aborted: #{args.join(' ')}", process: $?) end
+          raise ForeignCommandAborted.new("command aborted: #{args.join(' ')}", process: status) end
       }
     end
   end
diff --git a/lib/delayer/deferred/version.rb b/lib/delayer/deferred/version.rb
index 4d27467..1f7821f 100644
--- a/lib/delayer/deferred/version.rb
+++ b/lib/delayer/deferred/version.rb
@@ -1,5 +1,5 @@
 module Delayer
   module Deferred
-    VERSION = "1.1.0"
+    VERSION = "1.1.1"
   end
 end
diff --git a/test/deferred_test.rb b/test/deferred_test.rb
index c1de727..ca4fd2a 100644
--- a/test/deferred_test.rb
+++ b/test/deferred_test.rb
@@ -213,6 +213,47 @@ describe(Delayer::Deferred) do
     end
   end
 
+  describe 'recursive delayer' do
+    it 'Deferred#next call in Deferred.next' do
+      delayer = Delayer.generate_class
+      buf = []
+      erra = errb = errc = nil
+      eval_all_events(delayer) do
+        delayer.Deferred.next{
+          buf << 'begin A'
+          delayer.run
+          buf << 'end A'
+        }.trap{|err|
+          erra = err
+        }
+        delayer.Deferred.next{
+          buf << 'begin B'
+          delayer.run
+          buf << 'end B'
+        }.trap{|err|
+          errb = err
+        }
+        delayer.Deferred.next{
+          buf << 'begin C'
+          delayer.run
+          buf << 'end C'
+        }.trap{|err|
+          errc = err
+        }
+
+      end
+      refute erra
+      refute errb
+      refute errc
+      assert_includes buf, 'begin A'
+      assert_includes buf, 'end A'
+      assert_includes buf, 'begin B'
+      assert_includes buf, 'end B'
+      assert_includes buf, 'begin C'
+      assert_includes buf, 'end C'
+    end
+  end
+
   describe "Deferredable#system" do
     it "command successed" do
       succeed = failure = false

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/ruby-delayer-deferred.git



More information about the Pkg-ruby-extras-commits mailing list