class RuboCop::Cop::AnyCable::StreamFrom

Checks for stream_from calls with custom callbacks or coders.

@example

 # bad
 class MyChannel < ApplicationCable::Channel
   def follow
     stream_for(room) {}
   end
 end

 class MyChannel < ApplicationCable::Channel
   def follow
     stream_from("all", -> {})
   end
 end

 class MyChannel < ApplicationCable::Channel
   def follow
     stream_from("all", coder: SomeCoder)
   end
 end

# good
 class MyChannel < ApplicationCable::Channel
   def follow
     stream_from "all"
   end
 end

Public Instance Methods

on_block(node) click to toggle source
# File lib/anycable/rails/compatibility/rubocop/cops/anycable/stream_from.rb, line 56
def on_block(node)
  add_callback_offense(node) if stream_from_with_block?(node)
end
on_send(node) click to toggle source
# File lib/anycable/rails/compatibility/rubocop/cops/anycable/stream_from.rb, line 60
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

Private Instance Methods

add_callback_offense(node) click to toggle source
# File lib/anycable/rails/compatibility/rubocop/cops/anycable/stream_from.rb, line 82
def add_callback_offense(node)
  add_offense(
    node,
    location: :expression,
    message: "Custom stream callbacks are not supported in AnyCable"
  )
end
add_custom_coder_offense(node) click to toggle source
# File lib/anycable/rails/compatibility/rubocop/cops/anycable/stream_from.rb, line 90
def add_custom_coder_offense(node)
  add_offense(
    node,
    location: :expression,
    message: "Custom coders are not supported in AnyCable"
  )
end
find_coders(args) { |pair| ... } click to toggle source
# File lib/anycable/rails/compatibility/rubocop/cops/anycable/stream_from.rb, line 72
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