Ich sehe keinen Grund, (wieder) implementieren diese und nicht verwenden ActiveSupport, können Sie es ohne die gesamte Rails-Framework verwenden:
require 'active_support/core_ext/string/filters'
" foo bar \n \t boo".squish
# => "foo bar baz"
Oder, wenn Sie wirklich Rails vermeiden möchten, können Sie Ruby Facets verwenden :
require 'facets/string/squish'
" foo bar \n \t boo".squish
# => "foo bar baz"
aktualisieren Nun, vielleicht, perfomarmances könnte ein Grund sein. Eine schnelle Benchmark:
require 'benchmark'
require 'facets/string/squish'
def squish_falsetru(s)
s.strip.gsub(/s+/, ' ')
end
def squish_priti(s)
s.split.join(' ')
end
# ActiveSupport's implementation is not included to avoid
# names clashes with facets' implementation.
# It is also embarrassing slow!
N = 500_000
S = " foo bar \n \t boo"
Benchmark.bm(10) do |x|
x.report('falsetru') { N.times { squish_falsetru(S) } }
x.report('priti') { N.times { squish_priti(S) } }
x.report('facets') { N.times { S.squish } }
end
user system total real
falsetru 1.050000 0.000000 1.050000 ( 1.047549)
priti 0.870000 0.000000 0.870000 ( 0.879500)
facets 2.740000 0.000000 2.740000 ( 2.746178)
Wenn Sie genau wissen, was Sie wollen, warum nicht auf seine Quelle? – sawa