spout 0.9.0.beta2 → 0.9.0.rc

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: 738f593886806a8cd02c43abb77999efbaa47ef0
4
- data.tar.gz: ee1184bd6176e948ddd30dc88ce32c1fa691d4b8
3
+ metadata.gz: 903443bf7697903d3e8d78462afdf5dfba77df55
4
+ data.tar.gz: 011b51f8ef1128790ab7f15ebbd6854f03175a56
5
5
  SHA512:
6
- metadata.gz: 08340a055a4ac3280bc1cf0365bc90a23708dd6092f33d1dbb478a633cb70b0232cce2df1d3e113ed40260f4680d2d37aa432ba7c3bf99a7472ae82f25dfcb9e
7
- data.tar.gz: fc1a360a0279b16c0ba51282c00f6b1b0300e8ad210791f1477e9128735bae2a6d818726ae5089c226de2da225623ca6224738363176221538ad749f0e34fcaa
6
+ metadata.gz: 6c0f00e614dc71910e91102e8ec3c994c88372b42c7977ee7fe860f79b76c83c25ab75e806236a5d5891faac95378fbc1f3dbf0da91adc5a79066c04cd2d9445
7
+ data.tar.gz: 4d35e2bc0d5e8662c8959ed76d7da8dbbd4e04fe3f864b8a4cea22164cd093c9ba571e2a48a6b486db94795fe19c399bfffe49462ffbe87d1e6795e859145746
data/CHANGELOG.md CHANGED
@@ -7,6 +7,19 @@
7
7
  - Ex: If a dataset exists in folder 0.2.0, then this folder will be used.
8
8
  - Ex: If datasets exist in 0.2.0, 0.2.1.beta2, and 0.2.1, then the exact match, 0.2.1.beta2, will be used.
9
9
  - Ex: If datasets exist in 0.2.0, 0.2.1.beta1, 0.2.1, and 0.3.0, then the highest match on the minor version is used, in this case 0.2.1.
10
+ - `spout p` command now uses same syntax as `spout g` command to reference variables
11
+ - `spout p <variable_id>`
12
+ - `spout p age --size-sm`
13
+ - The data dictionary slug can now be specified in the `spout.yml` file:
14
+ - `slug: my-repo-name`
15
+ - Setting the slug will allow the `spout export` command to export the data dictionary to `my-repo-name-data-dictionary-0.1.0-variables.csv`, etc.
16
+ - `spout p` and `spout g` now indicate if the target CSV folder is empty
17
+ - `spout o` now only calculates averages and outliers for `numeric` and `integer` variables
18
+ - **Testing Changes**
19
+ - Multi-line assertions now maintain the correct amount of white-space padding
20
+ - **Gem Changes**
21
+ - Use of Ruby 2.1.3 is now recommended
22
+ - Updated to simplecov 0.9.1
10
23
 
11
24
  ## 0.8.0 (June 27, 2014)
12
25
 
@@ -71,7 +84,7 @@
71
84
  - `spout p --size-sm`
72
85
  - `spout p --type-numeric --size-sm`
73
86
  - For specific variables the following can be used:
74
- - `spout p --id-<variable_id>`
87
+ - `spout p --id-<variable_id>` **NOTE** changed in v0.9.0
75
88
 
76
89
  ## 0.6.0 (March 7, 2014)
