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