stratagem 0.2.2 → 0.2.3

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/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('stratagem', '0.2.2') do |p|
5
+ Echoe.new('stratagem', '0.2.3') do |p|
6
6
  p.description = "Intuitive security analysis for your Rails applications"
7
7
  p.url = "http://www.stratagemapp.com"
8
8
  p.author = "Charles Grimes"
@@ -43,11 +43,11 @@ module Stratagem
43
43
  end
44
44
 
45
45
  def ssl?
46
- false
46
+ true
47
47
  end
48
48
 
49
49
  def domain
50
- 'stratagemapp.local'
50
+ 'stratagemapp.com'
51
51
  end
52
52
 
53
53
  def mocking?
@@ -79,8 +79,15 @@ module Stratagem
79
79
  def logger
80
80
  Stratagem::Logger.instance
81
81
  end
82
-
83
82
 
83
+ # register an error that occurred during the lifecycle of the scanner
84
+ def error(error)
85
+ errors << error
86
+ end
87
+
88
+ def errors
89
+ @errors ||= []
90
+ end
84
91
 
85
92
  def wait_for_completion
86
93
  @@blocker.wait
@@ -74,11 +74,16 @@ module Stratagem::AutoMock
74
74
  if (Stratagem.mocking?)
75
75
  # handle polymorphic objects (class may actually be a subclass of the klass parameter)
76
76
  klass.existing_instance_ids.each do |existing_id|
77
- begin
78
- instance = klass.find(existing_id)
77
+ if (existing_id.kind_of?(Fixnum))
78
+ begin
79
+ instance = klass.find(existing_id)
80
+ (pre_existing_object_ids[instance.class] ||= []) << existing_id
81
+ rescue
82
+ puts "ERROR: instance id #{existing_id} of #{klass.name} could not be loaded"
83
+ end
84
+ else
85
+ # an instance was loaded because the model has no id field
79
86
  (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
87
  end
83
88
  end
84
89
  else
@@ -119,11 +124,15 @@ module Stratagem::AutoMock
119
124
  known_mocked_instances = mocked(meta_model.klass)
120
125
  new_ids = load_instance_ids(meta_model) - (pre_existing_object_ids[meta_model.klass] || [])
121
126
  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
+ if (id.kind_of?(Fixnum))
128
+ begin
129
+ known_mocked_instances.find {|i| i.id == id } || meta_model.klass.find(id)
130
+ rescue
131
+ puts "ERROR: #{$!.message}"
132
+ nil
133
+ end
134
+ else
135
+ id # id is actually a model instance
127
136
  end
128
137
  }.compact
129
138
 
@@ -1,6 +1,10 @@
1
1
  class Object
2
2
  def methods_include?(name)
3
- methods.include?(name.to_sym) || methods.include?(name.to_s)
3
+ if (methods.first.kind_of?(String))
4
+ methods.include?(name.to_s)
5
+ else
6
+ methods.include?(name.to_sym)
7
+ end
4
8
  end
5
9
 
6
10
  def self.sg_subclasses
@@ -50,7 +50,8 @@ module Stratagem::Instrumentation::Models
50
50
  end
51
51
 
52
52
  def detect_adapters(model)
53
- Detect.sg_subclasses.map do |detector|
53
+ @detectors ||= Detect.sg_subclasses
54
+ @detectors.map do |detector|
54
55
  namespace = detector.name.split('::')
55
56
  namespace.pop
56
57
  namespace = namespace.join('::')
@@ -73,14 +73,13 @@ module Stratagem::Instrumentation::Models
73
73
  def run_callbacks(method, *args)
74
74
  results = callbacks.inject([]) {|memory,callback|
75
75
  begin
76
- memory << callback.send(method, *args) if callback.methods_include?(method) || callback.methods_include?(method.to_s)
77
- memory
76
+ memory << callback.send(method, *args) if callback.methods_include?(method)
78
77
  rescue
79
78
  puts "error running callbacks: #{$!.message}"
80
- #puts $!.backtrace
81
79
  end
80
+ memory
82
81
  }
