spout 0.10.2 → 0.11.0.beta1

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +3 -30
  4. data/lib/spout/commands/coverage.rb +2 -1
  5. data/lib/spout/commands/deploy.rb +82 -77
  6. data/lib/spout/commands/exporter.rb +2 -3
  7. data/lib/spout/commands/graphs.rb +68 -67
  8. data/lib/spout/commands/help.rb +155 -0
  9. data/lib/spout/helpers/array_statistics.rb +36 -30
  10. data/lib/spout/helpers/chart_types.rb +2 -2
  11. data/lib/spout/helpers/config_reader.rb +5 -5
  12. data/lib/spout/helpers/json_request.rb +1 -2
  13. data/lib/spout/helpers/json_request_generic.rb +87 -0
  14. data/lib/spout/helpers/quietly.rb +2 -4
  15. data/lib/spout/helpers/semantic.rb +7 -11
  16. data/lib/spout/helpers/send_file.rb +23 -25
  17. data/lib/spout/helpers/subject_loader.rb +41 -32
  18. data/lib/spout/helpers/table_formatting.rb +7 -6
  19. data/lib/spout/models/bucket.rb +5 -4
  20. data/lib/spout/models/coverage_result.rb +1 -1
  21. data/lib/spout/models/dictionary.rb +3 -1
  22. data/lib/spout/models/domain.rb +7 -6
  23. data/lib/spout/models/empty.rb +17 -0
  24. data/lib/spout/models/form.rb +8 -5
  25. data/lib/spout/models/graphables/default.rb +41 -18
  26. data/lib/spout/models/graphables/histogram.rb +6 -7
  27. data/lib/spout/models/graphables.rb +3 -5
  28. data/lib/spout/models/option.rb +6 -2
  29. data/lib/spout/models/outlier_result.rb +3 -3
  30. data/lib/spout/models/record.rb +21 -3
  31. data/lib/spout/models/subject.rb +4 -7
  32. data/lib/spout/models/tables/choices_vs_choices.rb +29 -17
  33. data/lib/spout/models/tables/choices_vs_numeric.rb +19 -12
  34. data/lib/spout/models/tables/default.rb +19 -32
  35. data/lib/spout/models/tables/numeric_vs_choices.rb +9 -13
  36. data/lib/spout/models/tables/numeric_vs_numeric.rb +9 -11
  37. data/lib/spout/models/tables.rb +4 -6
  38. data/lib/spout/models/variable.rb +51 -13
  39. data/lib/spout/tasks/engine.rake +1 -1
  40. data/lib/spout/templates/ruby-version +1 -1
  41. data/lib/spout/templates/travis.yml +1 -1
  42. data/lib/spout/tests/domain_format.rb +2 -2
  43. data/lib/spout/tests/domain_name_format.rb +15 -0
  44. data/lib/spout/tests/form_name_format.rb +14 -0
  45. data/lib/spout/tests/variable_name_format.rb +14 -0
  46. data/lib/spout/tests.rb +18 -13
  47. data/lib/spout/version.rb +3 -3
  48. data/lib/spout/views/index.html.erb +2 -2
  49. data/lib/spout/views/outliers.html.erb +1 -1
  50. data/lib/spout.rb +13 -58
  51. data/spout.gemspec +14 -15
  52. metadata +25 -25
  53. data/lib/spout/commands/images.rb +0 -199
  54. data/lib/spout/support/javascripts/data.js +0 -17
  55. data/lib/spout/support/javascripts/highcharts-convert.js +0 -583
  56. data/lib/spout/support/javascripts/highcharts-more.js +0 -50
  57. data/lib/spout/support/javascripts/highstock.js +0 -353
  58. data/lib/spout/support/javascripts/jquery.1.9.1.min.js +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f4dd489db288edeabd09bffefabbd2a7f0ed2ffe
4
- data.tar.gz: 38acb6688a14106600a09042b78cea92291fe6e9
3
+ metadata.gz: 35179a9011f963b875618eeb8fd07854c58f9cce
4
+ data.tar.gz: 321e836a1a80d07092e0bbe5d921f712db8dcb18
5
5
  SHA512:
6
- metadata.gz: af80eb4517f784fc425566e2b62887c1c43688153ff68c9f435337e2d6ff24afe3bf6f8956877b006ee6972f87c5852472aa888b5c70d6bccc5d17328f98b88b
7
- data.tar.gz: 11ac5a8dd09a24bfa2313b4df3c9489aad31045bd9ab07008b7ff23da5c075f0336005d286b925e872715eb4364a29ef58d92ec3a93dd53e514723c017ef17c5
6
+ metadata.gz: d811aca192cc49aa05a8fc5dd5c4f1523f977b0fc2eb0e56c6f6ed5cd7f8295d73b69ccd93382183d3199c84986dff828c1faa611a39038b2b2bcb32ef14405f
7
+ data.tar.gz: 9ba01d7cb5f51f977b9433a8186f69241585bbba0eb2beb238c7794fe3c1eaa548da3450d527692747a950786ca02f609dad7e90058bc539a28ec371fbe4a521
data/CHANGELOG.md CHANGED
@@ -1,3 +1,39 @@
1
+ ## 0.11.0
2
+
3
+ ### Deprecations
4
+ - **Image Command**
5
+ - Spout variable graphs are no longer required as images by the NSRR webserver and have been removed
6
+
7
+ ### Enhancements
8
+ - **Deploy Command**
9
+ - The deploy command can now accept flags and arguments that modify and scope graphs and images
10
+ - ex: `spout deploy WEBSERVER var1 var2 --rows=100 --clean`
11
+ - This pushes a clean version of graphs and images based on the first 100 rows in the CSVs for var1 and var2
12
+ - Spout now provides detailed information when deploying variables, forms, and domains
13
+ - CSVs can now be grouped into subfolders within their version folders, ex:
14
+ - `<project_name>/csvs/<VERSION>/dataset-main.csv`
15
+ - `<project_name>/csvs/<VERSION>/subfolder/dataset-extra-a.csv`
16
+ - `<project_name>/csvs/<VERSION>/subfolder/dataset-extra-b.csv`
17
+ - `CHANGELOG.md` and `KNOWNISSUES.md` are now uploaded alongside datasets during a deploy
18
+ - **Graph Command**
19
+ - Tables no longer include unknown values for variables that don't exist across other CSVs with the same subject and visit
20
+ - Tables still track unknown values if the CSV contains a column for the variable, but the cell for subject is blank
21
+ - Histograms of variables that only contain a small range (less than 12) of integers now use discrete buckets of size 1 instead of creating fractional buckets
22
+ - Numbers less than one now respect the precision of the number when computing means and related statistics
23
+ - **Export Command**
24
+ - Commonly Used attribute is now included in data dictionary exports
25
+ - **Tests Added**
26
+ - New tests were added to check the format of variable names, form names, and domain names
27
+ - **Help Command**
28
+ - The help command now allows users to learn more about individual commands
29
+ - ex: `spout help deploy`
30
+ - **Gem Changes**
31
+ - Updated to Ruby 2.3.0
32
+ - Bundler is now a required dependency
33
+
34
+ ### Refactoring
35
+ - Started refactoring code base to better adhere to RuboCop style recommendations
36
+
1
37
  ## 0.10.2 (December 29, 2014)
2
38
 
3
39
  ### Bug Fix
data/README.md CHANGED
@@ -212,31 +212,6 @@ You can optionally provide a version string
212
212
  spout export [1.0.0]
213
213
  ```
214
214
 
215
- ### Generate images for data in your dataset
216
-
217
- Spout lets you generate images for each variable defined in your dataset. Make sure to run `spout coverage` first to validate that your data dictionary and dataset match.
218
-
219
- This command will take some time, and requires [PhantomJS](http://phantomjs.org/) to be installed on your system.
220
-
221
- ```
222
- spout pngs
223
- ```
224
-
225
- The following flags can be passed to the `spout pngs` command:
226
-
227
- - `spout p --type-numeric`
228
- - `spout p --type-integer`
229
- - `spout p --type-choices`
230
- - `spout p --size-lg`
231
- - `spout p --size-sm`
232
- - `spout p --type-numeric --size-sm`
233
-
234
- For specific variables the following can be used:
235
- - `spout p <variable_id>`
236
-
237
- Generated images are placed in: `./images/`
238
-
239
-
240
215
  ### Generate charts and tables for data in your dataset
241
216
 
242
217
  ```
