Class: Alchemrest::Root

Inherits:
Object
  • Object
show all
Defined in:
lib/alchemrest/root.rb

Constant Summary collapse

@@default_params =

rubocop:disable Style/ClassVars

-> { {} }

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.define_request(name, request_class, &block) ⇒ Object

rubocop:disable Style/ArgumentsForwarding



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/alchemrest/root.rb', line 16

def self.define_request(name, request_class, &block) # rubocop:disable Style/ArgumentsForwarding
  request_definitions[name] = RequestDefinition.new(name, request_class, &block) # rubocop:disable Style/ArgumentsForwarding

  define_method(name) do |params = {}|
    result = build_request(name, params).execute!

    case result
      in Alchemrest::Result::Error[error]
        if self.class.error_handler
          instance_exec(error, &self.class.error_handler)
        end
      else
        nil
    end

    result
  end
end

.error_handlerObject



35
36
37
38
39
# File 'lib/alchemrest/root.rb', line 35

def self.error_handler
  if superclass.respond_to?(:error_handler)
    @error_handler ||= superclass.error_handler
  end
end

.on_alchemrest_error(&block) ⇒ Object



45
46
47
# File 'lib/alchemrest/root.rb', line 45

def self.on_alchemrest_error(&block)
  @error_handler = block
end

.request_definitionsObject



12
13
14
# File 'lib/alchemrest/root.rb', line 12

def self.request_definitions
  @request_definitions ||= superclass.respond_to?(:request_definitions) ? superclass.request_definitions.dup : {}
end

.reset_error_handler!Object



41
42
43
# File 'lib/alchemrest/root.rb', line 41

def self.reset_error_handler!
  @error_handler = nil
end

.use_client(client_class) ⇒ Object



7
8
9
10
# File 'lib/alchemrest/root.rb', line 7

def self.use_client(client_class)
  client = client_class.new
  define_method(:client) { client }
end

Instance Method Details

#build_request(name, params = {}) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/alchemrest/root.rb', line 49

def build_request(name, params = {})
  request_definition = self.class.request_definitions[name]

  raise "No request definition found for #{name}. Did you call `define_request :#{name} in your root class?" unless request_definition

  request = request_definition.build_request(self, params)
  client.build_http_request(request)
end

#clientObject

This method is abstract.

Use ‘.use_client` or override `#client`



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/alchemrest/root.rb', line 59

def client
  raise Alchemrest::UndefinedClientError, <<~MSG
    You forgot to specify a client. You can simply use `use_client` like this:

      class #{self.class} < #{self.class.superclass}
        use_client YourClient
      end

    Or, you can define your client at the instance level:

      class #{self.class} < #{self.class.superclass}
        def client
          YourClient.new
        end
      end
  MSG
end