Class: Lowkey::SinatraAdapter

Inherits:
Adapter
  • Object
show all
Defined in:
lib/adapters/sinatra_adapter.rb

Instance Method Summary collapse

Constructor Details

#initialize(file_proxy:, class_proxy:) ⇒ SinatraAdapter

Returns a new instance of SinatraAdapter.



8
9
10
11
# File 'lib/adapters/sinatra_adapter.rb', line 8

def initialize(file_proxy:, class_proxy:)
  @file_proxy = file_proxy
  @class_proxy = class_proxy
end

Instance Method Details

#loadObject

rubocop:disable Metrics/AbcSize



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/adapters/sinatra_adapter.rb', line 13

def load # rubocop:disable Metrics/AbcSize
  # Type check return values.
  @class_proxy.method_calls.each do |method_call_node|
    next unless %i[get post patch put delete options].include?(method_call_node.name)

    arguments_node = method_call_node.compact_child_nodes.first
    next unless arguments_node.is_a?(Prism::ArgumentsNode)

    pattern = arguments_node.arguments.first.content
    route = "#{method_call_node.name.upcase} #{pattern}"
    name = route
    source = SourceFactory.method_call_source(method_call_node:, arguments_node:, file_path:, lines:)

    next unless (return_proxy = ProxyFactory.return_proxy(method_node: method_call_node, name:, source:))

    param_proxies = [ParamProxy.new(source:, name:, type: :pos_req, position: 0)]
    method_proxy = MethodProxy.new(source:, name:, param_proxies:, return_proxy:)

    @class_proxy.keyed_methods[route] = method_proxy
  end
end