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
@@ -4,11 +4,9 @@ require 'spout/models/tables/choices_vs_choices'
4
4
  require 'spout/models/tables/numeric_vs_numeric'
5
5
  require 'spout/models/tables/choices_vs_numeric'
6
6
 
7
-
8
7
  module Spout
9
8
  module Models
10
9
  module Tables
11
-
12
10
  DEFAULT_CLASS = Spout::Models::Tables::Default
13
11
  GRAPHABLE_CLASSES = {
14
12
  'numeric_vs_choices' => Spout::Models::Tables::NumericVsChoices,
@@ -17,9 +15,9 @@ module Spout
17
15
  'choices_vs_numeric' => Spout::Models::Tables::ChoicesVsNumeric
18
16
  }
19
17
 
20
- def self.for(variable, chart_variable, subjects, subtitle)
18
+ def self.for(variable, chart_variable, subjects, subtitle, totals: true)
21
19
  table_type = get_table_type(variable, chart_variable)
22
- (GRAPHABLE_CLASSES[table_type] || DEFAULT_CLASS).new(variable, chart_variable, subjects, subtitle)
20
+ (GRAPHABLE_CLASSES[table_type] || DEFAULT_CLASS).new(variable, chart_variable, subjects, subtitle, totals)
23
21
  end
24
22
 
25
23
  def self.get_table_type(variable, chart_variable)
@@ -29,13 +27,13 @@ module Spout
29
27
  # Identical to graphables, TODO: Refactor
30
28
  def self.variable_to_table_type(variable)
31
29
  variable_type = (variable ? variable.type : nil)
32
- case variable_type when 'numeric', 'integer'
30
+ case variable_type
31
+ when 'numeric', 'integer'
33
32
  'numeric'
34
33
  else
35
34
  variable_type
36
35
  end
37
36
  end
38
-
39
37
  end
40
38
  end
41
39
  end
@@ -13,29 +13,28 @@ module Spout
13
13
  attr_accessor :id, :folder, :display_name, :description, :type, :units, :labels, :commonly_used, :calculation
14
14
  attr_accessor :domain_name, :form_names
15
15
  attr_accessor :domain, :forms
16
+ attr_accessor :n, :mean, :stddev, :median, :min, :max, :unknown, :total
16
17
  attr_reader :errors
17
18
 
18
19
  def initialize(file_name, dictionary_root)
19
20
  @errors = []
20
- @id = file_name.to_s.gsub(/^(.*)\/|\.json$/, '').downcase
21
- @folder = file_name.to_s.gsub(/^#{dictionary_root}\/variables\/|#{@id}\.json$/, '')
21
+ @id = file_name.to_s.gsub(%r{^(.*)/|\.json$}, '').downcase
22
+ @folder = file_name.to_s.gsub(%r{^#{dictionary_root}/variables/|#{@id}\.json$}, '')
22
23
  @form_names = []
23
24
 
24
25
  json = begin
25
- JSON.parse(File.read(file_name))
26
- rescue => e
27
- error = e.message
28
- nil
29
- end
30
-
31
- if json and json.kind_of? Hash
26
+ JSON.parse(File.read(file_name))
27
+ rescue => e
28
+ error = e.message
29
+ nil
30
+ end
32
31
 
33
- %w( display_name description type units commonly_used calculation ).each do |method|
32
+ if json.is_a? Hash
33
+ %w(display_name description type units commonly_used calculation).each do |method|
34
34
  instance_variable_set("@#{method}", json[method])
35
35
  end
36
-
36
+ @commonly_used = false if @commonly_used.nil?
37
37
  @errors << "'id': #{json['id'].inspect} does not match filename #{@id.inspect}" if @id != json['id']
38
-
39
38
  @domain_name = json['domain'] # Spout::Models::Domain.new(json['domain'], dictionary_root)
40
39
  @labels = (json['labels'] || [])
41
40
  @form_names = (json['forms'] || []).collect do |form_name|
@@ -48,13 +47,52 @@ module Spout
48
47
  @errors = (@errors + [error]).compact
49
48
 
50
49
  @domain = Spout::Models::Domain.find_by_id(@domain_name)
51
- @forms = @form_names.collect{|form_name| Spout::Models::Form.find_by_id(form_name)}.compact
50
+ @forms = @form_names.collect { |form_name| Spout::Models::Form.find_by_id(form_name) }.compact
52
51
  end
53
52
 
54
53
  def path
55
54
  File.join(@folder, "#{@id}.json")
56
55
  end
57
56
 
57
+ def known_issues
58
+ line_found = false
59
+ lines = []
60
+ known_issues_file = 'KNOWNISSUES.md'
61
+ if File.exist?(known_issues_file) && File.file?(known_issues_file)
62
+ IO.foreach(known_issues_file) do |line|
63
+ if line_found && Variable.starts_with?(line, ' - ')
64
+ lines << line
65
+ elsif Variable.partial_match?(line, "\\[#{id}\\]")
66
+ line_found = true
67
+ lines << line
68
+ else
69
+ line_found = false
70
+ end
71
+ end
72
+ end
73
+ lines.join("\n")
74
+ end
75
+
76
+ def self.starts_with?(string, term)
77
+ !(/^#{term.to_s.downcase}/ =~ string.to_s.downcase).nil?
78
+ end
79
+
80
+ def self.partial_match?(string, term)
81
+ !(/#{term.to_s.downcase}/ =~ string.to_s.downcase).nil?
82
+ end
83
+
84
+ def deploy_params
85
+ { name: id, display_name: display_name, variable_type: type,
86
+ folder: folder.to_s.gsub(%r{/$}, ''), description: description,
87
+ units: units, calculation: calculation, commonly_used: commonly_used,
88
+ labels: labels,
89
+ stats_n: n, stats_mean: mean, stats_stddev: stddev,
90
+ stats_median: median, stats_min: min, stats_max: max,
91
+ stats_unknown: unknown, stats_total: total,
92
+ known_issues: known_issues,
93
+ spout_version: Spout::VERSION::STRING
94
+ }
95
+ end
58
96
  end
59
97
  end
60
98
  end
@@ -2,7 +2,7 @@ require 'rake/testtask'
2
2
  require 'colorize'
3
3
 
4
4
  Rake::TestTask.new do |t|
5
- t.libs << "test"
5
+ t.libs << 'test'
6
6
  t.test_files = FileList['test/**/*_test.rb']
7
7
  t.warning = true
8
8
  t.verbose = true
@@ -1 +1 @@
1
- ruby-2.1.5
1
+ ruby-2.3.0
@@ -1,3 +1,3 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.5
3
+ - 2.3.0
@@ -5,8 +5,8 @@ module Spout
5
5
  def assert_domain_format(item)
6
6
  result = begin
7
7
  json = JSON.parse(File.read(item))
8
- if json.kind_of?(Array)
9
- json.empty? or json.select{|o| not o.kind_of?(Hash)}.size == 0
8
+ if json.is_a?(Array)
9
+ json.empty? or json.select{|o| not o.is_a?(Hash)}.size == 0
10
10
  else
11
11
  false
12
12
  end
@@ -0,0 +1,15 @@
1
+ module Spout
2
+ module Tests
3
+ # Tests to assure that the domain name starts with a lowercase letter
4
+ # followed by lowercase letters, numbers, or underscores
5
+ module DomainNameFormat
6
+ Dir.glob('domains/**/*.json').each do |file|
7
+ define_method("test_domain_name_format: #{file}") do
8
+ message = 'Domain name format error. Name must start with a lowercase letter and be followed by lowercase letters, numbers, or underscores'
9
+ name = File.basename(file).gsub(/\.json$/, '') rescue name = nil
10
+ assert_match(/^[a-z]\w*$/, name, message)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Spout
2
+ module Tests
3
+ # Tests to assure that the domain name starts with a lowercase letter
4
+ # followed by lowercase letters, numbers, or underscores
5
+ module FormNameFormat
6
+ Dir.glob('forms/**/*.json').each do |file|
7
+ define_method("test_form_name_format: #{file}") do
8
+ message = 'Form name format error. Name must start with a lowercase letter and be followed by lowercase letters, numbers, or underscores'
9
+ assert_match(/^[a-z]\w*$/, (begin JSON.parse(File.read(file))['id'] rescue nil end), message)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Spout
2
+ module Tests
3
+ # Tests to assure that the variable name starts with a lowercase letter
4
+ # followed by lowercase letters, numbers, or underscores
5
+ module VariableNameFormat
6
+ Dir.glob('variables/**/*.json').each do |file|
7
+ define_method("test_variable_name_format: #{file}") do
8
+ message = 'Variable name format error. Name must start with a lowercase letter and be followed by lowercase letters, numbers, or underscores'
9
+ assert_match(/^[a-z]\w*$/, (begin JSON.parse(File.read(file))['id'] rescue nil end), message)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
data/lib/spout/tests.rb CHANGED
@@ -37,11 +37,11 @@ module Minitest
37
37
  def record(test)
38
38
  super
39
39
  if !test.skipped? && test.failure
40
- print " "
40
+ print ' '
41
41
  print_colored_status(test)
42
42
  print " #{test.name}"
43
43
  puts
44
- print " "
44
+ print ' '
45
45
  print test.failure.to_s.gsub("\n", "\n ")
46
46
  puts
47
47
  puts
@@ -63,36 +63,41 @@ end
63
63
 
64
64
  Minitest::Reporters.use! Minitest::Reporters::SpoutReporter.new
65
65
 
66
-
67
66
  require 'spout/tests/json_validation'
68
- require 'spout/tests/variable_type_validation'
69
- require 'spout/tests/variable_name_uniqueness'
70
- require 'spout/tests/variable_name_match'
71
- require 'spout/tests/variable_display_name_length'
72
67
  require 'spout/tests/domain_existence_validation'
73
68
  require 'spout/tests/domain_format'
69
+ require 'spout/tests/domain_name_format'
74
70
  require 'spout/tests/domain_name_uniqueness'
75
71
  require 'spout/tests/domain_specified'
76
72
  require 'spout/tests/form_existence_validation'
77
- require 'spout/tests/form_name_uniqueness'
73
+ require 'spout/tests/form_name_format'
78
74
  require 'spout/tests/form_name_match'
75
+ require 'spout/tests/form_name_uniqueness'
76
+ require 'spout/tests/variable_display_name_length'
77
+ require 'spout/tests/variable_name_format'
78
+ require 'spout/tests/variable_name_match'
79
+ require 'spout/tests/variable_name_uniqueness'
80
+ require 'spout/tests/variable_type_validation'
79
81
 
80
82
  require 'spout/helpers/iterators'
81
83
 
82
84
  module Spout
83
85
  module Tests
84
86
  include Spout::Tests::JsonValidation
85
- include Spout::Tests::VariableTypeValidation
86
- include Spout::Tests::VariableNameUniqueness
87
- include Spout::Tests::VariableNameMatch
88
- include Spout::Tests::VariableDisplayNameLength
89
87
  include Spout::Tests::DomainExistenceValidation
90
88
  include Spout::Tests::DomainFormat
89
+ include Spout::Tests::DomainNameFormat
91
90
  include Spout::Tests::DomainNameUniqueness
92
91
  include Spout::Tests::DomainSpecified
93
92
  include Spout::Tests::FormExistenceValidation
94
- include Spout::Tests::FormNameUniqueness
93
+ include Spout::Tests::FormNameFormat
95
94
  include Spout::Tests::FormNameMatch
95
+ include Spout::Tests::FormNameUniqueness
96
+ include Spout::Tests::VariableDisplayNameLength
97
+ include Spout::Tests::VariableNameFormat
98
+ include Spout::Tests::VariableNameMatch
99
+ include Spout::Tests::VariableNameUniqueness
100
+ include Spout::Tests::VariableTypeValidation
96
101
  end
97
102
  end
98
103
 
data/lib/spout/version.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  module Spout
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 10
5
- TINY = 2
6
- BUILD = nil # nil, "pre", "rc", "rc2"
4
+ MINOR = 11
5
+ TINY = 0
6
+ BUILD = 'beta1' # 'pre', 'rc', 'rc2', nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
9
9
  end
@@ -262,7 +262,7 @@ tfoot td {
262
262
  <% end %>
263
263
  </td>
264
264
  <td>
265
- <% if scr.json['type'] == 'choices' and scr.file_name_test %>
265
+ <% if scr.json['type'] == 'choices' && scr.file_name_test %>
266
266
  <% if scr.domain_test or scr.json['domain'].to_s.strip == '' %>
267
267
  <code class="<%= 'success' if scr.domain_test %>">"domain": <%= scr.json['domain'].inspect %></code>
268
268
  <% else %>
@@ -273,7 +273,7 @@ tfoot td {
273
273
  <td style="white-space:nowrap">
274
274
  <% if scr.json['type'] == 'choices' %>
275
275
  <% unused_values = scr.valid_values - scr.csv_values %>
276
- <% if scr.values_test and unused_values.size == 0 %>
276
+ <% if scr.values_test && unused_values.size == 0 %>
277
277
  <div class="text-success" style="text-align:center"><span class="glyphicon glyphicon-ok"></span></div>
278
278
  <% else %>
279
279
  <% (scr.valid_values + scr.csv_values.compact.sort).uniq.each do |value| %>
@@ -149,7 +149,7 @@ tfoot td {
149
149
  <td><%= outlier_result.method %></td>
150
150
  <td><%= outlier_result.display_name.to_s[0..20] %></td>
151
151
  <td>
152
- <% if outlier_result.median.kind_of?(Numeric) %>
152
+ <% if outlier_result.median.is_a?(Numeric) %>
153
153
  <code class="default"><%= number_with_delimiter(outlier_result.median.round(2)) %></code>
154
154
  <% end %>
155
155
  <%= outlier_result.units %>
data/lib/spout.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "spout/version"
1
+ require 'spout/version'
2
2
 
3
3
  require 'spout/models/dictionary'
4
4
 
@@ -9,7 +9,6 @@ Spout::COMMANDS = {
9
9
  'i' => :importer,
10
10
  'e' => :exporter,
11
11
  'c' => :coverage_report,
12
- 'p' => :generate_images,
13
12
  'g' => :generate_charts_and_tables,
14
13
  'o' => :outliers_report,
15
14
  'd' => :deploy
@@ -17,7 +16,7 @@ Spout::COMMANDS = {
17
16
 
18
17
  module Spout
19
18
  def self.launch(argv)
20
- self.send((Spout::COMMANDS[argv.first.to_s.scan(/\w/).first] || :help), argv)
19
+ send((Spout::COMMANDS[argv.first.to_s.scan(/\w/).first] || :help), argv)
21
20
  end
22
21
 
23
22
  def self.new_project(argv)
@@ -28,6 +27,8 @@ module Spout
28
27
  def self.coverage_report(argv)
29
28
  require 'spout/commands/coverage'
30
29
  Spout::Commands::Coverage.new(standard_version, argv)
30
+ rescue NoMemoryError
31
+ puts "[NoMemoryError] You made Spout cry... Spout doesn't run on potatoes :'-("
31
32
  end
32
33
 
33
34
  def self.exporter(argv)
@@ -38,49 +39,12 @@ module Spout
38
39
  def self.generate_charts_and_tables(argv)
39
40
  argv = argv.last(argv.size - 1)
40
41
  require 'spout/commands/graphs'
41
- variables = argv.collect{|s| s.to_s.downcase}
42
- Spout::Commands::Graphs.new(variables, standard_version)
43
- end
44
-
45
- def self.generate_images(argv)
46
- argv = argv.last(argv.size - 1)
47
- require 'spout/commands/images'
48
- types = flag_values(argv, 'type')
49
- sizes = flag_values(argv, 'size')
50
- variable_ids = non_flag_values(argv)
51
- Spout::Commands::Images.new(types, variable_ids, sizes, standard_version, argv)
42
+ Spout::Commands::Graphs.new(argv, standard_version)
52
43
  end
53
44
 
54
45
  def self.help(argv)
55
- puts <<-EOT
56
-
57
- Usage: spout COMMAND [ARGS]
58
-
59
- The most common spout commands are:
60
- [n]ew Create a new Spout dictionary.
61
- `spout new <project_name>` creates a new
62
- data dictionary in `./<project_name>`
63
- [t]est Run tests and show failing tests
64
- [i]mport Import a CSV file into the JSON dictionary
65
- [e]xport [1.0.0] Export the JSON dictionary to CSV format
66
- [c]overage Coverage report, requires dataset CSVs
67
- in `<project_name>/csvs/<version>`
68
- [o]utliers Outlier report, requires dataset CSVs
69
- in `<project_name>/csvs/<version>`
70
- [p]ngs Generates images for each variable in a
71
- dataset and places them
72
- in `<project_name>/images/<version>/`
73
- [g]raphs Generates JSON graphs for each variable
74
- in a dataset and places them
75
- in `<project_name>/graphs/<version>/`
76
- [d]eploy NAME Push dataset and data dictionary to a
77
- webserver specified in `.spout.yml`
78
- [v]ersion Returns the version of Spout
79
-
80
- Commands can be referenced by the first letter:
81
- Ex: `spout t`, for test
82
-
83
- EOT
46
+ require 'spout/commands/help'
47
+ Spout::Commands::Help.new(argv)
84
48
  end
85
49
 
86
50
  def self.deploy(argv)
@@ -98,29 +62,20 @@ EOT
98
62
  Spout::Commands::Outliers.new(standard_version, argv)
99
63
  end
100
64
 
101
- def self.test(argv)
102
- system "bundle exec rake"
65
+ def self.test(_argv)
66
+ system 'bundle exec rake'
103
67
  # require 'spout/commands/test_runner'
104
68
  # Spout::Commands::TestRunner.new(argv)
105
69
  end
106
70
 
107
- def self.version(argv)
71
+ def self.version(_argv)
108
72
  puts "Spout #{Spout::VERSION::STRING}"
109
73
  end
110
74
 
111
75
  def self.standard_version
112
- version = File.open('VERSION', &:readline).strip rescue ''
76
+ version = File.open('VERSION', &:readline).strip
113
77
  version == '' ? '1.0.0' : version
78
+ rescue
79
+ '1.0.0'
114
80
  end
115
-
116
- private
117
-
118
- def self.flag_values(flags, param)
119
- flags.select{|f| f =~ /^--#{param}-/}.collect{|f| f[(param.size + 3)..-1]}
120
- end
121
-
122
- def self.non_flag_values(flags)
123
- flags.reject{|f| f =~ /^--/}
124
- end
125
-
126
81
  end
data/spout.gemspec CHANGED
@@ -12,25 +12,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
12
12
  require 'spout/version'
13
13
 
14
14
  Gem::Specification.new do |spec|
15
- spec.name = "spout"
15
+ spec.name = 'spout'
16
16
  spec.version = Spout::VERSION::STRING
17
- spec.authors = ["Remo Mueller"]
18
- spec.email = ["remosm@gmail.com"]
19
- spec.description = %q{Manage your data dictionary as a JSON repository, and easily export back to CSV.}
20
- spec.summary = %q{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 for further validations.}
21
- spec.homepage = "https://github.com/sleepepi/spout"
22
- spec.license = "CC BY-NC-SA 3.0"
17
+ spec.authors = ['Remo Mueller']
18
+ spec.email = ['remosm@gmail.com']
19
+ spec.description = 'Manage your data dictionary as a JSON repository, and easily export back to CSV.'
20
+ spec.summary = '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 for further validations.'
21
+ spec.homepage = 'https://github.com/sleepepi/spout'
22
+ spec.license = 'CC BY-NC-SA 3.0'
23
23
 
24
24
  spec.files = Dir['{bin,lib}/**/*'] + ['CHANGELOG.md', 'LICENSE', 'Rakefile', 'README.md', 'spout.gemspec']
25
25
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
26
  spec.test_files = spec.files.grep(%r{^(test)/})
27
- spec.require_paths = ["lib"]
27
+ spec.require_paths = ['lib']
28
28
 
29
- spec.add_dependency "rake"
30
- spec.add_dependency "minitest"
31
- spec.add_dependency "minitest-reporters"
32
- spec.add_dependency "json"
33
- spec.add_dependency "colorize", "~> 0.7.5"
34
-
35
- spec.add_development_dependency "bundler", "~> 1.3"
29
+ spec.add_dependency 'bundler', '~> 1.3'
30
+ spec.add_dependency 'rake'
31
+ spec.add_dependency 'minitest'
32
+ spec.add_dependency 'minitest-reporters'
33
+ spec.add_dependency 'json'
34
+ spec.add_dependency 'colorize', '~> 0.7.5'
36
35
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 0.11.0.beta1
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-12-29 00:00:00.000000000 Z
11
+ date: 2016-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rake
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +94,6 @@ dependencies:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: 0.7.5
83
- - !ruby/object:Gem::Dependency
84
- name: bundler
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.3'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '1.3'
97
97
  description: Manage your data dictionary as a JSON repository, and easily export back
98
98
  to CSV.
99
99
  email:
@@ -113,7 +113,7 @@ files:
113
113
  - lib/spout/commands/deploy.rb
114
114
  - lib/spout/commands/exporter.rb
115
115
  - lib/spout/commands/graphs.rb
116
- - lib/spout/commands/images.rb
116
+ - lib/spout/commands/help.rb
117
117
  - lib/spout/commands/importer.rb
118
118
  - lib/spout/commands/outliers.rb
119
119
  - lib/spout/commands/project_generator.rb
@@ -123,6 +123,7 @@ files:
123
123
  - lib/spout/helpers/iterators.rb
124
124
  - lib/spout/helpers/json_loader.rb
125
125
  - lib/spout/helpers/json_request.rb
126
+ - lib/spout/helpers/json_request_generic.rb
126
127
  - lib/spout/helpers/number_helper.rb
127
128
  - lib/spout/helpers/quietly.rb
128
129
  - lib/spout/helpers/semantic.rb
@@ -133,6 +134,7 @@ files:
133
134
  - lib/spout/models/coverage_result.rb
134
135
  - lib/spout/models/dictionary.rb
135
136
  - lib/spout/models/domain.rb
137
+ - lib/spout/models/empty.rb
136
138
  - lib/spout/models/form.rb
137
139
  - lib/spout/models/graphables.rb
138
140
  - lib/spout/models/graphables/choices_vs_choices.rb
@@ -152,11 +154,6 @@ files:
152
154
  - lib/spout/models/tables/numeric_vs_choices.rb
153
155
  - lib/spout/models/tables/numeric_vs_numeric.rb
154
156
  - lib/spout/models/variable.rb
155
- - lib/spout/support/javascripts/data.js
156
- - lib/spout/support/javascripts/highcharts-convert.js
157
- - lib/spout/support/javascripts/highcharts-more.js
158
- - lib/spout/support/javascripts/highstock.js
159
- - lib/spout/support/javascripts/jquery.1.9.1.min.js
160
157
  - lib/spout/tasks.rb
161
158
  - lib/spout/tasks/engine.rake
162
159
  - lib/spout/templates/Gemfile
@@ -171,14 +168,17 @@ files:
171
168
  - lib/spout/tests.rb
172
169
  - lib/spout/tests/domain_existence_validation.rb
173
170
  - lib/spout/tests/domain_format.rb
171
+ - lib/spout/tests/domain_name_format.rb
174
172
  - lib/spout/tests/domain_name_uniqueness.rb
175
173
  - lib/spout/tests/domain_specified.rb
176
174
  - lib/spout/tests/form_existence_validation.rb
175
+ - lib/spout/tests/form_name_format.rb
177
176
  - lib/spout/tests/form_name_match.rb
178
177
  - lib/spout/tests/form_name_uniqueness.rb
179
178
  - lib/spout/tests/json_helper.rb
180
179
  - lib/spout/tests/json_validation.rb
181
180
  - lib/spout/tests/variable_display_name_length.rb
181
+ - lib/spout/tests/variable_name_format.rb
182
182
  - lib/spout/tests/variable_name_match.rb
183
183
  - lib/spout/tests/variable_name_uniqueness.rb
184
184
  - lib/spout/tests/variable_type_validation.rb
@@ -201,12 +201,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
201
201
  version: '0'
202
202
  required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  requirements:
204
- - - ">="
204
+ - - ">"
205
205
  - !ruby/object:Gem::Version
206
- version: '0'
206
+ version: 1.3.1
207
207
  requirements: []
208
208
  rubyforge_project:
209
- rubygems_version: 2.2.2
209
+ rubygems_version: 2.5.1
210
210
  signing_key:
211
211
  specification_version: 4
212
212
  summary: Turn your CSV data dictionary into a JSON repository. Collaborate with others