@@ -274,7 +249,7 @@ spout g ahi bmi
274
249
  You can also specify a limit to the amount of rows to read in from the CSV files by specifying the `-rows` flag
275
250
 
276
251
  ```
277
- spout g -rows=10 ahi
252
+ spout g --rows=10 ahi
278
253
  ```
279
254
 
280
255
  This will generate a graph for ahi for the first 10 rows of each dataset CSV.
@@ -369,13 +344,11 @@ The following steps are run:
369
344
  - **Graph Generation**
370
345
  - `spout g` is run
371
346
  - Graphs are pushed to server
372
- - **Image Generation**
373
- - `spout p` is run
374
- - `optipng` is run on image then uploaded to server
375
- - Images are pushed to server
376
347
  - **Dataset Uploads**
377
348
  - Dataset CSV data dictionary is generated (variables, domains, forms)
378
349
  - Dataset and data dictionary CSVs uploaded to files section of dataset
350
+ - **Documentation Uploads**
351
+ - `README.md` and `KNOWNISSUES.md` are uploaded
379
352
  - **Server-Side Updates**
380
353
  - Server checks out branch of specified tag
381
354
  - Server runs `load_data_dictionary!` for specified dataset slug
@@ -6,6 +6,7 @@ require 'spout/helpers/subject_loader'
6
6
  require 'spout/models/coverage_result'
7
7
  require 'spout/helpers/number_helper'
8
8
  require 'spout/helpers/config_reader'
9
+ require 'spout/helpers/array_statistics'
9
10
 
10
11
  module Spout
11
12
  module Commands
@@ -35,7 +36,7 @@ module Spout
35
36
  @matching_results = []
36
37
 
37
38
  @subject_loader.all_methods.each do |method, csv_files|
38
- scr = Spout::Models::CoverageResult.new(method, @subjects.collect(&method.to_sym).uniq)
39
+ scr = Spout::Models::CoverageResult.new(method, @subjects.collect(&method.to_sym).compact_empty.uniq)
39
40
  @matching_results << [ csv_files, method, scr ]
40
41
  end
41
42
 
@@ -21,10 +21,6 @@ require 'spout/helpers/json_request'
21
21
  # - **Graph Generation**
22
22
  # - `spout g` is run
23
23
  # - Graphs are pushed to server
24
- # - **Image Generation**
25
- # - `spout p` is run
26
- # - `optipng` is run on image then uploaded to server
27
- # - Images are pushed to server
28
24
  # - **Dataset Uploads**
29
25
  # - Dataset CSV data dictionary is generated (variables, domains, forms)
30
26
  # - Dataset and data dictionary CSVs uploaded to files section of dataset
@@ -39,25 +35,38 @@ end
39
35
  module Spout
40
36
  module Commands
41
37
  class Deploy
42
-
43
38
  include Spout::Helpers::Quietly
44
39
 
45
40
  INDENT_LENGTH = 23
46
- INDENT = " "*INDENT_LENGTH
41
+ INDENT = ' ' * INDENT_LENGTH
47
42
 
48
43
  attr_accessor :token, :version, :slug, :url, :config, :environment, :webserver_name, :subjects
49
44
 
50
45
  def initialize(argv, version)
51
- @environment = argv[1].to_s
46
+ argv.shift # Remove 'download' command from argv list
47
+ @environment = argv.shift
52
48
  @version = version
53
- @skip_checks = (argv.delete('--skip-checks') != nil or argv.delete('--no-checks') != nil)
49
+ @skip_checks = !(argv.delete('--skip-checks').nil? && argv.delete('--no-checks').nil?)
50
+
51
+ @skip_graphs = !(argv.delete('--skip-graphs').nil? && argv.delete('--no-graphs').nil?)
52
+ @skip_csvs = !(argv.delete('--skip-csvs').nil? && argv.delete('--no-csvs').nil?)
53
+ @clean = !(argv.delete('--no-resume').nil? && argv.delete('--clean').nil?)
54
+ @skip_server_updates = !(argv.delete('--skip-server-updates').nil? && argv.delete('--no-server-updates').nil?)
55
+
56
+ token_arg = argv.find { |arg| /^--token=/ =~ arg }
57
+ argv.delete(token_arg)
58
+ @token = token_arg.gsub(/^--token=/, '') if token_arg
59
+
60
+ rows_arg = argv.find { |arg| /^--rows=(\d*)/ =~ arg }
61
+ argv.delete(rows_arg)
62
+ @number_of_rows = rows_arg.gsub(/--rows=/, '').to_i if rows_arg
54
63
 
55
- @skip_graphs = (argv.delete('--skip-graphs') != nil or argv.delete('--no-graphs') != nil)
56
- @skip_images = (argv.delete('--skip-images') != nil or argv.delete('--no-images') != nil)
57
- @clean = (argv.delete('--clean') != nil or argv.delete('--no-resume'))
58
- @skip_server_updates = (argv.delete('--skip-server-updates') != nil or argv.delete('--no-server-updates') != nil)
64
+ # puts "token_arg: #{token_arg}".colorize(:red)
65
+ # puts "@token: #{@token}".colorize(:red)
66
+ # puts "rows_arg: #{rows_arg}".colorize(:red)
67
+ # puts "@number_of_rows: #{@number_of_rows}".colorize(:red)
59
68
 
60
- @token = argv.select{|a| /^--token=/ =~ a}.collect{|a| a.gsub(/^--token=/, '')}.first
69
+ @argv = argv
61
70
 
62
71
  begin
63
72
  run_all
@@ -67,35 +76,31 @@ module Spout
67
76
  end
68
77
 
69
78
  def run_all
70
- begin
71
- config_file_load
72
- version_check unless @skip_checks
73
- test_check unless @skip_checks
74
- user_authorization
75
-
76
- load_subjects_from_csvs unless @skip_graphs and @skip_images
77
-
78
-
79
- graph_generation unless @skip_graphs
80
- image_generation unless @skip_images
81
- dataset_uploads
82
- data_dictionary_uploads
83
- trigger_server_updates unless @skip_server_updates
84
- rescue DeployError
85
- end
79
+ config_file_load
80
+ version_check unless @skip_checks
81
+ test_check unless @skip_checks
82
+ user_authorization
83
+ load_subjects_from_csvs unless @skip_graphs
84
+ graph_generation unless @skip_graphs
85
+ dataset_uploads unless @skip_csvs
86
+ data_dictionary_uploads unless @skip_csvs
87
+ markdown_uploads unless @skip_csvs
88
+ trigger_server_updates unless @skip_server_updates
89
+ rescue DeployError
90
+ # Nothing on Deploy Error
86
91
  end
87
92
 
88
93
  def load_subjects_from_csvs
89
94
  @dictionary_root = Dir.pwd
90
95
  @variable_files = Dir.glob(File.join(@dictionary_root, 'variables', '**', '*.json'))
91
96
 
92
- @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, [], @version, nil, @config.visit)
97
+ @subject_loader = Spout::Helpers::SubjectLoader.new(@variable_files, [], @version, @number_of_rows, @config.visit)
93
98
  @subject_loader.load_subjects_from_csvs!
94
99
  @subjects = @subject_loader.subjects
95
100
  end
96
101
 
97
102
  def config_file_load
98
- print " `.spout.yml` Check: "
103
+ print ' `.spout.yml` Check: '
99
104
  @config = Spout::Helpers::ConfigReader.new
100
105
 
101
106
  @slug = @config.slug
@@ -110,7 +115,7 @@ module Spout
110
115
  failure(message)
111
116
  end
112
117
 
