Sha256: 4c063f1657fdebcda41b8e2c6e0989ce8c8c26243466487fae50210933042ca2

Contents?: true

Size: 817 Bytes

Versions: 4

Compression:

Stored size: 817 Bytes

Contents

module RailsEmailPreview
  class PreviewListPresenter
    attr_reader :previews

    def initialize(previews)
      @previews = previews
    end

    def columns(&block)
      split_in_halves(groups) { |_k, v| v.length }.each do |column_groups|
        block.call(column_groups)
      end
    end

    def groups
      @groups ||= by_class_name.inject({}) do |h, (_class_name, previews)|
        h.update previews.first.group_name => previews
      end
    end

    private

    def split_in_halves(xs, &weight)
      xs    = xs.to_a
      ws    = xs.map(&weight)
      col_w = ws.sum / 2
      cur_w = 0
      mid   = ws.find_index { |w| (cur_w += w) >= col_w + w }
      [xs.first(mid), xs.from(mid)]
    end

    def by_class_name
      @by_class_name ||= previews.group_by(&:preview_class_name)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rails_email_preview-0.2.25 app/presenters/rails_email_preview/preview_list_presenter.rb
rails_email_preview-0.2.24 app/presenters/rails_email_preview/preview_list_presenter.rb
rails_email_preview-0.2.23 app/presenters/rails_email_preview/preview_list_presenter.rb
rails_email_preview-0.2.22 app/presenters/rails_email_preview/preview_list_presenter.rb