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.
173 174 175 176 177 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 173 def initialize(pushed_props) @queue = Async::Queue.new @pushed_props = pushed_props @closed = false end |
Instance Method Details
#close ⇒ Object
199 200 201 202 203 204 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 199 def close return if @closed @queue.close @closed = true end |
#closed? ⇒ Boolean
206 207 208 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 206 def closed? @closed end |
#dequeue ⇒ Object
Blocks until a prop name is available, or returns nil if closed.
193 194 195 196 197 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 193 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.
181 182 183 184 185 186 187 188 189 190 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 181 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 |