stratagem 0.2.0 → 0.2.2

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.
Files changed (81) hide show
  1. data/LICENSE +29 -0
  2. data/Manifest +40 -38
  3. data/Rakefile +3 -3
  4. data/lib/stratagem.rb +22 -7
  5. data/lib/stratagem/authentication.rb +2 -1
  6. data/lib/stratagem/auto_mock/aquifer.rb +88 -15
  7. data/lib/stratagem/auto_mock/factory.rb +19 -30
  8. data/lib/stratagem/auto_mock/value_generator.rb +3 -1
  9. data/lib/stratagem/client.rb +3 -2
  10. data/lib/stratagem/crawler/authentication.rb +10 -3
  11. data/lib/stratagem/crawler/form.rb +2 -2
  12. data/lib/stratagem/crawler/html_utils.rb +12 -1
  13. data/lib/stratagem/crawler/parameter_resolver.rb +18 -4
  14. data/lib/stratagem/crawler/route_invoker.rb +58 -16
  15. data/lib/stratagem/crawler/session.rb +13 -5
  16. data/lib/stratagem/crawler/site_model.rb +20 -8
  17. data/lib/stratagem/extensions/object.rb +2 -2
  18. data/lib/stratagem/extensions/string.rb +2 -2
  19. data/lib/stratagem/instrumentation.rb +18 -0
  20. data/lib/stratagem/{framework_extensions → instrumentation}/method_invocation.rb +1 -1
  21. data/lib/stratagem/instrumentation/models.rb +25 -0
  22. data/lib/stratagem/instrumentation/models/annotations.rb +114 -0
  23. data/lib/stratagem/instrumentation/models/association.rb +40 -0
  24. data/lib/stratagem/instrumentation/models/authentication.rb +7 -0
  25. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/authlogic/detect.rb +2 -2
  26. data/lib/stratagem/instrumentation/models/authentication/authlogic/instrumentation.rb +13 -0
  27. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/authlogic/metadata.rb +1 -3
  28. data/lib/stratagem/instrumentation/models/authentication/devise/detect.rb +11 -0
  29. data/lib/stratagem/instrumentation/models/authentication/devise/instrumentation.rb +18 -0
  30. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/devise/metadata.rb +7 -3
  31. data/lib/stratagem/{framework_extensions/models/adapters/util/authentication_metadata.rb → instrumentation/models/authentication/metadata.rb} +2 -2
  32. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/restful_authentication/detect.rb +2 -4
  33. data/lib/stratagem/{framework_extensions/models/adapters/restful_authentication/extensions.rb → instrumentation/models/authentication/restful_authentication/instrumentation.rb} +1 -1
  34. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/authentication}/restful_authentication/metadata.rb +2 -2
  35. data/lib/stratagem/{framework_extensions → instrumentation}/models/detect.rb +1 -1
  36. data/lib/stratagem/{framework_extensions → instrumentation}/models/metadata.rb +6 -4
  37. data/lib/stratagem/{framework_extensions → instrumentation}/models/mocking.rb +1 -1
  38. data/lib/stratagem/instrumentation/models/persistence.rb +9 -0
  39. data/lib/stratagem/instrumentation/models/persistence/active_record/detect.rb +18 -0
  40. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/active_record/extensions.rb +5 -1
  41. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/active_record/metadata.rb +25 -9
  42. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/active_record/tracing.rb +4 -2
  43. data/lib/stratagem/instrumentation/models/persistence/common/detect.rb +7 -0
  44. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/common/extensions.rb +0 -0
  45. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/persistence}/common/metadata.rb +6 -2
  46. data/lib/stratagem/instrumentation/models/persistence/common/tracing.rb +4 -0
  47. data/lib/stratagem/instrumentation/models/support_libraries.rb +7 -0
  48. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/support_libraries}/friendly_id/detect.rb +2 -2
  49. data/lib/stratagem/{framework_extensions/models/adapters → instrumentation/models/support_libraries}/friendly_id/metadata.rb +2 -2
  50. data/lib/stratagem/instrumentation/models/support_libraries/state_machine/detect.rb +11 -0
  51. data/lib/stratagem/instrumentation/models/support_libraries/state_machine/metadata.rb +17 -0
  52. data/lib/stratagem/{framework_extensions → instrumentation}/models/tracing.rb +2 -2
  53. data/lib/stratagem/{framework_extensions → instrumentation}/rails.rb +0 -0
  54. data/lib/stratagem/{framework_extensions → instrumentation}/rails2/action_controller.rb +0 -0
  55. data/lib/stratagem/{framework_extensions → instrumentation}/rails2/action_mailer.rb +0 -0
  56. data/lib/stratagem/{framework_extensions → instrumentation}/rails3/parameters.rb +0 -0
  57. data/lib/stratagem/{framework_extensions → instrumentation}/request_forgery_protection.rb +0 -0
  58. data/lib/stratagem/model/application.rb +30 -15
  59. data/lib/stratagem/model/components/controller.rb +2 -2
  60. data/lib/stratagem/model/components/reference.rb +2 -2
  61. data/lib/stratagem/model/components/view.rb +1 -1
  62. data/lib/stratagem/model_builder.rb +19 -8
  63. data/lib/stratagem/scanner.rb +1 -1
  64. data/lib/stratagem/site_crawler.rb +4 -2
  65. data/stratagem.gemspec +7 -7
  66. data/templates/install/tasks/stratagem.rake +9 -1
  67. metadata +86 -82
  68. data/lib/stratagem/framework_extensions.rb +0 -18
  69. data/lib/stratagem/framework_extensions/models.rb +0 -21
  70. data/lib/stratagem/framework_extensions/models/adapters/active_record/detect.rb +0 -7
  71. data/lib/stratagem/framework_extensions/models/adapters/authlogic/extensions.rb +0 -10
  72. data/lib/stratagem/framework_extensions/models/adapters/authlogic/tracing.rb +0 -4
  73. data/lib/stratagem/framework_extensions/models/adapters/common/detect.rb +0 -7
  74. data/lib/stratagem/framework_extensions/models/adapters/common/tracing.rb +0 -4
  75. data/lib/stratagem/framework_extensions/models/adapters/devise/detect.rb +0 -11
  76. data/lib/stratagem/framework_extensions/models/adapters/devise/extensions.rb +0 -0
  77. data/lib/stratagem/framework_extensions/models/adapters/devise/tracing.rb +0 -4
  78. data/lib/stratagem/framework_extensions/models/adapters/friendly_id/extensions.rb +0 -0
  79. data/lib/stratagem/framework_extensions/models/adapters/friendly_id/tracing.rb +0 -4
  80. data/lib/stratagem/framework_extensions/models/adapters/restful_authentication/tracing.rb +0 -4
  81. data/lib/stratagem/framework_extensions/models/annotations.rb +0 -78
