spout 0.8.0.rc4 → 0.8.0.rc5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/spout/commands/exporter.rb +26 -29
- data/lib/spout/commands/graphs.rb +1 -1
- data/lib/spout/commands/importer.rb +5 -5
- data/lib/spout/helpers/chart_types.rb +2 -1
- data/lib/spout/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1038cad773aceeeaac1094a6adfd45b2ad083272
|
4
|
+
data.tar.gz: e6f1973edde2c5ebd32ced6f84873de3bcb7b29b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d88dbc04759648e28509bd63d171a307f029776c73e2b4297212d9035412ee16bf01f6b06180df9a4f22bb282c622547bd5c100f7db7481811e2c82b2010be67
|
7
|
+
data.tar.gz: 2262b47b04d4dca34e15b655a8d65f53b31b79cc006a81949d9a8b0d515c90852bbdb96225e6065aacb843eaef4e7ad88e57082d9b03d573e462e9061e785ee0
|
data/CHANGELOG.md
CHANGED
@@ -24,6 +24,9 @@
|
|
24
24
|
- `dictionary.variables.count`
|
25
25
|
- `dictionary.domains.count`
|
26
26
|
- `dictionary.forms.count`
|
27
|
+
- The `spout export` command now includes a `forms.csv` file that exports form information referenced by variables
|
28
|
+
- Graphs for histograms now specify units on the x-axis
|
29
|
+
- The `spout graphs` command does not generate graphs when no underlying values exists for the variable
|
27
30
|
- **Gem Changes**
|
28
31
|
- Updated to colorize 0.7.2
|
29
32
|
- Updated to minitest
|
@@ -31,6 +34,7 @@
|
|
31
34
|
|
32
35
|
### Bug Fix
|
33
36
|
- Spout commands are now more consistently case insensitive for file and column names across platforms
|
37
|
+
- The `spout import` command now correctly makes variable ids and domain ids consistently lowercase
|
34
38
|
|
35
39
|
### Testing
|
36
40
|
- Refactored Spout code and updated test coverage for all major spout commands
|
@@ -19,45 +19,42 @@ module Spout
|
|
19
19
|
puts " create".colorize( :green ) + " #{folder}"
|
20
20
|
FileUtils.mkpath folder
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
22
|
+
generic_export(folder, 'variables', %w(id display_name description type units domain labels calculation))
|
23
|
+
generic_export(folder, 'domains', %w(value display_name description), true)
|
24
|
+
generic_export(folder, 'forms', %w(id display_name code_book))
|
25
|
+
end
|
26
|
+
|
27
|
+
def generic_export(folder, type, keys, include_domain_name = false)
|
28
|
+
export_file = "#{type}.csv"
|
29
|
+
puts " export".colorize( :blue ) + " #{folder}/#{export_file}"
|
30
|
+
CSV.open("#{folder}/#{export_file}", "wb") do |csv|
|
31
|
+
if include_domain_name
|
32
|
+
csv << ['folder', 'domain_id'] + keys
|
33
|
+
else
|
34
|
+
csv << ['folder'] + keys
|
32
35
|
end
|
33
|
-
|
34
|
-
domains_export_file = "domains.csv"
|
35
|
-
puts " export".colorize( :blue ) + " #{folder}/#{domains_export_file}"
|
36
|
-
CSV.open("#{folder}/#{domains_export_file}", "wb") do |csv|
|
37
|
-
keys = %w(value display_name description)
|
38
|
-
csv << ['folder', 'domain_id'] + keys
|
39
|
-
Dir.glob("domains/**/*.json").sort.each do |file|
|
36
|
+
Dir.glob("#{type}/**/*.json").sort.each do |file|
|
40
37
|
if json = JSON.parse(File.read(file)) rescue false
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
38
|
+
relative_folder = generic_folder_path(file, type)
|
39
|
+
if include_domain_name
|
40
|
+
domain_name = extract_domain_name(file)
|
41
|
+
json.each do |hash|
|
42
|
+
csv << [relative_folder, domain_name] + keys.collect{|key| hash[key]}
|
43
|
+
end
|
44
|
+
else
|
45
|
+
csv << [relative_folder] + keys.collect{|key| json[key].kind_of?(Array) ? json[key].join(';') : json[key].to_s}
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
51
|
-
def
|
52
|
-
file.gsub(
|
53
|
-
end
|
54
|
-
|
55
|
-
def domain_folder_path(file)
|
56
|
-
file.gsub(/domains\//, '').split('/')[0..-2].join('/')
|
52
|
+
def generic_folder_path(file, type)
|
53
|
+
file.gsub(/#{type}\//, '').split('/')[0..-2].join('/')
|
57
54
|
end
|
58
55
|
|
59
|
-
def
|
60
|
-
file.gsub(/
|
56
|
+
def extract_domain_name(file)
|
57
|
+
file.gsub(/domains\//, '').split('/').last.to_s.gsub(/.json/, '')
|
61
58
|
end
|
62
59
|
|
63
60
|
end
|
@@ -101,7 +101,7 @@ module Spout
|
|
101
101
|
end
|
102
102
|
else
|
103
103
|
filtered_subjects = @subjects.select{ |s| s.send(chart_type) != nil } # and s.send(variable_name) != nil
|
104
|
-
if filtered_subjects.count > 0
|
104
|
+
if filtered_subjects.collect(&variable_name.to_sym).compact.count > 0
|
105
105
|
stats[:charts][chart_title] = Spout::Helpers::ChartTypes::chart_arbitrary(chart_type, filtered_subjects, json, variable_name, visits)
|
106
106
|
stats[:tables][chart_title] = visits.collect do |visit_display_name, visit_value|
|
107
107
|
visit_subjects = filtered_subjects.select{ |s| s._visit == visit_value }
|
@@ -46,12 +46,12 @@ EOT
|
|
46
46
|
folder = File.join('variables', row.delete('folder').to_s)
|
47
47
|
FileUtils.mkpath folder
|
48
48
|
hash = {}
|
49
|
-
id = row.delete('id')
|
49
|
+
id = row.delete('id').to_s.downcase
|
50
50
|
hash['id'] = id
|
51
51
|
hash['display_name'] = row.delete('display_name')
|
52
52
|
hash['description'] = row.delete('description').to_s
|
53
53
|
hash['type'] = row.delete('type')
|
54
|
-
domain = row.delete('domain').to_s
|
54
|
+
domain = row.delete('domain').to_s.downcase
|
55
55
|
hash['domain'] = domain if domain != ''
|
56
56
|
units = row.delete('units').to_s
|
57
57
|
hash['units'] = units if units != ''
|
@@ -61,7 +61,7 @@ EOT
|
|
61
61
|
hash['labels'] = labels if labels.size > 0
|
62
62
|
hash['other'] = row unless row.empty?
|
63
63
|
|
64
|
-
file_name = File.join(folder, id
|
64
|
+
file_name = File.join(folder, id + '.json')
|
65
65
|
File.open(file_name, 'w') do |file|
|
66
66
|
file.write(JSON.pretty_generate(hash) + "\n")
|
67
67
|
end
|
@@ -89,7 +89,7 @@ EOT
|
|
89
89
|
|
90
90
|
next if row['domain_id'].to_s == '' or row['value'].to_s == '' or row['display_name'].to_s == ''
|
91
91
|
folder = File.join('domains', row['folder'].to_s).gsub(/[^a-zA-Z0-9_\/\.-]/, '_')
|
92
|
-
domain_name = row['domain_id'].to_s.gsub(/[^a-zA-Z0-9_\/\.-]/, '_')
|
92
|
+
domain_name = row['domain_id'].to_s.gsub(/[^a-zA-Z0-9_\/\.-]/, '_').downcase
|
93
93
|
domains[domain_name] ||= {}
|
94
94
|
domains[domain_name]["folder"] = folder
|
95
95
|
domains[domain_name]["options"] ||= []
|
@@ -106,7 +106,7 @@ EOT
|
|
106
106
|
folder = domain_hash["folder"]
|
107
107
|
FileUtils.mkpath folder
|
108
108
|
|
109
|
-
file_name = File.join(folder, domain_name
|
109
|
+
file_name = File.join(folder, domain_name + '.json')
|
110
110
|
|
111
111
|
File.open(file_name, 'w') do |file|
|
112
112
|
file.write(JSON.pretty_generate(domain_hash["options"]) + "\n")
|
@@ -353,6 +353,7 @@ module Spout
|
|
353
353
|
title = "#{json['display_name']}"
|
354
354
|
subtitle = "By Visit"
|
355
355
|
units = "Subjects"
|
356
|
+
x_axis_units = json["units"]
|
356
357
|
series = []
|
357
358
|
|
358
359
|
all_subject_values = subjects.collect(&method.to_sym).compact.sort
|
@@ -370,7 +371,7 @@ module Spout
|
|
370
371
|
series << { name: display_name, data: data }
|
371
372
|
end
|
372
373
|
|
373
|
-
{ title: title, subtitle: subtitle, categories: categories, units: units, series: series }
|
374
|
+
{ title: title, subtitle: subtitle, categories: categories, units: units, series: series, x_axis_title: x_axis_units }
|
374
375
|
end
|
375
376
|
|
376
377
|
def self.pull_categories(json, method, all_subject_values, domain_json)
|
data/lib/spout/version.rb
CHANGED
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.
|
4
|
+
version: 0.8.0.rc5
|
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-06-
|
11
|
+
date: 2014-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|