Skip to content

Commit

Permalink
implement downlod as csv
Browse files Browse the repository at this point in the history
  • Loading branch information
cesswairimu committed Feb 5, 2019
1 parent c6a0306 commit f324bf6
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 17 deletions.
52 changes: 40 additions & 12 deletions app/controllers/stats_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,31 +78,59 @@ def notes
export_as_json(@start, @end, 'note')
end

def maps
def wikis
time
export_as_json(@start, @end, 'map')
export_as_json(@start, @end, 'page')
end

def wikis
def users
time
export_as_json(@start, @end, 'page')
data = User.where(created_at: @start..@end).where(status: 1)
respond_to do |format|
format.csv { send_data data.to_csv }
format.json { send_data data.to_json, :type => 'application/json; header=present', :disposition => "attachment; filename=user.json" }
end
end

def comments
def questions
time
data = Comment.select(%i(status timestamp)).where(status: 1, timestamp: @start.to_i...@end.to_i).all.to_json
send_data data, :type => 'application/json; header=present', :disposition => "attachment; filename=comment.json"
data = Node.published.questions.where(created: @start.to_i..@end.to_i).all
respond_to do |format|
format.csv { send_data data.to_csv }
format.json { send_data data.to_json, :type => 'application/json; header=present', :disposition => "attachment; filename=questions.json" }
end
end

private
def answers
time
data = Answer.where(created_at: @start..@end).all
respond_to do |format|
format.csv { send_data data.to_csv }
format.json { send_data data.to_json, :type => 'application/json; header=present', :disposition => "attachment; filename=answers.json" }
end
end

def comments
time
data = Comment.select(%i(status timestamp)).where(status: 1, timestamp: @start.to_i...@end.to_i).all
respond_to do |format|
format.csv { send_data data.to_csv }
format.json { send_data data.to_json, :type => 'application/json; header=present', :disposition => "attachment; filename=comment.json" }
end
end

def export_as_json(starting, ending, type)
data = Node.select(%i(status created type))
.where(type: type, status: 1, created: starting.to_i..ending.to_i)
.all.to_json
send_data data, :type => 'application/json; header=present', :disposition => "attachment; filename=#{type}.json"
data = Node.published.select(%i(created type))
.where(type: type, created: starting.to_i..ending.to_i)
.all
respond_to do |format|
format.csv { send_data data.to_csv }
format.json { send_data data.to_json, :type => 'application/json; header=present', :disposition => "attachment; filename=#{type}.json" }
end
end

private

def time
@start = params[:start] ? Time.parse(params[:start].to_s) : Time.now - 1.month
@end = params[:end] ? Time.parse(params[:end].to_s) : Time.now
Expand Down
10 changes: 10 additions & 0 deletions app/models/application_record.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
class ApplicationRecord < ActiveRecord::Base
require 'csv'
self.abstract_class = true

def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |object|
csv << object.attributes.values_at(*column_names)
end
end
end
end
9 changes: 9 additions & 0 deletions app/models/node.rb
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,15 @@ def setup
save
end

def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |object|
csv << object.attributes.values_at(*column_names)
end
end
end

public

is_impressionable counter_cache: true, column_name: :views
Expand Down
9 changes: 9 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -434,4 +434,13 @@ def self.count_all_time_contributor
revisions = Revision.where(status: 1).pluck(:uid)
contributors = (notes + answers + questions + comments + revisions).compact.uniq.length
end

def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |object|
csv << object.attributes.values_at(*column_names)
end
end
end
end
31 changes: 26 additions & 5 deletions app/views/stats/raw_stats.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,22 @@
</button>
<ul class="dropdown-menu">
<li>
<%= link_to "Notes", stats_notes_path(start: params[:start], end: params[:end]) %>
<%= link_to "Notes", stats_notes_path(format: 'json', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Wikis", stats_wikis_path(start: params[:start], end: params[:end]) %>
<%= link_to "Wikis", stats_wikis_path(format: 'json', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Comments", stats_comments_path(start: params[:start], end: params[:end]) %>
<%= link_to "Comments", stats_comments_path(format: 'json', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Maps", stats_maps_path(start: params[:start], end: params[:end]) %>
<%= link_to "Users", stats_users_path(format: 'json', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Questions Asked", stats_questions_path(format: 'json', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Questions Answered", stats_answers_path(format: 'json', start: params[:start], end: params[:end]) %>
</li>
</ul>
</div>
Expand All @@ -57,8 +63,23 @@
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<li>
<%= link_to "Notes", stats_notes_path(format: 'csv', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Wikis", stats_wikis_path(format: 'csv', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Comments", stats_comments_path(format: 'csv', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Users", stats_users_path(format: 'csv', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Questions Asked", stats_questions_path(format: 'csv', start: params[:start], end: params[:end]) %>
</li>
<li>
<%= link_to "Comments", stats_comments_path(format: "csv", start: params[:start], end: params[:end]) %>
<%= link_to "Questions Answered", stats_answers_path(format: 'csv', start: params[:start], end: params[:end]) %>
</li>
</ul>
</div>
6 changes: 6 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,12 @@
get 'stats/comments/:start/:end' => 'stats#comments'
get 'stats/maps' => 'stats#maps'
get 'stats/maps/:start/:end' => 'stats#maps'
get 'stats/users' => 'stats#users'
get 'stats/users/:start/:end' => 'stats#users'
get 'stats/questions' => 'stats#questions'
get 'stats/questions/:start/:end' => 'stats#questions'
get 'stats/answers' => 'stats#answers'
get 'stats/answers/:start/:end' => 'stats#answers'
get 'stats/raw' => 'stats#raw_stats'
get 'feed' => 'notes#rss'
get 'rss.xml' => 'legacy#rss'
Expand Down

0 comments on commit f324bf6

Please sign in to comment.