77
90
 
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/sleepepi/spout.svg?branch=master)](https://travis-ci.org/sleepepi/spout)
4
4
  [![Dependency Status](https://gemnasium.com/sleepepi/spout.svg)](https://gemnasium.com/sleepepi/spout)
5
- [![Code Climate](https://codeclimate.com/github/sleepepi/spout.png)](https://codeclimate.com/github/sleepepi/spout)
5
+ [![Code Climate](https://codeclimate.com/github/sleepepi/spout/badges/gpa.svg)](https://codeclimate.com/github/sleepepi/spout)
6
6
 
7
7
  Turn your CSV data dictionary into a JSON repository. Collaborate with others to update the data dictionary in JSON format. Generate new Data Dictionary from the JSON repository. Test and validate your data dictionary using built-in tests, or add your own tests and validations.
8
8
 
@@ -232,7 +232,7 @@ The following flags can be passed to the `spout pngs` command:
232
232
  - `spout p --type-numeric --size-sm`
233
233
 
234
234
  For specific variables the following can be used:
235
- - `spout p --id-<variable_id>`
235
+ - `spout p <variable_id>`
236
236
 
237
237
  Generated images are placed in: `./images/`
238
238
 
@@ -5,6 +5,7 @@ require 'fileutils'
5
5
  require 'spout/helpers/subject_loader'
6
6
  require 'spout/models/coverage_result'
7
7
  require 'spout/helpers/number_helper'
8
+ require 'spout/helpers/config_reader'
8
9
 
9
10
  module Spout
10
11
  module Commands
@@ -19,10 +20,9 @@ module Spout
19
20
  @valid_ids = []
20
21
  @number_of_rows = nil
21
22
 
22
- spout_config = YAML.load_file('.spout.yml')
23
- @visit = (spout_config.kind_of?(Hash) ? spout_config['visit'].to_s.strip : '')
23
+ @config = Spout::Helpers::ConfigReader.new
24
24
 
25
- @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, @valid_ids, @standard_version, @number_of_rows, @visit)
25
+ @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, @valid_ids, @standard_version, @number_of_rows, @config.visit)
26
26
  @subject_loader.load_subjects_from_csvs_part_one! # Not Part Two which is essentially cleaning the data
27
27
  @subjects = @subject_loader.subjects
28
28
 
@@ -3,12 +3,15 @@ require 'json'
3
3
  require 'fileutils'
4
4
  require 'colorize'
5
5
 
6
+ require 'spout/helpers/config_reader'
7
+
6
8
  module Spout
7
9
  module Commands
8
10
  class Exporter
9
11
  def initialize(standard_version, argv)
10
12
  @csv_file = argv[1].to_s
11
13
  @standard_version = standard_version
14
+ @config = Spout::Helpers::ConfigReader.new
12
15
  expanded_export!
13
16
  end
14
17
 
@@ -25,7 +28,7 @@ module Spout
25
28
  end
26
29
 
27
30
  def generic_export(folder, type, keys, include_domain_name = false)
28
- export_file = "#{type}.csv"
31
+ export_file = export_file_name(type)
29
32
  puts " export".colorize( :blue ) + " #{folder}/#{export_file}"
30
33
  CSV.open("#{folder}/#{export_file}", "wb") do |csv|
31
34
  if include_domain_name
@@ -49,6 +52,14 @@ module Spout
49
52
  end
50
53
  end
51
54
 
55
+ def export_file_name(type)
56
+ if @config.slug == ''
57
+ "#{type}.csv"
58
+ else
59
+ "#{@config.slug}-data-dictionary-#{@standard_version}-#{type}.csv"
60
+ end
61
+ end
62
+
52
63
  def generic_folder_path(file, type)
53
64
  file.gsub(/#{type}\//, '').split('/')[0..-2].join('/')
54
65
  end
@@ -6,6 +6,7 @@ require 'yaml'
6
6
 
7
7
  require 'spout/helpers/subject_loader'
8
8
  require 'spout/helpers/chart_types'
9
+ require 'spout/helpers/config_reader'
9
10
 
10
11
  module Spout
11
12
  module Commands
@@ -13,33 +14,18 @@ module Spout
13
14
  def initialize(variables, standard_version)
14
15
  @standard_version = standard_version
15
16
 
16
- spout_config = YAML.load_file('.spout.yml')
17
+ @config = Spout::Helpers::ConfigReader.new
17
18
 
18
- @visit = ''
19
-
20
- if spout_config.kind_of?(Hash)
21
- @visit = spout_config['visit'].to_s.strip
22
-
23
- chart_variables = if spout_config['charts'].kind_of?(Array)
24
- spout_config['charts'].select{|c| c.kind_of?(Hash)}
25
- else
26
- []
27
- end
28
- else
29
- puts "The YAML file needs to be in the following format:"
30
- puts "---\nvisit: visit_variable_name\ncharts:\n- chart: age_variable_name\n title: Age\n- chart: gender_variable_name\n title: Gender\n- chart: race_variable_name\n title: Race\n"
31
- return self
32
- end
33
-
34
- if Spout::Helpers::ChartTypes::get_json(@visit, 'variable') == nil
35
- if @visit == ''
19
+ if Spout::Helpers::ChartTypes::get_json(@config.visit, 'variable') == nil
20
+ if @config.visit == ''
36
21
  puts "The visit variable in .spout.yml can't be blank."
37
22
  else
38
- puts "Could not find the following visit variable: #{@visit}"
23
+ puts "Could not find the following visit variable: #{@config.visit}"
39
24
  end
40
25
  return self
41
26
  end
42
- missing_variables = chart_variables.select{|c| Spout::Helpers::ChartTypes::get_json(c['chart'], 'variable') == nil}
27
+
28
+ missing_variables = @config.charts.select{|c| Spout::Helpers::ChartTypes::get_json(c['chart'], 'variable') == nil}
43
29
  if missing_variables.count > 0
44
30
  puts "Could not find the following chart variable#{'s' unless missing_variables.size == 1}: #{missing_variables.join(', ')}"
45
31
  return self
@@ -55,20 +41,20 @@ module Spout
55
41
 
56
42
  @valid_ids = argv_string.split(',').compact.reject{|s| s == ''}
57
43
 
58
- @chart_variables = chart_variables.unshift( { "chart" => @visit, "title" => 'Histogram' } )
44
+ @chart_variables = @config.charts.unshift( { "chart" => @config.visit, "title" => 'Histogram' } )
59
45
 
60
46
  @variable_files = Dir.glob('variables/**/*.json')
61
47
 
62
48
  t = Time.now
63
49
  FileUtils.mkpath "graphs/#{@standard_version}"
64
50
 
65
- @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, @valid_ids, @standard_version, @number_of_rows, @visit)
51
+ @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, @valid_ids, @standard_version, @number_of_rows, @config.visit)
66
52
 
67
53
  @subject_loader.load_subjects_from_csvs!
68
54
  @subjects = @subject_loader.subjects
69
55
  compute_tables_and_charts
70
56
 
71
- puts "Took #{Time.now - t} seconds."
57
+ puts "Took #{Time.now - t} seconds." if @subjects.size > 0
72
58
  end
73
59
 
74
60
  def compute_tables_and_charts
@@ -93,7 +79,7 @@ module Spout
93
79
  chart_type = chart_type_hash["chart"]
94
80
  chart_title = chart_type_hash["title"].downcase.gsub(' ', '-')
95
81
 
96
- if chart_type == @visit
82
+ if chart_type == @config.visit
97
83
  filtered_subjects = @subjects.select{ |s| s.send(chart_type) != nil } # and s.send(variable_name) != nil
98
84
  if filtered_subjects.count > 0
99
85
  stats[:charts][chart_title] = Spout::Helpers::ChartTypes::chart_histogram(chart_type, filtered_subjects, json, variable_name)
@@ -121,7 +107,7 @@ module Spout
121
107
  # [["Visit 1", "1"], ["Visit 2", "2"], ["CVD Outcomes", "3"]]
122
108
  def visits
123
109
  @visits ||= begin
124
- Spout::Helpers::ChartTypes::domain_array(@visit)
110
+ Spout::Helpers::ChartTypes::domain_array(@config.visit)
125
111
  end
126
112
  end
127
113
 
@@ -6,6 +6,7 @@ require 'yaml'
6
6
 
7
7
  require 'spout/helpers/subject_loader'
8
8
  require 'spout/helpers/chart_types'
9
+ require 'spout/helpers/config_reader'
9
10
 
10
11
  module Spout
11
12
  module Commands
@@ -22,24 +23,18 @@ module Spout
22
23
 
23
24
  @number_of_rows = nil
24
25
 
25
- spout_config = YAML.load_file('.spout.yml')
26
-
27
- @visit = ''
28
-
29
- if spout_config.kind_of?(Hash)
30
- @visit = spout_config['visit'].to_s.strip
31
- end
26
+ @config = Spout::Helpers::ConfigReader.new
32
27
 
33
28
  t = Time.now
34
29
  FileUtils.mkpath "graphs/#{@standard_version}"
35
30
 
36
- @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, @valid_ids, @standard_version, @number_of_rows, @visit)
31
+ @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, @valid_ids, @standard_version, @number_of_rows, @config.visit)
37
32
 
38
33
  @subject_loader.load_subjects_from_csvs!
39
34
  @subjects = @subject_loader.subjects
40
35
 
41
36
  compute_images
42
- puts "Took #{Time.now - t} seconds."
37
+ puts "Took #{Time.now - t} seconds." if @subjects.size > 0
43
38
  end
44
39
 
45
40
  def compute_images
@@ -60,9 +55,9 @@ module Spout
60
55
 
61
56
  puts "#{file_index+1} of #{variable_files_count}: #{variable_file.gsub(/(^variables\/|\.json$)/, '').gsub('/', ' / ')}"
62
57
 
63
- filtered_subjects = @subjects.select{ |s| s.send(@visit) != nil }
58
+ filtered_subjects = @subjects.select{ |s| s.send(@config.visit) != nil }
64
59
 
65
- chart_json = Spout::Helpers::ChartTypes::chart_histogram(@visit, filtered_subjects, json, variable_name)
60
+ chart_json = Spout::Helpers::ChartTypes::chart_histogram(@config.visit, filtered_subjects, json, variable_name)
66
61
 
67
62
  if chart_json
68
63
  File.open(tmp_options_file, "w") do |outfile|
@@ -5,6 +5,7 @@ require 'fileutils'
5
5
  require 'spout/helpers/subject_loader'
6
6
  require 'spout/models/outlier_result'
7
7
  require 'spout/helpers/number_helper'
8
+ require 'spout/helpers/config_reader'
8
9
 
9
10
  module Spout
10
11
  module Commands
@@ -19,10 +20,9 @@ module Spout
19
20
  @valid_ids = []
20
21
  @number_of_rows = nil
21
22
 
22
- spout_config = YAML.load_file('.spout.yml')
23
- @visit = (spout_config.kind_of?(Hash) ? spout_config['visit'].to_s.strip : '')
23
+ @config = Spout::Helpers::ConfigReader.new
24
24
 
25
- @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, @valid_ids, @standard_version, @number_of_rows, @visit)
25
+ @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, @valid_ids, @standard_version, @number_of_rows, @config.visit)
26
26
  @subject_loader.load_subjects_from_csvs!
