grep_routes 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grep_routes (0.0.4)
4
+ grep_routes (0.0.6)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/grep_routes.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "grep_routes"
5
- s.version = "0.0.5"
5
+ s.version = "0.1.0"
6
6
  s.authors = ["Tyler Montgomery"]
7
7
  s.email = ["tyler.a.montgomery@gmail.com"]
8
8
  s.homepage = "http://github.com/ubermajestix/grep_routes"
data/lib/grep_routes.rb CHANGED
@@ -9,6 +9,7 @@ end
9
9
  require 'active_support'
10
10
  require 'active_support/core_ext/hash/reverse_merge'
11
11
  require 'active_support/core_ext/enumerable'
12
+ require 'grep_routes_mock_rack_app'
12
13
 
13
14
  # See if the user has the 3.2 or 3.1 version of actionpack for action_dispatch.
14
15
  # If not, blow up.
@@ -37,7 +38,6 @@ class GrepRoutes
37
38
  @route_file = File.read(path_to_routes_file)
38
39
  @class_name = route_file.match(/(\w+)::Application\.routes\.draw/)[1]
39
40
  self.init_rails_class
40
- self.init_rack_apps
41
41
  end
42
42
 
43
43
  # To make this fast we don't load your rails app or any of your gems.
@@ -60,38 +60,48 @@ class GrepRoutes
60
60
  Object.const_get(class_name,Module.new)
61
61
  end
62
62
 
63
- # If there are any mounted Rack apps in your routes, we'll have to grab their
64
- # classes and define #call on them so they look like Rack apps to the router.
65
- #
66
- # Only the last class needs to have #call defined on it but all the objects
67
- # "above" it need to be defined as Modules - basically we define the object
68
- # heirarchy.
69
- def init_rack_apps
70
- rack_apps = route_file.scan(/mount (.+?\s+)/).flatten.map(&:strip)
71
- rack_apps.each do |class_name|
72
- objects = class_name.split("::")
73
- rack_class = objects.pop
74
- last_object = Object
75
- objects.each do |obj|
76
- last_object.const_set(obj, Module.new) unless last_object.const_defined?(obj)
77
- last_object = last_object.const_get(obj)
78
- end
79
- make_rackapp(last_object, rack_class)
80
- end
81
- end
82
-
83
63
  def make_rackapp(mod, obj)
84
- mod.const_set(obj,Class.new) unless mod.const_defined?(obj)
85
- mod.const_get(obj,Class.new).class_eval do
86
- def self.call
87
- end
88
- end
64
+ mod.const_set(obj,GrepRoutesMockRackApp) unless mod.const_defined?(obj)
89
65
  end
90
66
 
91
67
  # This evals the routes file. After this method is called the RouteSet will
92
68
  # have all of our routes inside it.
69
+
93
70
  def eval_routes
