On Thu, May 28, 2009 at 01:35:11AM +0900, J Haas wrote:
> On May 22, 9:01m, Roger Pack <rogerpack2... / gmail.com> wrote:
> > Tony's point was that certain constructs, like case statements, won't be
> > transformable into indentation only blocks. oes that make sense?
>
> No, it doesn't, because I don't see why case statements are not
> transformable into indent-only blocks. I've _done_ them using the
> quick-and-dirty hacky script and they work just fine. (In cases like
> Joshua's impossible.rb I had to make a minor modification to the
> script to have it inject 'end ' rather than 'end\n', but it still
> worked fine.)
>
> Code speaks louder than words, right? Here's some real-world code...
> it's application_controller.rb from the AuthLogic example (http://
> github.com/binarylogic/authlogic_example/tree):
>
> -----------------
>
> # Filters added to this controller apply to all controllers in the
> application.
> # Likewise, all the methods added will be available for all
> controllers.
>
> class ApplicationController < ActionController::Base
>   helper :all
>   helper_method :current_user_session, :current_user
>   filter_parameter_logging :password, :password_confirmation
>
>   private
>     def current_user_session
>       return @current_user_session if defined?(@current_user_session)
>       @current_user_session = UserSession.find
>     end
>
>     def current_user
>       return @current_user if defined?(@current_user)
>       @current_user = current_user_session &&
> current_user_session.record
>     end
>
>     def require_user
>       unless current_user
>         store_location
>         flash[:notice] = "You must be logged in to access this page"
>         redirect_to new_user_session_url
>         return false
>       end
>     end
>
>     def require_no_user
>       if current_user
>         store_location
>         flash[:notice] = "You must be logged out to access this page"
>         redirect_to account_url
>         return false
>       end
>     end
>
>     def store_location
>       session[:return_to] = request.request_uri
>     end
>
>     def redirect_back_or_default(default)
>       redirect_to(session[:return_to] || default)
>       session[:return_to] = nil
>     end
> end
>
> -----------------
>
> Nothing particularly special about this code, right? Pretty standard
> Ruby, if a bit simple? 37 non-blank, non-comment lines, of which 9
> consist of the bare word "end". I defy anyone to tell me that the code
> would be less readable as this:
>
> -----------------
>
> # Filters added to this controller apply to all controllers in the
> application.
> # Likewise, all the methods added will be available for all
> controllers.
>
> class ApplicationController < ActionController::Base
>   helper :all
>   helper_method :current_user_session, :current_user
>   filter_parameter_logging :password, :password_confirmation
>
>   private
>     def current_user_session:
>       return @current_user_session if defined?(@current_user_session)
>       @current_user_session = UserSession.find
>
>     def current_user:
>       return @current_user if defined?(@current_user)
>       @current_user = current_user_session &&
> current_user_session.record
>
>     def require_user:
>       unless current_user:
>         store_location
>         flash[:notice] = "You must be logged in to access this page"
>         redirect_to new_user_session_url
>         return false
>
>     def require_no_user:
>       if current_user:
>         store_location
>         flash[:notice] = "You must be logged out to access this page"
>         redirect_to account_url
>         return false
>
>     def store_location:
>       session[:return_to] = request.request_uri
>
>     def redirect_back_or_default(default):
>       redirect_to(session[:return_to] || default)
>       session[:return_to] = nil
>
I find this code less readable than the above original code with the
'end's included