Class: Restify::Context

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

Overview

A resource context.

The resource context contains relations and the effective response URI. The context is used to resolve relative URI and follow links.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri, **kwargs) ⇒ Context

Returns a new instance of Context.



23
24
25
26
27
28
29
30
31
# File 'lib/restify/context.rb', line 23

def initialize(uri, **kwargs)
  @uri = if uri.is_a?(Addressable::URI)
           uri
         else
           @uri = Addressable::URI.parse(uri.to_s)
         end

  @options = kwargs
end

Instance Attribute Details

#optionsHash (readonly)

Options passed to this context.

Returns:

  • (Hash)

    Options.



21
22
23
# File 'lib/restify/context.rb', line 21

def options
  @options
end

#uriAddressable::URI (readonly)

Effective context URI.

Returns:

  • (Addressable::URI)

    Effective context URI.



15
16
17
# File 'lib/restify/context.rb', line 15

def uri
  @uri
end

Instance Method Details

#encode_with(coder) ⇒ Object



67
68
69
# File 'lib/restify/context.rb', line 67

def encode_with(coder)
  coder.map = marshal_dump
end

#inherit(uri, **kwargs) ⇒ Object



37
38
39
40
# File 'lib/restify/context.rb', line 37

def inherit(uri, **kwargs)
  uri ||= self.uri
  Context.new(uri, **kwargs, **options)
end

#init_with(coder) ⇒ Object



71
72
73
# File 'lib/restify/context.rb', line 71

def init_with(coder)
  marshal_load(coder.map)
end

#join(uri) ⇒ Object



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

def join(uri)
  self.uri.join uri
end

#marshal_dumpObject



75
76
77
78
79
80
# File 'lib/restify/context.rb', line 75

def marshal_dump
  {
    uri: uri.to_s,
    headers: default_headers,
  }
end

#marshal_load(dump) ⇒ Object



82
83
84
85
# File 'lib/restify/context.rb', line 82

def marshal_load(dump)
  initialize dump.delete(:uri),
    headers: dump.fetch(:headers)
end

#process(response) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/restify/context.rb', line 42

def process(response)
  context   = inherit response.uri
  processor = Restify::PROCESSORS.find {|p| p.accept? response }
  processor ||= Restify::Processors::Base

  processor.new(context, response).resource
end

#request(method, uri, data: nil, headers: {}, **kwargs) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/restify/context.rb', line 50

def request(method, uri, data: nil, headers: {}, **kwargs)
  request = Request.new(
    headers: default_headers.merge(headers),
    **kwargs,
    method:,
    uri: join(uri),
    data:,
  )

  ret = cache.call(request) {|req| adapter.call(req) }
  ret.then do |response|
    raise ResponseError.from_code(response) if response.errored?

    process(response)
  end
end