Sha256: f1423e4a47aeee4e7341c9129fcb4e559d7865d75359a35d5cd8a0d29f68a6cb

Contents?: true

Size: 682 Bytes

Versions: 8

Compression:

Stored size: 682 Bytes

Contents

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

8 entries across 8 versions & 1 rubygems

Version Path
roadie-3.5.1 lib/roadie/style_attribute_builder.rb
roadie-3.5.0 lib/roadie/style_attribute_builder.rb
roadie-3.4.0 lib/roadie/style_attribute_builder.rb
roadie-3.3.0 lib/roadie/style_attribute_builder.rb
roadie-3.2.2 lib/roadie/style_attribute_builder.rb
roadie-3.2.1 lib/roadie/style_attribute_builder.rb
roadie-3.2.0 lib/roadie/style_attribute_builder.rb
roadie-3.1.1 lib/roadie/style_attribute_builder.rb