Class: MemoriClient::Resource

Inherits:
Object
  • Object
show all
Defined in:
lib/memori_client/resource.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, api_root:, version:) ⇒ Resource

Returns a new instance of Resource.



4
5
6
7
8
9
# File 'lib/memori_client/resource.rb', line 4

def initialize(key, api_root:, version:)
  @key = key
  @api_root = api_root
  @version = version
  @operations = {}
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/memori_client/resource.rb', line 24

def method_missing(method, *args, &block)
  if @operations.key?(method.to_s)
    invoke_endpoint(method, *args, &block)
  elsif method.to_s.end_with?('_documentation')
    documentation = @operations[method.to_s.chomp('_documentation')]

    # Add the request body schema to the documentation
    schema_ref = documentation[:spec]['requestBody']['content']['application/json']['schema']['$ref']
    key = schema_ref.split('/').last
    schema = Swagger::SchemaStore.instance.get(key)
    documentation[:request_body_schema] = schema

    documentation
  else
    super
  end
end

Instance Attribute Details

#operationsObject (readonly)

Returns the value of attribute operations.



2
3
4
# File 'lib/memori_client/resource.rb', line 2

def operations
  @operations
end

Instance Method Details

#markdown_documentationObject



16
17
18
19
20
21
22
# File 'lib/memori_client/resource.rb', line 16

def markdown_documentation
  <<~MARKDOWN
    # #{@version}.#{@key.downcase}

    #{@operations.map { |key, operation| operation.markdown_documentation }.join("\n")}
  MARKDOWN
end

#register_operation(item) ⇒ Object



11
12
13
14
# File 'lib/memori_client/resource.rb', line 11

def register_operation(item)
  method_name = item[:method_name]
  @operations[method_name] ||= MemoriClient::Operation.new(item, version: @version, key: @key)
end