Class: Zenrows::Configuration

Inherits:
Object
  • Object
show all
Includes:
MonitorMixin
Defined in:
lib/zenrows/configuration.rb

Overview

Global configuration for Zenrows client

Examples:

Configure with block

Zenrows.configure do |config|
  config.api_key = 'YOUR_API_KEY'
  config.host = 'superproxy.zenrows.com'
  config.port = 1337
end

Configure directly

Zenrows.configuration.api_key = 'YOUR_API_KEY'

Author:

  • Ernest Bursa

Since:

  • 0.1.0

API:

  • public

Constant Summary collapse

DEFAULTS =

Default configuration values

Since:

  • 0.1.0

API:

  • public

{
  host: "superproxy.zenrows.com",
  port: 1337,
  api_endpoint: "https://api.zenrows.com/v1/",
  connect_timeout: 5,
  read_timeout: 180,
  backend: :http_rb
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.

Since:

  • 0.1.0

API:

  • public



61
62
63
64
# File 'lib/zenrows/configuration.rb', line 61

def initialize
  super # Initialize MonitorMixin
  reset!
end

Instance Attribute Details

#api_endpointString

Returns ZenRows API endpoint for ApiClient.

Returns:

  • ZenRows API endpoint for ApiClient

Since:

  • 0.1.0

API:

  • public



46
47
48
# File 'lib/zenrows/configuration.rb', line 46

def api_endpoint
  @api_endpoint
end

#api_keyString?

Returns ZenRows API key (required).

Returns:

  • ZenRows API key (required)

Since:

  • 0.1.0

API:

  • public



25
26
27
# File 'lib/zenrows/configuration.rb', line 25

def api_key
  @api_key
end

#backendSymbol

Returns HTTP backend to use (:http_rb, :faraday, :net_http).

Returns:

  • HTTP backend to use (:http_rb, :faraday, :net_http)

Since:

  • 0.1.0

API:

  • public



40
41
42
# File 'lib/zenrows/configuration.rb', line 40

def backend
  @backend
end

#connect_timeoutInteger

Returns Default connection timeout in seconds.

Returns:

  • Default connection timeout in seconds

Since:

  • 0.1.0

API:

  • public



34
35
36
# File 'lib/zenrows/configuration.rb', line 34

def connect_timeout
  @connect_timeout
end

#hooksZenrows::Hooks (readonly)

Returns Hook registry for request lifecycle events.

Returns:

  • Hook registry for request lifecycle events

Since:

  • 0.1.0

API:

  • public



49
50
51
# File 'lib/zenrows/configuration.rb', line 49

def hooks
  @hooks
end

#hostString

Returns ZenRows proxy host.

Returns:

  • ZenRows proxy host

Since:

  • 0.1.0

API:

  • public



28
29
30
# File 'lib/zenrows/configuration.rb', line 28

def host
  @host
end

#loggerLogger?

Returns Logger instance for debug output.

Returns:

  • Logger instance for debug output

Since:

  • 0.1.0

API:

  • public



43
44
45
# File 'lib/zenrows/configuration.rb', line 43

def logger
  @logger
end

#portInteger

Returns ZenRows proxy port.

Returns:

  • ZenRows proxy port

Since:

  • 0.1.0

API:

  • public



31
32
33
# File 'lib/zenrows/configuration.rb', line 31

def port
  @port
end

#read_timeoutInteger

Returns Default read timeout in seconds.

Returns:

  • Default read timeout in seconds

Since:

  • 0.1.0

API:

  • public



37
38
39
# File 'lib/zenrows/configuration.rb', line 37

def read_timeout
  @read_timeout
end

Instance Method Details

#add_subscriber(subscriber) ⇒ self

Add a subscriber object for hook events

Subscribers can implement any of: before_request, after_request, on_response, on_error, around_request.

Examples:

class MySubscriber
  def on_response(response, context)
    puts response.status
  end
end
config.add_subscriber(MySubscriber.new)

Parameters:

  • Object responding to hook methods

Returns:

Since:

  • 0.1.0

API:

  • public



185
186
187
188
# File 'lib/zenrows/configuration.rb', line 185

def add_subscriber(subscriber)
  hooks.add_subscriber(subscriber)
  self
end

#after_request(callable = nil) {|context| ... } ⇒ self

Register a callback to run after each request (always runs)

Examples:

config.after_request { |ctx| puts "Finished: #{ctx[:duration]}s" }

Parameters:

  • (defaults to: nil)

    Callable object

Yields:

  • (context)

    Block to execute

Yield Parameters:

  • context (Hash)

    Request context

Returns:

Since:

  • 0.1.0

API:

  • public



106
107
108
109
# File 'lib/zenrows/configuration.rb', line 106

def after_request(callable = nil, &block)
  hooks.register(:after_request, callable, &block)
  self
end

#around_request(callable = nil) {|context, &block| ... } ⇒ self

Register a callback to wrap around requests

Around callbacks can modify timing, add retries, etc. The block MUST call the passed block and return its result.

Examples:

Timing

config.around_request do |ctx, &block|
  start = Time.now
  response = block.call
  puts "Request took #{Time.now - start}s"
  response
end

Parameters:

  • (defaults to: nil)

    Callable object

Yields:

  • (context, &block)

    Block to execute

Yield Parameters:

  • context (Hash)

    Request context

  • block (Proc)

    Block to call to execute the request

Returns:

Since:

  • 0.1.0

API:

  • public



165
166
167
168
# File 'lib/zenrows/configuration.rb', line 165

def around_request(callable = nil, &block)
  hooks.register(:around_request, callable, &block)
  self
end

#before_request(callable = nil) {|context| ... } ⇒ self

Register a callback to run before each request

Examples:

config.before_request { |ctx| puts "Starting: #{ctx[:url]}" }

Parameters:

  • (defaults to: nil)

    Callable object

Yields:

  • (context)

    Block to execute

Yield Parameters:

  • context (Hash)

    Request context

Returns:

Since:

  • 0.1.0

API:

  • public



92
93
94
95
# File 'lib/zenrows/configuration.rb', line 92

def before_request(callable = nil, &block)
  hooks.register(:before_request, callable, &block)
  self
end

#on_error(callable = nil) {|error, context| ... } ⇒ self

Register a callback to run on request error

Examples:

config.on_error { |err, ctx| Sentry.capture_exception(err) }

Parameters:

  • (defaults to: nil)

    Callable object

Yields:

  • (error, context)

    Block to execute

Yield Parameters:

  • error (Exception)

    The error that occurred

  • context (Hash)

    Request context

Returns:

Since:

  • 0.1.0

API:

  • public



142
143
144
145
# File 'lib/zenrows/configuration.rb', line 142

def on_error(callable = nil, &block)
  hooks.register(:on_error, callable, &block)
  self
end

#on_response(callable = nil) {|response, context| ... } ⇒ self

Register a callback to run on successful response

Examples:

Log by host

config.on_response { |resp, ctx| puts "#{ctx[:host]} -> #{resp.status}" }

Track costs

config.on_response do |resp, ctx|
  cost = ctx[:zenrows_headers][:request_cost]
  StatsD.increment('zenrows.cost', cost) if cost
end

Parameters:

  • (defaults to: nil)

    Callable object

Yields:

  • (response, context)

    Block to execute

Yield Parameters:

  • response (Object)

    HTTP response

  • context (Hash)

    Request context with ZenRows headers

Returns:

Since:

  • 0.1.0

API:

  • public



127
128
129
130
# File 'lib/zenrows/configuration.rb', line 127

def on_response(callable = nil, &block)
  hooks.register(:on_response, callable, &block)
  self
end

#reset!void

This method returns an undefined value.

Reset configuration to defaults

Since:

  • 0.1.0

API:

  • public



69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/zenrows/configuration.rb', line 69

def reset!
  synchronize do
    @api_key = nil
    @host = DEFAULTS[:host]
    @port = DEFAULTS[:port]
    @api_endpoint = DEFAULTS[:api_endpoint]
    @connect_timeout = DEFAULTS[:connect_timeout]
    @read_timeout = DEFAULTS[:read_timeout]
    @backend = DEFAULTS[:backend]
    @logger = nil
    @hooks = Hooks.new
  end
end

#to_hHash

Convert configuration to hash

Returns:

  • configuration as hash

Since:

  • 0.1.0

API:

  • public



213
214
215
216
217
218
219
220
221
222
223
# File 'lib/zenrows/configuration.rb', line 213

def to_h
  {
    api_key: api_key,
    host: host,
    port: port,
    api_endpoint: api_endpoint,
    connect_timeout: connect_timeout,
    read_timeout: read_timeout,
    backend: backend
  }
end

#valid?Boolean

Check if configuration is valid

Returns:

  • true if configuration is valid

Since:

  • 0.1.0

API:

  • public



203
204
205
206
207
208
# File 'lib/zenrows/configuration.rb', line 203

def valid?
  validate!
  true
rescue ConfigurationError
  false
end

#validate!true

Validate that required configuration is present

Returns:

  • if configuration is valid

Raises:

  • if api_key is missing

Since:

  • 0.1.0

API:

  • public



194
195
196
197
198
# File 'lib/zenrows/configuration.rb', line 194

def validate!
  raise ConfigurationError, "api_key is required" if api_key.nil? || api_key.empty?

  true
end