vigetlabs/stat_board

View on GitHub
lib/stat_board/graph_helper.rb

Summary

Maintainability
A
0 mins
Test Coverage
module StatBoard
  class GraphHelper
    attr_reader :start_at, :end_at

    def initialize(sa, ea)
      @start_at = sa.to_date
      @end_at   = ea.to_date
    end

    # a string of the array of the count of (klass) objects
    # along the date_range, on every displayed interval
    def resources_by_date(klass_name)
      @resrouces_cache ||= {}
      @resrouces_cache[klass_name] ||= begin
        klass = klass_name.to_s.constantize
        steps = date_range.step(date_steps).map(&:end_of_day)

        steps.map do |step_end|
          klass.where("created_at <= ?", step_end).count
        end
      end
    end

    # number of days per interval on the graph's x axis
    def date_steps
      @date_steps ||= date_range.count / [date_range.count, 50].min
    end

    private

    # range of dates shown on the graph (array of days)
    def date_range
      @date_range ||= start_at..end_at
    end

    # returns the earliest `created_at` of a given class
    # returns `Time.now` if none is available
    def first_day_of(klass_name)
      klass = klass_name.to_s.constantize
      klass.order("created_at ASC").first.try(:created_at) || Time.now
    end

  end
end