aboutsummaryrefslogtreecommitdiffstats
path: root/actioncable/lib/action_cable/connection/subscriptions.rb
diff options
context:
space:
mode:
authorJeremy Daer <jeremydaer@gmail.com>2016-03-31 07:08:49 -0700
committerJeremy Daer <jeremydaer@gmail.com>2016-03-31 07:08:49 -0700
commit9a83ef38912063db127a3918b0f155d5d3acfe3b (patch)
treee6225bc33dcc1dcefdfefca4537bde07bc8df94a /actioncable/lib/action_cable/connection/subscriptions.rb
parent903f447e436a7c909c3afc552f27bbbc1b4770c8 (diff)
parentb168eb5819fa5fea940c9865d5c9a3ec5ba2a7ec (diff)
downloadrails-9a83ef38912063db127a3918b0f155d5d3acfe3b.tar.gz
rails-9a83ef38912063db127a3918b0f155d5d3acfe3b.tar.bz2
rails-9a83ef38912063db127a3918b0f155d5d3acfe3b.zip
Merge pull request #24233 from jeremy/cable/encoding
Cable message encoding
Diffstat (limited to 'actioncable/lib/action_cable/connection/subscriptions.rb')
-rw-r--r--actioncable/lib/action_cable/connection/subscriptions.rb25
1 files changed, 6 insertions, 19 deletions
diff --git a/actioncable/lib/action_cable/connection/subscriptions.rb b/actioncable/lib/action_cable/connection/subscriptions.rb
index 5aa907c2d3..3742f248d1 100644
--- a/actioncable/lib/action_cable/connection/subscriptions.rb
+++ b/actioncable/lib/action_cable/connection/subscriptions.rb
@@ -23,13 +23,13 @@ module ActionCable
end
def add(data)
- id_options = decode_hash(data['identifier'])
- identifier = normalize_identifier(id_options)
+ id_key = data['identifier']
+ id_options = ActiveSupport::JSON.decode(id_key).with_indifferent_access
subscription_klass = connection.server.channel_classes[id_options[:channel]]
if subscription_klass
- subscriptions[identifier] ||= subscription_klass.new(connection, identifier, id_options)
+ subscriptions[id_key] ||= subscription_klass.new(connection, id_key, id_options)
else
logger.error "Subscription class not found (#{data.inspect})"
end
@@ -37,7 +37,7 @@ module ActionCable
def remove(data)
logger.info "Unsubscribing from channel: #{data['identifier']}"
- remove_subscription subscriptions[normalize_identifier(data['identifier'])]
+ remove_subscription subscriptions[data['identifier']]
end
def remove_subscription(subscription)
@@ -46,7 +46,7 @@ module ActionCable
end
def perform_action(data)
- find(data).perform_action(decode_hash(data['data']))
+ find(data).perform_action ActiveSupport::JSON.decode(data['data'])
end
def identifiers
@@ -63,21 +63,8 @@ module ActionCable
private
delegate :logger, to: :connection
- def normalize_identifier(identifier)
- identifier = ActiveSupport::JSON.encode(identifier) if identifier.is_a?(Hash)
- identifier
- end
-
- # If `data` is a Hash, this means that the original JSON
- # sent by the client had no backslashes in it, and does
- # not need to be decoded again.
- def decode_hash(data)
- data = ActiveSupport::JSON.decode(data) unless data.is_a?(Hash)
- data.with_indifferent_access
- end
-
def find(data)
- if subscription = subscriptions[normalize_identifier(data['identifier'])]
+ if subscription = subscriptions[data['identifier']]
subscription
else
raise "Unable to find subscription with identifier: #{data['identifier']}"