celluloid 0.17.1.2 → 0.17.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f410e14db4441077b7642b2912ecd009652a3c7a
4
- data.tar.gz: 11a6583dceb546cb9302ab5257a2feb1095b415f
3
+ metadata.gz: 7e4fef1274946e44231177bcac481a79c785e496
4
+ data.tar.gz: ddabf286ed4d0ac58f7f58f6ae9f843fd5b82a62
5
5
  SHA512:
6
- metadata.gz: a5c31f45caf8b91ee7a10a20ab3a858f4d3101e7f8e597d6c4434104a226d0c437b299895e67b1fbd67f1396e1481057560cec216aedf448fa4c3efd93d7e101
7
- data.tar.gz: 65c78e6b525fc3b54659db9a0a47feacf00abd0f2f1d0b23d1581551b62e8d6bb5027e51116c770c12f92c602688a8e6d9f48ad418946dba5e7ab7ed7b572539
6
+ metadata.gz: 8864299ee4256cc2fbe2f5cd32bd59f49f80033f6352a65ae76ac4381c9903835b563147d66ef19585d836e5a1bac92801269276dca003a093dc2c845c91c04d
7
+ data.tar.gz: fc79f37cf47fd47111cf2304c977c64d0d1e1e37b5c07f9d863e4975f1dd901ab2f43692a0cb656a36c98a93d9811bcdbcf10edecb027444ced46f916b19685d
data/CHANGES.md CHANGED
@@ -1,4 +1,19 @@
1
- 0.17.5 (HEAD)
1
+ 0.17.2 (2015-09-30)
2
+ -----
3
+ * Revamped test suite, using shared RSpec configuration layer provided by Celluloid itself.
4
+ * Updated gem dependencies provided by Celluloid::Sync... extraneous gems removed, or marked as development dependencies.
5
+ - Clean up deprecation notes.
6
+
7
+ 0.17.1.2 (2015-08-21)
8
+ -----
9
+ - Fixes to posted markdown content.
10
+ - Pull in new gem dependencies.
11
+
12
+ 0.17.1.1 (2015-08-07)
13
+ -----
14
+ - Revert "no task to suspend" code from #232.
15
+
16
+ 0.17.1 (2015-08-06)
2
17
  -----
3
18
  * `Celluloid::ActorSystem` moved to `Celluloid::Actor::System`, and from `celluloid/actor_system.rb` to `celluloid/actor/system.rb`
4
19
  * Added extensible API for defining new SystemEvents, and having them handled... without everyone changing `Actor#handle_system_event`.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "celluloid-culture"
5
- spec.version = "0.1.2"
5
+ spec.version = "0.2"
6
6
  spec.authors = ["Tony Arcieri", "Donovan Keme"]
7
7
  spec.email = ["bascule@gmail.com", "code@extremist.digital"]
8
8
 
@@ -1,6 +1,11 @@
1
1
  bundler:
2
+ dependency: development
3
+
2
4
  nenv:
5
+ dependency: development
6
+
3
7
  dotenv:
8
+ dependency: development
4
9
 
5
10
  benchmark_suite:
6
11
  dependency: development
@@ -23,6 +28,9 @@ rspec:
23
28
  guard-rspec:
24
29
  dependency: development
25
30
 
31
+ rspec-retry:
32
+ dependency: development
33
+
26
34
  coveralls:
27
35
  dependency: development
28
36
  gemfile:
@@ -30,7 +38,7 @@ coveralls:
30
38
 
31
39
  celluloid:
32
40
  dependency: core
33
- version: ">= 0.17.1.1"
41
+ version: ">= 0.17.2"
34
42
  gemfile:
35
43
  github: celluloid/celluloid
36
44
  branch: master
@@ -75,10 +83,3 @@ timers:
75
83
  version: ">= 4.1.1"
76
84
  gemfile:
77
85
  github: celluloid/timers
78
-
79
- rspec-logsplit:
80
- version: ">= 0.1.2"
81
- gemfile:
82
- github: "abstractive/rspec-logsplit"
83
- branch: "master"
84
- require: false
File without changes
@@ -2,3 +2,4 @@ inherit_from:
2
2
  - lint.yml
3
3
  - metrics.yml
4
4
  - style.yml
5
+ - perf.yml
@@ -46,3 +46,12 @@ Style/RescueModifier:
46
46
 
47
47
  Style/GlobalVars:
48
48
  Enabled: false
49
+
50
+ Style/FormatString:
51
+ EnforcedStyle: percent
52
+
53
+ Style/TrailingUnderscoreVariable:
54
+ Enabled: false
55
+
56
+ Style/ParallelAssignment:
57
+ Enabled: false
@@ -24,7 +24,7 @@ module Celluloid
24
24
  BARE_OBJECT_WARNING_MESSAGE = "WARNING: BARE CELLULOID OBJECT "
25
25
 
26
26
  class << self
27
- attr_writer :actor_system # Default Actor System
27
+ attr_writer :actor_system # Default Actor System
28
28
  attr_accessor :logger # Thread-safe logger class
29
29
  attr_accessor :log_actor_crashes
30
30
  attr_accessor :group_class # Default internal thread group to use
@@ -165,7 +165,7 @@ module Celluloid
165
165
  # Terminate all actors at exit
166
166
  at_exit do
167
167
  sleep 0.126 # hax grace period for unnaturally terminating actors
168
- # allows "reason" in exit_handler to resolve before being destroyed
168
+ # allows "reason" in exit_handler to resolve before being destroyed
169
169
  if defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby" && RUBY_VERSION >= "1.9"
170
170
  # workaround for MRI bug losing exit status in at_exit block
171
171
  # http://bugs.ruby-lang.org/issues/5218
@@ -18,6 +18,7 @@ module Celluloid
18
18
  super "caused by #{cause.inspect}: #{cause}"
19
19
  end
20
20
  end
21
+ class ThreadLeak < Celluloid::Error; end
21
22
  module Feature
22
23
  module Requires
23
24
  class RubiniusOrJRuby < Celluloid::Error; end
@@ -17,48 +17,46 @@ module Celluloid
17
17
 
18
18
  def shutdown
19
19
  @running = false
