spout 0.8.0.beta12 → 0.8.0.beta13

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: 1b54a8c6d6961f85f94ebc386b6d19f2c005c065
4
- data.tar.gz: 28080e314a53b7de358956658e2a0c3cf81a8d30
3
+ metadata.gz: f8fa45a4222ddcbf78606e4f3e36aad831162ce3
4
+ data.tar.gz: 134a7e8590e72a7be9067504cd680a91e564516d
5
5
  SHA512:
6
- metadata.gz: 5d6e7f3af3e290a83147ffac8c3cb215193bede45866c028a06ace4b6cfd1fdaa9e321b6f5138a6a0d094cae5c3ad4e13b279846a54cb57b5680390b8e2a47e3
7
- data.tar.gz: ff772b5b0633a23137dd8a34623fcdaa2c0cafdc1e09ebc47858ac1eb4a2fc835a6c2d5ba37793e1c3f8f62a59c295b04d29ff2e1e21fc8d6e0ef347bf53ca43
6
+ metadata.gz: 2d74fa1bf7c3d79da5900a485961d574f07b4031ec0b39c62c62938b85cf3499d46c8bab9f570849604c2b51aaadd79e1dfaa761d8eedf26af090727a3d0abc8
7
+ data.tar.gz: c5bf687c4da5159804b1746bfa7580a8eb4030ed0034a72191b29b9bc3141165fd0e9ecadf0688c78a16c18d074b822a8c3a61012d18160127cda7a7d44db3b4
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  ## 0.8.0
2
2
 
3
3
  ### Enhancements
4
+ - Tests now include check for variables that reference one or more forms
5
+ - `include Spout::Tests::FormExistenceValidation`
6
+ - `include Spout::Tests::FormNameUniqueness`
7
+ - `include Spout::Tests::FormNameMatch`
4
8
  - Added `spout graphs` command that generates JSON charts and tables of each variable in a dataset
5
9
  - This command requires a .spout.yml file to be specified to identify the following variables:
6
10
  - `visit`: This variable is used to separate subject encounters in a histogram
data/README.md CHANGED
@@ -120,6 +120,9 @@ class DictionaryTest < Test::Unit::TestCase
120
120
  include Spout::Tests::DomainExistenceValidation
121
121
  include Spout::Tests::DomainFormat
122
122
  include Spout::Tests::DomainNameUniqueness
123
+ include Spout::Tests::FormExistenceValidation
124
+ include Spout::Tests::FormNameUniqueness
125
+ include Spout::Tests::FormNameMatch
123
126
  end
