lib/stimulus_reflex/reflex.rb in stimulus_reflex-3.5.0.pre2 vs lib/stimulus_reflex/reflex.rb in stimulus_reflex-3.5.0.pre3
- old
+ new
@@ -6,18 +6,18 @@
include ActiveSupport::Rescuable
include StimulusReflex::Callbacks
include ActionView::Helpers::TagHelper
include CableReady::Identifiable
- attr_accessor :payload
+ attr_accessor :payload, :headers
attr_reader :cable_ready, :channel, :url, :element, :selectors, :method_name, :broadcaster, :client_attributes, :logger
alias_method :action_name, :method_name # for compatibility with controller libraries like Pundit that expect an action name
delegate :connection, :stream_name, to: :channel
delegate :controller_class, :flash, :session, to: :request
- delegate :broadcast, :broadcast_message, to: :broadcaster
+ delegate :broadcast, :halted, :error, to: :broadcaster
delegate :reflex_id, :tab_id, :reflex_controller, :xpath_controller, :xpath_element, :permanent_attribute_name, to: :client_attributes
def initialize(channel, url: nil, element: nil, selectors: [], method_name: nil, params: {}, client_attributes: {})
if is_a? CableReady::Broadcaster
message = <<~MSG
@@ -39,10 +39,11 @@
@broadcaster = StimulusReflex::PageBroadcaster.new(self)
@logger = StimulusReflex::Logger.new(self)
@client_attributes = ClientAttributes.new(client_attributes)
@cable_ready = StimulusReflex::CableReadyChannels.new(stream_name, reflex_id)
@payload = {}
+ @headers = {}
self.params
end
def request
@request ||= begin
@@ -95,10 +96,11 @@
end
end
def controller
@controller ||= controller_class.new.tap do |c|
+ request.headers.merge!(headers)
c.instance_variable_set :@stimulus_reflex, true
c.set_request! request
c.set_response! controller_class.make_response!(request)
end
@@ -109,9 +111,12 @@
def controller?
!!defined? @controller
end
def render(*args)
+ options = args.extract_options!
+ (options[:locals] ||= {}).reverse_merge!(params: params)
+ args << options.reverse_merge(layout: false)
controller_class.renderer.new(connection.env.merge("SCRIPT_NAME" => "")).render(*args)
end
# Invoke the reflex action specified by `name` and run all callbacks
def process(name, *args)