20
+ queue = []
20
21
  @mutex.synchronize do
21
- queue = Queue.new
22
22
  loop do
23
23
  break if @group.empty?
24
24
  th = @group.shift
25
25
  th.kill
26
26
  queue << th
27
27
  end
28
- loop do
29
- break if queue.empty?
30
- queue.pop.join
31
- end
28
+ end
29
+ Thread.pass unless queue.empty?
30
+ loop do
31
+ break if queue.empty?
32
+ queue.pop.join
32
33
  end
33
34
  end
34
35
 
35
36
  def idle?
36
- to_a.select { |t| t[:celluloid_meta] && t[:celluloid_meta][:state] == :running }.empty?
37
+ to_a.select { |t| t[:celluloid_thread_state] == :running }.empty?
37
38
  end
38
39
 
39
40
  def busy?
40
- to_a.select { |t| t[:celluloid_meta] && t[:celluloid_meta][:state] == :running }.any?
41
+ to_a.select { |t| t[:celluloid_thread_state] == :running }.any?
41
42
  end
42
43
 
43
44
  private
44
45
 
45
46
  def instantiate(proc)
46
47
  thread = Thread.new do
47
- Thread.current[:celluloid_meta] = {
48
- started: Time.now,
49
- state: :running,
50
- }
51
-
48
+ Thread.current[:celluloid_thread_state] = :running
52
49
  begin
53
50
  proc.call
54
51
  rescue ::Exception => ex
55
52
  Internals::Logger.crash("thread crashed", ex)
56
- Thread.current[:celluloid_meta][:state] = :error
53
+ Thread.current[:celluloid_thread_state] = :error
57
54
  ensure
58
- unless Thread.current[:celluloid_meta][:state] == :error
59
- Thread.current[:celluloid_meta][:state] = :finished
55
+ unless Thread.current[:celluloid_thread_state] == :error
56
+ Thread.current[:celluloid_thread_state] = :finished
60
57
  end
61
- Thread.current[:celluloid_meta][:finished] = Time.now
58
+ @mutex.synchronize { @group.delete Thread.current }
59
+ Thread.exit
62
60
  end
63
61
  end
64
62
 
@@ -1,12 +1,72 @@
1
+ require "dotenv"
2
+ require "nenv"
3
+
1
4
  require "celluloid/test"
2
5
 
6
+ # To help produce better bug reports in Rubinius
7
+ if RUBY_ENGINE == "rbx"
8
+ # $DEBUG = true # would be nice if this didn't fail ... :(
9
+ require "rspec/matchers"
10
+ require "rspec/matchers/built_in/be"
11
+ end
12
+
13
+ require "rspec/retry"
14
+
15
+ module Specs
16
+
17
+ CHECK_LOOSE_THREADS = !Nenv.ci? unless defined? CHECK_LOOSE_THREADS
18
+ ALLOW_RETRIES = 3 unless defined? ALLOW_RETRIES
19
+ ALLOW_SLOW_MAILBOXES = false unless defined? ALLOW_SLOW_MAILBOXES
20
+
21
+ INCLUDE_SUPPORT = [
22
+ "env",
23
+ "logging",
24
+ "sleep_and_wait",
25
+ "reset_class_variables",
26
+ "crash_checking",
27
+ "loose_threads",
28
+ "stubbing",
29
+ "coverage",
30
+ "includer",
31
+ "configure_rspec"
32
+ ]
33
+
34
+ INCLUDE_PATHS = [
35
+ "./spec/support/*.rb",
36
+ "./spec/support/examples/*.rb",
37
+ "./spec/shared/*.rb"
38
+ ]
39
+
40
+ MAX_EXECUTION = 13
41
+ MAX_ATTEMPTS = 20
42
+
43
+ TIMER_QUANTUM = 0.05 # Timer accuracy enforced by the tests (50ms)
44
+
45
+ BACKTRACE_OMITTED = [
46
+ "rspec-expectations",
47
+ "rspec-core",
48
+ "rspec-mocks",
49
+ "rspec-retry",
50
+ "rubysl-thread",
51
+ "rubysl-timeout"
52
+ ]
53
+ end
54
+
3
55
  $CELLULOID_DEBUG = true
4
56
 
57
+ # Require but disable, so it has to be explicitly enabled in tests
58
+ require "celluloid/probe"
59
+ $CELLULOID_MONITORING = false
60
+
61
+ Celluloid.shutdown_timeout = 1
62
+
5
63
  # Load shared examples and test support code for other gems to use.
6
64
 