27
27
  @subjects = @subject_loader.subjects
28
28
  run_outliers_report!
@@ -35,6 +35,7 @@ module Spout
35
35
  Spout::Models::OutlierResult.new(@subjects, method, csv_files)
36
36
  end
37
37
 
38
+ @outlier_results.select!{|outlier_result| ['numeric', 'integer'].include?(outlier_result.variable_type) }
38
39
  @outlier_results.sort!{|a,b| [a.weight, a.method] <=> [b.weight, b.method]}
39
40
 
40
41
  @overall_results = @subject_loader.csv_files.collect do |csv_file|
@@ -0,0 +1,37 @@
1
+ require 'yaml'
2
+
3
+ module Spout
4
+ module Helpers
5
+ class ConfigReader
6
+
7
+ attr_reader :slug, :visit, :charts
8
+
9
+
10
+ def initialize
11
+ @slug = ''
12
+ @visit = ''
13
+ @charts = []
14
+ parse_yaml_file
15
+ end
16
+
17
+ def parse_yaml_file
18
+ spout_config = YAML.load_file('.spout.yml')
19
+
20
+ if spout_config.kind_of?(Hash)
21
+ @slug = spout_config['slug'].to_s.strip
22
+ @visit = spout_config['visit'].to_s.strip
23
+
24
+ @charts = if spout_config['charts'].kind_of?(Array)
25
+ spout_config['charts'].select{|c| c.kind_of?(Hash)}
26
+ else
27
+ []
28
+ end
29
+ else
30
+ puts "The YAML file needs to be in the following format:"
31
+ puts "---\nvisit: visit_variable_name\ncharts:\n- chart: age_variable_name\n title: Age\n- chart: gender_variable_name\n title: Gender\n- chart: race_variable_name\n title: Race\n"
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -72,9 +72,9 @@ module Spout
72
72
  end
