class RuboCop::Cop::AnyCable::StreamFrom
end
end
stream_from “all”
def follow
class MyChannel < ApplicationCable::Channel
# good
end
end
stream_from(“all”, coder: SomeCoder)
def follow
class MyChannel < ApplicationCable::Channel
end
end
stream_from(“all”, -> {})
def follow
class MyChannel < ApplicationCable::Channel
end
end
stream_for(room) {}
def follow
class MyChannel < ApplicationCable::Channel
# bad
@example
Checks for #stream_from calls with custom callbacks or coders.
def add_callback_offense(node)
def add_callback_offense(node) add_offense( node, location: :expression, message: "Custom stream callbacks are not supported in AnyCable" ) end
def add_custom_coder_offense(node)
def add_custom_coder_offense(node) add_offense( node, location: :expression, message: "Custom coders are not supported in AnyCable" ) end
def find_coders(args)
def find_coders(args) return if args.nil? args.select(&:hash_type?).each do |arg| arg.each_child_node do |pair| yield(pair) if coder_symbol?(pair) && !active_support_json?(pair) end end end
def on_block(node)
def on_block(node) add_callback_offense(node) if stream_from_with_block?(node) end
def on_send(node)
def on_send(node) if stream_from_with_callback?(node) add_callback_offense(node) return end args = args_of_stream_from(node) find_coders(args) { |coder| add_custom_coder_offense(coder) } end