mr_darcy 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: daed995c326dbe574550d22e13a88d31be6d4cdd
4
- data.tar.gz: 66fdb68f7e247a2410c5771fb6c979fac5eae4f1
3
+ metadata.gz: fc7f7a39633960c2c25aaa833c6c32a1436682f6
4
+ data.tar.gz: 2879b88de3cbc354b378fff40dcb3f052ebe5054
5
5
  SHA512:
6
- metadata.gz: a757c0cc329b5747bf467bb44036044eca65e5d7fe8e6a532262e6216f848bac3c6e61aed79b7e140c912c79a2ab19adb95702ac4f796203dda6e64ef77bebba
7
- data.tar.gz: da4c37e68a05c05bdd3968b1a783bcdca88787cb952b9df32348b7ad59186f8b3ce85cde2ed50114593a1020445718433551b695e5a2d5944b9c0332e2ee81b6
6
+ metadata.gz: 9644421cf5314ee7618b5d01762dbd5f5c56515335910e9275f03f02c1c40d49375184a2e48ac966b8ff784140fa3f8df1e9b373dafb72dcb33562878e511c90
7
+ data.tar.gz: 5062de2330f134e2af6ad98914184cfc1f69c973bad12654ec84159e0fc9b7d7cd808fac177b904063bb1d2af5e21cfd799060d1771cbdd694ef89dcbb0b604a
data/README.md CHANGED
@@ -24,6 +24,10 @@ Or install it yourself as:
24
24
  gem install mr_darcy
