celluloid_pubsub 0.6.1 → 0.7.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -3
- data/README.md +2 -0
- data/celluloid_pubsub.gemspec +2 -2
- data/examples/simple_test.rb +6 -5
- data/lib/celluloid_pubsub/base_actor.rb +55 -0
- data/lib/celluloid_pubsub/client.rb +2 -3
- data/lib/celluloid_pubsub/helper.rb +30 -1
- data/lib/celluloid_pubsub/reactor.rb +2 -5
- data/lib/celluloid_pubsub/version.rb +2 -2
- data/lib/celluloid_pubsub/web_server.rb +1 -2
- data/lib/celluloid_pubsub.rb +4 -1
- data/spec/spec_helper.rb +8 -0
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f998246dbe87fcedc0e697fd863dc8cb4c0a905
|
4
|
+
data.tar.gz: 04834e2e23f0cb946992bcd7bf76133a448c69bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04af564aa19cba0cfb5cd6591d23825c7e44ce63e2f7e22a0f1bfddce2c6dbbc3aef28b144bd1c625c35e321e77b24c3d21b89fbc234fa8506f6f2cd46e2394f
|
7
|
+
data.tar.gz: 51ef6c1817146611d0bf047747d95f5acbc252217ad4886fa149f8e22d21dc58f36da2ac52f8b541a5c1e5d12bea0abe06f4ab82d9e32233c219116ccbbe2d23
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,8 @@ Description
|
|
8
8
|
|
9
9
|
CelluloidPubsub is a simple ruby implementation of publish subscribe design patterns using celluloid actors and websockets, using Celluloid::Reel server
|
10
10
|
|
11
|
+
Starting with version 0.7.0, Support for Celluloid 0.17 has been added.
|
12
|
+
|
11
13
|
Starting with version 0.6.0, Redis support was moved into gem [celluloid_pubsub_redis_adapter](https://github.com/bogdanRada/celluloid_pubsub_redis_adapter)
|
12
14
|
|
13
15
|
Requirements
|
data/celluloid_pubsub.gemspec
CHANGED
@@ -16,8 +16,8 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.test_files = s.files.grep(/^(spec)/)
|
17
17
|
s.require_paths = ['lib']
|
18
18
|
|
19
|
-
s.add_runtime_dependency 'celluloid', '
|
20
|
-
s.add_runtime_dependency 'celluloid-io', '
|
19
|
+
s.add_runtime_dependency 'celluloid', '>= 0.16', '>= 0.16.0'
|
20
|
+
s.add_runtime_dependency 'celluloid-io', '>= 0.16', '>= 0.16.2'
|
21
21
|
s.add_runtime_dependency 'reel', '~> 0.6', '>= 0.6.0'
|
22
22
|
s.add_runtime_dependency 'http', '~> 1.0', '>= 1.0.2'
|
23
23
|
s.add_runtime_dependency 'celluloid-websocket-client', '~> 0.0', '>= 0.0.1'
|
data/examples/simple_test.rb
CHANGED
@@ -8,7 +8,6 @@ log_file_path = File.join(File.expand_path(File.dirname(__FILE__)), 'log', 'cell
|
|
8
8
|
# actor that subscribes to a channel
|
9
9
|
class FirstActor
|
10
10
|
include Celluloid
|
11
|
-
include Celluloid::Logger
|
12
11
|
|
13
12
|
def initialize(options = {})
|
14
13
|
@client = CelluloidPubsub::Client.new({ actor: Actor.current, channel: 'test_channel' }.merge(options))
|
@@ -34,7 +33,6 @@ end
|
|
34
33
|
# actor that publishes a message in a channel
|
35
34
|
class SecondActor
|
36
35
|
include Celluloid
|
37
|
-
include Celluloid::Logger
|
38
36
|
|
39
37
|
def initialize(options = {})
|
40
38
|
@client = CelluloidPubsub::Client.new({ actor: Actor.current, channel: 'test_channel2' }.merge(options))
|
@@ -57,9 +55,12 @@ class SecondActor
|
|
57
55
|
end
|
58
56
|
|
59
57
|
|
60
|
-
|
61
|
-
|
62
|
-
|
58
|
+
# please don't use the BaseActor class to supervise actors. This is subject to change . This class is used only to test backward compatibility.
|
59
|
+
# For more information on how to supervise actors please see Celluloid wiki.
|
60
|
+
CelluloidPubsub::BaseActor.setup_actor_supervision(CelluloidPubsub::WebServer, actor_name: :web_server, args: {enable_debug: debug_enabled, adapter: nil,log_file_path: log_file_path })
|
61
|
+
CelluloidPubsub::BaseActor.setup_actor_supervision(FirstActor, actor_name: :first_actor, args: {enable_debug: debug_enabled })
|
62
|
+
CelluloidPubsub::BaseActor.setup_actor_supervision(SecondActor, actor_name: :second_actor, args: {enable_debug: debug_enabled })
|
63
|
+
|
63
64
|
signal_received = false
|
64
65
|
|
65
66
|
Signal.trap('INT') do
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require_relative './helper'
|
2
|
+
module CelluloidPubsub
|
3
|
+
# base actor used for compatibility between celluloid versions
|
4
|
+
module BaseActor
|
5
|
+
|
6
|
+
class << self
|
7
|
+
include Helper
|
8
|
+
attr_reader :config
|
9
|
+
|
10
|
+
def included(base)
|
11
|
+
base.include Celluloid
|
12
|
+
base.include Celluloid::IO
|
13
|
+
base.include CelluloidPubsub::Helper
|
14
|
+
base.include config['logger_class']
|
15
|
+
end
|
16
|
+
|
17
|
+
def config
|
18
|
+
{
|
19
|
+
'logger_class' => celluloid_logger_class
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def celluloid_logger_class
|
24
|
+
if version_less_than_seventeen?
|
25
|
+
Celluloid::Logger
|
26
|
+
else
|
27
|
+
Celluloid::Internals::Logger
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def celluloid_version
|
32
|
+
find_loaded_gem_property('celluloid', 'version')
|
33
|
+
end
|
34
|
+
|
35
|
+
def version_less_than_seventeen?
|
36
|
+
verify_gem_version('celluloid', '0.17', operator: '<')
|
37
|
+
end
|
38
|
+
|
39
|
+
def setup_actor_supervision(class_name, options)
|
40
|
+
if version_less_than_seventeen?
|
41
|
+
class_name.supervise_as(options[:actor_name], options[:args])
|
42
|
+
else
|
43
|
+
class_name.supervise(as: options[:actor_name], args: [options[:args]])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
if CelluloidPubsub::BaseActor.version_less_than_seventeen?
|
52
|
+
require 'celluloid/autostart'
|
53
|
+
else
|
54
|
+
require 'celluloid/current'
|
55
|
+
end
|
@@ -13,9 +13,8 @@ module CelluloidPubsub
|
|
13
13
|
# @!attribute channel
|
14
14
|
# @return [String] The channel to which the client will subscribe to
|
15
15
|
class Client
|
16
|
-
include
|
17
|
-
|
18
|
-
include CelluloidPubsub::Helper
|
16
|
+
include CelluloidPubsub::BaseActor
|
17
|
+
|
19
18
|
|
20
19
|
attr_accessor :actor, :options, :channel
|
21
20
|
finalizer :shutdown
|
@@ -12,7 +12,36 @@ module CelluloidPubsub
|
|
12
12
|
message.is_a?(Hash) && message['client_action'] == 'successful_subscription'
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
module_function
|
16
|
+
|
17
|
+
def find_loaded_gem(name, property = nil)
|
18
|
+
gem_spec = Gem.loaded_specs.values.find { |repo| repo.name == name }
|
19
|
+
gem_spec.present? && property.present? ? gem_spec.send(property) : gem_spec
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_loaded_gem_property(gem_name, property = 'version')
|
23
|
+
find_loaded_gem(gem_name, property)
|
24
|
+
end
|
25
|
+
|
26
|
+
def fetch_gem_version(gem_name)
|
27
|
+
version = find_loaded_gem_property(gem_name)
|
28
|
+
version.blank? ? nil : get_parsed_version(version)
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_parsed_version(version)
|
32
|
+
return 0 if version.blank?
|
33
|
+
version = version.to_s.split('.')
|
34
|
+
if version.size > 2
|
35
|
+
version.pop until version.size == 2
|
36
|
+
end
|
37
|
+
version.join('.').to_f
|
38
|
+
end
|
39
|
+
|
40
|
+
def verify_gem_version(gem_version, version, options = {})
|
41
|
+
options.stringify_keys!
|
42
|
+
version = get_parsed_version(version)
|
43
|
+
get_parsed_version(gem_version).send(options.fetch('operator', '<='), version)
|
44
|
+
end
|
16
45
|
|
17
46
|
# method used to determine if a action is a subsribe action
|
18
47
|
# @param [string] action The action that will be checked
|
@@ -12,11 +12,8 @@ module CelluloidPubsub
|
|
12
12
|
#
|
13
13
|
# @!attribute channels
|
14
14
|
# @return [Array] array of channels to which the current reactor has subscribed to
|
15
|
-
class Reactor
|
16
|
-
include
|
17
|
-
include Celluloid::IO
|
18
|
-
include Celluloid::Logger
|
19
|
-
include CelluloidPubsub::Helper
|
15
|
+
class Reactor
|
16
|
+
include CelluloidPubsub::BaseActor
|
20
17
|
|
21
18
|
attr_accessor :websocket, :server, :channels
|
22
19
|
finalizer :shutdown
|
@@ -14,8 +14,7 @@ module CelluloidPubsub
|
|
14
14
|
# @!attribute subscribers
|
15
15
|
# @return [Hash] The hostname on which the webserver runs on
|
16
16
|
class WebServer < Reel::Server::HTTP
|
17
|
-
include
|
18
|
-
include CelluloidPubsub::Helper
|
17
|
+
include CelluloidPubsub::BaseActor
|
19
18
|
|
20
19
|
# The hostname on which the webserver runs on by default
|
21
20
|
HOST = '0.0.0.0'
|
data/lib/celluloid_pubsub.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
-
require '
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'bundler/setup'
|
2
4
|
require 'celluloid/io'
|
3
5
|
require 'reel'
|
4
6
|
require 'celluloid/websocket/client'
|
5
7
|
require 'active_support/all'
|
6
8
|
require 'json'
|
9
|
+
require 'celluloid_pubsub/base_actor'
|
7
10
|
Gem.find_files('celluloid_pubsub/initializers/**/*.rb').each { |path| require path }
|
8
11
|
Gem.find_files('celluloid_pubsub/**/*.rb').each { |path| require path }
|
data/spec/spec_helper.rb
CHANGED
@@ -44,3 +44,11 @@ RSpec.configure do |config|
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
48
|
+
|
49
|
+
# class used for testing actions
|
50
|
+
class TestActor
|
51
|
+
include CelluloidPubsub::BaseActor
|
52
|
+
end
|
53
|
+
|
54
|
+
CelluloidPubsub::BaseActor.setup_actor_supervision(TestActor, actor_name: :test_actor, args: { })
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: celluloid_pubsub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bogdanRada
|
@@ -14,27 +14,27 @@ dependencies:
|
|
14
14
|
name: celluloid
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.16'
|
20
|
-
- - "
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 0.16.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - "
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0.16'
|
30
|
-
- - "
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 0.16.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: celluloid-io
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '0.16'
|
40
40
|
- - ">="
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - "
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '0.16'
|
50
50
|
- - ">="
|
@@ -368,6 +368,7 @@ files:
|
|
368
368
|
- examples/simple_test.rb
|
369
369
|
- init.rb
|
370
370
|
- lib/celluloid_pubsub.rb
|
371
|
+
- lib/celluloid_pubsub/base_actor.rb
|
371
372
|
- lib/celluloid_pubsub/client.rb
|
372
373
|
- lib/celluloid_pubsub/helper.rb
|
373
374
|
- lib/celluloid_pubsub/initializers/reel_colors.rb
|