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

rubocop:enable all



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

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



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

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



79
80
81
82
83
84
# File 'lib/restify/context.rb', line 79

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

#marshal_load(dump) ⇒ Object



86
87
88
89
# File 'lib/restify/context.rb', line 86

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

rubocop:disable Metrics/MethodLength



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

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

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