diff options
author | Rafael Fidelis <rafa_fidelis@yahoo.com.br> | 2016-08-04 01:14:37 -0300 |
---|---|---|
committer | Arthur Neves <arthurnn@gmail.com> | 2016-11-01 12:34:38 -0400 |
commit | 8360d9944be602ea97aa309ad89753219e50b093 (patch) | |
tree | e408a0c88914e69df836439bd250bc775bbbd189 | |
parent | 5b469da6ec482414c5f59762ae8e82de7e07c365 (diff) | |
download | rails-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
-rw-r--r-- | railties/lib/rails/railtie.rb | 28 |
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) |