Class: ActionCable::SubscriptionAdapter::PostgreSQL
- Includes:
- ChannelPrefix
- Defined in:
- lib/action_cable/subscription_adapter/postgresql.rb
Overview
:nodoc:
Defined Under Namespace
Classes: Listener
Instance Method Summary collapse
- #broadcast(channel, payload) ⇒ Object
-
#initialize ⇒ PostgreSQL
constructor
A new instance of PostgreSQL.
- #shutdown ⇒ Object
- #subscribe(channel, callback, success_callback = nil) ⇒ Object
- #unsubscribe(channel, callback) ⇒ Object
-
#with_broadcast_connection(&block) ⇒ Object
:nodoc:.
-
#with_subscriptions_connection(&block) ⇒ Object
:nodoc:.
Methods inherited from Base
Constructor Details
#initialize ⇒ PostgreSQL
Returns a new instance of PostgreSQL.
14 15 16 17 18 |
# File 'lib/action_cable/subscription_adapter/postgresql.rb', line 14 def initialize(*) super @mutex = Mutex.new @listener = nil end |
Instance Method Details
#broadcast(channel, payload) ⇒ Object
20 21 22 23 24 |
# File 'lib/action_cable/subscription_adapter/postgresql.rb', line 20 def broadcast(channel, payload) with_broadcast_connection do |pg_conn| pg_conn.exec("NOTIFY #{pg_conn.escape_identifier(channel_identifier(channel))}, '#{pg_conn.escape_string(payload)}'") end end |
#shutdown ⇒ Object
34 35 36 |
# File 'lib/action_cable/subscription_adapter/postgresql.rb', line 34 def shutdown listener.shutdown end |
#subscribe(channel, callback, success_callback = nil) ⇒ Object
26 27 28 |
# File 'lib/action_cable/subscription_adapter/postgresql.rb', line 26 def subscribe(channel, callback, success_callback = nil) listener.add_subscriber(channel_identifier(channel), callback, success_callback) end |
#unsubscribe(channel, callback) ⇒ Object
30 31 32 |
# File 'lib/action_cable/subscription_adapter/postgresql.rb', line 30 def unsubscribe(channel, callback) listener.remove_subscriber(channel_identifier(channel), callback) end |
#with_broadcast_connection(&block) ⇒ Object
:nodoc:
53 54 55 56 57 58 59 |
# File 'lib/action_cable/subscription_adapter/postgresql.rb', line 53 def with_broadcast_connection(&block) # :nodoc: ActiveRecord::Base.connection_pool.with_connection do |ar_conn| pg_conn = ar_conn.raw_connection verify!(pg_conn) yield pg_conn end end |
#with_subscriptions_connection(&block) ⇒ Object
:nodoc:
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/action_cable/subscription_adapter/postgresql.rb', line 38 def with_subscriptions_connection(&block) # :nodoc: ar_conn = ActiveRecord::Base.connection_pool.checkout.tap do |conn| # Action Cable is taking ownership over this database connection, and will # perform the necessary cleanup tasks ActiveRecord::Base.connection_pool.remove(conn) end pg_conn = ar_conn.raw_connection verify!(pg_conn) pg_conn.exec("SET application_name = #{pg_conn.escape_identifier(identifier)}") yield pg_conn ensure ar_conn.disconnect! end |