stratagem 0.1.8 → 0.1.9
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/Manifest +16 -18
- data/Rakefile +3 -3
- data/bin/stratagem +54 -6
- data/generators/stratagem/stratagem_generator.rb +26 -0
- data/lib/generators/stratagem/install/USAGE +0 -0
- data/lib/generators/stratagem/install/install_base.rb +35 -0
- data/lib/generators/stratagem/install/install_generator.rb +24 -0
- data/lib/stratagem.rb +87 -57
- data/lib/stratagem/authentication.rb +2 -2
- data/lib/stratagem/auto_mock/aquifer.rb +6 -1
- data/lib/stratagem/auto_mock/factory.rb +2 -2
- data/lib/stratagem/client.rb +1 -1
- data/lib/stratagem/crawler.rb +2 -0
- data/lib/stratagem/crawler/authentication.rb +10 -9
- data/lib/stratagem/crawler/parameter_resolver.rb +83 -0
- data/lib/stratagem/crawler/route_invoker.rb +187 -0
- data/lib/stratagem/crawler/session.rb +23 -251
- data/lib/stratagem/crawler/site_model.rb +18 -16
- data/lib/stratagem/framework_extensions.rb +12 -1
- data/lib/stratagem/framework_extensions/method_invocation.rb +50 -0
- data/lib/stratagem/framework_extensions/models/adapters/active_model/detect.rb +1 -1
- data/lib/stratagem/framework_extensions/models/adapters/active_model/extensions.rb +20 -11
- data/lib/stratagem/framework_extensions/models/adapters/active_model/metadata.rb +7 -3
- data/lib/stratagem/framework_extensions/models/adapters/active_model/tracing.rb +11 -9
- data/lib/stratagem/framework_extensions/models/adapters/friendly_id/detect.rb +12 -0
- data/lib/stratagem/framework_extensions/models/adapters/friendly_id/extensions.rb +0 -0
- data/lib/stratagem/framework_extensions/models/adapters/friendly_id/metadata.rb +21 -0
- data/lib/stratagem/framework_extensions/models/adapters/friendly_id/tracing.rb +4 -0
- data/lib/stratagem/framework_extensions/models/annotations.rb +1 -24
- data/lib/stratagem/framework_extensions/models/tracing.rb +9 -3
- data/lib/stratagem/framework_extensions/rails.rb +0 -6
- data/lib/stratagem/framework_extensions/{controllers → rails2}/action_controller.rb +0 -0
- data/lib/stratagem/framework_extensions/{controllers → rails2}/action_mailer.rb +0 -0
- data/lib/stratagem/framework_extensions/rails3/parameters.rb +14 -0
- data/lib/stratagem/interface/browser.rb +3 -1
- data/lib/stratagem/model/application.rb +6 -6
- data/lib/stratagem/model/components/controller.rb +17 -63
- data/lib/stratagem/model/components/model.rb +33 -33
- data/lib/stratagem/model/components/reference.rb +8 -4
- data/lib/stratagem/model/components/route.rb +40 -14
- data/lib/stratagem/model/components/view.rb +1 -1
- data/lib/stratagem/model_builder.rb +71 -42
- data/lib/stratagem/site_crawler.rb +1 -1
- data/lib/stratagem/snapshot.rb +0 -1
- data/stratagem.gemspec +10 -7
- data/templates/install/environments/stratagem.rb.erb +16 -0
- data/templates/install/tasks/stratagem.rake +18 -0
- metadata +57 -40
- data/lib/stratagem/framework_extensions/controllers.rb +0 -5
- data/lib/stratagem/scan/checks/filter_parameter_logging.rb +0 -6
- data/lib/stratagem/scan/checks/mongo_mapper/base.rb +0 -19
- data/lib/stratagem/scan/checks/mongo_mapper/foreign_keys_exposed.rb +0 -32
- data/lib/stratagem/scan/checks/routes.rb +0 -16
- data/lib/tasks/_old_stratagem.rake +0 -99
- data/spec/model/component_spec.rb +0 -43
- data/spec/model/components/view_spec.rb +0 -43
- data/spec/model/test_spec.rb +0 -10
- data/spec/samples/404.html.erb +0 -30
- data/spec/samples/_form.html.erb +0 -8
- data/spec/samples/index.html.erb +0 -77
- data/spec/samples/sample_model.rb +0 -5
- data/spec/samples/signup.html.erb +0 -14
- data/spec/scan/checks/email_address_spec.rb +0 -24
- data/spec/scan/checks/error_pages_spec.rb +0 -22
@@ -11,11 +11,15 @@ module Stratagem::Model::Component
|
|
11
11
|
@models_rendered = {} # model => [MethodInvocation]
|
12
12
|
end
|
13
13
|
|
14
|
-
def model_invocations
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
def model_invocations(type=nil)
|
15
|
+
invocations = []
|
16
|
+
Stratagem::ApplicationExtensions::Models::Tracing.invocations_audit.each {|invocation|
|
17
|
+
if ((invocation.controller_path == controller.path) && (invocation.controller_action.to_s == self.name.to_s))
|
18
|
+
invocations << invocation unless invocations.include?(invocation)
|
19
|
+
end
|
20
|
+
}
|
21
|
+
invocations = invocations.select {|i| i.type == type } if type
|
22
|
+
invocations
|
19
23
|
end
|
20
24
|
|
21
25
|
end
|
@@ -30,6 +34,10 @@ module Stratagem::Model::Component
|
|
30
34
|
@actions = []
|
31
35
|
end
|
32
36
|
|
37
|
+
def action(name)
|
38
|
+
@actions.find {|a| a.name.to_s == name.to_s }
|
39
|
+
end
|
40
|
+
|
33
41
|
def add_routable_action(name, method)
|
34
42
|
@actions << Action.new(self, name, method)
|
35
43
|
end
|
@@ -37,69 +45,15 @@ module Stratagem::Model::Component
|
|
37
45
|
def export
|
38
46
|
{
|
39
47
|
:external_id => self.object_id,
|
40
|
-
:
|
41
|
-
:path => @path.gsub(RAILS_ROOT+'/', ''),
|
42
|
-
:class_name =>
|
48
|
+
:component_type => :controller,
|
49
|
+
:path => @path ? @path.gsub(RAILS_ROOT+'/', '') : nil,
|
50
|
+
:class_name => klass.name,
|
43
51
|
:invalid_routes => @invalid_routes
|
44
52
|
}
|
45
53
|
end
|
46
54
|
|
47
|
-
# returns a list of references that create or update the specified model.
|
48
|
-
# see deletes? for destruction of model
|
49
|
-
def modifies(model)
|
50
|
-
# @modifies ||= {}
|
51
|
-
# @modifies[model] ||= begin
|
52
|
-
# outline = {} # method keys, value is hash of variables and values
|
53
|
-
# current_method = nil
|
54
|
-
# references = Set.new
|
55
|
-
#
|
56
|
-
# # return [] unless ((model.klass == WineFollow) && (self.klass == FollowsController))
|
57
|
-
#
|
58
|
-
# self.parse_tree.walk {|parent,i,subi,node|
|
59
|
-
# case node
|
60
|
-
# when RedParse::MethodNode #... do something with method calls
|
61
|
-
# current_method = node.name
|
62
|
-
# outline[current_method] = {}
|
63
|
-
# # puts "CURRENTMETHOD: #{current_method}"
|
64
|
-
# when RedParse::AssignNode
|
65
|
-
# if (node.left.kind_of?(RedParse::VarNode))
|
66
|
-
# begin
|
67
|
-
# # puts "assigning:#{node.left.name} -> #{node.right.dereference}"
|
68
|
-
# deref = node.right.dereference
|
69
|
-
# ((outline[current_method][node.left.name] ||= []) << deref) if current_method && deref
|
70
|
-
# rescue
|
71
|
-
# puts $!.message
|
72
|
-
# puts $!.backtrace
|
73
|
-
# logger.error("Cannot dereference node #{node.right.to_s}")
|
74
|
-
# end
|
75
|
-
# end
|
76
|
-
# when RedParse::CallNode
|
77
|
-
# ['update','create','new'].each {|m|
|
78
|
-
# # then this is a crud operation (excluding destroy)
|
79
|
-
# if (node.name.include?(m))
|
80
|
-
# if (node.talking_about? model)
|
81
|
-
# references << create_reference(node, current_method, model)
|
82
|
-
# break
|
83
|
-
# elsif (node.receiver && node.receiver.methods_include?(:name) && outline[current_method])
|
84
|
-
# if ((outline[current_method][node.receiver.name] || []).include?(model.klass))
|
85
|
-
# references << create_reference(node, current_method, model)
|
86
|
-
# break
|
87
|
-
# end
|
88
|
-
# end
|
89
|
-
# end
|
90
|
-
# }
|
91
|
-
# end
|
92
|
-
# node
|
93
|
-
# }
|
94
|
-
# references.to_a
|
95
|
-
# end
|
96
|
-
[]
|
97
|
-
end
|
98
|
-
|
99
55
|
def references
|
100
|
-
actions.map {|action|
|
101
|
-
action.model_invocations.map {|inv| inv.to_reference }
|
102
|
-
}.flatten
|
56
|
+
actions.map {|action| action.model_invocations }.flatten.uniq.map {|inv| inv.to_reference }
|
103
57
|
end
|
104
58
|
|
105
59
|
private
|
@@ -94,44 +94,44 @@ module Stratagem::Model::Component
|
|
94
94
|
end
|
95
95
|
|
96
96
|
# References to the find and find_x methods on the model
|
97
|
-
def references_to_finders()
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
end
|
97
|
+
# def references_to_finders()
|
98
|
+
# references = []
|
99
|
+
# method = nil
|
100
|
+
# app_model.controllers.each {|controller|
|
101
|
+
# controller.parse_tree.walk {|parent,i,subi,node|
|
102
|
+
# case node
|
103
|
+
# when RedParse::MethodNode
|
104
|
+
# method = node
|
105
|
+
# when RedParse::CallNode
|
106
|
+
# if (!(parent.kind_of?(RedParse::AssignNode)) && (node.receiver) && (node.receiver.to_s == klass.name))
|
107
|
+
# references << ControllerModelReference.new(controller, method.name, node.name, node)
|
108
|
+
# end
|
109
|
+
# end
|
110
|
+
#
|
111
|
+
# case parent
|
112
|
+
# when RedParse::AssignNode
|
113
|
+
# # p parent
|
114
|
+
# begin
|
115
|
+
# if (node.kind_of?(RedParse::CallNode) && (node.receiver) && (node.receiver.name == klass.name))
|
116
|
+
# references << ControllerModelReference.new(controller, method.name, node.name, node)
|
117
|
+
# end
|
118
|
+
# rescue
|
119
|
+
# puts $!.message
|
120
|
+
# puts $!.backtrace
|
121
|
+
# # p parent
|
122
|
+
# end
|
123
|
+
# end
|
124
|
+
# true
|
125
|
+
# }
|
126
|
+
# }
|
127
|
+
# references
|
128
|
+
# end
|
129
129
|
|
130
130
|
def export
|
131
131
|
adapters = stratagem? ? klass.stratagem.callbacks.map {|c| c.class.name } : []
|
132
132
|
{
|
133
133
|
:external_id => self.object_id,
|
134
|
-
:
|
134
|
+
:component_type => :model,
|
135
135
|
:path => @path.gsub(RAILS_ROOT+'/', ''),
|
136
136
|
:class_name => @klass.name,
|
137
137
|
:superclass => @klass.superclass.name,
|
@@ -2,16 +2,20 @@ module Stratagem::Model::Component
|
|
2
2
|
class Reference
|
3
3
|
attr_accessor :reference_type # :read, :write
|
4
4
|
attr_accessor :from_component, :to_component
|
5
|
-
attr_accessor :line_number, :
|
5
|
+
attr_accessor :line_number, :request_method, :function, :options, :stack_trace
|
6
6
|
|
7
|
-
|
7
|
+
EQUALITY_ATTRS = [:reference_type, :from_component, :to_component, :line_number, :method, :function]
|
8
8
|
|
9
9
|
def initialize(args={})
|
10
10
|
args.each {|key,val| self.send("#{key}=", val) }
|
11
11
|
end
|
12
12
|
|
13
13
|
def ==(other)
|
14
|
-
|
14
|
+
eql?(other)
|
15
|
+
end
|
16
|
+
|
17
|
+
def eql?(other)
|
18
|
+
EQUALITY_ATTRS.find {|attribute|
|
15
19
|
self.send(attribute) != other.send(attribute)
|
16
20
|
}.nil?
|
17
21
|
end
|
@@ -23,7 +27,7 @@ module Stratagem::Model::Component
|
|
23
27
|
:from_component_external_id => from_component.object_id,
|
24
28
|
:to_component_external_id => to_component.object_id,
|
25
29
|
:line_number => line_number,
|
26
|
-
:
|
30
|
+
:request_method => request_method,
|
27
31
|
:function => function,
|
28
32
|
:options => options ? options.to_json : nil,
|
29
33
|
:stack_trace => reference_type == :write ? compressed_stack_trace : nil
|
@@ -1,18 +1,49 @@
|
|
1
1
|
module Stratagem::Model::Component
|
2
2
|
class Route < Base
|
3
|
-
attr_reader :route
|
3
|
+
attr_reader :route, :segment_keys, :path, :verb, :controller_name, :controller_path, :action_name
|
4
4
|
|
5
5
|
def initialize(route)
|
6
6
|
@route = route
|
7
|
+
if (Stratagem.rails_3?)
|
8
|
+
@path = route.path
|
9
|
+
@controller_path = route.requirements[:controller]
|
10
|
+
@action_name = route.requirements[:action]
|
11
|
+
@verb = (route.verb || :GET).downcase.to_sym
|
12
|
+
elsif (Stratagem.rails_2?)
|
13
|
+
@path = route.segments.join.sub(/[\?\/]$/, '')
|
14
|
+
@controller_path = route.parameter_shell[:controller]
|
15
|
+
@action_name = route.parameter_shell[:action]
|
16
|
+
@verb = route.conditions[:method] || :get
|
17
|
+
end
|
18
|
+
|
19
|
+
@segment_keys = route.segment_keys
|
20
|
+
@action_name = @action_name.to_sym if @action_name
|
21
|
+
if (@controller_path)
|
22
|
+
@controller_name = @controller_path.gsub('/','::').split('::').map {|part| part.camelcase }.join('::')
|
23
|
+
@controller_name << 'Controller'
|
24
|
+
end
|
25
|
+
puts "CONTROLLER INFO: #{@controller_name}, #{@action_name}, #{@verb}, #{controller}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def responds_to?(path, request_method)
|
29
|
+
if (Stratagem.rails_3?)
|
30
|
+
begin
|
31
|
+
route.set.recognize_path(path, :method => request_method) == route.requirements
|
32
|
+
rescue ActionController::RoutingError
|
33
|
+
puts "ERROR: #{$!.message}"
|
34
|
+
end
|
35
|
+
elsif (Stratagem.rails_2?)
|
36
|
+
route.recognize(path, {:method => request_method})
|
37
|
+
end
|
7
38
|
end
|
8
39
|
|
9
40
|
def controller
|
10
|
-
if (
|
41
|
+
if (controller_name)
|
11
42
|
begin
|
12
|
-
controller_class =
|
43
|
+
controller_class = controller_name.constantize
|
13
44
|
Stratagem::Model::Application.instance.controllers.find {|c| c.klass == controller_class }
|
14
45
|
rescue
|
15
|
-
puts "unable to determine controller #{route.requirements[:controller]}"
|
46
|
+
puts "unable to determine controller: #{route.requirements[:controller]}"
|
16
47
|
puts $!.message
|
17
48
|
nil
|
18
49
|
end
|
@@ -21,15 +52,11 @@ module Stratagem::Model::Component
|
|
21
52
|
end
|
22
53
|
end
|
23
54
|
|
24
|
-
def action
|
25
|
-
route.requirements[:action] ? route.requirements[:action].to_sym : nil
|
26
|
-
end
|
27
|
-
|
28
55
|
def ==(other)
|
29
56
|
if (other.kind_of?(ActionController::Routing::Route))
|
30
57
|
self.route == other
|
31
58
|
elsif (other.kind_of?(Stratagem::Model::Component::Route))
|
32
|
-
self.route
|
59
|
+
self.route == other.route
|
33
60
|
else
|
34
61
|
raise "unknown comparison to #{other.class.name}"
|
35
62
|
end
|
@@ -38,12 +65,11 @@ module Stratagem::Model::Component
|
|
38
65
|
def export
|
39
66
|
{
|
40
67
|
:external_id => self.object_id,
|
41
|
-
:
|
42
|
-
:path =>
|
43
|
-
:
|
44
|
-
:segments => @route.segments.map {|s| s.to_s },
|
68
|
+
:component_type => :route,
|
69
|
+
:path => path,
|
70
|
+
:verb => verb,
|
45
71
|
:controller_external_id => controller ? controller.object_id : nil,
|
46
|
-
:action =>
|
72
|
+
:action => action_name,
|
47
73
|
}
|
48
74
|
end
|
49
75
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Stratagem
|
2
2
|
class ModelBuilder
|
3
|
-
attr_reader :parsed_models, :parsed_controllers
|
3
|
+
attr_reader :parsed_models, :parsed_controllers, :model
|
4
4
|
|
5
5
|
def initialize
|
6
6
|
@model = Stratagem::Model::Application.instance
|
@@ -33,9 +33,13 @@ module Stratagem
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def load_plugins()
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
if (Stratagem.rails_3?)
|
37
|
+
@model.plugins << Rails.application.railties.plugins
|
38
|
+
else
|
39
|
+
loader = Rails::Plugin::Loader.new(Rails::Initializer.new(Rails::Configuration.new))
|
40
|
+
loader.load_plugins
|
41
|
+
@model.plugins << loader.initializer.loaded_plugins
|
42
|
+
end
|
39
43
|
end
|
40
44
|
|
41
45
|
def load_models()
|
@@ -46,13 +50,6 @@ module Stratagem
|
|
46
50
|
models = Stratagem::Model::Component::Model.load_all(File.join(root, model))
|
47
51
|
models.each do |c|
|
48
52
|
log "\t#{c.klass.name} loaded from #{model}"
|
49
|
-
|
50
|
-
# references = []
|
51
|
-
# @model.controllers.each do |controller|
|
52
|
-
# references += controller.modifies(c)
|
53
|
-
# end
|
54
|
-
# log "\t\t#{references.size} references from controllers"
|
55
|
-
# c.model_referenced_by = references
|
56
53
|
end
|
57
54
|
@model.models << models
|
58
55
|
}
|
@@ -85,42 +82,53 @@ module Stratagem
|
|
85
82
|
ActionController::Routing::Routes.routes.each {|route|
|
86
83
|
route_container = Stratagem::Model::Component::Route.new(route)
|
87
84
|
@model.routes << route_container
|
88
|
-
begin
|
89
|
-
filename = File.join(root, "#{route.parameter_shell[:controller]}_controller.rb")
|
90
85
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
controller_name << 'Controller'
|
100
|
-
controller_class = controllers.find {|controller| controller.klass.name == controller_name }
|
101
|
-
controller_object = controller_class ? controller_class.klass.new : nil
|
102
|
-
controller_action = route.parameter_shell[:action] ? route.parameter_shell[:action].to_sym : nil
|
103
|
-
|
104
|
-
if (controller_object && controller_action) && (controller_object.methods_include?(controller_action))
|
105
|
-
controllers.each do |controller|
|
106
|
-
controller.add_routable_action(controller_action, route.conditions[:method] || :get)
|
107
|
-
end
|
108
|
-
else
|
109
|
-
# if the controller does not contain the indicated method
|
110
|
-
# then check for a template that may be rendered anyway
|
111
|
-
log "\tinvalid route #{route.to_s}"
|
112
|
-
unless @model.views.find {|v| v.render_path == "#{route.parameter_shell[:controller]}/#{controller_action}" }
|
113
|
-
# route is invalid
|
114
|
-
@model.routes.invalid << Stratagem::Model::Component::Route.new(route)
|
115
|
-
log "\tinvalid route #{route.to_s}"
|
86
|
+
begin
|
87
|
+
controller = route_container.controller || begin
|
88
|
+
controller_class = route_container.controller_name.constantize
|
89
|
+
filename = File.join(root, "#{route_container.controller_path}_controller.rb")
|
90
|
+
if (File.exists?(filename))
|
91
|
+
parse_tree = RedParse.new(File.read(filename)).parse
|
92
|
+
else
|
93
|
+
parse_tree = nil
|
116
94
|
end
|
95
|
+
controller_container = Stratagem::Model::Component::Controller.new(filename, parse_tree, controller_class)
|
96
|
+
configure_route(route_container, controller_container)
|
97
|
+
@model.controllers << controller_container
|
117
98
|
end
|
118
|
-
|
119
|
-
|
120
|
-
@model.routes.invalid << Stratagem::Model::Component::Route.new(route)
|
121
|
-
rescue MissingSourceFile
|
99
|
+
rescue
|
100
|
+
log "\tinvalid route #{route.to_s} - #{$!.message}"
|
122
101
|
@model.routes.invalid << Stratagem::Model::Component::Route.new(route)
|
123
102
|
end
|
103
|
+
|
104
|
+
# begin
|
105
|
+
# filename = File.join(root, "#{route_container.controller_path}_controller.rb")
|
106
|
+
# controllers = @model.controllers.select {|c| c.path == filename }
|
107
|
+
#
|
108
|
+
# unless controllers.size > 0
|
109
|
+
# controllers = Stratagem::Model::Component::Controller.load_all(filename)
|
110
|
+
# puts "loading controllers from #{filename} -> controllers #{controllers.map {|c| c.klass.name }.inspect}"
|
111
|
+
# @model.controllers << controllers
|
112
|
+
# end
|
113
|
+
#
|
114
|
+
# configure_route(route_container, controllers)
|
115
|
+
#
|
116
|
+
# rescue Errno::ENOENT, MissingSourceFile
|
117
|
+
# begin
|
118
|
+
# controller_class = route_container.controller
|
119
|
+
# if (controller_class)
|
120
|
+
# log "Attempting to load external controller for: #{route_container.controller_name}"
|
121
|
+
# controllers = [Stratagem::Model::Component::Controller.new(nil, nil, controller_class)]
|
122
|
+
# @model.controllers << controllers
|
123
|
+
# configure_route(route_container, controllers)
|
124
|
+
# else
|
125
|
+
# log "\tinvalid route #{route.to_s} - unable to load external controller"
|
126
|
+
# end
|
127
|
+
# rescue
|
128
|
+
# log "\tinvalid route #{route.to_s} - #{$!.message}"
|
129
|
+
# @model.routes.invalid << Stratagem::Model::Component::Route.new(route)
|
130
|
+
# end
|
131
|
+
# end
|
124
132
|
}
|
125
133
|
log ""
|
126
134
|
end
|
@@ -140,5 +148,26 @@ module Stratagem
|
|
140
148
|
end
|
141
149
|
file_list
|
142
150
|
end
|
151
|
+
|
152
|
+
protected
|
153
|
+
|
154
|
+
def configure_route(route_container, controller_container)
|
155
|
+
if (route_container.action_name)
|
156
|
+
controller_object = controller_container.klass ? controller_container.klass.new : nil
|
157
|
+
if (controller_object && controller_object.methods_include?(route_container.action_name))
|
158
|
+
controller_container.add_routable_action(route_container.action_name, route_container.verb)
|
159
|
+
log "\tvalid route #{route_container.route.to_s}"
|
160
|
+
else
|
161
|
+
# if the controller does not contain the indicated method
|
162
|
+
# then check for a template that may be rendered anyway
|
163
|
+
log "\tinvalid route #{route_container.route.to_s}"
|
164
|
+
unless @model.views.find {|v| v.render_path == "#{route_container.controller_path}/#{route_container.action_name.to_s}" }
|
165
|
+
# route is invalid
|
166
|
+
@model.routes.invalid << Stratagem::Model::Component::Route.new(route_container.route)
|
167
|
+
log "\tinvalid route #{route_container.route.to_s}"
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
143
172
|
end
|
144
173
|
end
|