73
73
 
74
74
  if @csv_directory != @standard_version
75
- puts "Using dataset in " + "csvs/#{@csv_directory}/".colorize( :green ) + " for dictionary version " + @standard_version.to_s.colorize( :green ) + "\n\n"
75
+ puts "#{@csv_files.size == 0 ? 'No CSVs found' : 'Using dataset' } in " + "csvs/#{@csv_directory}/".colorize( :green ) + " for dictionary version " + @standard_version.to_s.colorize( :green ) + "\n\n"
76
76
  else
77
- puts "Using dataset in " + "csvs/#{@standard_version}/".colorize( :green ) + "\n\n"
77
+ puts "#{@csv_files.size == 0 ? 'No CSVs found' : 'Using dataset' } in " + "csvs/#{@standard_version}/".colorize( :green ) + "\n\n"
78
78
  end
79
79
 
80
80
  end
@@ -4,7 +4,7 @@ require 'spout/helpers/json_loader'
4
4
  module Spout
5
5
  module Models
6
6
  class OutlierResult
7
- attr_reader :csv_files, :method, :major_outliers, :minor_outliers, :outliers, :weight, :units, :display_name, :median
7
+ attr_reader :csv_files, :method, :major_outliers, :minor_outliers, :outliers, :weight, :units, :display_name, :median, :variable_type
8
8
 
