Some more reasons that you would not want to remove app/helpers from load 
path. In Rails 3.2.9, here are the hardcoded usages of that path, so even 
though Rails console loads, it could break elsewhere in addition to just 
the generators:

grep -r "app/helpers" * | grep -v "_test.rb\|_tests.rb\|README\|USAGE"

actionpack/lib/action_controller/metal/helpers.rb:      # Extract helper 
names from files in <tt>app/helpers/**/*_helper.rb</tt>
railties/guides/source/command_line.textile:        Helper:     
app/helpers/credit_card_helper.rb
railties/guides/source/command_line.textile:        Helper:     
app/helpers/admin/credit_card_helper.rb
railties/guides/source/command_line.textile:     create    
app/helpers/greetings_helper.rb
railties/guides/source/command_line.textile:    exists  app/helpers/
railties/guides/source/command_line.textile:    create  
app/helpers/high_scores_helper.rb
railties/guides/source/command_line.textile:      create  app/helpers
railties/guides/source/command_line.textile:      create  
app/helpers/application_helper.rb
railties/guides/source/configuring.textile:*+prepend_helpers_path+* Adds 
the directory +app/helpers+ from the application, railties and engines to 
the lookup path for helpers for the application.
railties/guides/source/engines.textile:create      
app/helpers/blorgh/posts_helper.rb
railties/guides/source/engines.textile:create    
app/helpers/blorgh/comments_helper.rb
railties/guides/source/generators.textile:      create      
app/helpers/users_helper.rb
railties/guides/source/generators.textile:    create_file 
"app/helpers/#{file_name}_helper.rb", <<-FILE
railties/guides/source/generators.textile:And it will generate the 
following helper file in +app/helpers+:
railties/guides/source/generators.textile:      create      
app/helpers/posts_helper.rb
railties/guides/source/generators.textile:    create_file 
"app/helpers/#{file_name}_helper.rb", <<-FILE
railties/guides/source/generators.textile:      create      
app/helpers/comments_helper.rb
railties/guides/source/getting_started.textile:|app/helpers/posts_helper.rb     
             
|Helper functions to be used from the post views|
railties/guides/source/getting_started.textile:| 
app/helpers/comments_helper.rb              | A view helper 
file                       |
railties/guides/source/getting_started.textile:View Helpers live in 
<tt>app/helpers</tt> and provide small snippets of reusable
railties/guides/source/getting_started.textile:Open up 
<tt>app/helpers/posts_helper.rb</tt> and add the following:
railties/lib/rails/engine/configuration.rb:          paths.add 
"app/helpers",         :eager_load => true
railties/lib/rails/engine.rb:  #     paths["app/helpers"]         # => 
["app/helpers"]
railties/lib/rails/engine.rb:      paths["app/helpers"].existent
railties/lib/rails/engine.rb:        
app.config.helpers_paths.unshift(*paths["app/helpers"].existent)
railties/lib/rails/generators/rails/helper/helper_generator.rb:        
template 'helper.rb', File.join('app/helpers', class_path, 
"#{file_name}_helper.rb")
railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb:        
empty_directory_with_gitkeep "app/helpers"
railties/lib/rails/tasks/statistics.rake:  %w(Helpers            
app/helpers),

On Wednesday, December 19, 2012 9:44:02 AM UTC-5, Gary Weaver wrote:
>
> > So, you'd then want to add complexity to that to say when autoloading, 
> ensure that if there is another autoloaded directory under that directory, 
> then ignore that directory when autoloading the higher level autoloaded 
> directory.
>
> Sorry, wasn't thinking. Since the constants would be loaded in a prior 
> autoload path, it wouldn't attempt to load them again. I'll try to be 
> helpful:
>
> In config/application.rb, you'd just:
>
> config.autoload_paths += %W(#{config.root}/app/views/helpers)
>
> if you want to remove the old autoload dir then also add:
>
> config.eager_load_paths -= %W(#{config.root}/app/helpers)
>
> then at command-line:
>
> mkdir app/views/helpers
> mv app/helpers/* app/views/helpers/
> rmdir app/helpers
>
> then:
>
> rails c
>
> and autoload_paths is the first of the autoload paths evaluated you can 
> see from evaluating:
>
> MyRailsApp::Application._all_autoload_paths
>
> But, Rails generators and any other gems that create helpers may expect 
> the app/helpers path to exist, be writable, and/or be autoloaded.
>
> So, you could symlink app/helpers to app/views/helpers or remove 
> app/helpers and then do pull requests for gems/etc. as they break.
>
> You could also suggest making each of the autoload paths configurable in 
> Rails, but, like I said, you'd have compatibility issues with gems that mod 
> or read files in autoloaded dirs like annotate, modelist, etc. so probably 
> a no-go.
>
> On Tuesday, December 18, 2012 12:43:03 PM UTC-5, Gary Weaver wrote:
>>
>> Historically, helpers can be and have been included in controllers by 
>> some, as they are modules. As you said, "any methods in there are intended 
>> *primarily* for the views"- primarily being the operative word. I would 
>> think moving them would hurt more than it would help. In addition, right 
>> now autoloading works under the premise that everything under the 
>> autoloaded directory has the same fully-qualified path to the constant as 
>> the relative path under one of the autoload directories. So, you'd then 
>> want to add complexity to that to say when autoloading, ensure that if 
>> there is another autoloaded directory under that directory, then ignore 
>> that directory when autoloading the higher level autoloaded directory. That 
>> would get too messy. The alternative would mean adding a Helpers module for 
>> each helper which would be cumbersome and break things.
>>
>> On Tuesday, December 18, 2012 11:38:34 AM UTC-5, Jeff Cohen wrote:
>>>
>>> Hi everyone,
>>>
>>> I know this would break a long-standing tradition, but I really think 
>>> the "app/helpers" folder should really by "app/views/helpers".
>>>
>>> I think it helps communicate that any methods in there are intended 
>>> primarily for the views to use.
>>>
>>> I'm not sure how big a job it would be to make this change, but I'm 
>>> ready to investigate if the core team agrees that this would be something 
>>> nice for Rails 4.
>>>
>>> Thanks!
>>> Jeff
>>>
>>>
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-core/-/vRtI-uPYADoJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to