stratagem 0.2.0 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +29 -0
- data/Manifest +40 -38
- data/Rakefile +3 -3
- data/lib/stratagem.rb +22 -7
- data/lib/stratagem/authentication.rb +2 -1
- data/lib/stratagem/auto_mock/aquifer.rb +88 -15
- data/lib/stratagem/auto_mock/factory.rb +19 -30
- data/lib/stratagem/auto_mock/value_generator.rb +3 -1
- data/lib/stratagem/client.rb +3 -2
- data/lib/stratagem/crawler/authentication.rb +10 -3
- data/lib/stratagem/crawler/form.rb +2 -2
- data/lib/stratagem/crawler/html_utils.rb +12 -1
- data/lib/stratagem/crawler/parameter_resolver.rb +18 -4
- data/lib/stratagem/crawler/route_invoker.rb +58 -16
- data/lib/stratagem/crawler/session.rb +13 -5
- data/lib/stratagem/crawler/site_model.rb +20 -8
- data/lib/stratagem/extensions/object.rb +2 -2
- data/lib/stratagem/extensions/string.rb +2 -2
- data/lib/stratagem/instrumentation.rb +18 -0
- data/lib/stratagem/{framework_extensions → instrumentation}/method_invocation.rb +1 -1
- data/lib/stratagem/instrumentation/models.rb +25 -0
- data/lib/stratagem/instrumentation/models/annotations.rb +114 -0
- data/lib/stratagem/instrumentation/models/association.rb +40 -0
- data/lib/stratagem/instrumentation/models/authentication.rb +7 -0
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/authlogic/detect.rb +2 -2
- data/lib/stratagem/instrumentation/models/authentication/authlogic/instrumentation.rb +13 -0
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/authlogic/metadata.rb +1 -3
- data/lib/stratagem/instrumentation/models/authentication/devise/detect.rb +11 -0
- data/lib/stratagem/instrumentation/models/authentication/devise/instrumentation.rb +18 -0
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/devise/metadata.rb +7 -3
- data/lib/stratagem/{framework_extensions/models/adapters/util/authentication_metadata.rb → instrumentation/models/authentication/metadata.rb} +2 -2
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/restful_authentication/detect.rb +2 -4
- data/lib/stratagem/{framework_extensions/models/adapters/restful_authentication/extensions.rb → instrumentation/models/authentication/restful_authentication/instrumentation.rb} +1 -1
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/restful_authentication/metadata.rb +2 -2
- data/lib/stratagem/{framework_extensions → instrumentation}/models/detect.rb +1 -1
- data/lib/stratagem/{framework_extensions → instrumentation}/models/metadata.rb +6 -4
- data/lib/stratagem/{framework_extensions → instrumentation}/models/mocking.rb +1 -1
- data/lib/stratagem/instrumentation/models/persistence.rb +9 -0
- data/lib/stratagem/instrumentation/models/persistence/active_record/detect.rb +18 -0
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/active_record/extensions.rb +5 -1
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/active_record/metadata.rb +25 -9
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/active_record/tracing.rb +4 -2
- data/lib/stratagem/instrumentation/models/persistence/common/detect.rb +7 -0
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/common/extensions.rb +0 -0
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/common/metadata.rb +6 -2
- data/lib/stratagem/instrumentation/models/persistence/common/tracing.rb +4 -0
- data/lib/stratagem/instrumentation/models/support_libraries.rb +7 -0
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/support_libraries}/friendly_id/detect.rb +2 -2
- data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/support_libraries}/friendly_id/metadata.rb +2 -2
- data/lib/stratagem/instrumentation/models/support_libraries/state_machine/detect.rb +11 -0
- data/lib/stratagem/instrumentation/models/support_libraries/state_machine/metadata.rb +17 -0
- data/lib/stratagem/{framework_extensions → instrumentation}/models/tracing.rb +2 -2
- data/lib/stratagem/{framework_extensions → instrumentation}/rails.rb +0 -0
- data/lib/stratagem/{framework_extensions → instrumentation}/rails2/action_controller.rb +0 -0
- data/lib/stratagem/{framework_extensions → instrumentation}/rails2/action_mailer.rb +0 -0
- data/lib/stratagem/{framework_extensions → instrumentation}/rails3/parameters.rb +0 -0
- data/lib/stratagem/{framework_extensions → instrumentation}/request_forgery_protection.rb +0 -0
- data/lib/stratagem/model/application.rb +30 -15
- data/lib/stratagem/model/components/controller.rb +2 -2
- data/lib/stratagem/model/components/reference.rb +2 -2
- data/lib/stratagem/model/components/view.rb +1 -1
- data/lib/stratagem/model_builder.rb +19 -8
- data/lib/stratagem/scanner.rb +1 -1
- data/lib/stratagem/site_crawler.rb +4 -2
- data/stratagem.gemspec +7 -7
- data/templates/install/tasks/stratagem.rake +9 -1
- metadata +86 -82
- data/lib/stratagem/framework_extensions.rb +0 -18
- data/lib/stratagem/framework_extensions/models.rb +0 -21
- data/lib/stratagem/framework_extensions/models/adapters/active_record/detect.rb +0 -7
- data/lib/stratagem/framework_extensions/models/adapters/authlogic/extensions.rb +0 -10
- data/lib/stratagem/framework_extensions/models/adapters/authlogic/tracing.rb +0 -4
- data/lib/stratagem/framework_extensions/models/adapters/common/detect.rb +0 -7
- data/lib/stratagem/framework_extensions/models/adapters/common/tracing.rb +0 -4
- data/lib/stratagem/framework_extensions/models/adapters/devise/detect.rb +0 -11
- data/lib/stratagem/framework_extensions/models/adapters/devise/extensions.rb +0 -0
- data/lib/stratagem/framework_extensions/models/adapters/devise/tracing.rb +0 -4
- data/lib/stratagem/framework_extensions/models/adapters/friendly_id/extensions.rb +0 -0
- data/lib/stratagem/framework_extensions/models/adapters/friendly_id/tracing.rb +0 -4
- data/lib/stratagem/framework_extensions/models/adapters/restful_authentication/tracing.rb +0 -4
- data/lib/stratagem/framework_extensions/models/annotations.rb +0 -78
data/LICENSE
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Copyright (c) 2010-2011 StrataGem, Inc. All rights reserved.
|
2
|
+
|
3
|
+
Certain inventions disclosed in this file may be claimed within
|
4
|
+
patents owned or patent applications filed by StrataGem, Inc. or third
|
5
|
+
parties.
|
6
|
+
|
7
|
+
Subject to the terms of this notice, StrataGem grants you a
|
8
|
+
nonexclusive, nontransferable license, without the right to
|
9
|
+
sublicense, to (a) install and execute one copy of these files on any
|
10
|
+
number of workstations owned or controlled by you and (b) distribute
|
11
|
+
verbatim copies of these files to third parties. As a condition to the
|
12
|
+
foregoing grant, you must provide this notice along with each copy you
|
13
|
+
distribute and you must not remove, alter, or obscure this notice. All
|
14
|
+
other use, reproduction, modification, distribution, or other
|
15
|
+
exploitation of these files is strictly prohibited, except as may be set
|
16
|
+
forth in a separate written license agreement between you and Stratagem.
|
17
|
+
The terms of any such license agreement will control over this
|
18
|
+
notice. The license stated above will be automatically terminated and
|
19
|
+
revoked if you exceed its scope or violate any of the terms of this
|
20
|
+
notice.
|
21
|
+
|
22
|
+
Unless otherwise expressly agreed by StrataGem in a separate written
|
23
|
+
license agreement, these files are provided AS IS, WITHOUT WARRANTY OF
|
24
|
+
ANY KIND, including without any implied warranties of MERCHANTABILITY,
|
25
|
+
FITNESS FOR A PARTICULAR PURPOSE, TITLE, or NON-INFRINGEMENT. As a
|
26
|
+
condition to your use of these files, you are solely responsible for
|
27
|
+
such use. StrataGem will have no liability to you for direct,
|
28
|
+
indirect, consequential, incidental, special, or punitive damages or
|
29
|
+
for lost profits or data.
|
data/Manifest
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
LICENSE
|
1
2
|
Manifest
|
2
3
|
Rakefile
|
3
4
|
bin/stratagem
|
@@ -38,44 +39,45 @@ lib/stratagem/extensions/object.rb
|
|
38
39
|
lib/stratagem/extensions/red_parse.rb
|
39
40
|
lib/stratagem/extensions/string.rb
|
40
41
|
lib/stratagem/extensions/trace_compression.rb
|
41
|
-
lib/stratagem/
|
42
|
-
lib/stratagem/
|
43
|
-
lib/stratagem/
|
44
|
-
lib/stratagem/
|
45
|
-
lib/stratagem/
|
46
|
-
lib/stratagem/
|
47
|
-
lib/stratagem/
|
48
|
-
lib/stratagem/
|
49
|
-
lib/stratagem/
|
50
|
-
lib/stratagem/
|
51
|
-
lib/stratagem/
|
52
|
-
lib/stratagem/
|
53
|
-
lib/stratagem/
|
54
|
-
lib/stratagem/
|
55
|
-
lib/stratagem/
|
56
|
-
lib/stratagem/
|
57
|
-
lib/stratagem/
|
58
|
-
lib/stratagem/
|
59
|
-
lib/stratagem/
|
60
|
-
lib/stratagem/
|
61
|
-
lib/stratagem/
|
62
|
-
lib/stratagem/
|
63
|
-
lib/stratagem/
|
64
|
-
lib/stratagem/
|
65
|
-
lib/stratagem/
|
66
|
-
lib/stratagem/
|
67
|
-
lib/stratagem/
|
68
|
-
lib/stratagem/
|
69
|
-
lib/stratagem/
|
70
|
-
lib/stratagem/
|
71
|
-
lib/stratagem/
|
72
|
-
lib/stratagem/
|
73
|
-
lib/stratagem/
|
74
|
-
lib/stratagem/
|
75
|
-
lib/stratagem/
|
76
|
-
lib/stratagem/
|
77
|
-
lib/stratagem/
|
78
|
-
lib/stratagem/
|
42
|
+
lib/stratagem/instrumentation.rb
|
43
|
+
lib/stratagem/instrumentation/method_invocation.rb
|
44
|
+
lib/stratagem/instrumentation/models.rb
|
45
|
+
lib/stratagem/instrumentation/models/annotations.rb
|
46
|
+
lib/stratagem/instrumentation/models/association.rb
|
47
|
+
lib/stratagem/instrumentation/models/authentication.rb
|
48
|
+
lib/stratagem/instrumentation/models/authentication/authlogic/detect.rb
|
49
|
+
lib/stratagem/instrumentation/models/authentication/authlogic/instrumentation.rb
|
50
|
+
lib/stratagem/instrumentation/models/authentication/authlogic/metadata.rb
|
51
|
+
lib/stratagem/instrumentation/models/authentication/devise/detect.rb
|
52
|
+
lib/stratagem/instrumentation/models/authentication/devise/instrumentation.rb
|
53
|
+
lib/stratagem/instrumentation/models/authentication/devise/metadata.rb
|
54
|
+
lib/stratagem/instrumentation/models/authentication/metadata.rb
|
55
|
+
lib/stratagem/instrumentation/models/authentication/restful_authentication/detect.rb
|
56
|
+
lib/stratagem/instrumentation/models/authentication/restful_authentication/instrumentation.rb
|
57
|
+
lib/stratagem/instrumentation/models/authentication/restful_authentication/metadata.rb
|
58
|
+
lib/stratagem/instrumentation/models/detect.rb
|
59
|
+
lib/stratagem/instrumentation/models/metadata.rb
|
60
|
+
lib/stratagem/instrumentation/models/mocking.rb
|
61
|
+
lib/stratagem/instrumentation/models/persistence.rb
|
62
|
+
lib/stratagem/instrumentation/models/persistence/active_record/detect.rb
|
63
|
+
lib/stratagem/instrumentation/models/persistence/active_record/extensions.rb
|
64
|
+
lib/stratagem/instrumentation/models/persistence/active_record/metadata.rb
|
65
|
+
lib/stratagem/instrumentation/models/persistence/active_record/tracing.rb
|
66
|
+
lib/stratagem/instrumentation/models/persistence/common/detect.rb
|
67
|
+
lib/stratagem/instrumentation/models/persistence/common/extensions.rb
|
68
|
+
lib/stratagem/instrumentation/models/persistence/common/metadata.rb
|
69
|
+
lib/stratagem/instrumentation/models/persistence/common/tracing.rb
|
70
|
+
lib/stratagem/instrumentation/models/support_libraries.rb
|
71
|
+
lib/stratagem/instrumentation/models/support_libraries/friendly_id/detect.rb
|
72
|
+
lib/stratagem/instrumentation/models/support_libraries/friendly_id/metadata.rb
|
73
|
+
lib/stratagem/instrumentation/models/support_libraries/state_machine/detect.rb
|
74
|
+
lib/stratagem/instrumentation/models/support_libraries/state_machine/metadata.rb
|
75
|
+
lib/stratagem/instrumentation/models/tracing.rb
|
76
|
+
lib/stratagem/instrumentation/rails.rb
|
77
|
+
lib/stratagem/instrumentation/rails2/action_controller.rb
|
78
|
+
lib/stratagem/instrumentation/rails2/action_mailer.rb
|
79
|
+
lib/stratagem/instrumentation/rails3/parameters.rb
|
80
|
+
lib/stratagem/instrumentation/request_forgery_protection.rb
|
79
81
|
lib/stratagem/interface/browser.rb
|
80
82
|
lib/stratagem/interface/public/images/backgrounds/content.png
|
81
83
|
lib/stratagem/interface/public/images/backgrounds/shadow.png
|
data/Rakefile
CHANGED
@@ -2,9 +2,9 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('stratagem', '0.2.
|
6
|
-
p.description = "Intuitive security analysis
|
7
|
-
p.url = "http://
|
5
|
+
Echoe.new('stratagem', '0.2.2') do |p|
|
6
|
+
p.description = "Intuitive security analysis for your Rails applications"
|
7
|
+
p.url = "http://www.stratagemapp.com"
|
8
8
|
p.author = "Charles Grimes"
|
9
9
|
p.email = "cj@stratagemapp.com"
|
10
10
|
p.executable_pattern = ['bin/*']
|
data/lib/stratagem.rb
CHANGED
@@ -9,14 +9,14 @@ end
|
|
9
9
|
|
10
10
|
module Stratagem
|
11
11
|
class << self
|
12
|
-
def
|
12
|
+
def load_dependencies
|
13
13
|
require 'haml'
|
14
14
|
require 'launchy'
|
15
15
|
require 'redparse'
|
16
16
|
require 'stratagem/blocker'
|
17
17
|
require 'stratagem/logger'
|
18
18
|
require 'stratagem/extensions'
|
19
|
-
require 'stratagem/
|
19
|
+
require 'stratagem/instrumentation'
|
20
20
|
|
21
21
|
require 'stratagem/model'
|
22
22
|
require 'stratagem/auto_mock'
|
@@ -32,12 +32,29 @@ module Stratagem
|
|
32
32
|
require 'stratagem/snapshot'
|
33
33
|
|
34
34
|
require 'stratagem/commands'
|
35
|
-
|
35
|
+
end
|
36
|
+
|
37
|
+
def init
|
38
|
+
load_dependencies
|
39
|
+
|
36
40
|
@@blocker = Blocker.new
|
37
41
|
@@running = false
|
38
42
|
@@session_id = Time.now.to_f.to_s # the interface uses this to determine which instance of the client it's talking to
|
39
43
|
end
|
40
44
|
|
45
|
+
def ssl?
|
46
|
+
false
|
47
|
+
end
|
48
|
+
|
49
|
+
def domain
|
50
|
+
'stratagemapp.local'
|
51
|
+
end
|
52
|
+
|
53
|
+
def mocking?
|
54
|
+
true
|
55
|
+
end
|
56
|
+
|
57
|
+
|
41
58
|
def rails_version
|
42
59
|
@@rails_version ||= begin
|
43
60
|
rails_version = Rails.version.split('.').map {|v| v.size > 1 ? 9 : v.to_i }
|
@@ -63,9 +80,7 @@ module Stratagem
|
|
63
80
|
Stratagem::Logger.instance
|
64
81
|
end
|
65
82
|
|
66
|
-
|
67
|
-
ENV['STRATAGEM_HOST'] || 'stratagemapp.com'
|
68
|
-
end
|
83
|
+
|
69
84
|
|
70
85
|
def wait_for_completion
|
71
86
|
@@blocker.wait
|
@@ -91,7 +106,7 @@ module Stratagem
|
|
91
106
|
# # Print a flat profile to text
|
92
107
|
# printer = RubyProf::FlatPrinter.new(result)
|
93
108
|
# printer.print(STDOUT, 0)
|
94
|
-
rescue
|
109
|
+
rescue Exception
|
95
110
|
puts $!.message
|
96
111
|
puts $!.backtrace
|
97
112
|
ensure
|
@@ -28,7 +28,8 @@ module Stratagem
|
|
28
28
|
|
29
29
|
def base_url
|
30
30
|
subdomain = credentials ? credentials[:account] : 'www'
|
31
|
-
|
31
|
+
protocol = Stratagem.ssl? ? 'https' : 'http'
|
32
|
+
"#{protocol}://#{subdomain}.#{Stratagem.domain}"
|
32
33
|
end
|
33
34
|
|
34
35
|
def project_url
|
@@ -14,27 +14,41 @@ module Stratagem::AutoMock
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def clear
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
objects
|
21
|
-
|
22
|
-
|
23
|
-
instance.
|
24
|
-
rescue
|
17
|
+
if (Stratagem.mocking?)
|
18
|
+
objects = self.repo.values.inject([]) {|memo,obj| memo += obj.compact }
|
19
|
+
i = 0
|
20
|
+
while (objects.size > 0 && ((i+=1) < objects.size))
|
21
|
+
objects = objects.select do |instance|
|
22
|
+
next if (pre_existing_object_ids[instance.class] || []).include?(instance.id)
|
23
|
+
puts "deleting #{instance.class.name} - #{instance.id}"
|
25
24
|
begin
|
26
|
-
instance.
|
25
|
+
instance.destroy
|
27
26
|
rescue
|
28
|
-
|
29
|
-
|
27
|
+
begin
|
28
|
+
instance.delete
|
29
|
+
rescue
|
30
|
+
puts "Unable to delete object: #{instance.class.name} - #{$!.message}"
|
31
|
+
puts $!.backtrace
|
32
|
+
end
|
30
33
|
end
|
34
|
+
!instance.frozen?
|
31
35
|
end
|
32
|
-
!instance.frozen?
|
33
36
|
end
|
34
37
|
end
|
35
38
|
self.repo.clear
|
36
39
|
end
|
37
40
|
|
41
|
+
# def export
|
42
|
+
# h = {}
|
43
|
+
# repo.each {|model_klass,instances|
|
44
|
+
# h[model_klass.name] = instances.map {|instance|
|
45
|
+
# instance.stratagem.
|
46
|
+
# :database_attributes => instance.
|
47
|
+
# }
|
48
|
+
#
|
49
|
+
# }
|
50
|
+
# end
|
51
|
+
#
|
38
52
|
def destroy
|
39
53
|
clear
|
40
54
|
end
|
@@ -52,23 +66,82 @@ module Stratagem::AutoMock
|
|
52
66
|
instance
|
53
67
|
end
|
54
68
|
|
69
|
+
def pre_existing_object_ids
|
70
|
+
@pre_existing_object_ids ||= {}
|
71
|
+
end
|
72
|
+
|
73
|
+
def load_existing_object_ids(klass)
|
74
|
+
if (Stratagem.mocking?)
|
75
|
+
# handle polymorphic objects (class may actually be a subclass of the klass parameter)
|
76
|
+
klass.existing_instance_ids.each do |existing_id|
|
77
|
+
begin
|
78
|
+
instance = klass.find(existing_id)
|
79
|
+
(pre_existing_object_ids[instance.class] ||= []) << existing_id
|
80
|
+
rescue
|
81
|
+
puts "ERROR: instance id #{existing_id} of #{klass.name} could not be loaded"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
else
|
85
|
+
pre_existing_object_ids[klass] = []
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def load_instance_ids(meta_model)
|
90
|
+
if (meta_model.stratagem?)
|
91
|
+
meta_model.klass.existing_instance_ids
|
92
|
+
else
|
93
|
+
[]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
55
98
|
def fill(model_count=nil)
|
56
99
|
Stratagem.logger.phase "mocking_models"
|
100
|
+
|
101
|
+
# load the ids of existing models for each class
|
102
|
+
application.models.each do |meta_model|
|
103
|
+
next unless meta_model.stratagem?
|
104
|
+
load_existing_object_ids(meta_model.klass)
|
105
|
+
end
|
106
|
+
|
107
|
+
# mock instances of all models
|
108
|
+
if (Stratagem.mocking?)
|
109
|
+
application.models.each do |meta_model|
|
110
|
+
mock_model(meta_model.klass, model_count) if (meta_model.stratagem?)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# determine the new ids for each model
|
57
115
|
application.models.each do |meta_model|
|
58
|
-
|
116
|
+
next unless meta_model.klass
|
117
|
+
next unless meta_model.stratagem?
|
118
|
+
|
119
|
+
known_mocked_instances = mocked(meta_model.klass)
|
120
|
+
new_ids = load_instance_ids(meta_model) - (pre_existing_object_ids[meta_model.klass] || [])
|
121
|
+
repo[meta_model.klass.name] = new_ids.map {|id|
|
122
|
+
begin
|
123
|
+
known_mocked_instances.find {|i| i.id == id } || meta_model.klass.find(id)
|
124
|
+
rescue
|
125
|
+
puts "ERROR: #{$!.message}"
|
126
|
+
nil
|
127
|
+
end
|
128
|
+
}.compact
|
129
|
+
|
59
130
|
end
|
60
|
-
|
131
|
+
|
61
132
|
print
|
62
133
|
self
|
63
134
|
end
|
64
135
|
|
65
136
|
def print
|
137
|
+
puts "Mocked models:"
|
66
138
|
application.models.each do |meta_model|
|
67
139
|
puts "#{meta_model.klass.name}"
|
68
140
|
(repo[meta_model.klass.name] || []).each do |instance|
|
69
|
-
puts "\t#{instance.class} - #{instance}"
|
141
|
+
puts "\t#{instance.class} - #{instance.id}"
|
70
142
|
end
|
71
143
|
end
|
144
|
+
puts "end of aquifer"
|
72
145
|
end
|
73
146
|
|
74
147
|
def mock_model(klass, count=nil)
|
@@ -18,7 +18,15 @@ module Stratagem::AutoMock
|
|
18
18
|
object.stratagem.mock_attributes
|
19
19
|
end
|
20
20
|
|
21
|
+
# Note:
|
22
|
+
# If a class is passed in that has descendants, a leaf descendant will be chosen at random
|
21
23
|
def mock(model,mock_chain=[], belongs_to=nil)
|
24
|
+
while (model.stratagem.subclasses?)
|
25
|
+
prior_model = model
|
26
|
+
model = model.sg_subclasses[rand model.sg_subclasses.size]
|
27
|
+
puts "mapped base class #{prior_model.name} -> #{model.name} "
|
28
|
+
end
|
29
|
+
|
22
30
|
return if mock_chain.select {|m| m == model }.size > 1
|
23
31
|
mock_chain << model
|
24
32
|
|
@@ -39,11 +47,12 @@ module Stratagem::AutoMock
|
|
39
47
|
break
|
40
48
|
end
|
41
49
|
end
|
42
|
-
rescue
|
43
|
-
puts $!.class.name
|
44
|
-
puts $!.message
|
45
|
-
puts $!.backtrace
|
46
|
-
e = MockError.new("Unexpected error mocking model #{model.name}")
|
50
|
+
rescue Exception, ActiveRecord::ActiveRecordError
|
51
|
+
# puts $!.class.name
|
52
|
+
# puts $!.message
|
53
|
+
# puts $!.backtrace
|
54
|
+
e = MockError.new("Unexpected error mocking model #{model.name} - #{$!.message}")
|
55
|
+
puts e.message
|
47
56
|
e.target = $!
|
48
57
|
# raise e
|
49
58
|
end
|
@@ -60,7 +69,7 @@ module Stratagem::AutoMock
|
|
60
69
|
def mocked(model=nil)
|
61
70
|
@mocked ||= {}
|
62
71
|
if (model)
|
63
|
-
@mocked[model.name] ||=
|
72
|
+
@mocked[model.name] ||= model.all
|
64
73
|
else
|
65
74
|
@mocked
|
66
75
|
end
|
@@ -109,26 +118,6 @@ module Stratagem::AutoMock
|
|
109
118
|
end
|
110
119
|
end
|
111
120
|
|
112
|
-
# has_many relations
|
113
|
-
# object.stratagem.relation_names(:has_many).each do |attr_name|
|
114
|
-
# relation = object.stratagem.relation(attr_name)
|
115
|
-
# # select the instances that don't have an existing belongs_to for this relation type
|
116
|
-
# instances = mocked(relation.klass).select {|i|
|
117
|
-
# br = i.stratagem.relations.find {|r| r.klass == i.class }
|
118
|
-
# if (br && !i.send(br.name).nil?)
|
119
|
-
# false
|
120
|
-
# else
|
121
|
-
# true
|
122
|
-
# end
|
123
|
-
# }
|
124
|
-
# if (instances.size > 2)
|
125
|
-
# collection = object.send(attr_name.to_s)
|
126
|
-
# collection << instances[rand instances.size]
|
127
|
-
# else
|
128
|
-
# mock(relation.klass, mock_chain, object)
|
129
|
-
# end
|
130
|
-
# end
|
131
|
-
|
132
121
|
(object.stratagem.invalid_columns(object)).size == 0
|
133
122
|
end
|
134
123
|
|
@@ -163,11 +152,10 @@ module Stratagem::AutoMock
|
|
163
152
|
puts "Error mocking #{klass.name}"
|
164
153
|
valid = false
|
165
154
|
rescue
|
166
|
-
puts object.stratagem.mock_attributes.inspect
|
167
|
-
puts "Error mocking #{object.class.name} - #{$!.message}"
|
155
|
+
puts "Error mocking #{object.class.name} - #{$!.message} - #{object.stratagem.mock_attributes.inspect}"
|
168
156
|
error_column = object.stratagem.column_from_error($!)
|
169
|
-
puts "\terror column: #{error_column}"
|
170
157
|
if error_column && !object.stratagem.foreign_keys.include?(error_column)
|
158
|
+
puts "\terror column: #{error_column}"
|
171
159
|
if retries < 100
|
172
160
|
puts "\tretrying to correct field #{error_column} that was missing validation"
|
173
161
|
set_attribute_value(object, error_column, [])
|
@@ -179,7 +167,8 @@ module Stratagem::AutoMock
|
|
179
167
|
else
|
180
168
|
valid = false
|
181
169
|
end
|
182
|
-
puts
|
170
|
+
puts "\tERROR: could not correct errors in model" unless valid
|
171
|
+
# puts $!.backtrace unless valid
|
183
172
|
end
|
184
173
|
|
185
174
|
# puts "\t#{object.stratagem.mock_attributes.inspect}" if (valid)
|
@@ -57,7 +57,9 @@ module Stratagem::AutoMock
|
|
57
57
|
|
58
58
|
def generate_string(attribute_name)
|
59
59
|
attribute_name = attribute_name.to_s
|
60
|
-
if (attribute_name.stratagem_contains_token?('
|
60
|
+
if (attribute_name.stratagem_contains_token?('_type'))
|
61
|
+
nil
|
62
|
+
elsif (attribute_name.stratagem_contains_token?('email') || attribute_name.stratagem_contains_token?('e-mail'))
|
61
63
|
(random_noise(4,false) || '') + @user[:email]
|
62
64
|
elsif (attribute_name.stratagem_contains_token?('login') || attribute_name.stratagem_contains_token?('username') || attribute_name.stratagem_contains_token?('user_name'))
|
63
65
|
@user[:login] + (random_noise(4, false) || '')
|