mirror of
https://github.com/TracksApp/tracks.git
synced 2026-03-04 12:00:16 +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
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue