Class: Html2rss::RequestService::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/request_service/context.rb

Overview

Holds information needed to send requests to websites. To be passed down to the RequestService's strategies.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url:, headers: {}, request: {}, **request_options) ⇒ Context

Returns a new instance of Context.

Parameters:

  • url (String, Html2rss::Url)

    the URL to request

  • headers (Hash) (defaults to: {})

    HTTP request headers

  • request (Hash) (defaults to: {})

    request specific options passed to strategies

  • request_options (Hash)

    runtime request options

Options Hash (**request_options):

  • :relation (Symbol)

    why this request is being made

  • :origin_url (String, Html2rss::Url, nil)

    originating URL for same-origin checks

  • :policy (Policy)

    runtime request policy

  • :budget (Budget)

    shared request budget for the feed build

Raises:

  • (ArgumentError)

    if policy or budget is explicitly nil



19
20
21
22
23
24
# File 'lib/html2rss/request_service/context.rb', line 19

def initialize(url:, headers: {}, request: {}, **request_options)
  @url = Html2rss::Url.from_absolute(url)
  @headers = headers
  @request = request.freeze
  assign_request_options(request_options)
end

Instance Attribute Details

#budgetBudget (readonly)

Returns the shared request budget.

Returns:

  • (Budget)

    the shared request budget



51
52
53
# File 'lib/html2rss/request_service/context.rb', line 51

def budget
  @budget
end

#headersHash (readonly)

Returns the HTTP request headers.

Returns:

  • (Hash)

    the HTTP request headers



30
31
32
# File 'lib/html2rss/request_service/context.rb', line 30

def headers
  @headers
end

#origin_urlHtml2rss::Url (readonly)

Returns the initial URL for the feed build.

Returns:



45
46
47
# File 'lib/html2rss/request_service/context.rb', line 45

def origin_url
  @origin_url
end

#policyPolicy (readonly)

Returns the runtime request policy.

Returns:

  • (Policy)

    the runtime request policy



48
49
50
# File 'lib/html2rss/request_service/context.rb', line 48

def policy
  @policy
end

#relationSymbol (readonly)

Returns the request relation.

Returns:

  • (Symbol)

    the request relation



42
43
44
# File 'lib/html2rss/request_service/context.rb', line 42

def relation
  @relation
end

#requestHash (readonly)

Returns the request specific options.

Returns:

  • (Hash)

    the request specific options



33
34
35
# File 'lib/html2rss/request_service/context.rb', line 33

def request
  @request
end

#urlHtml2rss::Url (readonly)

Returns the parsed and normalized URL.

Returns:



27
28
29
# File 'lib/html2rss/request_service/context.rb', line 27

def url
  @url
end

Instance Method Details

#browserlessHash

Returns browserless specific options.

Returns:

  • (Hash)

    browserless specific options



36
# File 'lib/html2rss/request_service/context.rb', line 36

def browserless = request.fetch(:browserless, {})

#browserless_preloadHash?

Returns preload options for browserless requests.

Returns:

  • (Hash, nil)

    preload options for browserless requests



39
# File 'lib/html2rss/request_service/context.rb', line 39

def browserless_preload = browserless[:preload]

#follow_up(url:, relation:, origin_url: self.origin_url) ⇒ Context

Builds a follow-up request context sharing headers, budget, and policy.

Parameters:

  • url (String, Html2rss::Url)

    the follow-up URL

  • relation (Symbol)

    why the follow-up is being made

  • origin_url (String, Html2rss::Url) (defaults to: self.origin_url)

    effective origin for same-origin checks

Returns:

  • (Context)

    derived request context



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/html2rss/request_service/context.rb', line 60

def follow_up(url:, relation:, origin_url: self.origin_url)
  self.class.new(
    url:,
    headers:,
    request:,
    relation:,
    origin_url:,
    policy:,
    budget:
  )
end