Skip to content

Commit 6179236

Browse files
committed
Create permanent reports
1 parent 5d9c5bf commit 6179236

8 files changed

Lines changed: 85 additions & 16 deletions

File tree

app/controllers/genomes_controller.rb

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,10 @@ def update_accession
5757

5858
# POST /genomes/1/update_external
5959
def update_external
60-
if @genome.reload_source_json!
61-
flash[:notice] = {
62-
message: 'External metadata has been updated',
63-
report: @genome.ephemeral_report
64-
}
60+
if @genome.queue_for_external_resources(true) # Force: trust curators
61+
flash[:notice] = 'Update has been queued'
6562
else
66-
flash[:alert] = {
67-
message: 'Update failed',
68-
report: @genome.ephemeral_report
69-
}
63+
flash[:alert] = 'Update was not queued, something failed'
7064
end
7165
redirect_back(fallback_location: @genome)
7266
end

app/models/application_record.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class ApplicationRecord < ActiveRecord::Base
88
has_many(:linked_notifications, class_name: 'Notification',
99
as: :linkeable, dependent: :nullify
1010
)
11+
has_many(:reports, as: :linkeable, dependent: :destroy)
1112

1213
def qualified_id
1314
'%s:%i' % [self.class.to_s, id]

app/models/genome/external_resources.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def reload_source_json!
2323
case source_database.to_sym
2424
when :sra
2525
source_accessions.each do |acc|
26-
ephemeral_report << "SRA:#{acc}"
26+
ephemeral_report.section "SRA:#{acc}"
2727
biosample = external_sra_to_biosample(acc)
2828
ephemeral_resource << "Linked to BioSample#{biosample}"
2929
data[biosample] ||=
@@ -32,7 +32,7 @@ def reload_source_json!
3232
end
3333
when :biosample
3434
source_accessions.each do |acc|
35-
ephemeral_report << "BioSample:#{acc}"
35+
ephemeral_report.section "BioSample:#{acc}"
3636
data[acc] = external_biosample_hash(acc)
3737
data[acc][:biosample_accessions].each do |acc_alt|
3838
external_biosample_to_sra(acc_alt)
@@ -42,6 +42,7 @@ def reload_source_json!
4242

4343
self.source_json = { retrieved_at: DateTime.now, samples: data }.to_json
4444
self.queued_external = nil
45+
ephemeral_report.save
4546
save
4647
end
4748

app/models/report.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Report < ApplicationRecord
2+
belongs_to :linkeable, polymorphic: true
3+
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class CreateReports < ActiveRecord::Migration[6.1]
2+
def change
3+
create_table :reports do |t|
4+
t.references :linkeable, polymorphic: true, null: false
5+
t.text :text
6+
t.text :html
7+
8+
t.timestamps
9+
end
10+
end
11+
end

lib/ephemeral_report.rb

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,29 @@ def initialize(obj)
88
end
99

1010
def <<(message)
11-
@messages << EphemeralMessage.new(message)
11+
@messages << EphemeralMessage.new(message) if message
1212
end
1313

14-
def error(message)
15-
@messages << EphemeralMessage.new(message, type: :error)
14+
%i[info error warn section].each do |type|
15+
define_method(type) do |message|
16+
@messages << EphemeralMessage.new(message, type: type) if message
17+
end
18+
end
19+
20+
def to_s
21+
@messages.map(&:to_s).join("\n")
22+
end
23+
24+
def to_html
25+
@messages.map(&:to_html).join("\n")
26+
end
27+
28+
def save
29+
Report.new(
30+
object: obj,
31+
text: to_s,
32+
html: to_html
33+
).save
1634
end
1735
end
1836

@@ -28,8 +46,29 @@ def initialize(message, type: :info)
2846
end
2947

3048
def to_s
31-
@message.is_a?(EphemeralMessage) ?
49+
@message.is_a?(EphemeralReport) ?
3250
@message.to_s :
33-
'[%s] %s' % [@timestamp.to_s, @message.to_s]
51+
'%s: [%s] %s' % [@type.to_s.upcase, @timestamp.to_s, @message.to_s]
52+
end
53+
54+
def to_html
55+
@message.is_a?(EphemeralReport) ?
56+
@message.to_html :
57+
'<div class="%s"><span class="text-muted">[%s]</span> %s</div>' % [
58+
html_class, @timestamp.to_s, @message.to_s
59+
]
60+
end
61+
62+
def html_class
63+
case type
64+
when :error
65+
'text-danger'
66+
when :warn
67+
'text-alert'
68+
when :section
69+
'text-info'
70+
else
71+
''
72+
end
3473
end
3574
end

test/fixtures/reports.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2+
3+
one:
4+
linkeable: one
5+
linkeable_type: Linkeable
6+
text: MyText
7+
html: MyText
8+
9+
two:
10+
linkeable: two
11+
linkeable_type: Linkeable
12+
text: MyText
13+
html: MyText

test/models/report_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require "test_helper"
2+
3+
class ReportTest < ActiveSupport::TestCase
4+
# test "the truth" do
5+
# assert true
6+
# end
7+
end

0 commit comments

Comments
 (0)