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/-/4_e7koIYi3UJ. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Nicolás Sanguinetti
2012-Dec-18 16:45 UTC
Re: Can we move the "helpers" folder to "views/helpers"?
If, for whatever reason, it makes sense to have a HelpersController in your app, now you have a name clash and have to work around it. IMHO there''s nothing wrong with app/helpers per se. If you think the problem is a lack of documentation, that would be the place to improve :) Cheers, -foca On Tue, Dec 18, 2012 at 2:38 PM, Jeff Cohen <cohen.jeff@gmail.com> 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/-/4_e7koIYi3UJ. > To post to this group, send email to rubyonrails-core@googlegroups.com. > To unsubscribe from this group, send email to > rubyonrails-core+unsubscribe@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-core?hl=en. >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Gary Weaver
2012-Dec-18 17:43 UTC
Re: Can we move the "helpers" folder to "views/helpers"?
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/-/EC4Vk1jjGgwJ. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Gary Weaver
2012-Dec-19 14:44 UTC
Re: Can we move the "helpers" folder to "views/helpers"?
> 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/-/aCH2FFPVir0J. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Gary Weaver
2012-Dec-19 14:58 UTC
Re: Can we move the "helpers" folder to "views/helpers"?
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 rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.