25
25
  ```
26
26
 
27
+ ## Documentation
28
+
29
+ API Documentation is available on [rdoc.info](http://rdoc.info/gems/mr_darcy/)
30
+
27
31
  ## Usage
28
32
 
29
33
  ### WARNING
@@ -306,7 +310,7 @@ context.transfer(20).fail do
306
310
  # Oh no, Marty doesn't have enough money, let's borrow some from Doc.
307
311
  BankTransfer.new(money_source: doc_brown, money_destination: marty) \
308
312
  .transfer(20).then
309
- # Thy transferring again.
313
+ # Try transferring again.
310
314
  context.transfer(20)
311
315
  end
312
316
  end
@@ -8,14 +8,24 @@ module MrDarcy
8
8
 
9
9
  module_function
10
10
 
11
+ # Set the driver to use for asynchronicity.
12
+ # See #all_drivers for a list of available
13
+ # drivers on your platform.
11
14
  def driver=(driver)
12
15
  @driver=driver
13
16
  end
14
17
 
18
+ # The current driver in use for asynchronicity.
19
+ # Defaults to :Thread
15
20
  def driver
16
21
  @driver ||= :Thread
17
22
  end
18
23
 
24
+ # The available drivers for your combination of Ruby implementation
25
+ # and operating system.
26
+ # Note that this is possible drivers, not that you have the necessary
27
+ # dependencies installed - ie it doesn't check that you have required
28
+ # celluloid before it tries to use it.
19
29
  def all_drivers
20
30
  return @drivers if @drivers && !@drivers.empty?
21
31
  drivers ||= %w| synchronous thread celluloid em |.map(&:to_sym)
@@ -23,11 +33,47 @@ module MrDarcy
23
33
  @drivers = drivers
24
34
  end
25
35
 
36
+ # Generate a new promise with the provided block.
37
+ # Accepts the following options:
38
+ #
39
+ # * driver: override the default driver.
40
+ #
41
+ # :yields: promise
42
+ #
43
+ # Yields a promise into the block as the first
44
+ # argument so that you can resolve or reject from
45
+ # within the block.
46
+ #
47
+ # MrDarcy.promise do |p|
48
+ # r = rand(10)
49
+ # if r > 5
50
+ # p.resolve r
51
+ # else
52
+ # p.reject r
53
+ # end
54
+ # end
26
55
  def promise opts={}, &block
27
56
  driver = opts[:driver] || self.driver
28
57
  MrDarcy::Promise.new driver: driver, &block
29
58
  end
30
59
 
60
+ # Generate a new promise representing a collection
61
+ # of promises.
62
+ # The collection promise resolves once all the
63
+ # collected promises are resolved and rejects
64
+ # as soon as the first promise rejects.
65
+ #
66
+ # This method collects all promises returned
67
+ # from a provided block:
68
+ #
69
+ # MrDarcy.all_promises do
70
+ # 10.times.map do |i|
71
+ # MrDarcy.promise do |p|
72
+ # sleep 1
73
+ # p.resolve i
74
+ # end
75
+ # end
76
+ # end
31
77
  def all_promises opts={}
32
78
  MrDarcy::Promise::Collection.new yield, opts
33
79
  end
@@ -1,11 +1,28 @@
1
+ require 'forwardable'
2
+
3
+ # This class defines the abstract ability to create DCI roles in MrDarcy.
4
+ # Start by subclassing and adding some roles and actions and away you go.
1
5
  module MrDarcy
2
6
  class Context
7
+ extend Forwardable
8
+
9
+ def_delegators :deferred, :result, :rejected?, :resolved?, :unresolved?
3
10
 
4
11
  class << self
12
+ # Defines a role to be mixed into the roll-player
13
+ # when this context is initialized.
14
+ #
15
+ # See MrDarcy::Role#initialize for argument definitions.
5
16
  def role role_name, options={}, &block
6
17
  self.roles[role_name] = Role.new(role_name, options, &block)
7
18
  end
8
19
 
20
+ # Defines an action that can be performed in this
21
+ # context.
22
+ #
23
+ # * action_name: essentially the name of the method defined in this class.
24
+ #
25
+ # Takes a block with which to define the action.
9
26
  def action action_name, &block
10
27
  define_method action_name do |*args|
11
28
  self.then do |value|
@@ -15,14 +32,22 @@ module MrDarcy
15
32
  end
16
33
  end
17
34
 
35
+ # A list of available roles in this context.
18
36
  def roles
19
37
  @roles ||= {}
20
38
  end
21
39
  end
22
40
 
41
+ # Create an instance of the context. You must pass in role-players
42
+ # for all roles defined in this context using a single hash argument
43
+ # of role names (as symbols) to objects.
44
+ #
45
+ # eg:
46
+ #
47
+ # BankTransfer.new money_source: account1, money_destination: account2
23
48
  def initialize role_players={}
24
49
  @driver = role_players.delete(:driver) || MrDarcy.driver
25
- @deferred = Deferred.new(driver: driver) {}
50
+ @deferred = Deferred.new(driver: driver)
26
51
  deferred.resolve nil
27
52
 
28
53
  roles = self.class.roles
@@ -38,6 +63,7 @@ module MrDarcy
38
63
  end
39
64
  end
40
65
 
66
+ # See MrDarcy::Promise::Base#then
41
67
  def then &block
42
68
  deferred.then do |value|
43
69
  self.instance_exec(value, &block)
@@ -45,6 +71,7 @@ module MrDarcy
45
71
  self
46
72
  end
47
73
 
74
+ # See MrDarcy::Promise::Base#fail
48
75
  def fail &block
49
76
  deferred.fail do |value|
50
77
  self.instance_exec(value, &block)
@@ -52,12 +79,7 @@ module MrDarcy
52
79
  self
53
80
  end
54
81
 
55
- %w| result rejected? resolved? unresolved? |.map(&:to_sym).each do |method|
56
- define_method method do
57
- deferred.public_send method
58
- end
59
- end
60
-
82
+ # See MrDarcy::Promise::Base#final
61
83
  def final
62
84
  deferred.final
63
85
  self
@@ -1,26 +1,37 @@
1
+ require 'forwardable'
2
+
1
3
  module MrDarcy
4
+
5
+ # A wrapper around promises that can be externally resolved.
2
6
  class Deferred
7
+ extend Forwardable
3
8
 
4
- attr_accessor :promise, :last_promise
9
+ def_delegators :last_promise, :resolved?, :rejected?, :unresolved?, :resolve, :reject, :final, :result, :raise
5
10
 
6
- %w| resolved? rejected? unresolved? resolve reject final result raise |.map(&:to_sym).each do |method|
7
- define_method method do |*args|
8
- last_promise.public_send method, *args
9
- end
10
- end
11
+ attr_reader :promise, :last_promise
11
12
 
13
+ # See MrDarcy::Promise::Base#then
12
14
  def then &block
13
15
  self.last_promise = last_promise.then(&block)
14
16
  end
15
17
 
18
+ # See MrDarcy::Promise::Base#fail
16
19
  def fail &block
17
20
  self.last_promise = last_promise.fail(&block)
18
21
  end
19
22
 
20
- def initialize opts={}, &block
23
+ # Create a new deferred.
24
+ # Takes the following options:
25
+ #
26
+ # * driver: override the default driver for this promise.
27
+ def initialize opts={}
21
28
  driver = opts[:driver] || MrDarcy.driver
22
29
  self.promise = MrDarcy::Promise.new(driver: driver) {}
23
30
  self.last_promise = promise
24
31
  end
32
+
33
+ private
34
+
35
+ attr_writer :promise, :last_promise
25
36
  end
26
37
  end
@@ -1,4 +1,4 @@
1
- module MrDarcy
1
+ module MrDarcy # :nodoc:
2
2
  module Drivers
3
3
  autoload :Synchronous, File.expand_path('../drivers/synchronous.rb', __FILE__)
4
4
  autoload :Thread, File.expand_path('../drivers/thread.rb', __FILE__)
@@ -1,20 +1,26 @@
1
1
  require 'celluloid/autostart'
2
2
 
3
+ # The backend abstracting for scheduling blocks asynchronously
4
+ # with Celluloid.
5
+
3
6
  module MrDarcy
4
7
  module Drivers
5
8
  module Celluloid
6
9
  module_function
7
10
 
11
+ # Create a new future, and add it to the future stack.
8
12
  def dispatch(&block)
9
13
  futures << ::Celluloid::Future.new(&block)
10
14
  end
11
15
 
16
+ # Iterate the future stack and wait for each to resolve.
12
17
  def wait
13
18
  futures.each do |future|
14
19
  future.value
15
20
  end
16
21
  end
17
22
 
23
+ # Returns the future stack.
18
24
  def futures
19
25
  @futures ||= []
20
26
  end
@@ -1,12 +1,17 @@
1
+ #
2
+ # Driver used for testing synchronously.
3
+
1
4
  module MrDarcy
2
5
  module Drivers
3
6
  module Synchronous
4
7
  module_function
5
8
 
9
+ # Immediately yields whatever block is passed into it.
6
10
  def dispatch
7
11
  yield
8
12
  end
9
13
 
14
+ # Immediately yields whatever block is passed into it.
10
15
  def wait
11
16
  yield
12
17
  end
@@ -1,15 +1,21 @@
1
1
  require 'thread'
2
2
 
3
+ # Backend abstraction for scheduling blocks into threads.
4
+
3
5
  module MrDarcy
4
6
  module Drivers
5
7
  module Thread
6
8
  module_function
7
9
 
10
+ # Create a new thread with the supplied block and store it
11
+ # on the thread stack.
8
12
  def dispatch(&block)
9
13
  @threads ||= []
10
14
  @threads << ::Thread.new(&block)
11
15
  end
12
16
 
17
+ # Iterate through all threads in the thread stack and wait
18
+ # until they are complete.
13
19
  def wait
14
20
  @threads ||= []
15
21
  @threads.each do |thread|
@@ -1,3 +1,4 @@
1
+ # :nodoc:
1
2
  module MrDarcy
2
3
  module Promise
3
4
  autoload :State, File.expand_path('../promise/state', __FILE__)
@@ -1,7 +1,15 @@
1
+ require 'forwardable'
2
+
1
3
  module MrDarcy
2
4
  module Promise
5
+
6
+ # An abstract superclass for all promise implementations.
3
7
  class Base
8
+ extend Forwardable
9
+
10
+ def_delegators :state_machine, :resolved?, :unresolved?, :rejected?
4
11
 
12
+ # Create a new promise and schedule it for execution.
5
13
  def initialize block
6
14
  state
7
15
  schedule_promise do
@@ -10,6 +18,8 @@ module MrDarcy
10
18
  did_initialize
11
19
  end
12
20
 
21
+ # Create a new promise that resolves and calls the supplied
22
+ # block when this promise is resolved.
13
23
  def then &block
14
24
  ensure_child_promise
15
25
  child_promise.resolve_block = block
@@ -17,6 +27,8 @@ module MrDarcy
17
27
  child_promise.promise
18
28
  end
19
29
 
30
+ # Create a new promise that rejects and calls the supplied
31
+ # block when this promise is rejected.
20
32
  def fail &block
21
33
  ensure_child_promise
22
34
  child_promise.reject_block = block
@@ -24,14 +36,19 @@ module MrDarcy
24
36
  child_promise.promise
25
37
  end
26
38
 
39
+ # Wait until the promise is resolved or rejected and return it's
40
+ # result value.
27
41
  def result
28
42
  Kernel::raise "Subclasses must implement me"
29
43
  end
30
44
 
45
+ # Wait until the promise is resolved or rejected and return self.
31
46
  def final
32
47
  Kernel::raise "Subclasses must implement me"
33
48
  end
34
49
 
50
+ # Wait until the promise is resolver or rejected, and if rejected
51
+ # raise the error value in this context.
35
52
  def raise
36
53
  r = result
37
54
  if rejected?
@@ -43,17 +60,13 @@ module MrDarcy
43
60
  end
44
61
  end
45
62
 
46
- %w| resolved? unresolved? rejected? |.map(&:to_sym).each do |method|
47
- define_method method do |*args|
48
- state_machine.public_send(method, *args)
49
- end
50
- end
51
-
63
+ # Resolve this promise with the provided value.
52
64
  def resolve value
53
65
  do_resolve value
54
66
  self
55
67
  end
56
68
 
69
+ # Reject this promise with the provided error/value.
57
70
  def reject exception
58
71
  do_reject exception
59
72
  self
@@ -2,7 +2,14 @@ require 'celluloid/autostart'
2
2
 
3
3
  module MrDarcy
4
4
  module Promise
5
+
6
+ # A specialisation of MrDarcy::Promise::Base to work with
7
+ # Celluloid.
8
+ #
9
+ # See MrDarcy::Promise::Base for method information.
5
10
  class Celluloid < Base
11
+ # Each promise gets it's own actor thread.
12
+ # :nodoc:
6
13
  class Actor
7
14
  include ::Celluloid
8
15
 
@@ -1,5 +1,7 @@
1
1
  module MrDarcy
2
2
  module Promise
3
+ # A special variety of promise created by Base#then and Base#fail
4
+ # methods.
3
5
  class ChildPromise
4
6
 
5
7
  attr_accessor :resolve_block, :reject_block, :promise
@@ -8,6 +10,7 @@ module MrDarcy
8
10
  self.promise = MrDarcy.promise(opts) {}
9
11
  end
10
12
 
13
+ # Called by the parent promise when it resolves.
11
14
  def parent_resolved value
12
15
  begin
13
16
  return resolve_with value unless handles_resolve?
@@ -20,6 +23,7 @@ module MrDarcy
20
23
  end
21
24
  end
22
25
 
26
+ # Called by the parent promise when it rejects.
23
27
  def parent_rejected value
24
28
  begin
25
29
  return reject_with value unless handles_reject?
@@ -1,12 +1,20 @@
1
+ require 'forwardable'
1
2
  require 'thread'
2
3
 
3
4
  module MrDarcy
4
5
  module Promise
5
- class Collection
6
- attr_accessor :promises, :size
7
6
 
7
+ # A meta-promise that represents a collection of other promises and their
8
+ # states.
9
+ class Collection
8
10
  include Enumerable
11
+ extend Forwardable
12
+
13
+ def_delegators :my_promise, :rejected?, :resolved?, :unresolved?, :raise, :result, :then, :fail
9
14
 
15
+ # Creates a meta-promise based on a collection of promises.
16
+ # * promises: an array of promises
17
+ # * opts: options for MrDarcy.promise
10
18
  def initialize promises, opts={}
11
19
  @lock = Mutex.new
12
20
  @promises = []
@@ -18,31 +26,30 @@ module MrDarcy
18
26
  end
19
27
  end
20
28
 
21
- %w| resolved? rejected? unresolved? result raise then fail |.each do |method|
22
- define_method method do |*args,&block|
23
- my_promise.public_send method, *args, &block
24
- end
25
- end
26
-
29
+ # See MrDarcy::Promise::Base#final
27
30
  def final
28
31
  my_promise.final
29
32
  self
30
33
  end
31
34
 
35
+ # Allow iteration of promises for Enumerable.
32
36
  def each &block
33
37
  promises.each &block
34
38
  end
35
39
 
40
+ # Add a new promise to our collection.
36
41
  def push promise
37
42
  @lock.synchronize { @size = @size + 1 }
38
43
  add_promise promise
39
44
  end
40
45
  alias << push
41
46
 
47
+ # Return the number of promises in this collection.
42
48
  def size
43
49
  @lock.synchronize { @size }
44
50
  end
45
51
 
52
+ # Return an array of promises in this collection.
46
53
  def promises
47
54
  @lock.synchronize { @promises }
48
55
  end
@@ -1,29 +1,17 @@
1
+ require 'forwardable'
2
+
1
3
  module MrDarcy
2
4
  module Promise
5
+ # Syntax wrapper around Promise. Can probably be removed now.
3
6
  class DSL
7
+ extend Forwardable
8
+
9
+ def_delegators :@promise, :resolve, :reject, :unresolved?, :resolved?, :rejected?, :then, :fail, :result, :final
4
10
 
5
11
  def initialize promise
6
12
  @promise = promise
7
13
  end
8
14
 
9
- def resolve(value)
10
- promise.resolve value
11
- end
12
-
13
- def reject(exception)
14
- promise.reject exception
15
- end
16
-
17
- %w| unresolved? resolved? rejected? then fail result final |.map(&:to_sym).each do |method|
18
- define_method method do |*args|
19
- promise.public_send method, *args
20
- end
21
- end
22
-
23
- private
24
-
25
- attr_accessor :promise
26
-
27
15
  end
28
16
  end
29
17
  end
@@ -2,6 +2,9 @@ require 'eventmachine'
2
2
 
3
3
  module MrDarcy
4
4
  module Promise
5
+ # EventMachine implementation of promises.
6
+ #
7
+ # See MrDarcy::Promise::Base for method documentation.
5
8
  class EM < Base
6
9
  class DeferrableAdapter
7
10
  include EventMachine::Deferrable
@@ -1,5 +1,6 @@
1
1
  module MrDarcy
2
2
  module Promise
3
+ # Implementation of the State Pattern for Promises.
3
4
  module State
4
5
  autoload :Base, File.expand_path('../state/base', __FILE__)
5
6
  autoload :Unresolved, File.expand_path('../state/unresolved', __FILE__)
@@ -8,6 +9,8 @@ module MrDarcy
8
9
 
9
10
  module_function
10
11
 
12
+ # Return an instance of the correct State class based on the state of
13
+ # the passed in object.
11
14
  def state stateful
12
15
  case stateful.send :state
13
16
  when :unresolved
@@ -1,11 +1,10 @@
1
1
  module MrDarcy
2
2
  module Promise
3
3
  module State
4
+ # Abstract base class for all Promise states.
4
5
  class Base
5
- attr_accessor :stateful
6
-
7
6
  def initialize stateful
8
- self.stateful = stateful
7
+ @stateful = stateful
9
8
  end
10
9
 
11
10
  def unresolved?
@@ -30,6 +29,8 @@ module MrDarcy
30
29
 
31
30
  private
32
31
 
32
+ attr_reader :stateful
33
+
33
34
  def get_state
34
35
  stateful.send :state
35
36
  end
@@ -1,6 +1,7 @@
1
1
  module MrDarcy
2
2
  module Promise
3
3
  module State
4
+ # Represents the rejected state of a promise.
4
5
  class Rejected < Base
5
6
  def rejected?
6
7
  true
@@ -1,6 +1,7 @@
1
1
  module MrDarcy
2
2
  module Promise
3
3
  module State
4
+ # Represents the resolved state of a promise.
4
5
  class Resolved < Base
5
6
  def resolved?
6
7
  true
@@ -1,15 +1,18 @@
1
1
  module MrDarcy
2
2
  module Promise
3
3
  module State
4
+ # Represents the unresolved state of a promise.
4
5
  class Unresolved < Base
5
6
  def unresolved?
6
7
  true
7
8
  end
8
9
 
10
+ # Transition into resolved state.
9
11
  def resolve
10
12
  set_state :resolved
11
13
  end
12
14
 
15
+ # Transition into rejected state.
13
16
  def reject
14
17
  set_state :rejected
15
18
  end
@@ -3,6 +3,8 @@
3
3
 
4
4
  module MrDarcy
5
5
  module Promise
6
+ # An implementation of synchronous promises, only for testing because
7
+ # it violates several rules of promises.
6
8
  class Synchronous < Base
7
9
 
8
10
  def result
@@ -3,6 +3,9 @@ require 'fiber'
3
3
 
4
4
  module MrDarcy
5
5
  module Promise
6
+ # Implementation of promises using Ruby threads and locks.
7
+ #
8
+ # See MrDarcy::Promise::Base for method information.
6
9
  class Thread < Base
7
10
 
8
11
  def initialize *args
@@ -1,3 +1,3 @@
1
1
  module MrDarcy
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -16,10 +16,6 @@ describe MrDarcy::Promise::DSL do
16
16
  it { should respond_to :result }
17
17
  it { should respond_to :final }
18
18
 
19
- describe '.new' do
20
- its(:promise) { should eq promise }
21
- end
22
-
23
19
  describe '#resolve' do
24
20
  subject { dsl.resolve :resolved_value }
25
21
  before { promise.stub :value= => nil, resolve: nil }
@@ -6,8 +6,6 @@ describe MrDarcy::Promise::State::Base do
6
6
  let(:state) { described_class.new stateful }
7
7
  subject { state }
8
8
 
9
- it { should respond_to :stateful }
10
- it { should respond_to :stateful= }
11
9
  it { should respond_to :unresolved? }
12
10
  it { should respond_to :resolved? }
13
11
  it { should respond_to :rejected? }
metadata CHANGED
@@ -1,167 +1,167 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mr_darcy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Harton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-14 00:00:00.000000000 Z
11
+ date: 2014-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.5'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: guard-rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: guard-bundler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: terminal-notifier-guard
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: pry
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: eventmachine
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: em-http-request
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: celluloid
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '>='
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  description: |2
@@ -173,8 +173,8 @@ executables: []
173
173
  extensions: []
174
174
  extra_rdoc_files: []
175
175
  files:
176
- - .gitignore
177
- - .travis.yml
176
+ - ".gitignore"
177
+ - ".travis.yml"
178
178
  - Gemfile
179
179
  - Gemfile.lock
180
180
  - Guardfile
@@ -242,17 +242,17 @@ require_paths:
242
242
  - lib
243
243
  required_ruby_version: !ruby/object:Gem::Requirement
244
244
  requirements:
245
- - - '>='
245
+ - - ">="
246
246
  - !ruby/object:Gem::Version
247
247
  version: '0'
248
248
  required_rubygems_version: !ruby/object:Gem::Requirement
249
249
  requirements:
250
- - - '>='
250
+ - - ">="
251
251
  - !ruby/object:Gem::Version
252
252
  version: '0'
253
253
  requirements: []
254
254
  rubyforge_project:
255
- rubygems_version: 2.1.11
255
+ rubygems_version: 2.2.2
256
256
  signing_key:
257
257
  specification_version: 4
258
258
  summary: A mashup of async Promises and DCI in Ruby.