@@ -1,18 +0,0 @@
1
- module Stratagem::ApplicationExtensions; end
2
-
3
- require 'stratagem/framework_extensions/rails'
4
- require 'stratagem/framework_extensions/method_invocation'
5
- require 'stratagem/framework_extensions/models'
6
- require 'stratagem/framework_extensions/request_forgery_protection'
7
-
8
- if (Stratagem.rails_3?)
9
- require 'stratagem/framework_extensions/rails3/parameters'
10
- elsif (Stratagem.rails_2?)
11
- require 'stratagem/framework_extensions/rails2/action_controller'
12
- require 'stratagem/framework_extensions/rails2/action_mailer'
13
- else
14
- raise "Unsupported Rails version #{Stratagem.rails_version}"
15
- end
16
-
17
-
18
-
@@ -1,21 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models; end
2
- module Stratagem::ApplicationExtensions::Models::Adapters; end
3
-
4
- require 'stratagem/framework_extensions/models/mocking'
5
- require 'stratagem/framework_extensions/models/metadata'
6
- require 'stratagem/framework_extensions/models/tracing'
7
- require 'stratagem/framework_extensions/models/annotations'
8
- require 'stratagem/framework_extensions/models/detect'
9
-
10
- base = File.join(File.dirname(__FILE__), 'models', 'adapters', 'util')
11
- Dir.entries(base).select {|s| s =~ /\.rb$/}.each {|helper|
12
- require File.join(base, helper.gsub(/\.rb/, ''))
13
- }
14
-
15
- base = File.join(File.dirname(__FILE__), 'models', 'adapters')
16
- Dir.entries(base).select {|s| s !~ /^\./ && s != 'util' }.each {|adapter_dir|
17
- require File.join(base, adapter_dir, 'detect')
18
- require File.join(base, adapter_dir, 'tracing')
19
- require File.join(base, adapter_dir, 'metadata')
20
- require File.join(base, adapter_dir, 'extensions')
21
- }
@@ -1,7 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models::Adapters::ActiveRecord
2
- class Detect < Stratagem::ApplicationExtensions::Models::Detect
3
- def self.supports?(model)
4
- model.ancestors.include?(ActiveRecord::Base)
5
- end
6
- end
7
- end
@@ -1,10 +0,0 @@
1
- if defined?(Authlogic)
2
- module Authlogic::ActsAsAuthentic::MagicColumns::Methods
3
- def self.included(model)
4
- # automatically activate the account
5
- model.class_eval do
6
- before_save { |record| record.active = true if record.methods_include?(:active) }
7
- end
8
- end
9
- end
10
- end
@@ -1,4 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models::Adapters::Authlogic
2
- module Tracing
3
- end
4
- end
@@ -1,7 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models::Adapters::Common
2
- class Detect < Stratagem::ApplicationExtensions::Models::Detect
3
- def self.supports?(model)
4
- true
5
- end
6
- end
7
- end
@@ -1,4 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models::Adapters::Common
2
- module Tracing
3
- end
4
- end
@@ -1,11 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models::Adapters::Devise
2
- class Detect < Stratagem::ApplicationExtensions::Models::Detect
3
- def self.supports?(model)
4
- begin
5
- model.methods.include?(:devise_modules)
6
- rescue
7
- false
8
- end
9
- end
10
- end
11
- end
@@ -1,4 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models::Adapters::Devise
2
- module Tracing
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models::Adapters::FriendlyId
2
- module Tracing
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module Stratagem::ApplicationExtensions::Models::Adapters::RestfulAuthentication
2
- module Tracing
3
- end
4
- end
@@ -1,78 +0,0 @@
1
- # Defines the stratagem namespace attached to the model
2
- module Stratagem::ApplicationExtensions::Models
3
- ValidatorDefinition = Struct.new(:validation, :field, :args, :model_class)
4
-
5
- class InstanceAnnotations
6
- include Mocking
7
-
8
- def initialize(object)
9
- @object = object
10
- end
11
-
12
- def method_missing(method, *args, &block)
13
- @object.class.stratagem.send(method, *args, &block)
14
- end
15
- end
16
-
17
- class Annotations
18
- include Metadata
19
- include Tracing
20
-
21
- attr_reader :model
22
-
23
- AdapterDescriptor = Struct.new(:tracing, :metadata, :detector)
24
-
25
- class << self
26
- def configure(model)
27
- puts "configuring #{model.name}"
28
-
29
- # add the stratagem namespace
30
- model.class_eval do
31
- def self.stratagem
32
- # one stratagem instance per subclass
33
- @@stratagem ||= {}
34
- @@stratagem[self] ||= Stratagem::ApplicationExtensions::Models::Annotations.new(self)
35
- end
36
-
37
-
38
- def stratagem
39
- @stratagem ||= Stratagem::ApplicationExtensions::Models::InstanceAnnotations.new(self)
40
- end
41
- end
42
-
43
- # connect the adapters
44
- detect_adapters(model).each {|adapter|
45
- if adapter.detector.supports?(model)
46
- model.send(:include, adapter.tracing)
47
- end
48
- }
49
- end
50
-
51
- def detect_adapters(model)
52
- Detect.subclasses.map do |detector|
53
- namespace = detector.name.split('::')
54
- namespace.pop
55
- namespace = namespace.join('::')
56
-
57
- tracing = module_eval(namespace+"::Tracing")
58
- metadata = module_eval(namespace+"::Metadata").new(model)
59
-
60
- AdapterDescriptor.new(tracing, metadata, detector)
61
- end
62
- end
63
- end
64
-
65
- def initialize(model)
66
- puts "initializing stratagem for #{model.name}"
67
- @model = model
68
- end
69
-
70
- def adapters
71
- # supported adapters may change throughout the lifecycle of a class / object
72
- @adapters ||= self.class.detect_adapters(model)
73
- end
74
-
75
-
76
- end
77
-
78
- end