lib/sass/embedded/channel.rb
# frozen_string_literal: true require_relative 'compiler' module Sass class Embedded # The {Channel} for {Compiler} calls. Each instance creates its own # {Compiler}. A new {Compiler} is automatically created when the existing # {Compiler} runs out of unique request id. class Channel def initialize @mutex = Mutex.new @compiler = Compiler.new end def close @mutex.synchronize do @compiler.close end end def closed? @mutex.synchronize do @compiler.closed? end end def subscribe(observer) @mutex.synchronize do begin id = @compiler.add_observer(observer) rescue ProtocolError @compiler = Compiler.new id = @compiler.add_observer(observer) end Subscription.new @compiler, observer, id end end # The {Subscription} between {Compiler} and {Observer}. class Subscription attr_reader :id def initialize(compiler, observer, id) @compiler = compiler @observer = observer @id = id end def unsubscribe @compiler.delete_observer(@observer) end def send_message(*args) @compiler.send_message(*args) end end private_constant :Subscription end end end