mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-18 16:20:12 +01:00
Encapsulate dependencies of stats index page
This may be a bit extreme. It's modeled after the ideal "rails way". In the controller, we now know the name of a single resource. It doesn't happen to be backed by a database table, but it does know all about the task of collecting stats, leaving the controller concerned with just munging params and rendering stuff. I called the resource `IndexPage`, to avoid the temptation of trying to reuse it, which can get pretty messy. Later, if a better abstraction appears, it should be fairly painless to alter.
This commit is contained in:
parent
6df3534baf
commit
d5a555fbac
3 changed files with 50 additions and 15 deletions
|
|
@ -8,15 +8,7 @@ class StatsController < ApplicationController
|
||||||
def index
|
def index
|
||||||
@page_title = t('stats.index_title')
|
@page_title = t('stats.index_title')
|
||||||
@hidden_contexts = current_user.contexts.hidden
|
@hidden_contexts = current_user.contexts.hidden
|
||||||
@actions = Stats::Actions.new(current_user)
|
@stats = Stats::IndexPage.new(current_user)
|
||||||
@totals = Stats::Totals.new(current_user)
|
|
||||||
@projects = Stats::Projects.new(current_user)
|
|
||||||
@contexts = Stats::Contexts.new(current_user)
|
|
||||||
tags = Stats::TagCloudQuery.new(current_user).result
|
|
||||||
@tag_cloud = Stats::TagCloud.new(tags)
|
|
||||||
cutoff = 3.months.ago.beginning_of_day
|
|
||||||
tags = Stats::TagCloudQuery.new(current_user, cutoff).result
|
|
||||||
@tag_cloud_90days = Stats::TagCloud.new(tags)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def actions_done_last12months_data
|
def actions_done_last12months_data
|
||||||
|
|
|
||||||
43
app/models/stats/index_page.rb
Normal file
43
app/models/stats/index_page.rb
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
module Stats
|
||||||
|
class IndexPage
|
||||||
|
|
||||||
|
attr_reader :user
|
||||||
|
def initialize(user)
|
||||||
|
@user = user
|
||||||
|
end
|
||||||
|
|
||||||
|
def actions
|
||||||
|
@actions ||= Stats::Actions.new(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def totals
|
||||||
|
@totals ||= Stats::Totals.new(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def projects
|
||||||
|
@projects ||= Stats::Projects.new(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def contexts
|
||||||
|
@contexts ||= Stats::Contexts.new(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def tag_cloud
|
||||||
|
unless @tag_cloud
|
||||||
|
tags = Stats::TagCloudQuery.new(user).result
|
||||||
|
@tag_cloud = Stats::TagCloud.new(tags)
|
||||||
|
end
|
||||||
|
@tag_cloud
|
||||||
|
end
|
||||||
|
|
||||||
|
def tag_cloud_90days
|
||||||
|
unless @tag_cloud_90days
|
||||||
|
cutoff = 3.months.ago.beginning_of_day
|
||||||
|
tags = Stats::TagCloudQuery.new(user, cutoff).result
|
||||||
|
@tag_cloud_90days = Stats::TagCloud.new(tags)
|
||||||
|
end
|
||||||
|
@tag_cloud_90days
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,22 +1,22 @@
|
||||||
<div class="stats_content">
|
<div class="stats_content">
|
||||||
<h2><%= t('stats.totals') %></h2>
|
<h2><%= t('stats.totals') %></h2>
|
||||||
|
|
||||||
<%= render :partial => 'totals', :locals => {:totals => @totals} -%>
|
<%= render :partial => 'totals', :locals => {:totals => @stats.totals} -%>
|
||||||
|
|
||||||
<% unless current_user.todos.empty? -%>
|
<% unless current_user.todos.empty? -%>
|
||||||
|
|
||||||
<h2><%= t('stats.actions') %></h2>
|
<h2><%= t('stats.actions') %></h2>
|
||||||
<%= render :partial => 'actions', :locals => {:actions => @actions} -%>
|
<%= render :partial => 'actions', :locals => {:actions => @stats.actions} -%>
|
||||||
|
|
||||||
<h2><%= t('stats.contexts') %></h2>
|
<h2><%= t('stats.contexts') %></h2>
|
||||||
<%= render :partial => 'contexts', :locals => {:contexts => @contexts} -%>
|
<%= render :partial => 'contexts', :locals => {:contexts => @stats.contexts} -%>
|
||||||
|
|
||||||
<h2><%= t('stats.projects') %></h2>
|
<h2><%= t('stats.projects') %></h2>
|
||||||
<%= render :partial => 'projects', :locals => {:projects => @projects} -%>
|
<%= render :partial => 'projects', :locals => {:projects => @stats.projects} -%>
|
||||||
|
|
||||||
<h2><%= t('stats.tags') %></h2>
|
<h2><%= t('stats.tags') %></h2>
|
||||||
<%= render :partial => 'tags', :locals => {:tag_cloud => @tag_cloud, :key => ''} -%>
|
<%= render :partial => 'tags', :locals => {:tag_cloud => @stats.tag_cloud, :key => ''} -%>
|
||||||
<%= render :partial => 'tags', :locals => {:tag_cloud => @tag_cloud_90days, :key => '_90days'} -%>
|
<%= render :partial => 'tags', :locals => {:tag_cloud => @stats.tag_cloud_90days, :key => '_90days'} -%>
|
||||||
|
|
||||||
<% else -%>
|
<% else -%>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue