Module: Clientura::Client::InstanceMethods

Defined in:
lib/clientura/client.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#configObject



110
111
112
# File 'lib/clientura/client.rb', line 110

def config
  @config ||= {}
end

Class Method Details

.included(klass) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/clientura/client.rb', line 92

def self.included(klass)
  klass.class_eval do
    define_method :registered_endpoints do
      klass.registered_endpoints
    end

    define_method :registered_pipes do
      klass.registered_pipes
    end

    define_method :registered_middleware do
      klass.registered_middleware
    end
  end
end

Instance Method Details

#call_endpoint(name_, args) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/clientura/client.rb', line 118

def call_endpoint(name_, args)
  endpoint = registered_endpoints.fetch name_

  middlewares = endpoint.middleware.map do |name:, config:|
    { callable: registered_middleware.fetch(name), config: config }
  end

  request = middlewares
            .reduce Request.new do |request_, callable:, config:|
    middleware = MiddlewareFunctionContext.new(request: request_,
                                               client: self,
                                               args: args,
                                               callable: callable,
                                               config: config)
    middleware.call
  end

  request  = request.update(:method) { endpoint.verb }
  request  = request.update(:path) { endpoint.path.call(args) }
  response = request.call

  endpoints = endpoint.pipes.map do |name:, config:|
    -> (res) { registered_pipes.fetch(name).call(res, *config) }
  end

  endpoints.reduce response do |response_, pipe|
    pipe.call response_
  end
end

#save_config(args) ⇒ Object



114
115
116
# File 'lib/clientura/client.rb', line 114

def save_config(args)
  self.config = config.merge args
end