Sha256: d89e61f451f27c965a25440d49e2d2a2833a3f3a61b8c3007b95edef785f87cd

Contents?: true

Size: 738 Bytes

Versions: 124

Compression:

Stored size: 738 Bytes

Contents

# frozen_string_literal: true

class ReeText::SafeJoin
  include Ree::FnDSL

  fn :safe_join do
    link :escape_html
  end


  DEFAULTS = {
    sep: "$"
  }

  doc(<<~DOC)
    This method returns an string similar to what <tt>Array#join</tt>
    would return. The array is flattened, and all items, including
    the supplied separator, are HTML escaped.
    
      safe_join(["<p>foo</p>", "<p>bar</p>"], sep: "<br />")
      # => "&lt;p&gt;foo&lt;/p&gt;&lt;br /&gt;&lt;p&gt;bar&lt;/p&gt;"
  DOC
  
  contract(
    Array,
    Ksplat[
      sep?: String
    ] => String
  )
  def call(array, **opts)
    options = DEFAULTS.merge(opts)
    sep = escape_html(options[:sep])

    array.flatten.map { |i| escape_html(i) }.join(sep)
  end
end

Version data entries

124 entries across 124 versions & 1 rubygems

Version Path
ree_lib-1.0.3 lib/ree_lib/packages/ree_text/package/ree_text/functions/safe_join.rb
ree_lib-1.0.2 lib/ree_lib/packages/ree_text/package/ree_text/functions/safe_join.rb
ree_lib-1.0.1 lib/ree_lib/packages/ree_text/package/ree_text/functions/safe_join.rb
ree_lib-1.0.0 lib/ree_lib/packages/ree_text/package/ree_text/functions/safe_join.rb