Sha256: 9cf4e90a13393188a46bfabae8569989a958fff8806a5ffd9c613a44870d6277

Contents?: true

Size: 714 Bytes

Versions: 5

Compression:

Stored size: 714 Bytes

Contents

# frozen_string_literal: true

module Roadie
  class StyleAttributeBuilder
    def initialize
      @styles = []
    end

    def <<(style)
      @styles << style
    end

    def attribute_string
      Deduplicator.apply(stable_sort(@styles).map(&:to_s)).join(";")
    end

    private

    def stable_sort(list)
      # Ruby's sort is unstable for performance reasons. We need it to be
      # stable, e.g. to preserve order of elements that are compared equal in
      # the sorting.
      # We can accomplish this by using the original array index as a second
      # comparator for when the first one is equal.
      list.each_with_index.sort_by { |item, index| [item, index] }.map(&:first)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
roadie-5.2.1 lib/roadie/style_attribute_builder.rb
roadie-5.2.0 lib/roadie/style_attribute_builder.rb
roadie-5.1.0 lib/roadie/style_attribute_builder.rb
roadie-5.0.1 lib/roadie/style_attribute_builder.rb
roadie-5.0.0 lib/roadie/style_attribute_builder.rb