Module: Bidi2pdf::Bidi::Interceptor
- Included in:
- AddHeadersInterceptor, AuthInterceptor
- Defined in:
- lib/bidi2pdf/bidi/interceptor.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #client ⇒ Object
- #context ⇒ Object
-
#handle_event(response) ⇒ Object
rubocop: disable Metrics/AbcSize.
-
#interceptor_id ⇒ Object
rubocop: enable Metrics/AbcSize.
- #process_interception(_event_response, _navigation_id, _network_id, _url) ⇒ Object
- #register_with_client(client:) ⇒ Object
- #unregister_with_client(client:) ⇒ Object
- #url_patterns ⇒ Object
- #validate_phases! ⇒ Object
Class Method Details
.included(base) ⇒ Object
6 7 8 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 6 def self.included(base) base.extend(ClassMethods) end |
Instance Method Details
#client ⇒ Object
74 75 76 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 74 def client @client end |
#context ⇒ Object
18 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 18 def context = raise(NotImplementedError, "Interceptors must implement context") |
#handle_event(response) ⇒ Object
rubocop: disable Metrics/AbcSize
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 49 def handle_event(response) event_response = response["params"] return unless event_response["intercepts"]&.include?(interceptor_id) && event_response["isBlocked"] = event_response["navigation"] network_id = event_response["request"]["request"] url = event_response["request"]["url"] # Log the interception Bidi2pdf.logger.debug1 "Interceptor #{interceptor_id} handling event: #{}/#{network_id}/#{url}" process_interception(event_response, , network_id, url) rescue StandardError => e Bidi2pdf.logger.error "Error handling event: #{e.}" Bidi2pdf.logger.error e.backtrace.join("\n") raise e end |
#interceptor_id ⇒ Object
rubocop: enable Metrics/AbcSize
70 71 72 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 70 def interceptor_id @interceptor_id end |
#process_interception(_event_response, _navigation_id, _network_id, _url) ⇒ Object
20 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 20 def process_interception(_event_response, , _network_id, _url) = raise(NotImplementedError, "Interceptors must implement process_interception") |
#register_with_client(client:) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 22 def register_with_client(client:) @client = client cmd = Bidi2pdf::Bidi::Commands::AddIntercept.new context: context, phases: self.class.phases, url_patterns: url_patterns client.send_cmd_and_wait(cmd) do |response| @interceptor_id = response["result"]["intercept"] Bidi2pdf.logger.debug2 "Interceptor added: #{@interceptor_id}" @handle_event_listener = client.on_event(*self.class.events, &method(:handle_event)) self end end |
#unregister_with_client(client:) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 38 def unregister_with_client(client:) return unless @handle_event_listener client.remove_event_listener(*self.class.events, @handle_event_listener) Bidi2pdf.logger.debug2 "Interceptor removed: #{@interceptor_id}" @handle_event_listener = nil end |
#url_patterns ⇒ Object
16 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 16 def url_patterns = raise(NotImplementedError, "Interceptors must implement url_patterns") |
#validate_phases! ⇒ Object
78 79 80 81 82 |
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 78 def validate_phases! valid_phases = [Phases::BEFORE_REQUEST, Phases::RESPONSE_STARTED, Phases::AUTH_REQUIRED] raise ArgumentError, "Unsupported phase(s): #{self.class.phases}" unless self.class.phases.all? { |phase| valid_phases.include?(phase) } end |