83
- (results || []).flatten.compact.uniq
82
+ results.flatten.compact.uniq
84
83
  end
85
84
 
86
85
  end
@@ -1,7 +1,11 @@
1
1
  class ActiveRecord::Base
2
2
  class << self
3
3
  def existing_instance_ids
4
- find_by_sql("select id from #{table_name}").map {|i| i.id }
4
+ begin
5
+ find_by_sql("select id from #{table_name}").map {|i| i.id }
6
+ rescue
7
+ all
8
+ end
5
9
  end
6
10
 
7
11
  def removed_methods=(methods)
@@ -29,12 +29,14 @@ module Stratagem::Instrumentation::Models::Persistence::ActiveRecord
29
29
  end
30
30
 
31
31
  def unaccessible_attributes
32
- attrs = []
33
- if (model.accessible_attributes)
34
- attrs = model.stratagem.attribute_names - model.accessible_attributes.map {|a| a.to_sym }
32
+ @unaccessible_attributes ||= begin
33
+ attrs = []
34
+ if (model.accessible_attributes)
35
+ attrs = model.stratagem.attribute_names - model.accessible_attributes.map {|a| a.to_sym }
36
+ end
37
+ attrs += model.protected_attributes.map {|a| a.to_sym } if model.protected_attributes
35
38
  end
36
- attrs += model.protected_attributes.map {|a| a.to_sym } if model.protected_attributes
37
- attrs
39
+ @unaccessible_attributes
38
40
  end
39
41
 
40
42
  # parses a database error and returns the columns that had problems
@@ -73,20 +75,22 @@ module Stratagem::Instrumentation::Models::Persistence::ActiveRecord
73
75
  end
74
76
 
75
77
  def attribute_names
76
- instance.attribute_names.map {|a| a.to_sym} - model.stratagem.ignore_attributes
78
+ @attribute_names ||= (instance.attribute_names.map {|a| a.to_sym} - model.stratagem.ignore_attributes)
77
79
  end
78
80
 
79
81
  # Attributes generally used by the persistence mechanism that should not be human writable
80
82
  # accessible from the class
81
83
  def internal_attributes
82
- attrs = [:id, :created_at, :updated_at]
83
- attrs += attribute_names.select {|a|
84
- (a.to_s =~ /_count$/) ||
85
- (a.to_s =~ /_salt$/) ||
86
- (a.to_s =~ /_token$/) ||
87
- (a.to_s == 'type')
88
- }.map {|a| a.to_sym }
89
- attrs
84
+ @internal_attributes ||= begin
85
+ attrs = [:id, :created_at, :updated_at]
86
+ attrs += attribute_names.select {|a|
87
+ (a.to_s =~ /_count$/) ||
88
+ (a.to_s =~ /_salt$/) ||
89
+ (a.to_s =~ /_token$/) ||
90
+ (a.to_s == 'type')
91
+ }.map {|a| a.to_sym }
92
+ attrs
93
+ end
90
94
  end
91
95
 
92
96
  def attribute_type(name)
@@ -28,8 +28,9 @@ module Stratagem
28
28
 
29
29
  self
30
30
  rescue Exception
31
+ Stratagem.error($!)
31
32
  puts $!
32
-
33
+ puts $!.backtrace
33
34
  end
34
35
 
35
36
  def export
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{stratagem}
5
- s.version = "0.2.2"
5
+ s.version = "0.2.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Charles Grimes"]
9
- s.date = %q{2010-10-13}
9
+ s.date = %q{2010-10-20}
10
10
  s.default_executable = %q{stratagem}
11
11
  s.description = %q{Intuitive security analysis for your Rails applications}
12
12
  s.email = %q{cj@stratagemapp.com}
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 2
9
- version: 0.2.2
8
+ - 3
9
+ version: 0.2.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Charles Grimes
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-13 00:00:00 -06:00
17
+ date: 2010-10-20 00:00:00 -06:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency