actioncable_nats_adapter 0.1.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 +7 -0
- data/README.md +35 -0
- data/Rakefile +4 -0
- data/lib/action_cable/subscription_adapter/nats.rb +69 -0
- data/lib/actioncable_nats_adapter/version.rb +5 -0
- data/lib/actioncable_nats_adapter.rb +7 -0
- data/sig/actioncable_nats_adapter.rbs +4 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 57974d22efe8e7f98ff01e1db48094c86b294eccaf9909f17e914d5e280c4f90
|
4
|
+
data.tar.gz: 8184da81e7d233c9f741880e941e2c0c86a51753c1e29db9d608aba7e7f4c1f2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 722a6bbaff38f85d9be69930c5ab8713eea6a4b04b791cdd9479d94f1e75be98691400c2ed4ea63373e72de858b260eca342eeab45a19bc3193e5291fce05582
|
7
|
+
data.tar.gz: 7678d76a28bacac4f78deac68f81b834284f2109162d36ec9c81b77189fb855ad90ffb162aa4a59e186ca5775d772596922c0ecde99fc84cb553dc067037b2a6
|
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# ActioncableNatsAdapter
|
2
|
+
|
3
|
+
Use this as a subscription adapter in Rails 6+ with NATs.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add to your Gemfile:
|
8
|
+
|
9
|
+
```bash
|
10
|
+
bundle add actioncable_nats_adapter
|
11
|
+
```
|
12
|
+
|
13
|
+
TODO: publish action_cable_nats to rubygems.org
|
14
|
+
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
Set the `config/cable.yaml` adapter to nats.
|
19
|
+
|
20
|
+
Example:
|
21
|
+
|
22
|
+
```yaml
|
23
|
+
development:
|
24
|
+
adapter: nats
|
25
|
+
url: "nats://127.0.0.1:4222"
|
26
|
+
|
27
|
+
test:
|
28
|
+
adapter: test
|
29
|
+
|
30
|
+
production:
|
31
|
+
adapter: nats
|
32
|
+
channel_prefix: natscable_production
|
33
|
+
url: <%= ENV.fetch("NATS_URL") { "nats://127.0.0.1:4222" } %>
|
34
|
+
|
35
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
gem 'nats-pure'
|
4
|
+
require 'nats/client'
|
5
|
+
require 'action_cable'
|
6
|
+
|
7
|
+
module ActionCable
|
8
|
+
module SubscriptionAdapter
|
9
|
+
class Nats < Inline # :nodoc:
|
10
|
+
prepend ChannelPrefix
|
11
|
+
|
12
|
+
def initialize(server)
|
13
|
+
super
|
14
|
+
nconf = server.config.cable.deep_symbolize_keys
|
15
|
+
@nats_conn = ::NATS.connect(nconf[:url], nconf[:cluster] || {})
|
16
|
+
@nats_conn.on_error do |e|
|
17
|
+
@logger.error "NATS Error: #{e}"
|
18
|
+
end
|
19
|
+
|
20
|
+
@nats_conn.on_reconnect do
|
21
|
+
@logger.info "NATS Reconnected to server at #{@nats_conn.connected_server}"
|
22
|
+
end
|
23
|
+
|
24
|
+
@nats_conn.on_disconnect do
|
25
|
+
@logger.warn "NATS Disconnected"
|
26
|
+
end
|
27
|
+
|
28
|
+
@nats_conn.on_close do
|
29
|
+
@logger.info "NATS connection close"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def broadcast(channel, payload)
|
34
|
+
@nats_conn.publish(channel, payload)
|
35
|
+
end
|
36
|
+
|
37
|
+
class Listener < SubscriberMap # :nodoc:
|
38
|
+
def initialize(nats_conn)
|
39
|
+
super()
|
40
|
+
@nats_conn = nats_conn
|
41
|
+
@nats_subs = {}
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_channel(channel, on_success)
|
45
|
+
@nats_subs[channel] = @nats_conn.subscribe(channel) do |msg|
|
46
|
+
broadcast(channel, msg.data)
|
47
|
+
end
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
51
|
+
def remove_channel(channel)
|
52
|
+
@nats_subs[channel].unsubscribe
|
53
|
+
super
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Returns the channel name, including channel_prefix specified in cable.yml
|
60
|
+
def channel_with_prefix(channel)
|
61
|
+
[@server.config.cable[:channel_prefix], channel].compact.join('.')
|
62
|
+
end
|
63
|
+
|
64
|
+
def new_subscriber_map
|
65
|
+
Listener.new(@nats_conn)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: actioncable_nats_adapter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Grant Gongaware
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-08-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nats-pure
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: actioncable
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '6'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '6'
|
55
|
+
description: Use nats.io as the pub/sub backend for ActionCable
|
56
|
+
email:
|
57
|
+
- grant@telmate.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- README.md
|
63
|
+
- Rakefile
|
64
|
+
- lib/action_cable/subscription_adapter/nats.rb
|
65
|
+
- lib/actioncable_nats_adapter.rb
|
66
|
+
- lib/actioncable_nats_adapter/version.rb
|
67
|
+
- sig/actioncable_nats_adapter.rbs
|
68
|
+
homepage: https://github.com/telmate/actioncable_nats_adapter
|
69
|
+
licenses: []
|
70
|
+
metadata:
|
71
|
+
homepage_uri: https://github.com/telmate/actioncable_nats_adapter
|
72
|
+
source_code_uri: https://github.com/telmate/actioncable_nats_adapter
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 2.6.0
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubygems_version: 3.0.9
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: ActionCable subscription adapter in Rails 6+ with NATs.
|
92
|
+
test_files: []
|