spout 0.8.0.rc4 → 0.8.0.rc5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4e60605f5f08718770e8a7256d056a3866960d84
4
- data.tar.gz: 77b047a1e7c90245c7796d50610220342f20581f
3
+ metadata.gz: 1038cad773aceeeaac1094a6adfd45b2ad083272
4
+ data.tar.gz: e6f1973edde2c5ebd32ced6f84873de3bcb7b29b
5
5
  SHA512:
6
- metadata.gz: bae8e98ede97b0c7556ebb615e23116e729e6052ce35452e47ffa98ec08bf9be13ad4c883d011b4969808a2b76569fdea7011ad7164789d27be936cf57bc69a7
7
- data.tar.gz: 408fe628b0bfece7d265ebc042eb3f61e43e8358626e8d3dd72b2c0a1b46e0dad7dbf03910ebb16a1c433c8f47695a8a44067b9725ce4c16f52b5bad45f1c88c
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
- variables_export_file = "variables.csv"
23
- puts " export".colorize( :blue ) + " #{folder}/#{variables_export_file}"
24
- CSV.open("#{folder}/#{variables_export_file}", "wb") do |csv|
25
- keys = %w(id display_name description type units domain labels calculation)
26
- csv << ['folder'] + keys
27
- Dir.glob("variables/**/*.json").sort.each do |file|
28
- if json = JSON.parse(File.read(file)) rescue false
29
- variable_folder = variable_folder_path(file)
30
- csv << [variable_folder] + keys.collect{|key| json[key].kind_of?(Array) ? json[key].join(';') : json[key].to_s}
31
- end
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
- end
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
- domain_folder = domain_folder_path(file)
42
- domain_name = extract_domain_name(file)
43
- json.each do |hash|
44
- csv << [domain_folder, domain_name] + keys.collect{|key| hash[key]}
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 extract_domain_name(file)
52
- file.gsub(/domains\//, '').split('/').last.to_s.gsub(/.json/, '')
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 variable_folder_path(file)
60
- file.gsub(/variables\//, '').split('/')[0..-2].join('/')
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.to_s.downcase + '.json')
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.to_s.downcase + '.json')
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
@@ -3,7 +3,7 @@ module Spout
3
3
  MAJOR = 0
4
4
  MINOR = 8
5
5
  TINY = 0
6
- BUILD = "rc4" # nil, "pre", "rc", "rc2"
6
+ BUILD = "rc5" # nil, "pre", "rc", "rc2"
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
9
9
  end
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.rc4
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-25 00:00:00.000000000 Z
11
+ date: 2014-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake