daily 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/daily_reports_controller.rb +22 -0
- data/app/controllers/daily_tables_controller.rb +22 -0
- data/app/formatters/png_formatter.rb +56 -0
- data/app/jobs/generate_report_job.rb +1 -0
- data/app/models/daily_report.rb +30 -4
- data/app/models/daily_table.rb +23 -1
- data/app/views/daily_reports/show.erb +5 -1
- data/app/views/daily_tables/archive.erb +21 -0
- data/app/views/daily_tables/show.erb +5 -0
- data/config/authorization_rules.rb +37 -2
- data/config/locales/en.yml +5 -1
- data/config/routes.rb +7 -0
- data/db/development.sqlite3 +0 -0
- data/db/migrate/20120117020222_add_archived_to_tables.rb +11 -0
- data/db/schema.rb +3 -1
- data/db/test.sqlite3 +0 -0
- data/lib/daily/version.rb +1 -1
- metadata +7 -4
@@ -22,6 +22,28 @@ class DailyReportsController < InheritedResources::Base
|
|
22
22
|
redirect_to daily_table_daily_report_path(@daily_report.table, @daily_report)
|
23
23
|
end
|
24
24
|
|
25
|
+
def destroy
|
26
|
+
destroy! { daily_table_path(@daily_report.table) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def archiveit
|
30
|
+
if @daily_report.archive
|
31
|
+
flash[:notice] = "Report has been archived."
|
32
|
+
else
|
33
|
+
flash[:alert] = "Report has not been archived."
|
34
|
+
end
|
35
|
+
redirect_to daily_table_daily_report_path(@daily_report.table, @daily_report)
|
36
|
+
end
|
37
|
+
|
38
|
+
def unarchiveit
|
39
|
+
if @daily_report.unarchive
|
40
|
+
flash[:notice] = "Report has been unarchived."
|
41
|
+
else
|
42
|
+
flash[:alert] = "Report has not been unarchived."
|
43
|
+
end
|
44
|
+
redirect_to daily_table_daily_report_path(@daily_report.table, @daily_report)
|
45
|
+
end
|
46
|
+
|
25
47
|
protected
|
26
48
|
|
27
49
|
# methods to make declarative_authorization allow optional table
|
@@ -21,4 +21,26 @@ class DailyTablesController < InheritedResources::Base
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
def archiveit
|
25
|
+
if @daily_table.archive
|
26
|
+
flash[:notice] = "Table has been archived."
|
27
|
+
else
|
28
|
+
flash[:alert] = "Table has not been archived."
|
29
|
+
end
|
30
|
+
redirect_to @daily_table
|
31
|
+
end
|
32
|
+
|
33
|
+
def unarchiveit
|
34
|
+
if @daily_table.unarchive
|
35
|
+
flash[:notice] = "Table has been unarchived."
|
36
|
+
else
|
37
|
+
flash[:alert] = "Table has not been unarchived."
|
38
|
+
end
|
39
|
+
redirect_to @daily_table
|
40
|
+
end
|
41
|
+
|
42
|
+
def destroy
|
43
|
+
destroy! { user_root_path }
|
44
|
+
end
|
45
|
+
|
24
46
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Ruport
|
2
|
+
class Formatter::Png < Formatter
|
3
|
+
renders :png, :for => [Ruport::Controller::Table]
|
4
|
+
|
5
|
+
CHART_TYPES = %w{line line_xy scatter bar venn pie pie_3d sparkline meter}
|
6
|
+
|
7
|
+
save_as_binary_file
|
8
|
+
|
9
|
+
def google_hash
|
10
|
+
out = options.to_hash.symbolize_keys
|
11
|
+
columns = out.delete(:columns) || data.column_names
|
12
|
+
|
13
|
+
if out[:legend] == false or skip_legend?
|
14
|
+
out.delete(:legend)
|
15
|
+
else
|
16
|
+
out[:legend] ||= columns
|
17
|
+
end
|
18
|
+
|
19
|
+
unless out[:data]
|
20
|
+
out[:data] = []
|
21
|
+
columns.each_with_index do |col, i|
|
22
|
+
out[:data][i] ||= []
|
23
|
+
end
|
24
|
+
data.each_with_index do |row, i|
|
25
|
+
columns.each_with_index do |col, i|
|
26
|
+
out[:data][i] << row[col]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
out
|
32
|
+
end
|
33
|
+
|
34
|
+
def skip_legend?
|
35
|
+
google_type == "sparkline"
|
36
|
+
end
|
37
|
+
|
38
|
+
def google_type
|
39
|
+
options.chart_type.try(:to_s).try(:downcase) || CHART_TYPES.first
|
40
|
+
end
|
41
|
+
|
42
|
+
def google_url
|
43
|
+
url = Gchart.send(google_type, google_hash)
|
44
|
+
unwise = %w({ } | \ ^ [ ] `)
|
45
|
+
unwise.each { |c| url.gsub!(c, "%#{c[0].to_s(16).upcase}") }
|
46
|
+
url.gsub!(/\s/, "%20")
|
47
|
+
url
|
48
|
+
end
|
49
|
+
|
50
|
+
def finalize_table
|
51
|
+
require 'open-uri'
|
52
|
+
output << open(google_url).read
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
data/app/models/daily_report.rb
CHANGED
@@ -16,7 +16,10 @@ class DailyReport < ActiveRecord::Base
|
|
16
16
|
before_validation :filename_extension_update
|
17
17
|
|
18
18
|
after_save :ensure_job
|
19
|
-
after_save :queue_now!, :if => :
|
19
|
+
after_save :queue_now!, :if => :queue_job_now?
|
20
|
+
|
21
|
+
after_save :delete_file!, :if => :archived?
|
22
|
+
after_destroy :delete_file!
|
20
23
|
|
21
24
|
def self.formatters
|
22
25
|
Ruport::Controller::Table.formats.keys
|
@@ -43,6 +46,11 @@ class DailyReport < ActiveRecord::Base
|
|
43
46
|
File.file?(localfile)
|
44
47
|
end
|
45
48
|
|
49
|
+
def delete_file!
|
50
|
+
File.delete(localfile) if File.file?(localfile)
|
51
|
+
true
|
52
|
+
end
|
53
|
+
|
46
54
|
def generate!
|
47
55
|
Dir.mkdir(localdir) unless File.directory?(localdir)
|
48
56
|
touch(:generate_started_at)
|
@@ -80,7 +88,27 @@ class DailyReport < ActiveRecord::Base
|
|
80
88
|
jobs.by_priority.first
|
81
89
|
end
|
82
90
|
|
91
|
+
def archive
|
92
|
+
self.archived = true
|
93
|
+
save ? self : nil
|
94
|
+
end
|
95
|
+
|
96
|
+
def archive!
|
97
|
+
self.archived = true
|
98
|
+
save!
|
99
|
+
end
|
100
|
+
|
101
|
+
def unarchive
|
102
|
+
self.archived = false
|
103
|
+
save ? self : nil
|
104
|
+
end
|
105
|
+
|
83
106
|
protected
|
107
|
+
|
108
|
+
def queue_job_now?
|
109
|
+
return false if archived?
|
110
|
+
filename_changed? or archived_changed?
|
111
|
+
end
|
84
112
|
|
85
113
|
def guid_append
|
86
114
|
return "" if formatter.blank?
|
@@ -91,10 +119,8 @@ class DailyReport < ActiveRecord::Base
|
|
91
119
|
Time.now + 1.hour
|
92
120
|
end
|
93
121
|
|
94
|
-
protected
|
95
|
-
|
96
122
|
def ensure_job
|
97
|
-
queue_next! if jobs.reload.size == 0
|
123
|
+
queue_next! if not archived? and jobs.reload.size == 0
|
98
124
|
true
|
99
125
|
end
|
100
126
|
|
data/app/models/daily_table.rb
CHANGED
@@ -2,7 +2,7 @@ class DailyTable < ActiveRecord::Base
|
|
2
2
|
include SharedBehaviors
|
3
3
|
|
4
4
|
belongs_to :user, :class_name => "DailyUser"
|
5
|
-
has_many :reports, :class_name => "DailyReport", :foreign_key => "table_id"
|
5
|
+
has_many :reports, :class_name => "DailyReport", :foreign_key => "table_id", :dependent => :destroy
|
6
6
|
|
7
7
|
# just easier with declarative auth to also have this one
|
8
8
|
has_many :daily_reports, :foreign_key => "table_id"
|
@@ -54,7 +54,29 @@ class DailyTable < ActiveRecord::Base
|
|
54
54
|
return "#{metric} (unknown)"
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
def archive
|
59
|
+
transaction do
|
60
|
+
self.archived = true
|
61
|
+
reports.each do |report|
|
62
|
+
report.archive!
|
63
|
+
end
|
64
|
+
save!
|
65
|
+
end
|
66
|
+
return self
|
67
|
+
rescue ActiveRecord::RecordInvalid
|
68
|
+
return nil
|
69
|
+
end
|
70
|
+
|
71
|
+
def unarchive
|
72
|
+
self.archived = false
|
73
|
+
save ? self : nil
|
74
|
+
end
|
57
75
|
|
76
|
+
def has_reports?
|
77
|
+
reports.size > 0
|
78
|
+
end
|
79
|
+
|
58
80
|
protected
|
59
81
|
|
60
82
|
def metric_valid
|
@@ -8,11 +8,15 @@
|
|
8
8
|
<% end %>
|
9
9
|
|
10
10
|
<h6>User: <%= "#{@daily_report.user.email}" %></h6>
|
11
|
+
<h6>State: <%= @daily_report.archived? ? "Archived" : "Active" %></h6>
|
11
12
|
<h6>Running time: <%= report_time_run(@daily_report) %></h6>
|
12
13
|
<h6>Last updated: <%= report_time_ago(@daily_report) %></h6>
|
13
14
|
<h6>Next updated: <%= report_time_next(@daily_report) %></h6>
|
14
|
-
<%= button_to "Queue Update Now", generate_daily_table_daily_report_path(@daily_report.table, @daily_report) if permitted_to? :generate, @daily_report %>
|
15
15
|
|
16
|
+
<%= button_to "Archive", archiveit_daily_table_daily_report_path(@daily_report.table, @daily_report) if permitted_to? :archiveit, @daily_report %>
|
17
|
+
<%= button_to "Unarchive", unarchiveit_daily_table_daily_report_path(@daily_report.table, @daily_report) if permitted_to? :unarchiveit, @daily_report %>
|
18
|
+
<%= button_to "Delete", daily_table_daily_report_path(@daily_report.table, @daily_report), :method => :delete if permitted_to? :destroy, @daily_report %>
|
19
|
+
<%= button_to "Queue Update Now", generate_daily_table_daily_report_path(@daily_report.table, @daily_report) if permitted_to? :generate, @daily_report %>
|
16
20
|
<%= content_tag(:p, link_to("Edit", edit_daily_table_daily_report_path(@daily_report.table, @daily_report))) if permitted_to? :edit, @daily_report %>
|
17
21
|
|
18
22
|
<%= formatter_display(@daily_report) %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% title "Archive: " + @daily_table.name %>
|
2
|
+
|
3
|
+
<%= content_tag(:p, link_to("Back to table", daily_table_path(@daily_table))) if permitted_to? :show, @daily_table %>
|
4
|
+
<p><strong>Archiving</strong> this table will archive all of the associated reports.</p>
|
5
|
+
<p>These reports will also have their respective files deleted and unavailable until unarchived.</p>
|
6
|
+
|
7
|
+
<% if permitted_to? :destroy, @daily_table %>
|
8
|
+
<p><strong>Deleting</strong> this daily will delete all of the associated reports and files.</p>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% if @daily_table.reports.size == 0 %>
|
12
|
+
<h3>No reports based on this table.</h3>
|
13
|
+
<% else %>
|
14
|
+
<h3>Reports based on this table</h3>
|
15
|
+
<%= render "daily_reports/list", :list => @daily_table.reports %>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<hr/>
|
19
|
+
|
20
|
+
<%= button_to "Archive", archiveit_daily_table_path(@daily_table) if permitted_to? :archiveit, @daily_table %>
|
21
|
+
<%= button_to "Delete", daily_table_path(@daily_table), :method => :delete if permitted_to? :destroy, @daily_table %>
|
@@ -7,8 +7,13 @@
|
|
7
7
|
<hr/>
|
8
8
|
|
9
9
|
<h6>User: <%= "#{@daily_table.user.email}" %></h6>
|
10
|
+
<h6>State: <%= @daily_table.archived? ? "Archived" : "Active" %></h6>
|
10
11
|
<h6>Type: <%= "#{@daily_table.metric_name}" %></h6>
|
11
12
|
<h6>Running time: <%= table_time_run(@daily_table) %></h6>
|
13
|
+
|
14
|
+
<%= button_to "Delete", daily_table_path(@daily_table), :method => :delete if permitted_to? :destroy, @daily_table %>
|
15
|
+
<%= button_to "Unarchive", unarchiveit_daily_table_path(@daily_table) if permitted_to? :unarchiveit, @daily_table %>
|
16
|
+
<%= content_tag(:p, link_to("Archive", archive_daily_table_path(@daily_table))) if permitted_to? :archive, @daily_table %>
|
12
17
|
<%= content_tag(:p, link_to("Edit", edit_daily_table_path(@daily_table))) if permitted_to? :edit, @daily_table %>
|
13
18
|
|
14
19
|
<% if @test_html %>
|
@@ -11,8 +11,24 @@ authorization do
|
|
11
11
|
if_attribute :user => is { user }
|
12
12
|
end
|
13
13
|
|
14
|
-
has_permission_on :daily_tables, :to => [:
|
14
|
+
has_permission_on :daily_tables, :to => [:archive, :archiveit], :join_by => :and do
|
15
|
+
if_permitted_to :update
|
16
|
+
if_attribute :archived? => is_not { true }
|
17
|
+
end
|
18
|
+
|
19
|
+
has_permission_on :daily_tables, :to => [:unarchiveit], :join_by => :and do
|
20
|
+
if_permitted_to :update
|
21
|
+
if_attribute :archived? => is { true }
|
22
|
+
end
|
23
|
+
|
24
|
+
has_permission_on :daily_tables, :to => [:destroy], :join_by => :and do
|
25
|
+
if_permitted_to :update
|
26
|
+
if_attribute :has_reports? => is { false }
|
27
|
+
end
|
28
|
+
|
29
|
+
has_permission_on :daily_tables, :to => [:report], :join_by => :and do
|
15
30
|
if_permitted_to :show
|
31
|
+
if_attribute :archived? => is_not { true }
|
16
32
|
end
|
17
33
|
|
18
34
|
has_permission_on :daily_reports, :to => [:create] do
|
@@ -23,8 +39,27 @@ authorization do
|
|
23
39
|
if_attribute :user => is { user }
|
24
40
|
end
|
25
41
|
|
26
|
-
has_permission_on :daily_reports, :to => [:
|
42
|
+
has_permission_on :daily_reports, :to => [:archive, :archiveit], :join_by => :and do
|
43
|
+
if_permitted_to :update
|
44
|
+
if_attribute :archived? => is_not { true }
|
45
|
+
end
|
46
|
+
|
47
|
+
has_permission_on :daily_reports, :to => [:unarchiveit], :join_by => :and do
|
48
|
+
if_permitted_to :update
|
49
|
+
if_attribute :archived? => is { true }
|
50
|
+
end
|
51
|
+
|
52
|
+
has_permission_on :daily_reports, :to => [:destroy], :join_by => :and do
|
53
|
+
if_permitted_to :update
|
54
|
+
end
|
55
|
+
|
56
|
+
has_permission_on :daily_reports, :to => [:show] do
|
57
|
+
if_permitted_to :update
|
58
|
+
end
|
59
|
+
|
60
|
+
has_permission_on :daily_reports, :to => [:generate], :join_by => :and do
|
27
61
|
if_permitted_to :update
|
62
|
+
if_attribute :archived? => is_not { true }
|
28
63
|
end
|
29
64
|
|
30
65
|
has_permission_on :daily_users, :to => [:update, :account] do
|
data/config/locales/en.yml
CHANGED
@@ -24,8 +24,12 @@ en:
|
|
24
24
|
notice: "Report was successfully created."
|
25
25
|
update:
|
26
26
|
notice: "Report was successfully updated."
|
27
|
+
destroy:
|
28
|
+
notice: "Report has been deleted."
|
27
29
|
daily_tables:
|
28
30
|
create:
|
29
31
|
notice: "Table was successfully created."
|
30
32
|
update:
|
31
|
-
notice: "Table was successfully updated."
|
33
|
+
notice: "Table was successfully updated."
|
34
|
+
destroy:
|
35
|
+
notice: "Table has been deleted."
|
data/config/routes.rb
CHANGED
@@ -11,9 +11,16 @@ Rails.application.routes.draw do
|
|
11
11
|
match 'home' => 'main#home', :as => :user_root
|
12
12
|
|
13
13
|
resources :daily_tables, :path => "tables" do
|
14
|
+
member do
|
15
|
+
get :archive
|
16
|
+
post :archiveit
|
17
|
+
post :unarchiveit
|
18
|
+
end
|
14
19
|
resources :daily_reports, :path => "reports" do
|
15
20
|
member do
|
16
21
|
post :generate
|
22
|
+
post :archiveit
|
23
|
+
post :unarchiveit
|
17
24
|
end
|
18
25
|
end
|
19
26
|
end
|
data/db/development.sqlite3
CHANGED
Binary file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class AddArchivedToTables < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :daily_tables, :archived, :boolean, :default => false
|
4
|
+
add_column :daily_reports, :archived, :boolean, :defualt => false
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.down
|
8
|
+
remove_column :daily_reports, :archived
|
9
|
+
remove_column :daily_tables, :archived
|
10
|
+
end
|
11
|
+
end
|
data/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended to check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(:version =>
|
13
|
+
ActiveRecord::Schema.define(:version => 20120117020222) do
|
14
14
|
|
15
15
|
create_table "daily_reports", :force => true do |t|
|
16
16
|
t.string "name"
|
@@ -25,6 +25,7 @@ ActiveRecord::Schema.define(:version => 20120111081745) do
|
|
25
25
|
t.string "transform"
|
26
26
|
t.text "transform_data"
|
27
27
|
t.text "formatter_data"
|
28
|
+
t.boolean "archived"
|
28
29
|
end
|
29
30
|
|
30
31
|
create_table "daily_tables", :force => true do |t|
|
@@ -39,6 +40,7 @@ ActiveRecord::Schema.define(:version => 20120111081745) do
|
|
39
40
|
t.text "column_names"
|
40
41
|
t.string "transform"
|
41
42
|
t.text "transform_data"
|
43
|
+
t.boolean "archived", :default => false
|
42
44
|
end
|
43
45
|
|
44
46
|
create_table "daily_users", :force => true do |t|
|
data/db/test.sqlite3
CHANGED
Binary file
|
data/lib/daily/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daily
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 9
|
10
|
+
version: 0.0.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brian Leonard
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-01-
|
18
|
+
date: 2012-01-18 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -364,6 +364,7 @@ files:
|
|
364
364
|
- app/controllers/main_controller.rb
|
365
365
|
- app/formatters/html_formatter.rb
|
366
366
|
- app/formatters/json_formatter.rb
|
367
|
+
- app/formatters/png_formatter.rb
|
367
368
|
- app/helpers/application_helper.rb
|
368
369
|
- app/jobs/generate_report_job.rb
|
369
370
|
- app/metrics/metric.rb
|
@@ -382,6 +383,7 @@ files:
|
|
382
383
|
- app/views/daily_reports/show.erb
|
383
384
|
- app/views/daily_tables/_form.erb
|
384
385
|
- app/views/daily_tables/_list.erb
|
386
|
+
- app/views/daily_tables/archive.erb
|
385
387
|
- app/views/daily_tables/edit.erb
|
386
388
|
- app/views/daily_tables/index.erb
|
387
389
|
- app/views/daily_tables/new.erb
|
@@ -436,6 +438,7 @@ files:
|
|
436
438
|
- db/migrate/20120110075743_add_queue_to_delayed_jobs.rb
|
437
439
|
- db/migrate/20120111054115_create_table_metrics.rb
|
438
440
|
- db/migrate/20120111081745_namespace_models.rb
|
441
|
+
- db/migrate/20120117020222_add_archived_to_tables.rb
|
439
442
|
- db/schema.rb
|
440
443
|
- db/seeds.rb
|
441
444
|
- db/test.sqlite3
|