9
9
  def initialize(subjects, method, csv_files)
10
10
  @values = subjects.collect(&method.to_sym)
@@ -24,6 +24,7 @@ module Spout
24
24
  variable = Spout::Helpers::JsonLoader::get_variable(method)
25
25
  @units = (variable.kind_of?(Hash) ? variable['units'] : nil)
26
26
  @display_name = (variable.kind_of?(Hash) ? variable['display_name'] : nil)
27
+ @variable_type = (variable.kind_of?(Hash) ? variable['type'] : nil)
27
28
  @median = @values.median
28
29
  end
29
30
 
@@ -1 +1 @@
1
- ruby-2.1.2
1
+ ruby-2.1.3
@@ -1,2 +1,3 @@
1
+ # slug: myrepo
1
2
  visit: visit
2
3
  charts: []
@@ -1,3 +1,3 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.2
3
+ - 2.1.3
data/lib/spout/tests.rb CHANGED
@@ -41,7 +41,7 @@ module Minitest
41
41
  print " #{test.name}"
42
42
  puts
43
43
  print " "
44
- print test.failure
44
+ print test.failure.to_s.gsub("\n", "\n ")
45
45
  puts
46
46
  puts
47
47
  end
data/lib/spout/version.rb CHANGED
@@ -3,7 +3,7 @@ module Spout
3
3
  MAJOR = 0
4
4
  MINOR = 9
5
5
  TINY = 0
6
- BUILD = "beta2" # nil, "pre", "rc", "rc2"
6
+ BUILD = "rc" # nil, "pre", "rc", "rc2"
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
9
9
  end
data/lib/spout.rb CHANGED
@@ -45,8 +45,8 @@ module Spout
45
45
  argv = argv.last(argv.size - 1)
46
46
  require 'spout/commands/images'
47
47
  types = flag_values(argv, 'type')
48
- variable_ids = flag_values(argv, 'id')
49
48
  sizes = flag_values(argv, 'size')
49
+ variable_ids = non_flag_values(argv)
50
50
  Spout::Commands::Images.new(types, variable_ids, sizes, standard_version, argv)
51
51
  end
52
52
 
@@ -111,4 +111,8 @@ EOT
111
111
  flags.select{|f| f =~ /^--#{param}-/}.collect{|f| f[(param.size + 3)..-1]}
112
112
  end
113
113
 
114
+ def self.non_flag_values(flags)
115
+ flags.reject{|f| f =~ /^--/}
116
+ end
117
+
114
118
  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.9.0.beta2
4
+ version: 0.9.0.rc
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-08-25 00:00:00.000000000 Z
11
+ date: 2014-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -118,6 +118,7 @@ files:
118
118
  - lib/spout/commands/project_generator.rb
119
119
  - lib/spout/helpers/array_statistics.rb
120
120
  - lib/spout/helpers/chart_types.rb
121
+ - lib/spout/helpers/config_reader.rb
121
122
  - lib/spout/helpers/iterators.rb
122
123
  - lib/spout/helpers/json_loader.rb
123
124
  - lib/spout/helpers/number_helper.rb
@@ -185,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
186
  version: 1.3.1
186
187
  requirements: []
187
188
  rubyforge_project:
188
- rubygems_version: 2.2.2
189
+ rubygems_version: 2.4.1
189
190
  signing_key:
190
191
  specification_version: 4
191
192
  summary: Turn your CSV data dictionary into a JSON repository. Collaborate with others