124
127
  ```
125
128
 
@@ -233,3 +236,49 @@ This will generate a graph for ahi for the first 10 rows of each dataset CSV.
233
236
 
234
237
 
235
238
  This will generate charts and tables for each variable in the dataset plotted against the variables listed under `charts`.
239
+
240
+ ### Example Variable that references a Domain and a Form
241
+
242
+ `variables/Demographics/gender.json`
243
+ ```json
244
+ {
245
+ "id": "gender",
246
+ "display_name": "Gender",
247
+ "description": "Gender as reported by subject",
248
+ "type": "choices",
249
+ "domain": "gender12",
250
+ "labels": [
251
+ "gender"
252
+ ],
253
+ "commonly_used": true,
254
+ "forms": [
255
+ "intake_questionnaire"
256
+ ]
257
+ }
258
+ ```
259
+
260
+ `domains/gender12.json`
261
+ ```json
262
+ [
263
+ {
264
+ "value": "1",
265
+ "display_name": "Male",
266
+ "description": ""
267
+ },
268
+ {
269
+ "value": "2",
270
+ "display_name": "Female",
271
+ "description": ""
272
+ }
273
+ ]
274
+ ```
275
+
276
+ `forms/Baseline Visit/intake_questionnaire.json`
277
+ ```json
278
+ {
279
+ "id": "intake_questionnaire",
280
+ "display_name": "Intake Questionnaire at Baseline Visit",
281
+ "code_book": "Baseline-Visit-Intake-Questionnaire.pdf"
282
+ }
283
+ ```
284
+
@@ -1,5 +1,6 @@
1
1
  require 'csv'
2
2
  require 'json'
3
+ require 'fileutils'
3
4
 
4
5
  module Spout
5
6
  module Commands
@@ -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, :median
7
+ attr_reader :csv_files, :method, :major_outliers, :minor_outliers, :outliers, :weight, :units, :display_name, :median
8
8
 
9
9
  def initialize(subjects, method, csv_files)
10
10
  @values = subjects.collect(&method.to_sym)
@@ -23,6 +23,7 @@ module Spout
23
23
  end
24
24
  variable = Spout::Helpers::JsonLoader::get_variable(method)
25
25
  @units = (variable.kind_of?(Hash) ? variable['units'] : nil)
26
+ @display_name = (variable.kind_of?(Hash) ? variable['display_name'] : nil)
26
27
  @median = @values.median
27
28
  end
28
29
 
@@ -0,0 +1,30 @@
1
+ module Spout
2
+ module Tests
3
+ module FormExistenceValidation
4
+
5
+ def assert_form_existence(item, msg = nil)
6
+ form_names = Dir.glob("forms/**/*.json").collect{|file| file.split('/').last.to_s.downcase.split('.json').first}
7
+
8
+ result = begin
9
+ (form_names | JSON.parse(File.read(item))["forms"]).size == form_names.size
10
+ rescue JSON::ParserError
11
+ false
12
+ end
13
+
14
+ full_message = build_message(msg, "One or more forms referenced by ? does not exist.", item)
15
+ assert_block(full_message) do
16
+ result
17
+ end
18
+ end
19
+
20
+ Dir.glob("variables/**/*.json").each do |file|
21
+ if (not [nil, ''].include?(JSON.parse(File.read(file))["forms"]) rescue false)
22
+ define_method("test_form_exists: "+file) do
23
+ assert_form_existence file
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ module Spout
2
+ module Tests
3
+ module FormNameMatch
4
+ Dir.glob("forms/**/*.json").each do |file|
5
+ define_method("test_form_name_match: "+file) do
6
+ assert_equal file.gsub(/^.*\//, '').gsub('.json', '').downcase, (begin JSON.parse(File.read(file))["id"] rescue nil end)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module Spout
2
+ module Tests
3
+ module FormNameUniqueness
4
+ def test_form_name_uniqueness
5
+ files = Dir.glob("forms/**/*.json").collect{|file| file.split('/').last.downcase }
6
+ assert_equal [], files.select{ |f| files.count(f) > 1 }.uniq
7
+ end
8
+ end
9
+ end
10
+ end
@@ -27,6 +27,12 @@ module Spout
27
27
  end
28
28
  end
29
29
 
30
+ Dir.glob("forms/**/*.json").each do |file|
31
+ define_method("test_json: "+file) do
32
+ assert_valid_json file
33
+ end
34
+ end
35
+
30
36
  end
31
37
  end
32
38
  end
data/lib/spout/tests.rb CHANGED
@@ -11,6 +11,9 @@ require 'spout/tests/domain_existence_validation'
11
11
  require 'spout/tests/domain_format'
12
12
  require 'spout/tests/domain_name_uniqueness'
13
13
  require 'spout/tests/domain_specified'
14
+ require 'spout/tests/form_existence_validation'
15
+ require 'spout/tests/form_name_uniqueness'
16
+ require 'spout/tests/form_name_match'
14
17
 
15
18
  module Spout
16
19
  module Tests
@@ -22,6 +25,9 @@ module Spout
22
25
  include Spout::Tests::DomainFormat
23
26
  include Spout::Tests::DomainNameUniqueness
24
27
  include Spout::Tests::DomainSpecified
28
+ include Spout::Tests::FormExistenceValidation
29
+ include Spout::Tests::FormNameUniqueness
30
+ include Spout::Tests::FormNameMatch
25
31
 
26
32
  Turn.config.trace = 1
27
33
  end
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 = "beta12" # nil, "pre", "rc", "rc2"
6
+ BUILD = "beta13" # nil, "pre", "rc", "rc2"
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
9
9
  end
@@ -115,6 +115,7 @@ tfoot td {
115
115
  <tr>
116
116
  <th>CSV</th>
117
117
  <th>Column</th>
118
+ <th>Display Name</th>
118
119
  <th>Median</th>
119
120
  <th>Major Outliers</th>
120
121
  <th>Minor Outliers</th>
@@ -130,6 +131,7 @@ tfoot td {
130
131
  <code class="<%= css_class %>"><%= csv_file %></code><br />
131
132
  <% end %></td>
132
133
  <td><%= outlier_result.method %></td>
134
+ <td><%= outlier_result.display_name.to_s[0..20] %></td>
133
135
  <td>
134
136
  <% if outlier_result.median.kind_of?(Numeric) %>
135
137
  <code class="default"><%= number_with_delimiter(outlier_result.median.round(2)) %></code>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0.beta12
4
+ version: 0.8.0.beta13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Remo Mueller
@@ -95,7 +95,6 @@ files:
95
95
  - Rakefile
96
96
  - bin/spout
97
97
  - lib/spout.rb
98
- - lib/spout/actions.rb
99
98
  - lib/spout/application.rb
100
99
  - lib/spout/commands/coverage.rb
101
100
  - lib/spout/commands/exporter.rb
@@ -135,6 +134,9 @@ files:
135
134
  - lib/spout/tests/domain_format.rb
136
135
  - lib/spout/tests/domain_name_uniqueness.rb
137
136
  - lib/spout/tests/domain_specified.rb
137
+ - lib/spout/tests/form_existence_validation.rb
138
+ - lib/spout/tests/form_name_match.rb
139
+ - lib/spout/tests/form_name_uniqueness.rb
138
140
  - lib/spout/tests/json_helper.rb
139
141
  - lib/spout/tests/json_validation.rb
140
142
  - lib/spout/tests/variable_name_match.rb
data/lib/spout/actions.rb DELETED
@@ -1,92 +0,0 @@
1
- # module Spout
2
- # class Actions
3
-
4
- # def interpret(argv)
5
- # # case argv.first.to_s.scan(/\w/).first
6
- # case argv.first
7
- # when 'new', 'n', 'ne', '-new', '-n', '-ne'
8
- # new_template_dictionary(argv)
9
- # when '--version', '-v', '-ve', '-ver', 'version', 'v', 've', 'ver'
10
- # puts "Spout #{Spout::VERSION::STRING}"
11
- # when 'test', 't', 'te', 'tes', '--test', '-t', '-te', '-tes'
12
- # system "bundle exec rake HIDE_PASSING_TESTS=true"
13
- # # when 'tv'
14
- # # system "bundle exec rake"
15
- # when 'import', 'i', 'im', 'imp', '--import', '-i', '-im', '-imp'
16
- # import_from_csv(argv)
17
- # when 'import_domain', '--import_domain', 'import_domains', '--import_domains'
18
- # import_from_csv(argv, 'domains')
19
- # when 'export', 'e', 'ex', 'exp', '--export', '-e', '-ex', '-exp'
20
- # new_data_dictionary_export(argv)
21
- # when 'coverage', '-coverage', '--coverage', 'c', '-c'
22
- # coverage_report(argv)
23
- # when 'pngs', '-pngs', '--pngs', 'p', '-p'
24
- # generate_images(argv.last(argv.size - 1))
25
- # when 'graphs', '-graphs', '--graphs', 'g', '-g'
26
- # generate_charts_and_tables(argv.last(argv.size - 1))
27
- # when 'outliers', '-outliers', '--outliers', 'o', '-o'
28
- # outliers_report(argv)
29
- # # else
30
- # # help
31
- # end
32
- # end
33
-
34
- # protected
35
-
36
- # def csv_usage
37
- # usage = <<-EOT
38
-
39
- # Usage: spout import CSVFILE
40
-
41
- # The CSVFILE must be the location of a valid CSV file.
42
-
43
- # EOT
44
- # usage
45
- # end
46
-
47
- # def import_from_csv(argv, type = "")
48
- # csv_file = File.join(argv[1].to_s.strip)
49
- # if File.exists?(csv_file)
50
- # system "bundle exec rake spout:import CSV=#{csv_file} #{'TYPE='+type if type.to_s != ''}"
51
- # else
52
- # puts csv_usage
53
- # end
54
- # end
55
-
56
- # def new_data_dictionary_export(argv)
57
- # version = argv[1].to_s.gsub(/[^a-zA-Z0-9\.-]/, '_').strip
58
- # version_string = (version == '' ? "" : "VERSION=#{version}")
59
- # system "bundle exec rake spout:create #{version_string}"
60
- # end
61
-
62
- # def coverage_report(argv)
63
- # require 'spout/commands/coverage'
64
- # Spout::Commands::Coverage.new(standard_version, argv)
65
- # # system "bundle exec rake spout:coverage"
66
- # end
67
-
68
- # def outliers_report(argv)
69
- # system "bundle exec rake spout:outliers"
70
- # end
71
-
72
- # def flag_values(flags, param)
73
- # flags.select{|f| f[0..((param.size + 3) - 1)] == "--#{param}-" and f.length > param.size + 3}.collect{|f| f[(param.size + 3)..-1]}
74
- # end
75
-
76
- # def generate_images(flags)
77
- # params = {}
78
- # params['types'] = flag_values(flags, 'type')
79
- # params['variable_ids'] = flag_values(flags, 'id')
80
- # params['sizes'] = flag_values(flags, 'size')
81
-
82
- # params_string = params.collect{|key, values| "#{key}=#{values.join(',')}"}.join(' ')
83
-
84
- # system "bundle exec rake spout:images #{params_string}"
85
- # end
86
-
87
- # def generate_charts_and_tables(variables)
88
- # system "bundle exec rake spout:json variables=#{variables.join(',')}"
89
- # end
90
-
91
- # end
92
- # end