spout 0.8.0.beta1 → 0.8.0.beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0.beta1
4
+ version: 0.8.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Remo Mueller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-23 00:00:00.000000000 Z
11
+ date: 2014-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -97,12 +97,15 @@ files:
97
97
  - lib/spout.rb
98
98
  - lib/spout/actions.rb
99
99
  - lib/spout/application.rb
100
+ - lib/spout/commands/coverage.rb
100
101
  - lib/spout/commands/graphs.rb
101
- - lib/spout/commands/json_charts_and_tables.rb
102
+ - lib/spout/commands/images.rb
102
103
  - lib/spout/helpers/array_statistics.rb
103
104
  - lib/spout/helpers/chart_types.rb
105
+ - lib/spout/helpers/subject_loader.rb
104
106
  - lib/spout/helpers/table_formatting.rb
105
107
  - lib/spout/hidden_reporter.rb
108
+ - lib/spout/models/coverage_result.rb
106
109
  - lib/spout/models/subject.rb
107
110
  - lib/spout/support/javascripts/data.js
108
111
  - lib/spout/support/javascripts/highcharts-convert.js
@@ -1,202 +0,0 @@
1
- require 'csv'
2
- require 'fileutils'
3
- require 'rubygems'
4
- require 'json'
5
- require 'yaml'
6
-
7
-
8
- require 'spout/models/subject'
9
- require 'spout/helpers/array_statistics'
10
- require 'spout/helpers/chart_types'
11
-
12
-
13
- module Spout
14
- module Commands
15
- class JsonChartsAndTables
16
- def initialize(variables)
17
- spout_config = YAML.load_file('.spout.yml')
18
-
19
- _visit = ''
20
-
21
- if spout_config.kind_of?(Hash)
22
- _visit = spout_config['visit'].to_s.strip
23
-
24
- chart_variables = if spout_config['charts'].kind_of?(Array)
25
- spout_config['charts'].collect{|c| c.to_s.strip}.select{|c| c != ''}
26
- else
27
- []
28
- end
29
- else
30
- puts "The YAML file needs to be in the following format:"
31
- puts "histogram: visitnumber # VISIT_VARIABLE\ncharts:\n - age_s1\n - gender\n - race\n"
32
- exit
33
- end
34
-
35
- if Spout::Helpers::ChartTypes::get_json(_visit, 'variable') == nil
36
- if _visit == ''
37
- puts "The visit variable in .spout.yml can't be blank."
38
- else
39
- puts "Could not find the following visit variable: #{_visit}"
40
- end
41
- exit
42
- end
43
- missing_variables = chart_variables.select{|c| Spout::Helpers::ChartTypes::get_json(c, 'variable') == nil}
44
- if missing_variables.count > 0
45
- puts "Could not find the following chart variable#{'s' unless missing_variables.size == 1}: #{missing_variables.join(', ')}"
46
- exit
47
- end
48
-
49
- argv_string = variables.join(',')
50
- number_of_rows = nil
51
-
52
- if match_data = argv_string.match(/-rows=(\d*)/)
53
- number_of_rows = match_data[1].to_i
54
- argv_string.gsub!(match_data[0], '')
55
- end
56
-
57
- valid_ids = argv_string.split(',').compact.reject{|s| s == ''}
58
-
59
- @visit = _visit
60
-
61
- chart_lookup = { _visit => "Histogram" }
62
-
63
- chart_variables.each do |chart_variable|
64
- json = Spout::Helpers::ChartTypes::get_json(chart_variable, 'variable')
65
- chart_lookup[chart_variable] = json['display_name']
66
- end
67
-
68
-
69
-
70
- t = Time.now
71
-
72
-
73
- version = standard_version
74
-
75
- subjects = []
76
-
77
- FileUtils.mkpath "charts/#{version}"
78
-
79
- csv_files = Dir.glob("csvs/#{version}/*.csv")
80
-
81
- csv_files.each_with_index do |csv_file, index|
82
- count = 0
83
- puts "Parsing: #{csv_file}"
84
- CSV.parse( File.open(csv_file, 'r:iso-8859-1:utf-8'){|f| f.read}, headers: true, header_converters: lambda { |h| h.to_s.downcase } ) do |line|
85
-
86
- row = line.to_hash
87
- count += 1
88
- puts "Line: #{count}" if (count % 1000 == 0)
89
- subjects << Spout::Models::Subject.create do |t|
90
-
91
- t._visit = row[_visit] #.to_s.strip
92
-
93
- row.each do |key,value|
94
- unless t.respond_to?(key)
95
- t.class.send(:define_method, "#{key}") { instance_variable_get("@#{key}") }
96
- t.class.send(:define_method, "#{key}=") { |value| instance_variable_set("@#{key}", value) }
97
- end
98
-
99
- unless value == nil
100
- t.send("#{key}=", value)
101
- end
102
- end
103
- end
104
- # puts "Memory Used: " + (`ps -o rss -p #{$$}`.strip.split.last.to_i / 1024).to_s + " MB" if count % 1000 == 0
105
- # break if count >= 1000
106
- break if number_of_rows != nil and count >= number_of_rows
107
- end
108
- end
109
-
110
- variable_files = Dir.glob('variables/**/*.json')
111
- variable_files_count = variable_files.count
112
-
113
- variable_files.each do |variable_file|
114
- json = JSON.parse(File.read(variable_file)) rescue json = nil
115
- next unless json
116
- next unless valid_ids.include?(json["id"].to_s.downcase) or valid_ids.size == 0
117
- next unless ["numeric", "integer"].include?(json["type"])
118
- method = json['id'].to_s.downcase
119
- next unless Spout::Models::Subject.method_defined?(method)
120
-
121
- subjects.each{ |s| s.send(method) != nil ? s.send("#{method}=", s.send("#{method}").to_f) : nil }
122
- end
123
-
124
- variable_files.each_with_index do |variable_file, file_index|
125
- json = JSON.parse(File.read(variable_file)) rescue json = nil
126
- next unless json
127
- next unless valid_ids.include?(json["id"].to_s.downcase) or valid_ids.size == 0
128
- next unless ["numeric", "integer", "choices"].include?(json["type"])
129
- variable_name = json['id'].to_s.downcase
130
- next unless Spout::Models::Subject.method_defined?(variable_name)
131
-
132
- puts "#{file_index+1} of #{variable_files_count}: #{variable_file.gsub(/(^variables\/|\.json$)/, '').gsub('/', ' / ')}"
133
-
134
-
135
- stats = {
136
- charts: {},
137
- tables: {}
138
- }
139
-
140
- chart_types = case json['type'] when 'integer', 'numeric', 'choices'
141
- chart_lookup.keys
142
- else
143
- []
144
- end
145
-
146
- chart_types.each do |chart_type|
147
- if chart_type == _visit
148
- filtered_subjects = subjects.select{ |s| s.send(chart_type) != nil } # and s.send(variable_name) != nil
149
- if filtered_subjects.count > 0
150
- stats[:charts][chart_lookup[chart_type].downcase] = Spout::Helpers::ChartTypes::chart_histogram(chart_type, filtered_subjects, json, variable_name)
151
- stats[:tables][chart_lookup[chart_type].downcase] = Spout::Helpers::ChartTypes::table_arbitrary(chart_type, filtered_subjects, json, variable_name)
152
- end
153
- else
154
- filtered_subjects = subjects.select{ |s| s.send(chart_type) != nil } # and s.send(variable_name) != nil
155
- if filtered_subjects.count > 0
156
- stats[:charts][chart_lookup[chart_type].downcase] = Spout::Helpers::ChartTypes::chart_arbitrary(chart_type, filtered_subjects, json, variable_name, visits)
157
- stats[:tables][chart_lookup[chart_type].downcase] = visits.collect do |visit_display_name, visit_value|
158
- visit_subjects = filtered_subjects.select{ |s| s._visit == visit_value }
159
- unknown_subjects = visit_subjects.select{ |s| s.send(variable_name) == nil }
160
- (visit_subjects.count > 0 && visit_subjects.count != unknown_subjects.count) ? Spout::Helpers::ChartTypes::table_arbitrary(chart_type, visit_subjects, json, variable_name, visit_display_name) : nil
161
- end.compact
162
- end
163
- end
164
- end
165
-
166
- chart_json_file = File.join('charts', version, "#{json['id']}.json")
167
- File.open(chart_json_file, 'w') { |file| file.write( JSON.pretty_generate(stats) + "\n" ) }
168
-
169
- end
170
-
171
- puts "Took #{Time.now - t} seconds."
172
-
173
-
174
- end
175
-
176
- # [["Visit 1", "1"], ["Visit 2", "2"], ["CVD Outcomes", "3"]]
177
- def visits
178
- @visits ||= begin
179
- Spout::Commands::JsonChartsAndTables::domain_array(@visit)
180
- end
181
- end
182
-
183
- # This is directly from Spout
184
- def self.standard_version
185
- version = File.open('VERSION', &:readline).strip rescue ''
186
- version == '' ? '1.0.0' : version
187
- end
188
-
189
- def self.domain_array(variable_name)
190
- variable_file = Dir.glob("variables/**/#{variable_name}.json").first
191
- json = JSON.parse(File.read(variable_file)) rescue json = nil
192
- if json
193
- domain_json = Spout::Helpers::ChartTypes::get_domain(json)
194
- domain_json ? domain_json.collect{|option_hash| [option_hash['display_name'], option_hash['value']]} : []
195
- else
196
- []
197
- end
198
- end
199
-
200
- end
201
- end
202
- end