Class: ReactOnRailsPro::PullRequestQueue
- Inherits:
-
Object
- Object
- ReactOnRailsPro::PullRequestQueue
- Defined in:
- lib/react_on_rails_pro/async_props_emitter.rb
Overview
Queue of prop names requested by React (pull mode). Wraps Async::Queue with automatic filtering of already-pushed props. dequeue returns nil after the queue is closed (render complete).
Instance Method Summary collapse
- #close ⇒ Object
- #closed? ⇒ Boolean
-
#dequeue ⇒ Object
Blocks until a prop name is available, or returns nil if closed.
-
#enqueue(prop_name) ⇒ Object
Enqueue a propRequest from the Node renderer.
-
#initialize(pushed_props) ⇒ PullRequestQueue
constructor
A new instance of PullRequestQueue.
Constructor Details
#initialize(pushed_props) ⇒ PullRequestQueue
Returns a new instance of PullRequestQueue.
230 231 232 233 234 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 230 def initialize(pushed_props) @queue = Async::Queue.new @pushed_props = pushed_props @closed = false end |
Instance Method Details
#close ⇒ Object
256 257 258 259 260 261 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 256 def close return if @closed @queue.close @closed = true end |
#closed? ⇒ Boolean
263 264 265 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 263 def closed? @closed end |
#dequeue ⇒ Object
Blocks until a prop name is available, or returns nil if closed.
250 251 252 253 254 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 250 def dequeue @queue.dequeue rescue Async::Queue::ClosedError nil end |
#enqueue(prop_name) ⇒ Object
Enqueue a propRequest from the Node renderer. Silently drops requests for props that have already been pushed.
238 239 240 241 242 243 244 245 246 247 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 238 def enqueue(prop_name) # @pushed_props is mutated by AsyncPropsEmitter#call. In fiber-concurrent # code this has a narrow TOCTOU window; duplicate requests are filtered on # the TypeScript side via AsyncPropsManager's pullRequested flag. return if @closed || @pushed_props.include?(prop_name) @queue.enqueue(prop_name) rescue Async::Queue::ClosedError # Queue closed between the @closed guard and enqueue; safe to ignore. end |