Class: Datadog::AppSec::APISecurity::EndpointCollection::RailsCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb

Overview

This class works with a collection of rails routes and produces an Enumerator that yields serialized endpoints.

Instance Method Summary collapse

Constructor Details

#initialize(routes) ⇒ RailsCollector

Returns a new instance of RailsCollector.



14
15
16
# File 'lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb', line 14

def initialize(routes)
  @routes = routes
end

Instance Method Details

#to_enumObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb', line 18

def to_enum
  Enumerator.new do |yielder|
    @routes.each do |route|
      if route.dispatcher?
        yielder.yield RailsRouteSerializer.serialize(route)
      elsif mounted_grape_app?(route.app.rack_app)
        route.app.rack_app.routes.each do |grape_route|
          yielder.yield GrapeRouteSerializer.serialize(grape_route, path_prefix: route.path.spec.to_s)
        end
      elsif mounted_sinatra_app?(route.app.rack_app)
        route.app.rack_app.routes.each do |method, sinatra_routes|
          next if method == 'HEAD'

          sinatra_routes.each do |sinatra_route, _, _|
            yielder.yield SinatraRouteSerializer.serialize(
              sinatra_route, method: method, path_prefix: route.path.spec.to_s
            )
          end
        end
      end
    end
  end
end