113
- matching_webservers = @config.webservers.select{|wh| /^#{@environment}/i =~ wh['name'].to_s.downcase}
118
+ matching_webservers = @config.webservers.select { |wh| /^#{@environment}/i =~ wh['name'].to_s.downcase }
114
119
  if matching_webservers.count == 0
115
120
  message = "#{INDENT}0 webservers match '#{@environment}'.".colorize(:red) + " The following webservers exist in your `.spout.yml` file:\n" + "#{INDENT}#{@config.webservers.collect{|wh| wh['name'].to_s.downcase}.join(', ')}".colorize(:white)
116
121
  failure(message)
@@ -127,9 +132,9 @@ module Spout
127
132
  failure(message)
128
133
  end
129
134
 
130
- puts "PASS".colorize(:green)
131
- puts " Target Server: " + "#{@url}".colorize(:white)
132
- puts " Target Dataset: " + "#{@slug}".colorize(:white)
135
+ puts 'PASS'.colorize(:green)
136
+ puts ' Target Server: ' + "#{@url}".colorize(:white)
137
+ puts ' Target Dataset: ' + "#{@slug}".colorize(:white)
133
138
  end
134
139
 
135
140
  # - **Version Check**
@@ -141,11 +146,11 @@ module Spout
141
146
  `git status --porcelain`
142
147
  end
143
148
 
144
- print " Git Status Check: "
149
+ print ' Git Status Check: '
145
150
  if stdout.to_s.strip == ''
146
- puts "PASS".colorize(:green) + " " + "nothing to commit, working directory clean".colorize(:white)
151
+ puts 'PASS'.colorize(:green) + ' ' + 'nothing to commit, working directory clean'.colorize(:white)
147
152
  else
148
- message = "#{INDENT}working directory contains uncomitted changes".colorize(:red)
153
+ message = "#{INDENT}working directory contains uncomitted changes\n#{INDENT}use `".colorize(:red) + '--skip-checks'.colorize(:white) + '` to ignore this step'.colorize(:red)
149
154
  failure message
150
155
  end
151
156
 
@@ -153,7 +158,7 @@ module Spout
153
158
  if changelog.match(/^## #{@version.split('.')[0..2].join('.')}/)
154
159
  puts " CHANGELOG.md: " + "PASS".colorize(:green) + " " + changelog.colorize(:white)
155
160
  else
156
- print " CHANGELOG.md: "
161
+ print ' CHANGELOG.md: '
157
162
  message = "#{INDENT}Expected: ".colorize(:red) + "## #{@version}".colorize(:white) +
158
163
  "\n#{INDENT} Actual: ".colorize(:red) + changelog.colorize(:white)
159
164
  failure message
@@ -163,15 +168,14 @@ module Spout
163
168
  `git describe --exact-match HEAD --tags`
164
169
  end
165
170
 
166
- print " Version Check: "
171
+ print ' Version Check: '
167
172
  tag = stdout.to_s.strip
168
173
  if "v#{@version}" != tag
169
- message = "#{INDENT}Version specified in `VERSION` file ".colorize(:red) + "'v#{@version}'".colorize(:white) + " does not match git tag on HEAD commit ".colorize(:red) + "'#{tag}'".colorize(:white)
174
+ message = "#{INDENT}Version specified in `VERSION` file ".colorize(:red) + "'v#{@version}'".colorize(:white) + ' does not match git tag on HEAD commit '.colorize(:red) + "'#{tag}'".colorize(:white)
170
175
  failure message
171
176
  else
172
- puts "PASS".colorize(:green) + " VERSION " + "'v#{@version}'".colorize(:white) + " matches git tag " + "'#{tag}'".colorize(:white)
177
+ puts 'PASS'.colorize(:green) + ' VERSION ' + "'v#{@version}'".colorize(:white) + ' matches git tag ' + "'#{tag}'".colorize(:white)
173
178
  end
174
-
175
179
  end
176
180
 
177
181
  def test_check
@@ -182,7 +186,7 @@ module Spout
182
186
  end
183
187
 
184
188
  if stdout.match(/[^\d]0 failures, 0 errors,/)
185
- puts "PASS".colorize(:green)
189
+ puts 'PASS'.colorize(:green)
186
190
  else
187
191
  message = "#{INDENT}spout t".colorize(:white) + " had errors or failures".colorize(:red) + "\n#{INDENT}Please fix all errors and failures and then run spout deploy again."
188
192
  failure message
@@ -198,38 +202,28 @@ module Spout
198
202
 
199
203
  response = Spout::Helpers::JsonRequest.get("#{@url}/datasets/#{@slug}/a/#{@token}/editor.json")
200
204
 
201
- if response.kind_of?(Hash) and response['editor']
202
- puts "AUTHORIZED".colorize(:green)
205
+ if response.is_a?(Hash) and response['editor']
206
+ puts 'AUTHORIZED'.colorize(:green)
203
207
  else
204
- puts "UNAUTHORIZED".colorize(:red)
208
+ puts 'UNAUTHORIZED'.colorize(:red)
205
209
  puts "#{INDENT}You are not set as an editor on the #{@slug} dataset or you mistyped your token."
206
210
  raise DeployError
207
211
  end
208
212
 
209
213
  # failure ''
210
- # puts "PASS".colorize(:green)
214
+ # puts 'PASS'.colorize(:green)
211
215
  end
212
216
 
213
217
  def graph_generation
214
218
  # failure ''
215
219
  require 'spout/commands/graphs'
216
- argv = []
217
- argv << "--clean" if @clean
218
- Spout::Commands::Graphs.new(argv, @version, true, @url, @slug, @token, @webserver_name, @subjects)
219
- puts "\r Graph Generation: " + "DONE ".colorize(:green)
220
- end
221
-
222
- def image_generation
223
- # failure ''
224
- require 'spout/commands/images'
225
- argv = []
226
- argv << "--clean" if @clean
227
- Spout::Commands::Images.new([], [], [], @version, argv, true, @url, @slug, @token, @webserver_name, @subjects)
228
- puts "\r Image Generation: " + "DONE ".colorize(:green)
220
+ @argv << '--clean' if @clean
221
+ Spout::Commands::Graphs.new(@argv, @version, true, @url, @slug, @token, @webserver_name, @subjects)
222
+ puts "\r Graph Generation: " + 'DONE '.colorize(:green)
229
223
  end
230
224
 
231
225
  def dataset_uploads
232
- available_folders = (Dir.exist?('csvs') ? Dir.entries('csvs').select{|e| File.directory? File.join('csvs', e) }.reject{|e| [".",".."].include?(e)}.sort : [])
226
+ available_folders = (Dir.exist?('csvs') ? Dir.entries('csvs').select { |e| File.directory? File.join('csvs', e) }.reject { |e| ['.', '..'].include?(e) }.sort : [])
233
227
  semantic = Spout::Helpers::Semantic.new(@version, available_folders)
234
228
  csv_directory = semantic.selected_folder
235
229
 
@@ -238,17 +232,18 @@ module Spout
238
232
  return
239
233
  end
240
234
 
241
- csv_files = Dir.glob("csvs/#{csv_directory}/*.csv")
235
+ csv_files = Dir.glob("csvs/#{csv_directory}/**/*.csv")
242
236
 
243
237
  csv_files.each_with_index do |csv_file, index|
244
238
  print "\r Dataset Uploads: " + "#{index + 1} of #{csv_files.count}".colorize(:green)
245
- response = Spout::Helpers::SendFile.post("#{@url}/datasets/#{@slug}/upload_dataset_csv.json", csv_file, @version, @token)
239
+ folder = csv_file.gsub(/^csvs/, '').gsub(/#{File.basename(csv_file)}$/, '')
240
+ response = Spout::Helpers::SendFile.post("#{@url}/api/v1/dictionary/upload_dataset_csv.json", csv_file, @version, @token, @slug, folder)
246
241
  end
247
242
  puts "\r Dataset Uploads: " + "DONE ".colorize(:green)
248
243
  end
249
244
 
250
245
  def data_dictionary_uploads
251
- print " Dictionary Uploads:"
246
+ print ' Dictionary Uploads:'
252
247
 
253
248
  require 'spout/commands/exporter'
254
249
  Spout::Commands::Exporter.new(@version, ['--quiet'])
@@ -256,32 +251,42 @@ module Spout
256
251
  csv_files = Dir.glob("dd/#{@version}/*.csv")
257
252
  csv_files.each_with_index do |csv_file, index|
258
253
  print "\r Dictionary Uploads: " + "#{index + 1} of #{csv_files.count}".colorize(:green)
259
- response = Spout::Helpers::SendFile.post("#{@url}/datasets/#{@slug}/upload_dataset_csv.json", csv_file, @version, @token)
254
+ response = Spout::Helpers::SendFile.post("#{@url}/api/v1/dictionary/upload_dataset_csv.json", csv_file, @version, @token, @slug, nil)
255
+ end
256
+ puts "\r Dictionary Uploads: " + 'DONE '.colorize(:green)
257
+ end
258
+
259
+ def markdown_uploads
260
+ print 'Documentation Uploads:'
261
+ markdown_files = Dir.glob(%w(CHANGELOG.md KNOWNISSUES.md))
262
+ markdown_files.each_with_index do |markdown_file, index|
263
+ print "\rDocumentation Uploads: " + "#{index + 1} of #{markdown_files.count}".colorize(:green)
264
+ Spout::Helpers::SendFile.post("#{@url}/api/v1/dictionary/upload_dataset_csv.json", markdown_file, @version, @token, @slug, nil)
260
265
  end
261
- puts "\r Dictionary Uploads: " + "DONE ".colorize(:green)
266
+ puts "\rDocumentation Uploads: " + 'DONE '.colorize(:green)
262
267
  end
263
268
 
264
269
  def trigger_server_updates
265
- print "Launch Server Scripts: "
270
+ print 'Launch Server Scripts: '
266
271
  response = Spout::Helpers::JsonRequest.get("#{@url}/datasets/#{@slug}/a/#{@token}/refresh_dictionary.json?version=#{@version}")
267
- if response.kind_of?(Hash) and response['refresh'] == 'success'
268
- puts "DONE".colorize(:green)
269
- elsif response.kind_of?(Hash) and response['refresh'] == 'notagfound'
270
- puts "FAIL".colorize(:red)
271
- puts "#{INDENT}Tag not found in repository, resolve using: " + "git push --tags".colorize(:white)
272
+ if response.is_a?(Hash) && response['refresh'] == 'success'
273
+ puts 'DONE'.colorize(:green)
274
+ elsif response.is_a?(Hash) && response['refresh'] == 'notagfound'
275
+ puts 'FAIL'.colorize(:red)
276
+ puts "#{INDENT}Tag not found in repository, resolve using: " + 'git push --tags'.colorize(:white)
272
277
  raise DeployError
273
- elsif response.kind_of?(Hash) and response['refresh'] == 'gitrepodoesnotexist'
274
- puts "FAIL".colorize(:red)
278
+ elsif response.is_a?(Hash) && response['refresh'] == 'gitrepodoesnotexist'
279
+ puts 'FAIL'.colorize(:red)
275
280
  puts "#{INDENT}Dataset data dictionary git repository has not been cloned on the server. Contact server admin.".colorize(:white)
276
281
  raise DeployError
277
282
  else
278
- puts "FAIL".colorize(:red)
283
+ puts 'FAIL'.colorize(:red)
279
284
  raise DeployError
280
285
  end
281
286
  end
282
287
 
283
288
  def failure(message)
284
- puts "FAIL".colorize(:red)
289
+ puts 'FAIL'.colorize(:red)
285
290
  puts message
286
291
  raise DeployError
287
292
  end
@@ -22,7 +22,7 @@ module Spout
22
22
  puts " create".colorize( :green ) + " #{folder}" unless @quiet
23
23
  FileUtils.mkpath folder
24
24
 
25
- generic_export(folder, 'variables', %w(id display_name description type units domain labels calculation))
25
+ generic_export(folder, 'variables', %w(id display_name description type units domain labels calculation commonly_used))
26
26
  generic_export(folder, 'domains', %w(value display_name description), true)
27
27
  generic_export(folder, 'forms', %w(id display_name code_book))
28
28
  end
@@ -45,7 +45,7 @@ module Spout
45
45
  csv << [relative_folder, domain_name] + keys.collect{|key| hash[key]}
46
46
  end
47
47
  else
48
- csv << [relative_folder] + keys.collect{|key| json[key].kind_of?(Array) ? json[key].join(';') : json[key].to_s}
48
+ csv << [relative_folder] + keys.collect{|key| json[key].is_a?(Array) ? json[key].join(';') : json[key].to_s}
49
49
  end
50
50
  end
51
51
  end
@@ -67,7 +67,6 @@ module Spout
67
67
  def extract_domain_name(file)
68
68
  file.gsub(/domains\//, '').split('/').last.to_s.gsub(/.json/, '')
69
69
  end
70
-
71
70
  end
72
71
  end
73
72
  end