Class: Alchemrest::Root
- Inherits:
-
Object
- Object
- Alchemrest::Root
- Defined in:
- lib/alchemrest/root.rb
Constant Summary collapse
- @@default_params =
rubocop:disable Style/ClassVars
-> { {} }
Class Method Summary collapse
-
.define_request(name, request_class, &block) ⇒ Object
rubocop:disable Style/ArgumentsForwarding.
- .error_handler ⇒ Object
- .on_alchemrest_error(&block) ⇒ Object
- .request_definitions ⇒ Object
- .reset_error_handler! ⇒ Object
- .use_client(client_class) ⇒ Object
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_handler ⇒ Object
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_definitions ⇒ Object
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 |
#client ⇒ Object
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 |