Breaking up long strings on multiple lines in Ruby without stripping newlines

后端 未结 5 1962
心在旅途
心在旅途 2020-12-12 09:37

We recently decided at my job to a ruby style guide. One of the edicts is that no line should be wider than 80 characters. Since this is a Rails project, we often have strin

相关标签:
5条回答
  • 2020-12-12 10:19

    I modified Zack's answer since I wanted spaces and interpolation but not newlines and used:

    %W[
      It's a nice day "#{name}"
      for a walk!
    ].join(' ')
    

    where name = 'fred' this produces It's a nice day "fred" for a walk!

    0 讨论(0)
  • 2020-12-12 10:20

    Maybe this is what you're looking for?

    string = "line #1"\
             "line #2"\
             "line #3"
    
    p string # => "line #1line #2line #3"
    
    0 讨论(0)
  • 2020-12-12 10:29

    Three years later, there is now a solution in Ruby 2.3: The squiggly heredoc.

    class Subscription
      def warning_message
        <<~HEREDOC
          Subscription expiring soon!
          Your free trial will expire in #{days_until_expiration} days.
          Please update your billing information.
        HEREDOC
      end
    end
    

    Blog post link: https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heredoc

    The indentation of the least-indented line will be removed from each line of the content.

    0 讨论(0)
  • 2020-12-12 10:36

    I had this problem when I try to write a very long url, the following works.

    image_url = %w(
        http://minio.127.0.0.1.xip.io:9000/
        bucket29/docs/b7cfab0e-0119-452c-b262-1b78e3fccf38/
        28ed3774-b234-4de2-9a11-7d657707f79c?
        X-Amz-Algorithm=AWS4-HMAC-SHA256&
        X-Amz-Credential=ABABABABABABABABA
        %2Fus-east-1%2Fs3%2Faws4_request&
        X-Amz-Date=20170702T000940Z&
        X-Amz-Expires=3600&X-Amz-SignedHeaders=host&
        X-Amz-Signature=ABABABABABABABABABABAB
        ABABABABABABABABABABABABABABABABABABA
    ).join
    

    Note, there must not be any newlines, white spaces when the url string is formed. If you want newlines, then use HEREDOC.

    Here you have indentation for readability, ease of modification, without the fiddly quotes and backslashes on every line. The cost of joining the strings should be negligible.

    0 讨论(0)
  • 2020-12-12 10:37

    You can use \ to indicate that any line of Ruby continues on the next line. This works with strings too:

    string = "this is a \
    string that spans lines"
    
    puts string.inspect
    

    will output "this is a string that spans lines"

    0 讨论(0)
提交回复
热议问题