Sha256: 0426582d9b3135aefe53f862d400c2e5edac87f93a1fce60c12a13198b3e2a71

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

module Kadmin
  class FinderDecorator
    # @return [Kadmin::Finder] underlying finder model
    attr_reader :finder

    delegate :filters, :scope, :results, to: :finder

    def initialize(finder)
      @finder = finder
    end

    # @return [Boolean] true if no results, false otherwise
    def empty?
      return finder.results.count.zero?
    end

    # @return [String] how many resources are being displayed (along with indices)
    def currently_showing
      resource = resource_name.downcase
      displayed = empty? ? 0 : pager.displayed_items

      currently_showing_phrase = "#{displayed} #{resource}"
      currently_showing_phrase = "#{currently_showing_phrase} (#{pager.page_start} - #{pager.page_end})" if finder.results.count > 1

      return currently_showing_phrase
    end

    # @return [String] human readable, singular/plural form of the finder's model
    def resource_name
      return @finder.scope.model_name.human(count: pager.displayed_items)
    end

    # @return [String] a description of the current applied filters
    def applied_filters
      applied_filters = ''
      filters = @finder.filters.reduce([]) do |acc, (name, filter)|
        next(acc) if filter.value.blank?
        acc << %(<strong>#{filter.value}</strong> on <em>#{name}</em>)
      end
      applied_filters = "(filtering: #{filters.join('; ')})" unless filters.empty?

      return applied_filters.html_safe
    end

    # @return [Kadmin::PagerDecorator] decorated pager of the underlying finder
    def pager
      return @pager ||= Kadmin::PagerDecorator.new(@finder.pager)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kadmin-0.3.2 app/decorators/kadmin/finder_decorator.rb