7
- %w(env logging split_logs sleep_and_wait reset_class_variables crash_checking stubbing coverage includer).each { |f|
65
+ Specs::INCLUDE_SUPPORT.each { |f|
8
66
  require "#{File.expand_path('../../../spec/support', __FILE__)}/#{f}.rb"
9
67
  }
10
68
 
69
+ Specs.reset_probe(nil)
70
+
11
71
  Dir["#{File.expand_path('../../../spec/support/examples', __FILE__)}/*.rb"].map { |f| require f }
12
72
  Dir["#{File.expand_path('../../../spec/shared', __FILE__)}/*.rb"].map { |f| require f }
@@ -1,3 +1,3 @@
1
1
  module Celluloid
2
- VERSION = "0.17.1.2"
2
+ VERSION = "0.17.2"
3
3
  end
@@ -19,21 +19,21 @@ RSpec.describe "Blocks", actor_system: :global do
19
19
  end
20
20
  end
21
21
 
22
- def deferred_excecution(value, &block)
23
- defer {
22
+ def deferred_excecution(value, &_block)
23
+ defer do
24
24
  yield(value)
25
- }
25
+ end
26
26
  end
27
27
 
28
- def deferred_current_actor(&block)
29
- defer {
28
+ def deferred_current_actor(&_block)
29
+ defer do
30
30
  yield(current_actor.name)
31
- }
31
+ end
32
32
  end
33
33
 
34
- def defer_for_something(other, &block)
34
+ def defer_for_something(other, &_block)
35
35
  sender_actor = current_actor
36
- defer {
36
+ defer do
37
37
  $data << [:outside, @name, current_actor.name]
38
38
  other.do_something_and_callback do |value|
39
39
  $data << [:yielded, @name, current_actor.name]
@@ -42,7 +42,7 @@ RSpec.describe "Blocks", actor_system: :global do
42
42
  $data << sender_actor.receive_result(:sender)
43
43
  :pete_the_polyglot_alien
44
44
  end
45
- }
45
+ end
46
46
  end
47
47
 
48
48
  def do_something_and_callback
@@ -76,14 +76,14 @@ RSpec.describe "Blocks", actor_system: :global do
76
76
  expect($data).to eq(expected)
77
77
  end
78
78
 
79
- execute_deferred = Proc.new {
79
+ execute_deferred = proc do
80
80
  a1 = MyBlockActor.new("one")
81
81
  expect(a1.deferred_excecution(:pete_the_polyglot_alien) { |v| v })
82
- .to eq(:pete_the_polyglot_alien)
83
- }
82
+ .to eq(:pete_the_polyglot_alien)
83
+ end
84
84
 
85
85
  # unless RUBY_ENGINE == 'jruby'
86
- xit("can be deferred", &execute_deferred)
86
+ xit("can be deferred", &execute_deferred)
87
87
  # else
88
88
  # it("can be deferred", &execute_deferred)
89
89
  # end
@@ -1,22 +1,5 @@
1
1
  RSpec.describe Celluloid::Call::Sync, actor_system: :global do
2
2
  # TODO: these should be Call::Sync unit tests (without working on actual actors)
3
- class CallExampleActor
4
- include Celluloid
5
-
6
- def initialize(next_actor = nil)
7
- @next = next_actor
8
- end
9
-
10
- def actual_method; end
11
-
12
- def inspect
13
- fail "Don't call!"
14
- end
15
-
16
- def chained_call_ids
17
- [call_chain_id, @next.call_chain_id]
18
- end
19
- end
20
3
 
21
4
  let(:actor) { CallExampleActor.new }
22
5
  let(:logger) { Specs::FakeLogger.current }
@@ -9,7 +9,7 @@ RSpec.describe Celluloid::Condition, actor_system: :global do
9
9
  def initialize
10
10
  @condition = Condition.new
11
11
 
12
- @waiting = false
12
+ @waiting = false
13
13
  @signaled_times = 0
14
14
  end
15
15
 
@@ -4,5 +4,14 @@ require "celluloid/internals/logger"
4
4
  if Celluloid.group_class == Celluloid::Group::Spawner
5
5
  RSpec.describe Celluloid::Group::Spawner do
6
6
  it_behaves_like "a Celluloid Group"
7
+
8
+ it "does not leak finished threads" do
9
+ queue = Queue.new
10
+ th = subject.get { queue.pop }
11
+ expect do
12
+ queue << nil
13
+ th.join
14
+ end.to change { subject.group.length }.by(-1)
15
+ end
7
16
  end
8
17
  end
@@ -13,7 +13,7 @@ RSpec.describe Celluloid::Mailbox::Evented do
13
13
  #
14
14
  unless RUBY_ENGINE == "rbx"
15
15
  it "recovers from timeout exceeded to process mailbox message" do
16
- timeout_interval = CelluloidSpecs::TIMER_QUANTUM + 0.1
16
+ timeout_interval = Specs::TIMER_QUANTUM + 0.1
17
17
  started_at = Time.now
18
18
  expect do
19
19
  Kernel.send(:timeout, timeout_interval) do
@@ -21,7 +21,7 @@ RSpec.describe Celluloid::Mailbox::Evented do
21
21
  end
22
22
  end.to raise_exception(Timeout::Error)
23
23
 
24
- expect(Time.now - started_at).to be_within(CelluloidSpecs::TIMER_QUANTUM).of timeout_interval
24
+ expect(Time.now - started_at).to be_within(Specs::TIMER_QUANTUM).of timeout_interval
25
25
  end
26
26
  end
27
27
  end
@@ -1,24 +1,6 @@
1
1
  RSpec.describe "Deprecated Celluloid::SyncCall", actor_system: :global do
2
2
  subject { Celluloid::SyncCall.new }
3
3
 
4
- class DeprecatedCallExampleActor
5
- include Celluloid
6
-
7
- def initialize(next_actor = nil)
8
- @next = next_actor
9
- end
10
-
11
- def actual_method; end
12
-
13
- def inspect
14
- fail "Please don't call me! I'm not ready yet!"
15
- end
16
-
17
- def chained_call_ids
18
- [call_chain_id, @next.call_chain_id]
19
- end
20
- end
21
-
22
4
  let(:actor) { DeprecatedCallExampleActor.new }
23
5
 
24
6
  context "when obj does not respond to a method" do
@@ -19,9 +19,9 @@ RSpec.describe "Deprecated Celluloid::Future", actor_system: :global do
19
19
  end
20
20
 
21
21
  it "knows if it's got a value yet" do
22
- future = Celluloid::Future.new { sleep CelluloidSpecs::TIMER_QUANTUM * 5 }
22
+ future = Celluloid::Future.new { sleep Specs::TIMER_QUANTUM * 5 }
23
23
  expect(future).not_to be_ready
24
- sleep CelluloidSpecs::TIMER_QUANTUM * 6
24
+ sleep Specs::TIMER_QUANTUM * 6
25
25
  expect(future).to be_ready
26
26
  end
27
27
 
@@ -1,9 +1,4 @@
1
1
  RSpec.shared_examples "a Celluloid Actor" do
2
- before(:each) do |example|
3
- @fake_logger = Specs::FakeLogger.new(Celluloid.logger, example.description)
4
- stub_const("Celluloid::Internals::Logger", @fake_logger)
5
- end
6
-
7
2
  around do |ex|
8
3
  Celluloid.boot
9
4
  ex.run
@@ -766,13 +761,13 @@ RSpec.shared_examples "a Celluloid Actor" do
766
761
 
767
762
  def exclusive_with_block_log_task(task)
768
763
  exclusive do
769
- sleep CelluloidSpecs::TIMER_QUANTUM
764
+ sleep Specs::TIMER_QUANTUM
770
765
  log_task(task)
771
766
  end
772
767
  end
773
768
 
774
769
  def exclusive_log_task(task)
775
- sleep CelluloidSpecs::TIMER_QUANTUM
770
+ sleep Specs::TIMER_QUANTUM
776
771
  log_task(task)
777
772
  end
778
773
  exclusive :exclusive_log_task
@@ -794,14 +789,14 @@ RSpec.shared_examples "a Celluloid Actor" do
794
789
  it "executes methods in the proper order with block form" do
795
790
  subject.async.exclusive_with_block_log_task(:one)
796
791
  subject.async.log_task(:two)
797
- sleep CelluloidSpecs::TIMER_QUANTUM * 2
792
+ sleep Specs::TIMER_QUANTUM * 2
798
793
  expect(subject.tasks).to eq([:one, :two])
799
794
  end
800
795
 
801
796
  it "executes methods in the proper order with a class-level annotation" do
802
797
  subject.async.exclusive_log_task :one
803
798
  subject.async.log_task :two
804
- sleep CelluloidSpecs::TIMER_QUANTUM * 2
799
+ sleep Specs::TIMER_QUANTUM * 2
805
800
  expect(subject.tasks).to eq([:one, :two])
806
801
  end
807
802
 
@@ -828,7 +823,7 @@ RSpec.shared_examples "a Celluloid Actor" do
828
823
  end
829
824
 
830
825
  def eat_donuts
831
- sleep CelluloidSpecs::TIMER_QUANTUM
826
+ sleep Specs::TIMER_QUANTUM
832
827
  @tasks << "donuts"
833
828
  end
834
829
 
@@ -844,7 +839,7 @@ RSpec.shared_examples "a Celluloid Actor" do
844
839
  before do
845
840
  actor.async.eat_donuts
846
841
  actor.async.drink_coffee
847
- sleep CelluloidSpecs::TIMER_QUANTUM * 2
842
+ sleep Specs::TIMER_QUANTUM * 2
848
843
  end
849
844
 
850
845
  it "executes in an exclusive order" do
@@ -888,7 +883,7 @@ RSpec.shared_examples "a Celluloid Actor" do
888
883
  ended_at = Time.now - started_at
889
884
 
890
885
  expect(result).to_not be
891
- expect(ended_at).to be_within(CelluloidSpecs::TIMER_QUANTUM).of interval
886
+ expect(ended_at).to be_within(Specs::TIMER_QUANTUM).of interval
892
887
  end
893
888
  end
894
889
  end
@@ -930,8 +925,8 @@ RSpec.shared_examples "a Celluloid Actor" do
930
925
  end.new
931
926
  end
932
927
 
933
- let(:interval) { CelluloidSpecs::TIMER_QUANTUM * 10 }
934
- let(:sleep_interval) { interval + CelluloidSpecs::TIMER_QUANTUM } # wonky! #/
928
+ let(:interval) { Specs::TIMER_QUANTUM * 10 }
929
+ let(:sleep_interval) { interval + Specs::TIMER_QUANTUM } # wonky! #/
935
930
 
936
931
  it "suspends execution of a method (but not the actor) for a given time" do
937
932
  # Sleep long enough to ensure we're actually seeing behavior when asleep
@@ -944,7 +939,7 @@ RSpec.shared_examples "a Celluloid Actor" do
944
939
 
945
940
  future.value
946
941
  # I got 0.558 (in a slighly busy MRI) which is outside 0.05 of 0.5, so let's use (0.05 * 2)
947
- expect(Time.now - started_at).to be_within(CelluloidSpecs::TIMER_QUANTUM * 2).of interval
942
+ expect(Time.now - started_at).to be_within(Specs::TIMER_QUANTUM * 2).of interval
948
943
  end
949
944
 
950
945
  it "schedules timers which fire in the future" do
@@ -1247,7 +1242,7 @@ RSpec.shared_examples "a Celluloid Actor" do
1247
1242
  it "logs on unhandled messages" do
1248
1243
  expect(logger).to receive(:debug).with("Discarded message (unhandled): first")
1249
1244
  actor.mailbox << :first
1250
- sleep CelluloidSpecs::TIMER_QUANTUM
1245
+ sleep Specs::TIMER_QUANTUM
1251
1246
  end
1252
1247
  end
1253
1248
  end
@@ -1,100 +1,7 @@
1
1
  require "rubygems"
2
2
  require "bundler/setup"
3
3
 
4
- # To help produce better bug reports in Rubinius
5
- if RUBY_ENGINE == "rbx"
6
- # $DEBUG = true # would be nice if this didn't fail ... :(
7
- require "rspec/matchers"
8
- require "rspec/matchers/built_in/be"
9
- end
10
-
11
- # Require in order, so both CELLULOID_TEST and CELLULOID_DEBUG are true
12
4
  require "celluloid/rspec"
13
5
  require "celluloid/essentials"
14
6
 
15
- $CELLULOID_DEBUG = true
16
-
17
- # Require but disable, so it has to be explicitly enabled in tests
18
- require "celluloid/probe"
19
- $CELLULOID_MONITORING = false
20
- Specs.reset_probe(nil)
21
-
22
- Celluloid.shutdown_timeout = 1
23
-
24
- Dir["./spec/support/*.rb", "./spec/shared/*.rb"].map { |f| require f }
25
-
26
- RSpec.configure do |config|
27
- config.filter_run focus: true unless Nenv.ci?
28
-
29
- config.run_all_when_everything_filtered = true
30
- config.disable_monkey_patching!
31
- config.profile_examples = 3
32
-
33
- Specs.configure(config)
34
-
35
- config.before(:suite) do
36
- Specs.stub_out_class_method(Celluloid::Internals::Logger, :crash) do |*args|
37
- _name, ex = *args
38
- fail "Unstubbed Logger.crash() was called:\n crash(\n #{args.map(&:inspect).join(",\n ")})"\
39
- "\nException backtrace: \n (#{ex.class}) #{ex.backtrace * "\n (#{ex.class}) "}"
40
- end
41
- end
42
-
43
- config.before(:each) do |example|
44
- @fake_logger = Specs::FakeLogger.new(Celluloid.logger, example.description)
45
- stub_const("Celluloid::Internals::Logger", @fake_logger)
46
- end
47
-
48
- config.around do |ex|
49
- ex.run
50
- if @fake_logger.crashes?
51
- crashes = @fake_logger.crashes.map do |args, call_stack|
52
- msg, ex = *args
53
- "\n** Crash: #{msg.inspect}(#{ex.inspect})\n Backtrace:\n (crash) #{call_stack * "\n (crash) "}"\
54
- "\n** Crash: \"Actor crashed!\"(#{ex.inspect})\n Backtrace:\n (crash) #{call_stack * "\n (crash) "}"\
55
- "\n Exception Backtrace (#{ex.inspect}):\n (ex) #{ex.backtrace * "\n (ex) "}"
56
- end.join("\n")
57
-
58
- fail "Actor crashes occurred (please stub/mock if these are expected): #{crashes}"
59
- end
60
- @fake_logger = nil
61
- end
62
-
63
- config.around do |ex|
64
- Celluloid.actor_system = nil
65
-
66
- Specs.assert_no_loose_threads(ex.description) do
67
- Specs.reset_class_variables(ex.description) do
68
- ex.run
69
- end
70
- end
71
- end
72
-
73
- config.around actor_system: :global do |ex|
74
- # Needed because some specs mock/stub/expect on the logger
75
- Celluloid.logger = Specs.logger
76
-
77
- Celluloid.boot
78
- ex.run
79
- Celluloid.shutdown
80
- end
81
-
82
- config.around actor_system: :within do |ex|
83
- Celluloid::Actor::System.new.within do
84
- ex.run
85
- end
86
- end
87
-
88
- config.filter_gems_from_backtrace(*%w(rspec-expectations rspec-core rspec-mocks rspec-logsplit rubysl-thread rubysl-timeout))
89
-
90
- config.mock_with :rspec do |mocks|
91
- mocks.verify_doubled_constant_names = true
92
- mocks.verify_partial_doubles = true
93
- end
94
-
95
- config.around(:each) do |example|
96
- # Needed because some specs mock/stub/expect on the logger
97
- Celluloid.logger = Specs.logger
98
- example.run
99
- end
100
- end
7
+ Dir[*Specs::INCLUDE_PATHS].map { |f| require f }
@@ -0,0 +1,77 @@
1
+ RSpec.configure do |config|
2
+ config.filter_run focus: true unless Nenv.ci?
3
+ config.run_all_when_everything_filtered = true
4
+ config.disable_monkey_patching!
5
+ config.profile_examples = 3
6
+ config.filter_gems_from_backtrace(*Specs::BACKTRACE_OMITTED)
7
+
8
+ config.verbose_retry = true
9
+ config.default_retry_count = Specs::ALLOW_RETRIES
10
+ config.display_try_failure_messages = true
11
+ config.default_sleep_interval = 1
12
+ config.exceptions_to_retry = [Timeout::Error, Celluloid::ThreadLeak]
13
+
14
+ config.mock_with :rspec do |mocks|
15
+ mocks.verify_doubled_constant_names = true
16
+ mocks.verify_partial_doubles = true
17
+ end
18
+
19
+ config.before(:suite) do
20
+ Specs.stub_out_class_method(Celluloid::Internals::Logger, :crash) do |*args|
21
+ _name, ex = *args
22
+ fail "Unstubbed Logger.crash() was called:\n crash(\n #{args.map(&:inspect).join(",\n ")})"\
23
+ "\nException backtrace: \n (#{ex.class}) #{ex.backtrace * "\n (#{ex.class}) "}"
24
+ end
25
+ end
26
+
27
+ config.before(:each) do |example|
28
+ @fake_logger = Specs::FakeLogger.new(Celluloid.logger, example.description)
29
+ stub_const("Celluloid::Internals::Logger", @fake_logger)
30
+ end
31
+
32
+ config.around do |ex|
33
+ # Needed because some specs mock/stub/expect on the logger
34
+ Celluloid.logger = Specs.logger
35
+ Celluloid.actor_system = nil
36
+ Specs.reset_class_variables(ex.description) do
37
+ Timeout.timeout(Specs::MAX_EXECUTION) { ex.run }
38
+ end
39
+ if @fake_logger.crashes?
40
+ crashes = @fake_logger.crashes.map do |args, call_stack|
41
+ msg, ex = *args
42
+ "\n** Crash: #{msg.inspect}(#{ex.inspect})\n Backtrace:\n (crash) #{call_stack * "\n (crash) "}"\
43
+ "\n Exception Backtrace (#{ex.inspect}):\n (ex) #{ex.backtrace * "\n (ex) "}"
44
+ end.join("\n")
45
+ fail "Actor crashes occured (please stub/mock if these are expected): #{crashes}"
46
+ end
47
+ @fake_logger = nil
48
+ Specs.assert_no_loose_threads!("after example: #{ex.description}") if Specs::CHECK_LOOSE_THREADS
49
+ end
50
+
51
+ config.around :each, library: :IO do |ex|
52
+ Celluloid.boot
53
+ FileUtils.rm("/tmp/cell_sock") if File.exist?("/tmp/cell_sock")
54
+ ex.run
55
+ Celluloid.shutdown
56
+ end
57
+
58
+ config.around :each, library: :ZMQ do |ex|
59
+ Celluloid::ZMQ.init(1) unless ex.metadata[:no_init]
60
+ Celluloid.boot
61
+ ex.run
62
+ Celluloid.shutdown
63
+ Celluloid::ZMQ.terminate
64
+ end
65
+
66
+ config.around :each, actor_system: :global do |ex|
67
+ Celluloid.boot
68
+ ex.run
69
+ Celluloid.shutdown
70
+ end
71
+
72
+ config.around :each, actor_system: :within do |ex|
73
+ Celluloid::Actor::System.new.within do
74
+ ex.run
75
+ end
76
+ end
77
+ end
@@ -1,16 +1,21 @@
1
1
  require "nenv"
2
2
  require "dotenv"
3
- Dotenv.load!(Nenv("celluloid").config_file || (Nenv.ci? ? ".env-ci" : ".env-dev"))
4
3
 
5
- module Specs
6
- def self.env
7
- @env ||= Nenv("celluloid_specs")
4
+ # Default to `pwd`/.env-* ( whatever is in the current directory )
5
+ # Otherwise take the `.env-*` from the gem itself.
6
+ unless env = Nenv("celluloid").config_file
7
+ env = Nenv.ci? ? ".env-ci" : ".env-dev"
8
+ unless File.exist?(env)
9
+ env = File.expand_path("../../../#{env}", __FILE__)
8
10
  end
11
+ end
9
12
 
10
- def self.configure(config)
11
- if Specs.split_logs?
12
- config.log_split_dir = File.expand_path("../../log/#{DateTime.now.iso8601}", __FILE__)
13
- config.log_split_module = Specs
13
+ Dotenv.load!(env) rescue nil # If for some reason no .env-* files are available at all, use defaults.
14
+
15
+ module Specs
16
+ class << self
17
+ def env
18
+ @env ||= Nenv("celluloid_specs")
14
19
  end
15
20
  end
16
21
  end
@@ -1,4 +1,4 @@
1
- class ExampleCrash < StandardError
1
+ class ExampleCrash < Celluloid::Error
2
2
  attr_accessor :foo
3
3
  end
4
4
 
@@ -0,0 +1,37 @@
1
+ class CallExampleActor
2
+ include Celluloid
3
+
4
+ def initialize(next_actor = nil)
5
+ @next = next_actor
6
+ end
7
+
8
+ def actual_method; end
9
+
10
+ def inspect
11
+ fail "Don't call!"
12
+ end
13
+
14
+ def chained_call_ids
15
+ [call_chain_id, @next.call_chain_id]
16
+ end
17
+ end
18
+
19
+ # de DEPRECATE:
20
+
21
+ class DeprecatedCallExampleActor
22
+ include Celluloid
23
+
24
+ def initialize(next_actor = nil)
25
+ @next = next_actor
26
+ end
27
+
28
+ def actual_method; end
29
+
30
+ def inspect
31
+ fail "Please don't call me! I'm not ready yet!"
32
+ end
33
+
34
+ def chained_call_ids
35
+ [call_chain_id, @next.call_chain_id]
36
+ end
37
+ end
@@ -1,9 +1,6 @@
1
1
  module CelluloidSpecs
2
2
  def self.included_module
3
3
  # Celluloid::IO implements this with with 'Celluloid::IO'
4
- Celluloid
4
+ (defined? INCLUDED_MODULE) ? INCLUDED_MODULE : Celluloid
5
5
  end
6
-
7
- # Timer accuracy enforced by the tests (50ms)
8
- TIMER_QUANTUM = 0.05
9
6
  end
@@ -14,10 +14,6 @@ module Specs
14
14
  end
15
15
  end
16
16
 
17
- def split_logs?
18
- log.strategy == "split"
19
- end
20
-
21
17
  def logger
22
18
  @logger ||= default_logger.tap { |logger| logger.level = log.level }
23
19
  end
@@ -32,13 +28,9 @@ module Specs
32
28
  Logger.new(STDERR)
33
29
  when "single"
34
30
  Logger.new(open_logfile(log.file, log.sync?))
35
- when "split"
36
- # Use Celluloid in case there's logging in a before/after handle
37
- # (is that a bug in rspec-log_split?)
38
- Celluloid.logger
39
31
  else
40
32
  fail "Unknown logger strategy: #{strategy.inspect}."\
41
- " Expected 'split', 'single' or 'stderr'."
33
+ " Expected 'single' or 'stderr'."
42
34
  end
43
35
  end
44
36
 
@@ -51,7 +43,7 @@ module Specs
51
43
  end
52
44
 
53
45
  def default_strategy
54
- (Nenv.ci? ? "stderr" : "split")
46
+ (Nenv.ci? ? "stderr" : "single")
55
47
  end
56
48
 
57
49
  def default_level_for(env, level)
@@ -4,6 +4,11 @@ module Specs
4
4
  Thread.list.map do |thread|
5
5
  next unless thread
6
6
  next if thread == Thread.current
7
+
8
+ # TODO: Remove Specs::ALLOW_SLOW_MAILBOXES hax.
9
+ # Allows slow shutdown of mailboxes.
10
+ # Find more graceful way to do shutdown.
11
+
7
12
  if RUBY_PLATFORM == "java"
8
13
  # Avoid disrupting jRuby's "fiber" threads.
9
14
  name = thread.to_java.getNativeThread.get_name
@@ -16,25 +21,31 @@ module Specs
16
21
 
17
22
  if RUBY_ENGINE == "rbx"
18
23
  # Avoid disrupting Rubinious thread
19
- next if thread.backtrace.empty?
20
24
  next if thread.backtrace.first =~ %r{rubysl/timeout/timeout\.rb}
25
+
26
+ if Specs::ALLOW_SLOW_MAILBOXES
27
+ if thread.backtrace.first =~ /wait/
28
+ next if thread.backtrace[1] =~ /mailbox\.rb/ && thread.backtrace[1] =~ /check/
29
+ end
30
+ end
21
31
  end
22
32
 
23
33
  if RUBY_ENGINE == "ruby"
24
34
  # Sometimes stays
25
- next if thread.backtrace.first =~ %r{/timeout\.rb}
35
+ next if thread.backtrace.nil?
36
+ next unless thread.backtrace.is_a?(Array)
37
+ next if thread.backtrace.empty?
38
+ next if thread.backtrace.first =~ /timeout\.rb/
39
+
40
+ if Specs::ALLOW_SLOW_MAILBOXES
41
+ next if thread.backtrace[1] =~ /mailbox\.rb/ && thread.backtrace[1] =~ /sleep/
42
+ end
26
43
  end
27
44
 
28
45
  thread
29
46
  end.compact
30
47
  end
31
48
 
32
- def assert_no_loose_threads(location)
33
- Specs.assert_no_loose_threads!("before example: #{location}")
34
- yield
35
- Specs.assert_no_loose_threads!("after example: #{location}")
36
- end
37
-
38
49
  def thread_name(thread)
39
50
  (RUBY_PLATFORM == "java") ? thread.to_java.getNativeThread.get_name : ""
40
51
  end
@@ -58,7 +69,7 @@ module Specs
58
69
  sleep
59
70
  end
60
71
 
61
- fail "Aborted due to runaway threads (#{location})\n"\
72
+ fail Celluloid::ThreadLeak, "Aborted due to runaway threads (#{location})\n"\
62
73
  "List: (#{loose.map(&:inspect)})\n:#{backtraces.join("\n")}"
63
74
  end
64
75
  end
@@ -6,7 +6,7 @@ module Specs
6
6
  end
7
7
 
8
8
  diff = Time.now.to_f - t1
9
- STDERR.puts "wait took a bit long: #{diff} seconds" if diff > 0.4
9
+ STDERR.puts "wait took a bit long: #{diff} seconds" if diff > Specs::TIMER_QUANTUM
10
10
  rescue Timeout::Error
11
11
  t2 = Time.now.to_f
12
12
  raise "Timeout after: #{t2 - t1} seconds"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: celluloid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.1.2
4
+ version: 0.17.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
@@ -9,16 +9,16 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-08-22 00:00:00.000000000 Z
12
+ date: 2015-09-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
+ name: bundler
15
16
  version_requirements: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - ">="
18
19
  - !ruby/object:Gem::Version
19
20
  version: '0'
20
- name: bundler
21
- type: :runtime
21
+ type: :development
22
22
  prerelease: false
23
23
  requirement: !ruby/object:Gem::Requirement
24
24
  requirements:
@@ -26,13 +26,13 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
+ name: nenv
29
30
  version_requirements: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - ">="
32
33
  - !ruby/object:Gem::Version
33
34
  version: '0'
34
- name: nenv
35
- type: :runtime
35
+ type: :development
36
36
  prerelease: false
37
37
  requirement: !ruby/object:Gem::Requirement
38
38
  requirements:
@@ -40,13 +40,13 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
+ name: dotenv
43
44
  version_requirements: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - ">="
46
47
  - !ruby/object:Gem::Version
47
48
  version: '0'
48
- name: dotenv
49
- type: :runtime
49
+ type: :development
50
50
  prerelease: false
51
51
  requirement: !ruby/object:Gem::Requirement
52
52
  requirements:
@@ -54,12 +54,12 @@ dependencies:
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
+ name: benchmark_suite
57
58
  version_requirements: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - ">="
60
61
  - !ruby/object:Gem::Version
61
62
  version: '0'
62
- name: benchmark_suite
63
63
  type: :development
64
64
  prerelease: false
65
65
  requirement: !ruby/object:Gem::Requirement
@@ -68,12 +68,12 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
+ name: rubocop
71
72
  version_requirements: !ruby/object:Gem::Requirement
72
73
  requirements:
73
74
  - - ">="
74
75
  - !ruby/object:Gem::Version
75
76
  version: '0'
76
- name: rubocop
77
77
  type: :development
78
78
  prerelease: false
79
79
  requirement: !ruby/object:Gem::Requirement
@@ -82,12 +82,12 @@ dependencies:
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  - !ruby/object:Gem::Dependency
85
+ name: transpec
85
86
  version_requirements: !ruby/object:Gem::Requirement
86
87
  requirements:
87
88
  - - ">="
88
89
  - !ruby/object:Gem::Version
89
90
  version: '0'
90
- name: transpec
91
91
  type: :development
92
92
  prerelease: false
93
93
  requirement: !ruby/object:Gem::Requirement
@@ -96,12 +96,12 @@ dependencies:
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
+ name: pry
99
100
  version_requirements: !ruby/object:Gem::Requirement
100
101
  requirements:
101
102
  - - ">="
102
103
  - !ruby/object:Gem::Version
103
104
  version: '0'
104
- name: pry
105
105
  type: :development
106
106
  prerelease: false
107
107
  requirement: !ruby/object:Gem::Requirement
@@ -110,12 +110,12 @@ dependencies:
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
+ name: rake
113
114
  version_requirements: !ruby/object:Gem::Requirement
114
115
  requirements:
115
116
  - - ">="
116
117
  - !ruby/object:Gem::Version
117
118
  version: '0'
118
- name: rake
119
119
  type: :development
120
120
  prerelease: false
121
121
  requirement: !ruby/object:Gem::Requirement
@@ -124,12 +124,12 @@ dependencies:
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
+ name: rspec
127
128
  version_requirements: !ruby/object:Gem::Requirement
128
129
  requirements:
129
130
  - - ">="
130
131
  - !ruby/object:Gem::Version
131
132
  version: '0'
132
- name: rspec
133
133
  type: :development
134
134
  prerelease: false
135
135
  requirement: !ruby/object:Gem::Requirement
@@ -138,12 +138,12 @@ dependencies:
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
+ name: guard-rspec
141
142
  version_requirements: !ruby/object:Gem::Requirement
142
143
  requirements:
143
144
  - - ">="
144
145
  - !ruby/object:Gem::Version
145
146
  version: '0'
146
- name: guard-rspec
147
147
  type: :development
148
148
  prerelease: false
149
149
  requirement: !ruby/object:Gem::Requirement
@@ -152,12 +152,12 @@ dependencies:
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
154
154
  - !ruby/object:Gem::Dependency
155
+ name: rspec-retry
155
156
  version_requirements: !ruby/object:Gem::Requirement
156
157
  requirements:
157
158
  - - ">="
158
159
  - !ruby/object:Gem::Version
159
160
  version: '0'
160
- name: coveralls
161
161
  type: :development
162
162
  prerelease: false
163
163
  requirement: !ruby/object:Gem::Requirement
@@ -166,13 +166,13 @@ dependencies:
166
166
  - !ruby/object:Gem::Version
167
167
  version: '0'
168
168
  - !ruby/object:Gem::Dependency
169
+ name: coveralls
169
170
  version_requirements: !ruby/object:Gem::Requirement
170
171
  requirements:
171
172
  - - ">="
172
173
  - !ruby/object:Gem::Version
173
174
  version: '0'
174
- name: celluloid-essentials
175
- type: :runtime
175
+ type: :development
176
176
  prerelease: false
177
177
  requirement: !ruby/object:Gem::Requirement
178
178
  requirements:
@@ -180,12 +180,12 @@ dependencies:
180
180
  - !ruby/object:Gem::Version
181
181
  version: '0'
182
182
  - !ruby/object:Gem::Dependency
183
+ name: celluloid-essentials
183
184
  version_requirements: !ruby/object:Gem::Requirement
184
185
  requirements:
185
186
  - - ">="
186
187
  - !ruby/object:Gem::Version
187
188
  version: '0'
188
- name: celluloid-supervision
189
189
  type: :runtime
190
190
  prerelease: false
191
191
  requirement: !ruby/object:Gem::Requirement
@@ -194,12 +194,12 @@ dependencies:
194
194
  - !ruby/object:Gem::Version
195
195
  version: '0'
196
196
  - !ruby/object:Gem::Dependency
197
+ name: celluloid-supervision
197
198
  version_requirements: !ruby/object:Gem::Requirement
198
199
  requirements:
199
200
  - - ">="
200
201
  - !ruby/object:Gem::Version
201
202
  version: '0'
202
- name: celluloid-pool
203
203
  type: :runtime
204
204
  prerelease: false
205
205
  requirement: !ruby/object:Gem::Requirement
@@ -208,12 +208,12 @@ dependencies:
208
208
  - !ruby/object:Gem::Version
209
209
  version: '0'
210
210
  - !ruby/object:Gem::Dependency
211
+ name: celluloid-pool
211
212
  version_requirements: !ruby/object:Gem::Requirement
212
213
  requirements:
213
214
  - - ">="
214
215
  - !ruby/object:Gem::Version
215
216
  version: '0'
216
- name: celluloid-fsm
217
217
  type: :runtime
218
218
  prerelease: false
219
219
  requirement: !ruby/object:Gem::Requirement
@@ -222,12 +222,12 @@ dependencies:
222
222
  - !ruby/object:Gem::Version
223
223
  version: '0'
224
224
  - !ruby/object:Gem::Dependency
225
+ name: celluloid-fsm
225
226
  version_requirements: !ruby/object:Gem::Requirement
226
227
  requirements:
227
228
  - - ">="
228
229
  - !ruby/object:Gem::Version
229
230
  version: '0'
230
- name: celluloid-extras
231
231
  type: :runtime
232
232
  prerelease: false
233
233
  requirement: !ruby/object:Gem::Requirement
@@ -236,33 +236,33 @@ dependencies:
236
236
  - !ruby/object:Gem::Version
237
237
  version: '0'
238
238
  - !ruby/object:Gem::Dependency
239
+ name: celluloid-extras
239
240
  version_requirements: !ruby/object:Gem::Requirement
240
241
  requirements:
241
242
  - - ">="
242
243
  - !ruby/object:Gem::Version
243
- version: 4.1.1
244
- name: timers
244
+ version: '0'
245
245
  type: :runtime
246
246
  prerelease: false
247
247
  requirement: !ruby/object:Gem::Requirement
248
248
  requirements:
249
249
  - - ">="
250
250
  - !ruby/object:Gem::Version
251
- version: 4.1.1
251
+ version: '0'
252
252
  - !ruby/object:Gem::Dependency
253
+ name: timers
253
254
  version_requirements: !ruby/object:Gem::Requirement
254
255
  requirements:
255
256
  - - ">="
256
257
  - !ruby/object:Gem::Version
257
- version: 0.1.2
258
- name: rspec-logsplit
258
+ version: 4.1.1
259
259
  type: :runtime
260
260
  prerelease: false
261
261
  requirement: !ruby/object:Gem::Requirement
262
262
  requirements:
263
263
  - - ">="
264
264
  - !ruby/object:Gem::Version
265
- version: 0.1.2
265
+ version: 4.1.1
266
266
  description: Celluloid enables people to build concurrent programs out of concurrent
267
267
  objects just as easily as they build sequential programs out of sequential objects
268
268
  email:
@@ -275,7 +275,7 @@ files:
275
275
  - CHANGES.md
276
276
  - LICENSE.txt
277
277
  - README.md
278
- - culture/CODE_OF_CONDUCT.md
278
+ - culture/CONDUCT.md
279
279
  - culture/Gemfile
280
280
  - culture/LICENSE.txt
281
281
  - culture/README.md
@@ -288,6 +288,7 @@ files:
288
288
  - culture/rubocop/README.md
289
289
  - culture/rubocop/lint.yml
290
290
  - culture/rubocop/metrics.yml
291
+ - culture/rubocop/perf.yml
291
292
  - culture/rubocop/rubocop.yml
292
293
  - culture/rubocop/style.yml
293
294
  - culture/spec/gems_spec.rb
@@ -373,18 +374,19 @@ files:
373
374
  - spec/shared/mailbox_examples.rb
374
375
  - spec/shared/task_examples.rb
375
376
  - spec/spec_helper.rb
377
+ - spec/support/configure_rspec.rb
376
378
  - spec/support/coverage.rb
377
379
  - spec/support/crash_checking.rb
378
380
  - spec/support/debugging.rb
379
381
  - spec/support/env.rb
380
382
  - spec/support/examples/actor_class.rb
383
+ - spec/support/examples/call_class.rb
381
384
  - spec/support/examples/evented_mailbox_class.rb
382
385
  - spec/support/includer.rb
383
386
  - spec/support/logging.rb
384
387
  - spec/support/loose_threads.rb
385
388
  - spec/support/reset_class_variables.rb
386
389
  - spec/support/sleep_and_wait.rb
387
- - spec/support/split_logs.rb
388
390
  - spec/support/stubbing.rb
389
391
  homepage: https://github.com/celluloid/celluloid
390
392
  licenses:
@@ -398,7 +400,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
398
400
  requirements:
399
401
  - - ">="
400
402
  - !ruby/object:Gem::Version
401
- version: 1.9.2
403
+ version: 1.9.3
402
404
  required_rubygems_version: !ruby/object:Gem::Requirement
403
405
  requirements:
404
406
  - - ">="
@@ -1 +0,0 @@
1
- require "rspec/log_split" if Specs.split_logs?