grep_routes 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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