aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2009-10-13 23:32:32 -0500
committerJoshua Peek <josh@joshpeek.com>2009-10-13 23:32:32 -0500
commit7ec947d59c1bc3e9772788b757fe70f51b0ffd9b (patch)
tree7cf490a36de551ad1200ba8d6f5758043b785096 /activesupport
parent7b169ed1bb424929e332e998a75cdb4635c26f62 (diff)
downloadrails-7ec947d59c1bc3e9772788b757fe70f51b0ffd9b.tar.gz
rails-7ec947d59c1bc3e9772788b757fe70f51b0ffd9b.tar.bz2
rails-7ec947d59c1bc3e9772788b757fe70f51b0ffd9b.zip
Refactor AS concern to avoid hacking the "include" method.
Ruby Magic!
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/autoload.rb1
-rw-r--r--activesupport/lib/active_support/concern.rb16
-rw-r--r--activesupport/lib/active_support/dependency_module.rb17
3 files changed, 10 insertions, 24 deletions
diff --git a/activesupport/lib/active_support/autoload.rb b/activesupport/lib/active_support/autoload.rb
index 71f4b395ce..47a17687bf 100644
--- a/activesupport/lib/active_support/autoload.rb
+++ b/activesupport/lib/active_support/autoload.rb
@@ -7,7 +7,6 @@ module ActiveSupport
autoload :Callbacks, 'active_support/callbacks'
autoload :Concern, 'active_support/concern'
autoload :ConcurrentHash, 'active_support/concurrent_hash'
- autoload :DependencyModule, 'active_support/dependency_module'
autoload :DeprecatedCallbacks, 'active_support/deprecated_callbacks'
autoload :Deprecation, 'active_support/deprecation'
autoload :Gzip, 'active_support/gzip'
diff --git a/activesupport/lib/active_support/concern.rb b/activesupport/lib/active_support/concern.rb
index dcf1e8152f..eb31f7cad4 100644
--- a/activesupport/lib/active_support/concern.rb
+++ b/activesupport/lib/active_support/concern.rb
@@ -1,11 +1,17 @@
-require 'active_support/dependency_module'
-
module ActiveSupport
module Concern
- include DependencyModule
+ def self.extended(base)
+ base.instance_variable_set("@_dependencies", [])
+ end
def append_features(base)
- if super
+ if base.instance_variable_defined?("@_dependencies")
+ base.instance_variable_get("@_dependencies") << self
+ return false
+ else
+ return false if base < self
+ @_dependencies.each { |dep| base.send(:include, dep) }
+ super
base.extend const_get("ClassMethods") if const_defined?("ClassMethods")
base.send :include, const_get("InstanceMethods") if const_defined?("InstanceMethods")
base.class_eval(&@_included_block) if instance_variable_defined?("@_included_block")
@@ -19,7 +25,5 @@ module ActiveSupport
super
end
end
-
- alias_method :include, :depends_on
end
end
diff --git a/activesupport/lib/active_support/dependency_module.rb b/activesupport/lib/active_support/dependency_module.rb
deleted file mode 100644
index 6847c0f86a..0000000000
--- a/activesupport/lib/active_support/dependency_module.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-module ActiveSupport
- module DependencyModule
- def append_features(base)
- return false if base < self
- (@_dependencies ||= []).each { |dep| base.send(:include, dep) }
- super
- end
-
- def depends_on(*mods)
- mods.each do |mod|
- next if self < mod
- @_dependencies ||= []
- @_dependencies << mod
- end
- end
- end
-end