module RoutesCoverage

Constants

VERSION

Public Class Methods

_touch_route(route) click to toggle source
# File lib/routes_coverage.rb, line 147
def self._touch_route route
  reset! unless @@route_hit_count
  @@route_hit_count[route] += 1
end
configure() { |settings| ... } click to toggle source
# File lib/routes_coverage.rb, line 69
def self.configure
  yield self.settings
end
enabled?() click to toggle source
# File lib/routes_coverage.rb, line 61
def self.enabled?
  ::Rails.env.test?
end
perform_report() click to toggle source
# File lib/routes_coverage.rb, line 80
def self.perform_report
  return unless settings.perform_report

  all_routes = ::Rails.application.routes.routes.routes.dup

  if defined?(::Sprockets) && defined?(::Sprockets::Environment)
    all_routes.reject!{|r| r.app.is_a?(::Sprockets::Environment) }
  end

  if settings.exclude_put_fallbacks
    all_routes.reject!{|put_route|
      (
        put_route.verb == /^PUT$/ ||
        put_route.verb == "PUT" # rails 5
      ) &&
      put_route.name.nil? &&
      @@route_hit_count[put_route] == 0 &&
      all_routes.any?{|patch_route|
        (
          patch_route.verb == /^PATCH$/ ||
          patch_route.verb == "PATCH" # rails5
        ) &&
        patch_route.defaults == put_route.defaults &&
        patch_route.ip == put_route.ip &&
        patch_route.path.spec.to_s == put_route.path.spec.to_s
      }
    }
  end

  all_result = Result.new(
    all_routes,
    @@route_hit_count,
    settings
  )


  groups = Hash[settings.groups.map{|group_name, regex|
    [group_name,
      Result.new(
        all_routes.select{|r| r.path.spec.to_s =~ regex},
        Hash[@@route_hit_count.select{|r,_hits| r.path.spec.to_s =~ regex}],
        settings
      )
    ]
  }]

  if groups.size > 1
    ungroupped_routes = all_routes.reject{|r|
      groups.values.any?{|group_routes|
        group_routes.all_routes.include? r
      }
    }

    if ungroupped_routes.any?
      groups["Ungroupped"] = Result.new(
        ungroupped_routes,
        Hash[@@route_hit_count.select{|r,_hits| ungroupped_routes.include? r}],
        settings
      )
    end
  end

  puts
  puts settings.formatter_class.new(all_result, groups, settings).format
end
reset!() click to toggle source
# File lib/routes_coverage.rb, line 75
def self.reset!
  @@route_hit_count = Hash.new(0)
  @@pid = Process.pid
end
settings() click to toggle source
# File lib/routes_coverage.rb, line 65
def self.settings
  @@settings ||= Settings.new
end