lib/action_controller/metal/helpers.rb in actionpack-7.1.5 vs lib/action_controller/metal/helpers.rb in actionpack-7.2.0.beta1

- old
+ new

@@ -1,61 +1,66 @@ # frozen_string_literal: true +# :markup: markdown + module ActionController - # = Action Controller \Helpers + # # Action Controller Helpers # - # The \Rails framework provides a large number of helpers for working with assets, dates, forms, - # numbers and model objects, to name a few. These helpers are available to all templates - # by default. + # The Rails framework provides a large number of helpers for working with + # assets, dates, forms, numbers and model objects, to name a few. These helpers + # are available to all templates by default. # - # In addition to using the standard template helpers provided, creating custom helpers to - # extract complicated logic or reusable functionality is strongly encouraged. By default, each controller - # will include all helpers. These helpers are only accessible on the controller through <tt>#helpers</tt> + # In addition to using the standard template helpers provided, creating custom + # helpers to extract complicated logic or reusable functionality is strongly + # encouraged. By default, each controller will include all helpers. These + # helpers are only accessible on the controller through `#helpers` # - # In previous versions of \Rails the controller will include a helper which - # matches the name of the controller, e.g., <tt>MyController</tt> will automatically - # include <tt>MyHelper</tt>. You can revert to the old behavior with the following: + # In previous versions of Rails the controller will include a helper which + # matches the name of the controller, e.g., `MyController` will automatically + # include `MyHelper`. You can revert to the old behavior with the following: # - # # config/application.rb - # class Application < Rails::Application - # config.action_controller.include_all_helpers = false - # end + # # config/application.rb + # class Application < Rails::Application + # config.action_controller.include_all_helpers = false + # end # - # Additional helpers can be specified using the +helper+ class method in ActionController::Base or any - # controller which inherits from it. + # Additional helpers can be specified using the `helper` class method in + # ActionController::Base or any controller which inherits from it. # - # The +to_s+ method from the \Time class can be wrapped in a helper method to display a custom message if - # a \Time object is blank: + # The `to_s` method from the Time class can be wrapped in a helper method to + # display a custom message if a Time object is blank: # - # module FormattedTimeHelper - # def format_time(time, format=:long, blank_message="&nbsp;") - # time.blank? ? blank_message : time.to_fs(format) + # module FormattedTimeHelper + # def format_time(time, format=:long, blank_message="&nbsp;") + # time.blank? ? blank_message : time.to_fs(format) + # end # end - # end # - # FormattedTimeHelper can now be included in a controller, using the +helper+ class method: + # FormattedTimeHelper can now be included in a controller, using the `helper` + # class method: # - # class EventsController < ActionController::Base - # helper FormattedTimeHelper - # def index - # @events = Event.all + # class EventsController < ActionController::Base + # helper FormattedTimeHelper + # def index + # @events = Event.all + # end # end - # end # - # Then, in any view rendered by <tt>EventsController</tt>, the <tt>format_time</tt> method can be called: + # Then, in any view rendered by `EventsController`, the `format_time` method can + # be called: # - # <% @events.each do |event| -%> - # <p> - # <%= format_time(event.time, :short, "N/A") %> | <%= event.name %> - # </p> - # <% end -%> + # <% @events.each do |event| -%> + # <p> + # <%= format_time(event.time, :short, "N/A") %> | <%= event.name %> + # </p> + # <% end -%> # - # Finally, assuming we have two event instances, one which has a time and one which does not, - # the output might look like this: + # Finally, assuming we have two event instances, one which has a time and one + # which does not, the output might look like this: # - # 23 Aug 11:30 | Carolina Railhawks Soccer Match - # N/A | Carolina Railhawks Training Workshop + # 23 Aug 11:30 | Carolina Railhawks Soccer Match + # N/A | Carolina Railhawks Training Workshop # module Helpers extend ActiveSupport::Concern class << self; attr_accessor :helpers_path; end @@ -66,49 +71,52 @@ class_attribute :include_all_helpers, default: true end module ClassMethods # Declares helper accessors for controller attributes. For example, the - # following adds new +name+ and <tt>name=</tt> instance methods to a - # controller and makes them available to the view: - # attr_accessor :name - # helper_attr :name + # following adds new `name` and `name=` instance methods to a controller and + # makes them available to the view: + # attr_accessor :name + # helper_attr :name # - # ==== Parameters - # * <tt>attrs</tt> - Names of attributes to be converted into helpers. + # #### Parameters + # * `attrs` - Names of attributes to be converted into helpers. + # def helper_attr(*attrs) attrs.flatten.each { |attr| helper_method(attr, "#{attr}=") } end # Provides a proxy to access helper methods from outside the view. # - # Note that the proxy is rendered under a different view context. - # This may cause incorrect behavior with capture methods. Consider - # using {helper}[rdoc-ref:AbstractController::Helpers::ClassMethods#helper] - # instead when using +capture+. + # Note that the proxy is rendered under a different view context. This may cause + # incorrect behavior with capture methods. Consider using + # [helper](rdoc-ref:AbstractController::Helpers::ClassMethods#helper) instead + # when using `capture`. def helpers @helper_proxy ||= begin proxy = ActionView::Base.empty proxy.config = config.inheritable_copy proxy.extend(_helpers) end end - # Override modules_for_helpers to accept +:all+ as argument, which loads - # all helpers in helpers_path. + # Override modules_for_helpers to accept `:all` as argument, which loads all + # helpers in helpers_path. # - # ==== Parameters - # * <tt>args</tt> - A list of helpers + # #### Parameters + # * `args` - A list of helpers # - # ==== Returns - # * <tt>array</tt> - A normalized list of modules for the list of helpers provided. + # + # #### Returns + # * `array` - A normalized list of modules for the list of helpers provided. + # def modules_for_helpers(args) args += all_application_helpers if args.delete(:all) super(args) end private - # Extract helper names from files in <tt>app/helpers/**/*_helper.rb</tt> + # Extract helper names from files in `app/helpers/***/**_helper.rb` def all_application_helpers all_helpers_from_path(helpers_path) end end