Class: RoutesCoverage::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/routes_coverage/result.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeResult

Returns a new instance of Result.



3
4
5
# File 'lib/routes_coverage/result.rb', line 3

def initialize
  @route_hits = Hash.new(0)
end

Instance Attribute Details

#route_hitsObject (readonly)

Returns the value of attribute route_hits.



7
8
9
# File 'lib/routes_coverage/result.rb', line 7

def route_hits
  @route_hits
end

Instance Method Details

#all_routesObject



13
14
15
# File 'lib/routes_coverage/result.rb', line 13

def all_routes
  ::Rails.application.routes.routes.routes
end

#avg_hitsObject



81
82
83
# File 'lib/routes_coverage/result.rb', line 81

def avg_hits
  (route_hits.values.sum.to_f / hit_routes_count).round(RoutesCoverage.settings.round_precision)
end

#coverageObject



76
77
78
79
# File 'lib/routes_coverage/result.rb', line 76

def coverage
  return 'n/a' unless expected_routes.any?
  (hit_routes_count * 100.0 / expected_routes_count).round(RoutesCoverage.settings.round_precision)
end

#coverage_pass?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/routes_coverage/result.rb', line 85

def coverage_pass?
  !RoutesCoverage.settings.minimum_coverage || (coverage >= RoutesCoverage.settings.minimum_coverage)
end

#excluded_routesObject



49
50
51
52
# File 'lib/routes_coverage/result.rb', line 49

def excluded_routes
  expected_routes
  @excluded_routes
end

#excluded_routes_countObject



68
69
70
# File 'lib/routes_coverage/result.rb', line 68

def excluded_routes_count
  excluded_routes.size
end

#expected_routesObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/routes_coverage/result.rb', line 17

def expected_routes
  return @expected_routes if @expected_routes

  routes = all_routes.dup

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

  excluded_routes = []
  regex = Regexp.union(RoutesCoverage.settings.exclude_patterns)
  routes.reject!{|r|
    if "#{r.verb.to_s[8..-3]} #{r.path.spec}".strip =~ regex
      excluded_routes << r
    end
  }

  namespaces_regex = Regexp.union(RoutesCoverage.settings.exclude_namespaces.map{|n| /^\/#{n}/})
  routes.reject!{|r|
    if r.path.spec.to_s =~ namespaces_regex
      excluded_routes << r
    end
  }

  @excluded_routes = excluded_routes
  @expected_routes = routes
end

#expected_routes_countObject



64
65
66
# File 'lib/routes_coverage/result.rb', line 64

def expected_routes_count
  expected_routes.size
end

#hit_routesObject



54
55
56
57
# File 'lib/routes_coverage/result.rb', line 54

def hit_routes
  #TODO: sort?
  route_hits.keys
end

#hit_routes_countObject



60
61
62
# File 'lib/routes_coverage/result.rb', line 60

def hit_routes_count
  route_hits.size
end

#pending_routesObject



45
46
47
# File 'lib/routes_coverage/result.rb', line 45

def pending_routes
  expected_routes - hit_routes
end

#total_countObject



72
73
74
# File 'lib/routes_coverage/result.rb', line 72

def total_count
  all_routes.size
end

#touch_route(route) ⇒ Object



9
10
11
# File 'lib/routes_coverage/result.rb', line 9

def touch_route route
  @route_hits[route] += 1
end