1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
require "json"
require "haml"
# OpenTox module
module OpenTox
#Class for QPRF reporting.
#
#Provides a ruby OpenTox class to prepare an initial version of a QPRF report.
#The QPRF output is in QPRF version 1.1 from May 2008
#@example Report
# require "qsar-report"
# report = OpenTox::QPRFReport.new
# report.Title = "My QPRF Report"
# report.Version = "1"
# report.Date = Time.now.strftime("%Y/%m/%d")
# report.value "1.1", "7732-18-5" # set CAS number for H²O
# puts report.to_html
class QPRFReport
# QPRF JSON Template file
TEMPLATE_FILE = File.join(File.dirname(__FILE__),"template/qprf.json")
# QPRF MarkDown Template file
MD_TEMPLATE_FILE = File.join(File.dirname(__FILE__),"template/qprf.haml")
attr_accessor :json, :report
# Open an existing QPRF json report
# @param [String] file Name of the file
def open file
json = File.read("#{file}")
@report = JSON.parse(json)
end
# Initialize a new report instance from QPRF template. With helper functions for Title, Version and Date
def initialize
json = File.read(TEMPLATE_FILE)
@report = JSON.parse(json)
attr_hash = {self.report['singleCalculations'] => ["Title", "Version", "Date"] }
attr_hash.each_pair do |block, attributes|
attributes.each do |attribute|
define_singleton_method "#{attribute}" do
return block[attribute]
end
define_singleton_method "#{attribute}=" do |val=nil|
block[attribute] = val unless val.nil?
return block[attribute]
end
end
end
end
# Set or Get a value in the QPRF report
#@example for CAS Number
# report = OpenTox::QPRFReport.new
# report.value "1.1", "7732-18-5"
#
# @param [String] chapter Name of the chapter - e.g.: "1.1", "1.2", "1.3", "1.4", "1.5 General", "1.5 a.", "1.5 b.", "1.5 c.", "1.5 d.", "2.1" ...
# @param [String] value Value to set. If not set the function returns the current value
# @return [String] returns Value
def value chapter, value=nil
case chapter
when /^1\.\d*/
block = "1. Substance"
when /^2\.\d*/
block = "2. General information"
when /^3\.\d*/
block = "3. Prediction"
when /^4\.\d*/
block = "4. Adequacy (Optional)"
end
@report["arrayCalculations"][block]['values'][chapter][1] = value unless value.nil?
@report["arrayCalculations"][block]['values'][chapter][1]
end
# returns prettified JSON representation (QPRF JSON report) of report instance
# @return [String] returns JSON
def pretty_json
JSON.pretty_generate(@report)
end
# Creates a HTML representation of the QPRF report
# @return [String] returns HTML
def to_html
Haml::Engine.new(File.read(MD_TEMPLATE_FILE)).render @report
end
end
end
|