18F/hhs-acf-uc-dashboard

View on GitHub
app/models/view/admin_capacity_index.rb

Summary

Maintainability
A
0 mins
Test Coverage
module View
  class AdminCapacityIndex
    def initialize(capacities)
      @capacities_records = capacities
    end

    def capacities
      capacities_with_nulls.map {|record| CapacityPresenter.new(record) }
    end

    private

    def capacities_with_nulls
      dates.map do |date|
        capacities_records.detect {|record| record.reported_on == date } || NullCapacity.new(date)
      end
    end

    def dates
      (capacities_records.first.reported_on..Date.today).to_a.reverse
    end

    class NullCapacity
      attr_reader :reported_on

      def initialize(date)
        @reported_on = date
      end

      [:funded, :reserve, :activated, :unavailable].each do |meth|
        define_method(meth) do
          '-'
        end
      end

      def status
        'No data'
      end
    end

    class CapacityPresenter
      attr_reader :model

      def initialize(model)
        @model = model
      end

      delegate :reported_on, :funded, :reserve, :activated, :unavailable, :status,
        to: :model

      def date
        DateTimeFormatter.new(reported_on).us_date
      end
    end

    attr_reader :capacities_records
  end
end