94
- eval(route_file)
71
+ # no_method_retries = 3
72
+ begin
73
+ eval(route_file)
74
+ # If a method is not defined on a class, we define it and try again
75
+ rescue NoMethodError => e
76
+ match = e.message.match(/undefined method `(.+)' for (.+):Class/)
77
+ undefined_method = match[1]
78
+ # TODO there has got to be a better way to do this!
79
+ obj = Object.const_get(match[2], Class.new).class_eval do
80
+ method_to_eval = <<-method_to_eval
81
+ def self.#{undefined_method}
82
+ GrepRoutesMockRackApp.new
83
+ end
84
+ method_to_eval
85
+ eval(method_to_eval)
86
+ end
87
+ retry
88
+ # If a class is not defined we define it and try again
89
+ rescue NameError => e
90
+ class_name = e.message.match(/uninitialized constant (.+)$/)[1].gsub("GrepRoutes::", '')
91
+ define_objects(class_name)
92
+ retry
93
+ end
94
+ end
95
+
96
+ def define_objects(class_name)
97
+ objects = class_name.split("::")
98
+ rack_class = objects.pop
99
+ last_object = Object
100
+ objects.each do |obj|
101
+ last_object.const_set(obj, Module.new) unless last_object.const_defined?(obj)
102
+ last_object = last_object.const_get(obj)
103
+ end
104
+ make_rackapp(last_object, rack_class)
95
105
  end
96
106
 
97
107
  # A shortcut to the RouteSet we defined in init_rails_class.
@@ -100,26 +110,17 @@ class GrepRoutes
100
110
  end
101
111
 
102
112
  # Returns an Array of Hashes to make it easier to reference parts of the route.
103
- # This is stolen from the Rail's routes rake task.
113
+ # This is stolen from the Rail's 3.2 RouteFormatter
104
114
  def routes
105
115
  return @routes if @routes
106
116
 
107
117
  @routes = route_set.routes.collect do |route|
108
- # reqs = route.requirements.dup
109
- # reqs[:to] = route.app unless route.app.class.name.to_s =~ /^ActionDispatch::Routing/
110
- # reqs = reqs.empty? ? "" : reqs.inspect
111
- # puts "="*45
112
- # puts route.path.inspect
113
- # puts route.path.spec.inspect
114
- # puts "="*45
115
- # {:name => route.name.to_s, :verb => route.verb.to_s, :path => route.path.to_s, :reqs => reqs}
116
-
117
118
  route_reqs = route.requirements
118
119
 
119
-
120
120
  controller = route_reqs[:controller] || ':controller'
121
121
  action = route_reqs[:action] || ':action'
122
122
 
123
+ # TODO figure out how they're doing this engine/rackapp routeing stuff.
123
124
  # rack_app = discover_rack_app(route.app)
124
125
  # endpoint = rack_app ? rack_app.inspect : "#{controller}##{action}"
125
126
  endpoint = "#{controller}##{action}"
@@ -164,7 +165,6 @@ class GrepRoutes
164
165
  # This formats the route as an Array of Strings.
165
166
  # This is stolen from the Rail's routes rake task.
166
167
  def formatted_routes
167
- puts routes.first.inspect
168
168
  name_width = routes.map{ |r| r[:name].length }.max
169
169
  verb_width = routes.map{ |r| r[:verb].length }.max
170
170
  path_width = routes.map{ |r| r[:path].length }.max
@@ -0,0 +1,7 @@
1
+ class GrepRoutesMockRackApp
2
+ def self.call
3
+ end
4
+
5
+ def call
6
+ end
7
+ end
@@ -33,4 +33,10 @@ describe GrepRoutes do
33
33
  subject.filter_routes('(privacy|terms)')
34
34
  subject.routes.length.must_equal 2
35
35
  end
36
+
37
+ it "should have a bunch of routes" do
38
+ subject.eval_routes
39
+ subject.routes.length.must_equal 72
40
+
41
+ end
36
42
  end
@@ -51,6 +51,24 @@ SomeRailsApp::Application.routes.draw do
51
51
  end
52
52
  end
53
53
 
54
+ # From https://github.com/francocatena/mawida_app/blob/4f8937b765f0c00dd23e3cafa93182b086f97305/config/routes.rb
55
+ [
56
+ 'cost_analysis', 'create_cost_analysis',
57
+ 'synthesis_report', 'create_synthesis_report',
58
+ 'high_risk_weaknesses_report', 'create_high_risk_weaknesses_report',
59
+ 'fixed_weaknesses_report', 'create_fixed_weaknesses_report',
60
+ 'weaknesses_by_state', 'create_weaknesses_by_state',
61
+ 'weaknesses_by_risk', 'create_weaknesses_by_risk',
62
+ 'weaknesses_by_audit_type', 'create_weaknesses_by_audit_type'
63
+ ].each do |action|
64
+ match "conclusion_committee_reports/#{action}",
65
+ :as => "#{action}_conclusion_committee_reports",
66
+ :to => "conclusion_committee_reports##{action}"
67
+ match "follow_up_committee/#{action}",
68
+ :as => "#{action}_follow_up_committee",
69
+ :to => "follow_up_committee##{action}"
70
+ end
71
+
54
72
  match 'privacy' => 'welcome#privacy'
55
73
  match 'terms' => 'welcome#terms'
56
74
 
@@ -15,5 +15,16 @@ YourApp::Application.routes.draw do
15
15
  mount Preview::StoreMailer => 'mail_view/store_mailer'
16
16
  mount Preview::BrandMailer => 'mail_view/brand_mailer'
17
17
  end
18
-
18
+
19
+ # Some Rack apps in routes.rb files from projects github
20
+
21
+ mount Tolk::Engine => "/tolk"
22
+ mount Evergreen.rails, :at => '/evergreen'
23
+ mount WebsocketApp, :at => '/socket'
24
+ mount SinatraInternal => '/sinatra'
25
+ mount Gitstats::Shitometer => '/gitstats'
26
+ mount Server.new, at: "/server/new"
27
+
28
+ # And a made up Rack app
29
+ mount Nested::RackApp.app, at: '/nested/rackapp'
19
30
  end
@@ -3,18 +3,25 @@ require 'spec_helper'
3
3
  describe GrepRoutes do
4
4
 
5
5
  subject do
6
- GrepRoutes.new('spec/fixtures/routes_with_rack_mounts.rb')
6
+ gr = GrepRoutes.new('spec/fixtures/routes_with_rack_mounts.rb')
7
+ gr.eval_routes
8
+ gr
7
9
  end
8
10
 
9
- it "should handle mounted Rack apps" do
10
- subject.init_rack_apps
11
- subject.eval_routes
12
- subject.routes.length.must_equal 6
11
+ it "should have a route for Tolk" do
12
+ subject.routes.map{|r| r[:path]}.must_include "/tolk"
13
13
  end
14
14
 
15
- it "should print the rack app routes" do
16
- subject.init_rack_apps
17
- subject.eval_routes
18
- subject.print
15
+ it "should have a route for Evergreen.rails" do
16
+ subject.routes.map{|r| r[:path]}.must_include "/evergreen"
19
17
  end
18
+
19
+ it "should have a route for WebSocket" do
20
+ subject.routes.map{|r| r[:path]}.must_include "/socket"
21
+ end
22
+
23
+ it "should have a route for Server.new" do
24
+ subject.routes.map{|r| r[:path]}.must_include "/server/new"
25
+ end
26
+
20
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grep_routes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-23 00:00:00.000000000 Z
12
+ date: 2012-02-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70135441232700 !ruby/object:Gem::Requirement
16
+ requirement: &70270111676060 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70135441232700
24
+ version_requirements: *70270111676060
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: actionpack
27
- requirement: &70135441232040 !ruby/object:Gem::Requirement
27
+ requirement: &70270111675140 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.1'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70135441232040
35
+ version_requirements: *70270111675140
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitest
38
- requirement: &70135441231060 !ruby/object:Gem::Requirement
38
+ requirement: &70270111674580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: 2.11.2
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70135441231060
46
+ version_requirements: *70270111674580
47
47
  description: Greppin in ur routes
48
48
  email:
49
49
  - tyler.a.montgomery@gmail.com
@@ -60,6 +60,7 @@ files:
60
60
  - bin/grep_routes
61
61
  - grep_routes.gemspec
62
62
  - lib/grep_routes.rb
63
+ - lib/grep_routes_mock_rack_app.rb
63
64
  - spec/basic_routes_spec.rb
64
65
  - spec/fixtures/routes.rb
65
66
  - spec/fixtures/routes_with_rack_mounts.rb