From 8360d9944be602ea97aa309ad89753219e50b093 Mon Sep 17 00:00:00 2001 From: Rafael Fidelis Date: Thu, 4 Aug 2016 01:14:37 -0300 Subject: 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 --- railties/lib/rails/railtie.rb | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'railties') 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) -- cgit v1.2.3