spout 0.10.0.beta8 → 0.10.0.beta9

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: 97f132b532821e57396f65c1752060dac1a33c14
4
- data.tar.gz: f87fc93a7f9a60c34e81f602c47a770bbd29eba9
3
+ metadata.gz: 1510bf903f7dada97ac4f63538881fe5cddb0825
4
+ data.tar.gz: 8678041008439bd0eaea5e163eb6d4fc6337469b
5
5
  SHA512:
6
- metadata.gz: 7c9ed942121864d02d02bdcdac9115e8b04093e368f31dfd9a4e37541726f5ff803654a93b6d62c872c314efb40f4757bf759f6d1098281dc91f090bbd201229
7
- data.tar.gz: 741c7cfd6b2f365aff937f8d2508a04aaaef81fad297cca5773f3c2a82e1759cda0aba69a68d6e72a6d6547a39151f8915d64ac7e0d688ee5f605dd5a39fe216
6
+ metadata.gz: 390ca815b08364e3d3f8e068dd1104d784bdc48eb85bd2da9fc6e3d44562aec5ac75e22524d0580c1f0dba8ffec341021e463ac9b57d627ac7ae6b8e85d846f4
7
+ data.tar.gz: fa7bf7eb06e667c972354bd7b81f4d32e7f0c37de0a7115c06f484361943a7a9b737020b9434c4b7d132403035aa9c9f1caf89fccdfd3cf87e8b0357163fe935
data/CHANGELOG.md CHANGED
@@ -9,6 +9,9 @@
9
9
  - Display names that use mixed case are unaffected
10
10
  - `spout import --domains` now marks options as `"missing": true` if the option value starts with a dot `.` or a dash `-`
11
11
  - Display names for domain options are also changed to title case if they are all caps
12
+ - **Graph Command**
13
+ - Graphs and tables no longer display missing codes that do not exist in the dataset for variables of type `choices`
14
+ - Graphs and tables now remove domain values for variables of type `integer` or `numeric`
12
15
  - **Testing Changes**
13
16
  - Tests now include checks to assure that variable display_name fields don't exceed 255 length requirement
14
17
  - `include Spout::Tests::VariableDisplayNameLength`
@@ -60,7 +60,7 @@ module Spout
60
60
 
61
61
  begin
62
62
  run_all
63
- rescue Interrupt, IRB::Abort
63
+ rescue Interrupt
64
64
  puts "\nINTERRUPTED".colorize(:red)
65
65
  end
66
66
  end
@@ -209,7 +209,7 @@ module Spout
209
209
  require 'spout/commands/images'
210
210
  argv = []
211
211
  argv << "--clean" if @clean
212
- Spout::Commands::Images.new(argv, [], [], @version, [], true, @url, @slug, @token)
212
+ Spout::Commands::Images.new([], [], [], @version, argv, true, @url, @slug, @token)
213
213
  puts "\r Image Generation: " + "DONE ".colorize(:green)
214
214
  end
215
215
 
@@ -9,6 +9,7 @@ require 'spout/helpers/subject_loader'
9
9
  require 'spout/helpers/chart_types'
10
10
  require 'spout/helpers/config_reader'
11
11
  require 'spout/helpers/send_file'
12
+ require 'spout/version'
12
13
 
13
14
  module Spout
14
15
  module Commands
@@ -74,7 +75,8 @@ module Spout
74
75
  def load_current_progress
75
76
  @progress_file = File.join(@graphs_folder, ".progress.json")
76
77
  @progress = JSON.parse(File.read(@progress_file)) rescue @progress = {}
77
- @progress = {} if @clean
78
+ @progress = {} if !@progress.kind_of?(Hash) or @clean or @progress['SPOUT_VERSION'] != Spout::VERSION::STRING
79
+ @progress['SPOUT_VERSION'] = Spout::VERSION::STRING
78
80
  end
79
81
 
80
82
  def save_current_progress
@@ -137,7 +139,12 @@ module Spout
137
139
 
138
140
  if @deploy_mode and not @progress[variable_name]['uploaded'] == true
139
141
  response = send_to_server(chart_json_file)
140
- @progress[variable_name]['uploaded'] = (response.kind_of?(Hash) and response['upload'] == 'success')
142
+ if response.kind_of?(Hash) and response['upload'] == 'success'
143
+ @progress[variable_name]['uploaded'] = true
144
+ else
145
+ puts "\nUPLOAD FAILED: ".colorize(:red) + File.basename(chart_json_file)
146
+ @progress[variable_name]['uploaded'] = false
147
+ end
141
148
  end
142
149
 
143
150
  save_current_progress
