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.
167 168 169 170 171 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 167 def initialize(pushed_props) @queue = Async::Queue.new @pushed_props = pushed_props @closed = false end |
Instance Method Details
#close ⇒ Object
193 194 195 196 197 198 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 193 def close return if @closed @queue.close @closed = true end |
#closed? ⇒ Boolean
200 201 202 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 200 def closed? @closed end |
#dequeue ⇒ Object
Blocks until a prop name is available, or returns nil if closed.
187 188 189 190 191 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 187 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.
175 176 177 178 179 180 181 182 183 184 |
# File 'lib/react_on_rails_pro/async_props_emitter.rb', line 175 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 |