stn-dcell 0.16.0

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.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +7 -0
  4. data/.rspec +4 -0
  5. data/.travis.yml +30 -0
  6. data/CHANGES.md +53 -0
  7. data/Gemfile +18 -0
  8. data/LICENSE.txt +20 -0
  9. data/README.md +168 -0
  10. data/Rakefile +4 -0
  11. data/benchmarks/messaging.rb +73 -0
  12. data/benchmarks/receiver.rb +37 -0
  13. data/dcell.gemspec +29 -0
  14. data/examples/itchy.rb +26 -0
  15. data/examples/scratchy.rb +12 -0
  16. data/explorer/css/bootstrap-responsive.css +686 -0
  17. data/explorer/css/bootstrap-responsive.min.css +12 -0
  18. data/explorer/css/bootstrap.css +3990 -0
  19. data/explorer/css/bootstrap.min.css +689 -0
  20. data/explorer/css/explorer.css +28 -0
  21. data/explorer/ico/favicon.ico +0 -0
  22. data/explorer/img/glyphicons-halflings-white.png +0 -0
  23. data/explorer/img/glyphicons-halflings.png +0 -0
  24. data/explorer/img/logo.png +0 -0
  25. data/explorer/index.html.erb +94 -0
  26. data/explorer/js/bootstrap.js +1726 -0
  27. data/explorer/js/bootstrap.min.js +6 -0
  28. data/lib/dcell.rb +127 -0
  29. data/lib/dcell/actor_proxy.rb +30 -0
  30. data/lib/dcell/celluloid_ext.rb +120 -0
  31. data/lib/dcell/directory.rb +31 -0
  32. data/lib/dcell/explorer.rb +74 -0
  33. data/lib/dcell/future_proxy.rb +32 -0
  34. data/lib/dcell/global.rb +23 -0
  35. data/lib/dcell/info_service.rb +122 -0
  36. data/lib/dcell/mailbox_proxy.rb +53 -0
  37. data/lib/dcell/messages.rb +65 -0
  38. data/lib/dcell/node.rb +138 -0
  39. data/lib/dcell/node_manager.rb +79 -0
  40. data/lib/dcell/registries/cassandra_adapter.rb +126 -0
  41. data/lib/dcell/registries/mongodb_adapter.rb +85 -0
  42. data/lib/dcell/registries/redis_adapter.rb +95 -0
  43. data/lib/dcell/registries/zk_adapter.rb +123 -0
  44. data/lib/dcell/responses.rb +16 -0
  45. data/lib/dcell/router.rb +46 -0
  46. data/lib/dcell/rpc.rb +95 -0
  47. data/lib/dcell/rspec.rb +1 -0
  48. data/lib/dcell/server.rb +73 -0
  49. data/lib/dcell/version.rb +3 -0
  50. data/logo.png +0 -0
  51. data/spec/dcell/actor_proxy_spec.rb +72 -0
  52. data/spec/dcell/celluloid_ext_spec.rb +32 -0
  53. data/spec/dcell/directory_spec.rb +22 -0
  54. data/spec/dcell/explorer_spec.rb +17 -0
  55. data/spec/dcell/global_spec.rb +25 -0
  56. data/spec/dcell/node_spec.rb +23 -0
  57. data/spec/dcell/registries/mongodb_adapter_spec.rb +7 -0
  58. data/spec/dcell/registries/redis_adapter_spec.rb +6 -0
  59. data/spec/dcell/registries/zk_adapter_spec.rb +28 -0
  60. data/spec/options/01-options.rb +10 -0
  61. data/spec/options/02-registry.rb +13 -0
  62. data/spec/spec_helper.rb +28 -0
  63. data/spec/support/helpers.rb +46 -0
  64. data/spec/support/registry_examples.rb +35 -0
  65. data/spec/test_node.rb +38 -0
  66. data/tasks/cassandra.task +84 -0
  67. data/tasks/rspec.task +7 -0
  68. data/tasks/zookeeper.task +58 -0
  69. metadata +239 -0
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'dcell/registries/zk_adapter'
3
+
4
+ describe DCell::Registry::ZkAdapter, :pending => TEST_ADEPTER != 'zk' && "no zookeeper" do
5
+ subject { DCell::Registry::ZkAdapter.new TEST_DB[:zk] }
6
+ it_behaves_like "a DCell registry" do
7
+ context "when one znode changes" do
8
+ it "updates a node" do
9
+ expect(DCell::Node).to receive(:update).with("foo")
10
+ subject.set_node("foo", "tcp://fooaddress")
11
+ # WARNING: only by calling get_node we renew the watcher
12
+ subject.get_node("foo").should eq("tcp://fooaddress")
13
+ subject.set_node("foo", "tcp://newaddress")
14
+ sleep 0.8 # takes some time to zookeeper watchers to take full effect
15
+ end
16
+ end
17
+ context "when one znode is deleted" do
18
+ it "deletes a node" do
19
+ expect(DCell::Node).to receive(:remove).with("foo")
20
+ subject.set_node("foo", "tcp://fooaddress")
21
+ # WARNING: only by calling get_node we renew the watcher
22
+ subject.get_node("foo").should eq("tcp://fooaddress")
23
+ subject.remove_node "foo"
24
+ sleep 0.8 # takes some time to zookeeper watchers to take full effect
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ TEST_DB = {
2
+ :redis => {:server => 'localhost', :env => 'test'},
3
+ :zk => {:server => 'localhost', :env => 'test'},
4
+ :mongodb => {:db => 'dcell-test'},
5
+ }
6
+ TEST_NODE = {
7
+ :id => 'test_node',
8
+ :addr => "127.0.0.1",
9
+ :port => 21264,
10
+ }
@@ -0,0 +1,13 @@
1
+ TEST_ADEPTER = ENV['DCELL_TEST_ADAPTER'] || 'redis'
2
+
3
+ require "dcell/registries/#{TEST_ADEPTER}_adapter"
4
+
5
+ def test_db_options
6
+ options = {}
7
+ adapter = TEST_ADEPTER
8
+ if adapter
9
+ options[:registry] = {:adapter => adapter}
10
+ options[:registry].merge! TEST_DB[adapter.to_sym]
11
+ end
12
+ options
13
+ end
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'coveralls'
4
+ Coveralls.wear!
5
+
6
+ require 'dcell'
7
+ Dir['./spec/options/*.rb'].map { |f| require f }
8
+ Dir['./spec/support/*.rb'].map { |f| require f }
9
+
10
+ RSpec.configure do |config|
11
+ config.before(:suite) do
12
+ options = {}
13
+ options.merge! test_db_options
14
+ begin
15
+ DCell.start options
16
+ rescue => e
17
+ puts e
18
+ raise
19
+ end
20
+
21
+ TestNode.start
22
+ TestNode.wait_until_ready
23
+ end
24
+
25
+ config.after(:suite) do
26
+ TestNode.stop
27
+ end
28
+ end
@@ -0,0 +1,46 @@
1
+ # For Gem.ruby, and almost certainly already loaded
2
+ require 'rubygems'
3
+
4
+ module TestNode
5
+ def self.start
6
+ @pid = Process.spawn Gem.ruby, File.expand_path("../../test_node.rb", __FILE__)
7
+ unless @pid
8
+ STDERR.print "ERROR: Couldn't start test node. Do you have Redis installed?"
9
+ exit 1
10
+ end
11
+ end
12
+
13
+ def self.wait_until_ready
14
+ STDERR.print "Waiting for test node to start up..."
15
+
16
+ socket = nil
17
+ 30.times do
18
+ begin
19
+ socket = TCPSocket.open(TEST_NODE[:addr], TEST_NODE[:port])
20
+ break if socket
21
+ rescue Errno::ECONNREFUSED
22
+ STDERR.print "."
23
+ sleep 1
24
+ end
25
+ end
26
+
27
+ if socket
28
+ STDERR.puts " done!"
29
+ socket.close
30
+ else
31
+ STDERR.puts " FAILED!"
32
+ raise "couldn't connect to test node!"
33
+ end
34
+ end
35
+
36
+ def self.stop
37
+ unless @pid
38
+ STDERR.print "ERROR: Test node was never started!"
39
+ exit 1
40
+ end
41
+ Process.kill 9, @pid
42
+ rescue Errno::ESRCH
43
+ ensure
44
+ Process.wait @pid rescue nil
45
+ end
46
+ end
@@ -0,0 +1,35 @@
1
+ shared_context "a DCell registry" do
2
+ context "node registry" do
3
+ before :each do
4
+ subject.clear_all_nodes
5
+ end
6
+
7
+ it "stores node addresses" do
8
+ address = "tcp://localhost:7777"
9
+
10
+ subject.set_node("foobar", address)
11
+ subject.get_node("foobar").should == address
12
+ end
13
+
14
+ it "stores the IDs of all nodes" do
15
+ subject.set_node("foobar", "tcp://localhost:7777")
16
+ subject.nodes.should include "foobar"
17
+ end
18
+ end
19
+
20
+ context "global registry" do
21
+ before :each do
22
+ subject.clear_globals
23
+ end
24
+
25
+ it "stores values" do
26
+ subject.set_global("foobar", [1,2,3])
27
+ subject.get_global("foobar").should == [1,2,3]
28
+ end
29
+
30
+ it "stores the keys of all globals" do
31
+ subject.set_global("foobar", true)
32
+ subject.global_keys.should include "foobar"
33
+ end
34
+ end
35
+ end
data/spec/test_node.rb ADDED
@@ -0,0 +1,38 @@
1
+ # The DCell specs start a completely separate Ruby VM running this code
2
+ # for complete integration testing using 0MQ over TCP
3
+
4
+ require 'rubygems'
5
+ require 'bundler'
6
+ Bundler.setup
7
+
8
+ require 'dcell'
9
+ Dir['./spec/options/*.rb'].map { |f| require f }
10
+
11
+ options = {:id => TEST_NODE[:id], :addr => "tcp://#{TEST_NODE[:addr]}:#{TEST_NODE[:port]}"}
12
+ options.merge! test_db_options
13
+ DCell.start options
14
+
15
+ class TestActor
16
+ include Celluloid
17
+ attr_reader :value
18
+
19
+ def initialize
20
+ @value = 42
21
+ end
22
+
23
+ def the_answer
24
+ DCell::Global[:the_answer]
25
+ end
26
+
27
+ def win(&block)
28
+ yield 10000
29
+ 20000
30
+ end
31
+
32
+ def crash
33
+ raise "the spec purposely crashed me :("
34
+ end
35
+ end
36
+
37
+ TestActor.supervise_as :test_actor
38
+ sleep
@@ -0,0 +1,84 @@
1
+ require 'rake/clean'
2
+
3
+ namespace :cassandra do
4
+ CASS_VERSION = "1.0.8"
5
+ CASS_TARBALL = "apache-cassandra-#{CASS_VERSION}-bin.tar.gz"
6
+ CASS_MD5 = "676887f6d185689c3383908f3ad8e015"
7
+
8
+ task :download => "tmp/#{CASS_TARBALL}"
9
+ directory 'tmp'
10
+
11
+ file "tmp/#{CASS_TARBALL}" => "tmp" do
12
+ require 'digest/md5'
13
+ tarball = "tmp/#{CASS_TARBALL}"
14
+
15
+ puts "*** Downloading Cassandra"
16
+ sh "curl http://archive.apache.org/dist/cassandra/#{CASS_VERSION}/#{CASS_TARBALL} -o #{tarball}"
17
+ digest = Digest::MD5.hexdigest(File.read(tarball))
18
+ unless digest == CASS_MD5
19
+ rm tarball
20
+ raise "Expected MD5 #{CASS_MD5} but got #{digest}."
21
+ end
22
+ end
23
+
24
+ task :install => :download do
25
+ require 'yaml'
26
+ puts "*** Unpacking Cassandra"
27
+
28
+ rm_rf "cassandra" if File.exists? "cassandra"
29
+ sh "tar -zxvf tmp/#{CASS_TARBALL}"
30
+ mv "apache-cassandra-#{CASS_VERSION}", "cassandra"
31
+ home = File.expand_path("../../cassandra", __FILE__)
32
+
33
+ # Create base configuration
34
+ data = File.join(home, "data").encode("us-ascii")
35
+ mkdir_p data
36
+ commit = File.join(home, "commit").encode("us-ascii")
37
+ mkdir_p commit
38
+ caches = File.join(home, "caches").encode("us-ascii")
39
+ mkdir_p caches
40
+ config_file = File.join(home, "conf", "cassandra.yaml")
41
+ env_file = File.join(home, "conf", "cassandra-env.sh")
42
+
43
+ conf = YAML::load_file(config_file)
44
+ conf.merge!({
45
+ "initial_token" => 0,
46
+ "partitioner" => "org.apache.cassandra.dht.RandomPartitioner",
47
+ "data_file_directories" => [data],
48
+ "commitlog_directory" => commit,
49
+ "saved_caches_directory" => caches,
50
+ "storage_port" => 27000,
51
+ "ssl_storage_port" => 27001,
52
+ "listen_address" => "127.0.0.1",
53
+ "rpc_address" => "127.0.0.1",
54
+ "rpc_port" => 29160,
55
+ # DSE doesn't work OOTB as a single node unless you switch to simplesnitch
56
+ "endpoint_snitch" => "org.apache.cassandra.locator.SimpleSnitch",
57
+ })
58
+ File.open(config_file, "w") { |file| file.puts YAML::dump(conf) }
59
+
60
+ env = File.read(env_file)
61
+ env.sub!(/JMX_PORT=['"]?\d+['"]?/, 'JMX_PORT="27199"')
62
+ File.open(env_file, "w") { |file| file.puts env }
63
+ end
64
+
65
+ task :start => :cassandra do
66
+ puts "*** Starting Cassandra"
67
+
68
+ # adding the -Dcassandra.for=dcell makes it easier to kill the right
69
+ # cassandra if you're running more than one, e.g. pkill -f dcell
70
+ # or DTRT and kill $(< cassandra/cassandra.pid)
71
+ sh "cd cassandra && bin/cassandra -p cassandra.pid -Dcassandra.for=dcell"
72
+ puts "*** waiting for Cassandra to come up before creating schema ..."
73
+ sleep 2
74
+ puts "*** creating schema ..."
75
+ sh "echo 'create keyspace dcell;' | cassandra/bin/cassandra-cli -h 127.0.0.1 -p 29160"
76
+ sh "echo 'create column family dcell;' | cassandra/bin/cassandra-cli -h 127.0.0.1 -p 29160 -k dcell"
77
+ end
78
+ end
79
+
80
+ file 'cassandra' do
81
+ Rake::Task['cassandra:install'].invoke
82
+ end
83
+
84
+ CLEAN.include "tmp", "cassandra"
data/tasks/rspec.task ADDED
@@ -0,0 +1,7 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new
4
+
5
+ RSpec::Core::RakeTask.new(:rcov) do |task|
6
+ task.rcov = true
7
+ end
@@ -0,0 +1,58 @@
1
+ require 'rake/clean'
2
+
3
+ namespace :zookeeper do
4
+ ZK_VERSION = "3.3.3"
5
+ ZK_TARBALL = "zookeeper-#{ZK_VERSION}.tar.gz"
6
+
7
+ task :download => "tmp/#{ZK_TARBALL}"
8
+ directory 'tmp'
9
+
10
+ file "tmp/#{ZK_TARBALL}" => "tmp" do
11
+ puts "*** Downloading Zookeeper"
12
+ sh "curl http://archive.apache.org/dist/zookeeper/zookeeper-#{ZK_VERSION}/#{ZK_TARBALL} -o tmp/#{ZK_TARBALL}"
13
+ end
14
+
15
+ task :install => :download do
16
+ puts "*** Unpacking Zookeeper"
17
+
18
+ rm_rf "zookeeper" if File.exists? "zookeeper"
19
+ sh "tar -zxvf tmp/#{ZK_TARBALL}"
20
+ mv "zookeeper-#{ZK_VERSION}", "zookeeper"
21
+ home = File.expand_path("../../zookeeper", __FILE__)
22
+
23
+ # Create base configuration
24
+ data = File.join(home, "data")
25
+ mkdir_p data
26
+ config = File.join(home, "conf", "zoo.cfg")
27
+ rm_r File.join(home, "conf", "zoo_sample.cfg")
28
+
29
+ File.open(config, "w") do |file|
30
+ # Maybe some kind soul will move this ugly heredoc into a template
31
+ file << <<-ZK_CONFIG
32
+ # The number of milliseconds of each tick
33
+ tickTime=2000
34
+ # The number of ticks that the initial
35
+ # synchronization phase can take
36
+ initLimit=10
37
+ # The number of ticks that can pass between
38
+ # sending a request and getting an acknowledgement
39
+ syncLimit=5
40
+ # the directory where the snapshot is stored.
41
+ dataDir=#{data}
42
+ # the port at which the clients will connect
43
+ clientPort=2181
44
+ ZK_CONFIG
45
+ end
46
+ end
47
+
48
+ task :start => :zookeeper do
49
+ puts "*** Starting Zookeeper"
50
+ sh "cd zookeeper && bin/zkServer.sh start"
51
+ end
52
+ end
53
+
54
+ file 'zookeeper' do
55
+ Rake::Task['zookeeper:install'].invoke
56
+ end
57
+
58
+ CLEAN.include "tmp", "zookeeper"
metadata ADDED
@@ -0,0 +1,239 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stn-dcell
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.16.0
5
+ platform: ruby
6
+ authors:
7
+ - Tony Arcieri
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: celluloid
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.16.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.16.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: celluloid-zmq
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.16.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.16.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: reel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.4.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: http
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.5.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.5.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: celluloid-redis
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: redis-namespace
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 2.14.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 2.14.0
125
+ description: DCell is an distributed object framework based on Celluloid built on
126
+ 0MQ and Zookeeper
127
+ email:
128
+ - tony.arcieri@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".coveralls.yml"
134
+ - ".gitignore"
135
+ - ".rspec"
136
+ - ".travis.yml"
137
+ - CHANGES.md
138
+ - Gemfile
139
+ - LICENSE.txt
140
+ - README.md
141
+ - Rakefile
142
+ - benchmarks/messaging.rb
143
+ - benchmarks/receiver.rb
144
+ - dcell.gemspec
145
+ - examples/itchy.rb
146
+ - examples/scratchy.rb
147
+ - explorer/css/bootstrap-responsive.css
148
+ - explorer/css/bootstrap-responsive.min.css
149
+ - explorer/css/bootstrap.css
150
+ - explorer/css/bootstrap.min.css
151
+ - explorer/css/explorer.css
152
+ - explorer/ico/favicon.ico
153
+ - explorer/img/glyphicons-halflings-white.png
154
+ - explorer/img/glyphicons-halflings.png
155
+ - explorer/img/logo.png
156
+ - explorer/index.html.erb
157
+ - explorer/js/bootstrap.js
158
+ - explorer/js/bootstrap.min.js
159
+ - lib/dcell.rb
160
+ - lib/dcell/actor_proxy.rb
161
+ - lib/dcell/celluloid_ext.rb
162
+ - lib/dcell/directory.rb
163
+ - lib/dcell/explorer.rb
164
+ - lib/dcell/future_proxy.rb
165
+ - lib/dcell/global.rb
166
+ - lib/dcell/info_service.rb
167
+ - lib/dcell/mailbox_proxy.rb
168
+ - lib/dcell/messages.rb
169
+ - lib/dcell/node.rb
170
+ - lib/dcell/node_manager.rb
171
+ - lib/dcell/registries/cassandra_adapter.rb
172
+ - lib/dcell/registries/mongodb_adapter.rb
173
+ - lib/dcell/registries/redis_adapter.rb
174
+ - lib/dcell/registries/zk_adapter.rb
175
+ - lib/dcell/responses.rb
176
+ - lib/dcell/router.rb
177
+ - lib/dcell/rpc.rb
178
+ - lib/dcell/rspec.rb
179
+ - lib/dcell/server.rb
180
+ - lib/dcell/version.rb
181
+ - logo.png
182
+ - spec/dcell/actor_proxy_spec.rb
183
+ - spec/dcell/celluloid_ext_spec.rb
184
+ - spec/dcell/directory_spec.rb
185
+ - spec/dcell/explorer_spec.rb
186
+ - spec/dcell/global_spec.rb
187
+ - spec/dcell/node_spec.rb
188
+ - spec/dcell/registries/mongodb_adapter_spec.rb
189
+ - spec/dcell/registries/redis_adapter_spec.rb
190
+ - spec/dcell/registries/zk_adapter_spec.rb
191
+ - spec/options/01-options.rb
192
+ - spec/options/02-registry.rb
193
+ - spec/spec_helper.rb
194
+ - spec/support/helpers.rb
195
+ - spec/support/registry_examples.rb
196
+ - spec/test_node.rb
197
+ - tasks/cassandra.task
198
+ - tasks/rspec.task
199
+ - tasks/zookeeper.task
200
+ homepage: http://github.com/celluloid/dcell
201
+ licenses:
202
+ - MIT
203
+ metadata: {}
204
+ post_install_message:
205
+ rdoc_options: []
206
+ require_paths:
207
+ - lib
208
+ required_ruby_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ required_rubygems_version: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ requirements: []
219
+ rubyforge_project:
220
+ rubygems_version: 2.2.2
221
+ signing_key:
222
+ specification_version: 4
223
+ summary: An asynchronous distributed object framework based on Celluloid
224
+ test_files:
225
+ - spec/dcell/actor_proxy_spec.rb
226
+ - spec/dcell/celluloid_ext_spec.rb
227
+ - spec/dcell/directory_spec.rb
228
+ - spec/dcell/explorer_spec.rb
229
+ - spec/dcell/global_spec.rb
230
+ - spec/dcell/node_spec.rb
231
+ - spec/dcell/registries/mongodb_adapter_spec.rb
232
+ - spec/dcell/registries/redis_adapter_spec.rb
233
+ - spec/dcell/registries/zk_adapter_spec.rb
234
+ - spec/options/01-options.rb
235
+ - spec/options/02-registry.rb
236
+ - spec/spec_helper.rb
237
+ - spec/support/helpers.rb
238
+ - spec/support/registry_examples.rb
239
+ - spec/test_node.rb