@@ -52,7 +52,8 @@ module Spout
52
52
  def load_current_progress
53
53
  @progress_file = File.join(@images_folder, ".progress.json")
54
54
  @progress = JSON.parse(File.read(@progress_file)) rescue @progress = {}
55
- @progress = {} if @clean
55
+ @progress = {} if !@progress.kind_of?(Hash) or @clean or @progress['SPOUT_VERSION'] != Spout::VERSION::STRING
56
+ @progress['SPOUT_VERSION'] = Spout::VERSION::STRING
56
57
  end
57
58
 
58
59
  def save_current_progress
@@ -125,7 +126,9 @@ module Spout
125
126
  end
126
127
  run_phantom_js(variable_name, "#{variable_name}-lg.png", 600, tmp_options_file) if @sizes.size == 0 or @sizes.include?('lg')
127
128
  run_phantom_js(variable_name, "#{variable_name}.png", 75, tmp_options_file) if @sizes.size == 0 or @sizes.include?('sm')
128
- @progress[variable_name]['uploaded'] = (@deploy_mode and @progress[variable_name]['failed'] != true)
129
+
130
+ @progress[variable_name]['uploaded'] = (@deploy_mode and @progress[variable_name]['upload_failed'] != true)
131
+
129
132
  save_current_progress
130
133
  end
131
134
 
@@ -161,6 +164,7 @@ module Spout
161
164
  if response.kind_of?(Hash) and response['upload'] == 'success'
162
165
  @progress[variable_name]['uploaded_files'] << png_name
163
166
  else
167
+ puts "\nUPLOAD FAILED: ".colorize(:red) + File.basename(png_name)
164
168
  @progress[variable_name]['upload_failed'] = true
165
169
  end
166
170
  end
@@ -72,6 +72,9 @@ module Spout
72
72
 
73
73
  filtered_subjects = subjects.select{ |s| s.send(method) != nil and s.send(chart_type) != nil }.sort_by(&chart_type.to_sym)
74
74
 
75
+ all_subject_values = filtered_subjects.collect(&method.to_sym).compact.sort
76
+ domain_json = remove_unused_missing_codes_from_domain(domain_json, all_subject_values.uniq)
77
+
75
78
  categories = [:quartile_one, :quartile_two, :quartile_three, :quartile_four].collect do |quartile|
76
79
  bucket = filtered_subjects.send(quartile).collect(&chart_type.to_sym)
77
80
  "#{bucket.min} to #{bucket.max}"
@@ -168,6 +171,8 @@ module Spout
168
171
  return unless domain_json = get_domain(json)
169
172
 
170
173
  filtered_subjects = subjects.select{ |s| s.send(method) != nil and s.send(chart_type) != nil }.sort_by(&chart_type.to_sym)
174
+ all_subject_values = filtered_subjects.collect(&method.to_sym).compact.sort
175
+ domain_json = remove_unused_missing_codes_from_domain(domain_json, all_subject_values.uniq)
171
176
 
172
177
  categories = [:quartile_one, :quartile_two, :quartile_three, :quartile_four].collect do |quartile|
173
178
  bucket = filtered_subjects.send(quartile).collect(&chart_type.to_sym)
@@ -216,6 +221,8 @@ module Spout
216
221
  units = 'percent'
217
222
  series = []
218
223
 
224
+ all_subject_values = subjects.collect(&method.to_sym).compact.sort
225
+ domain_json = remove_unused_missing_codes_from_domain(domain_json, all_subject_values.uniq)
219
226
 
220
227
  domain_json.each do |option_hash|
221
228
  domain_values = subjects.select{ |s| s.send(method) == option_hash['value'] }
@@ -311,6 +318,9 @@ module Spout
311
318
 
312
319
  filtered_subjects = subjects.select{ |s| s.send(chart_type) != nil }
313
320
 
321
+ all_subject_values = filtered_subjects.collect(&method.to_sym).compact.sort
322
+ domain_json = remove_unused_missing_codes_from_domain(domain_json, all_subject_values.uniq)
323
+
314
324
  rows = domain_json.collect do |option_hash|
315
325
  row_subjects = filtered_subjects.select{ |s| s.send(method) == option_hash['value'] }
316
326
  row_cells = chart_variable_domain.collect do |display_name, value|
@@ -358,6 +368,9 @@ module Spout
358
368
 
359
369
  all_subject_values = subjects.collect(&method.to_sym).compact.sort
360
370
  return nil if all_subject_values.count == 0
371
+
372
+ domain_json = remove_unused_missing_codes_from_domain(domain_json, all_subject_values.uniq) if domain_json
373
+
361
374
  categories = pull_categories(json, method, all_subject_values, domain_json)
