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 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