aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorRafael Fidelis <rafa_fidelis@yahoo.com.br>2016-08-04 01:14:37 -0300
committerArthur Neves <arthurnn@gmail.com>2016-11-01 12:34:38 -0400
commit8360d9944be602ea97aa309ad89753219e50b093 (patch)
treee408a0c88914e69df836439bd250bc775bbbd189 /railties
parent5b469da6ec482414c5f59762ae8e82de7e07c365 (diff)
downloadrails-8360d9944be602ea97aa309ad89753219e50b093.tar.gz
rails-8360d9944be602ea97aa309ad89753219e50b093.tar.bz2
rails-8360d9944be602ea97aa309ad89753219e50b093.zip
Added register_block method to register rake_tasks, generators, console & runner blocks
fixing @generators var initialization pre initializing variables values Changing from var init to symbol to instance var get/set
Diffstat (limited to 'railties')
-rw-r--r--railties/lib/rails/railtie.rb28
1 files changed, 16 insertions, 12 deletions
diff --git a/railties/lib/rails/railtie.rb b/railties/lib/rails/railtie.rb
index 492c519222..8b5a272c9f 100644
--- a/railties/lib/rails/railtie.rb
+++ b/railties/lib/rails/railtie.rb
@@ -132,27 +132,19 @@ module Rails
end
def rake_tasks(&blk)
- @rake_tasks ||= []
- @rake_tasks << blk if blk
- @rake_tasks
+ register_block_for(:rake_tasks, &blk)
end
def console(&blk)
- @load_console ||= []
- @load_console << blk if blk
- @load_console
+ register_block_for(:load_console, &blk)
end
def runner(&blk)
- @load_runner ||= []
- @load_runner << blk if blk
- @load_runner
+ register_block_for(:runner, &blk)
end
def generators(&blk)
- @generators ||= []
- @generators << blk if blk
- @generators
+ register_block_for(:generators, &blk)
end
def abstract_railtie?
@@ -186,6 +178,17 @@ module Rails
ActiveSupport::Inflector.underscore(string).tr("/", "_")
end
+ # receives an instance variable identifier, set the variable value if is
+ # blank and append given block to value, which will be used later in
+ # `#each_registered_block(type, &block)`
+ def register_block_for(type, &blk)
+ var_name = "@#{type}"
+ blocks = instance_variable_get(var_name) || instance_variable_set(var_name, [])
+ blocks << blk if blk
+ blocks
+ end
+
+
# If the class method does not have a method, then send the method call
# to the Railtie instance.
def method_missing(name, *args, &block)
@@ -241,6 +244,7 @@ module Rails
private
+ # run `&block` in every registered block in `#register_block_for`
def each_registered_block(type, &block)
klass = self.class
while klass.respond_to?(type)