362
375
 
363
376
  buckets = continuous_buckets(all_subject_values)
@@ -398,6 +411,11 @@ module Spout
398
411
  end
399
412
  data
400
413
  end
414
+
415
+ def self.remove_unused_missing_codes_from_domain(domain_json, unique_subject_values)
416
+ domain_json.select{|option_hash| option_hash['missing'] != true or (option_hash['missing'] == true and unique_subject_values.include?(option_hash['value']))}
417
+ end
418
+
401
419
  end
402
420
  end
403
421
  end
@@ -40,12 +40,12 @@ module Spout
40
40
 
41
41
  @csv_files = Dir.glob("csvs/#{@csv_directory}/*.csv")
42
42
  @csv_files.each_with_index do |csv_file, index|
43
- count = 0
43
+ count = 1 # Includes counting the header row
44
44
  print "\nParsing #{csv_file}"
45
45
  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|
46
46
  row = line.to_hash
47
47
  count += 1
48
- print "\rParsing #{csv_file} - line ##{count}" if (count % 10 == 0)
48
+ print "\rParsing #{csv_file} - Row ##{count}" if (count % 10 == 0)
49
49
  @subjects << Spout::Models::Subject.create do |t|
50
50
  t._visit = row[@visit]
51
51
 
@@ -66,8 +66,9 @@ module Spout
66
66
  end
67
67
  end
68
68
  # puts "Memory Used: " + (`ps -o rss -p #{$$}`.strip.split.last.to_i / 1024).to_s + " MB" if count % 1000 == 0
69
- break if @number_of_rows != nil and count >= @number_of_rows
69
+ break if @number_of_rows != nil and count - 1 >= @number_of_rows
70
70
  end
71
+ print "\rParsing #{csv_file} - Row ##{count}"
71
72
  puts "\n"
72
73
  end
73
74
 
@@ -80,7 +81,10 @@ module Spout
80
81
  end
81
82
 
82
83
  def load_subjects_from_csvs_part_two!
83
- @variable_files.each do |variable_file|
84
+ variable_count = @variable_files.count
85
+ print "Converting numeric values to floats"
86
+ @variable_files.each_with_index do |variable_file, index|
87
+ print "\rConverting numeric values to floats:#{"% 3d" % ((index+1)*100/variable_count)}%"
84
88
  json = JSON.parse(File.read(variable_file)) rescue json = nil
85
89
  next unless json
86
90
  next unless @valid_ids.include?(json["id"].to_s.downcase) or @valid_ids.size == 0
@@ -88,8 +92,16 @@ module Spout
88
92
  method = json['id'].to_s.downcase
89
93
  next unless Spout::Models::Subject.method_defined?(method)
90
94
 
95
+ domain_json = get_domain(json)
96
+ # Make all domain options nil for numerics/integers
97
+ if domain_json
98
+ domain_values = domain_json.collect{|option_hash| option_hash['value']}
99
+ @subjects.each{ |s| domain_values.include?(s.send(method)) ? s.send("#{method}=", nil) : nil }
100
+ end
101
+
91
102
  @subjects.each{ |s| s.send(method) != nil ? s.send("#{method}=", s.send("#{method}").to_f) : nil }
92
103
  end
104
+ puts "\n"
93
105
  @subjects
94
106
  end
95
107
 
@@ -103,6 +115,22 @@ module Spout
103
115
  end
104
116
  @all_domains = @all_domains.compact.uniq.sort
105
117
  end
118
+
119
+ def get_json(file_name, file_type)
120
+ file = Dir.glob("#{file_type.to_s.downcase}s/**/#{file_name.to_s.downcase}.json", File::FNM_CASEFOLD).first
121
+ json = JSON.parse(File.read(file)) rescue json = nil
122
+ json
123
+ end
124
+
125
+ def get_variable(variable_name)
126
+ get_json(variable_name, 'variable')
127
+ end
128
+
129
+ def get_domain(json)
130
+ get_json(json['domain'], 'domain')
131
+ end
132
+
133
+
106
134
  end
107
135
  end
108
136
  end
data/lib/spout/version.rb CHANGED
@@ -3,7 +3,7 @@ module Spout
3
3
  MAJOR = 0
4
4
  MINOR = 10
5
5
  TINY = 0
6
- BUILD = "beta8" # nil, "pre", "rc", "rc2"
6
+ BUILD = "beta9" # 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.10.0.beta8
4
+ version: 0.10.0.beta9
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-10-22 00:00:00.000000000 Z
11
+ date: 2014-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake