spout 0.13.0.beta1 → 0.13.0.beta2

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
- SHA1:
3
- metadata.gz: 415a16b52a348d3d3c7361b6ea226e7d7aa10edc
4
- data.tar.gz: '08bbf0c3477b4689a0cc4dbacc52750ec53a7eb2'
2
+ SHA256:
3
+ metadata.gz: 3dd7789cc6b44bff70a193ce395bbf6a4c9433c89d6b37e021339a7146e13bf2
4
+ data.tar.gz: f80de69bb6dee9708bcb93d62ea3a79bbb419f5743c2b47d850cec5aa6d99da6
5
5
  SHA512:
6
- metadata.gz: 97b50714ade02df37afd4fac776bbd5d4515db7e628b5acee6639d1f711c025cf6ed6c5e6bd2b9f0c0826061487adc85c44d44683520556bd3d12e43ac2a7d6f
7
- data.tar.gz: 26a33f2ffdeb525e047a10efc87324d8a935a5bb47f60780ffff55237f56f39dbc70b4530abd871fc29851a2171ff38d35ac64c7c24c6bd7c038af4b7efdec2d
6
+ metadata.gz: 8e23b63fc17ec344fe40eff73fdb22e743059301a33d16f64a46ca834efa8d4ce5d6dc17dbcf2f0c39ad67df47a56dc2c83565660242b05023594b93d16feb65
7
+ data.tar.gz: f65680444341dedcdb8390277d9f615f1ed0b69a9741a8face225053f90c72026ab204e44288fb68e141a5cc2791f9e22dc7a50e69f64e99b81ce70810b57bb6
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  ## 0.13.0
2
2
 
3
3
  ### Enhancements
4
+ - **General Changes**
5
+ - Updated to ruby 2.5.1
6
+ - Updated to simplecov 0.16.1
7
+ - Improved memory management reading large CSVs
4
8
  - **Importer Changes**
5
9
  - Added option to preserve case of input using the `--preserve-case` flag
6
10
  - `spout import <variables.csv> --preserve-case`
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2017 Remo Mueller
1
+ Copyright (c) 2013-2018 Remo Mueller
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Spout
2
2
 
3
3
  [![Build Status](https://travis-ci.org/sleepepi/spout.svg?branch=master)](https://travis-ci.org/sleepepi/spout)
4
- [![Dependency Status](https://gemnasium.com/sleepepi/spout.svg)](https://gemnasium.com/sleepepi/spout)
5
4
  [![Code Climate](https://codeclimate.com/github/sleepepi/spout/badges/gpa.svg)](https://codeclimate.com/github/sleepepi/spout)
6
5
 
7
6
  Turn your CSV data dictionary into a JSON repository. Collaborate with others to
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "csv"
4
3
  require "json"
5
4
  require "fileutils"
6
5
  require "colorize"
7
6
 
7
+ require "spout/helpers/csv_reader"
8
+
8
9
  module Spout
9
10
  module Commands
10
11
  class Importer
@@ -38,8 +39,7 @@ EOT
38
39
  end
39
40
 
40
41
  def import_variables
41
- CSV.parse(File.open(@csv_file, "r:iso-8859-1:utf-8", &:read), headers: true) do |line|
42
- row = line.to_hash
42
+ Spout::Helpers::CSVReader.read_csv(@csv_file) do |row|
43
43
  if not row.keys.include?("id")
44
44
  puts "\nMissing column header `".colorize( :red ) + "id".colorize( :light_cyan ) + "` in data dictionary.".colorize( :red ) + additional_csv_info
45
45
  exit(1)
@@ -77,8 +77,7 @@ EOT
77
77
  def import_domains
78
78
  domains = {}
79
79
 
80
- CSV.parse(File.open(@csv_file, "r:iso-8859-1:utf-8", &:read), headers: true) do |line|
81
- row = line.to_hash
80
+ Spout::Helpers::CSVReader.read_csv(@csv_file) do |row|
82
81
  if not row.keys.include?("domain_id")
83
82
  puts "\nMissing column header `".colorize( :red ) + "domain_id".colorize( :light_cyan ) + "` in data dictionary.".colorize( :red ) + additional_csv_info
84
83
  exit(1)
@@ -122,8 +121,7 @@ EOT
122
121
  end
123
122
 
124
123
  def import_forms
125
- CSV.parse(File.open(@csv_file, "r:iso-8859-1:utf-8", &:read), headers: true) do |line|
126
- row = line.to_hash
124
+ Spout::Helpers::CSVReader.read_csv(@csv_file) do |row|
127
125
  unless row.keys.include?("id")
128
126
  puts "\nMissing column header `".colorize(:red) +
129
127
  "id".colorize(:light_cyan) +
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "csv"
4
+
5
+ module Spout
6
+ module Helpers
7
+ # Reads CSVs and handles conversion of characters into UTF-8 format.
8
+ class CSVReader
9
+ def self.read_csv(csv_file)
10
+ File.open(csv_file, "r:iso-8859-1:utf-8") do |file|
11
+ csv = CSV.new(file, headers: true, header_converters: ->(h) { h.to_s.downcase })
12
+ while line = csv.shift # rubocop:disable Lint/AssignmentInCondition
13
+ yield line.to_hash
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -2,10 +2,13 @@
2
2
 
3
3
  module Spout
4
4
  module Helpers
5
+ # Provides method to format large numbers with delimiters.
5
6
  module NumberHelper
6
7
  def number_with_delimiter(number, delimiter = ",")
7
- number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(",").reverse
8
+ number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(delimiter).reverse
8
9
  end
10
+
11
+ module_function :number_with_delimiter
9
12
  end
10
13
  end
11
14
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "colorize"
4
- require "csv"
5
4
  require "json"
6
5
 
7
- require "spout/models/subject"
6
+ require "spout/helpers/csv_reader"
8
7
  require "spout/helpers/semantic"
8
+ require "spout/models/subject"
9
9
  require "spout/models/empty"
10
10
 
11
11
  module Spout
@@ -59,8 +59,8 @@ module Spout
59
59
  puts " #{current_folder}".colorize(:white) if current_folder.to_s != "" && current_folder != last_folder
60
60
  print " #{current_file}"
61
61
  last_folder = current_folder
62
- CSV.parse(File.open(csv_file, "r:iso-8859-1:utf-8", &:read), headers: true, header_converters: lambda { |h| h.to_s.downcase }) do |line|
63
- row = line.to_hash
62
+
63
+ Spout::Helpers::CSVReader.read_csv(csv_file) do |row|
64
64
  count += 1
65
65
  print "\r #{current_file} " + "##{count}".colorize(:yellow) if (count % 10 == 0)
66
66
  @subjects << Spout::Models::Subject.create do |t|
@@ -87,7 +87,6 @@ module Spout
87
87
  end
88
88
  end
89
89
  end
90
-
91
90
  # puts "Memory Used: " + (`ps -o rss -p #{$$}`.strip.split.last.to_i / 1024).to_s + " MB" if count % 1000 == 0
92
91
  break if !@number_of_rows.nil? && count - 1 >= @number_of_rows
93
92
  end
@@ -1,20 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "spout/helpers/number_helper"
4
+
3
5
  module Spout
4
6
  module Helpers
7
+ # Formats numbers in coverage and outlier tables.
5
8
  class TableFormatting
6
9
  # def initialize(number)
7
10
  # @number = number
8
11
  # end
9
12
 
10
- def self.number_with_delimiter(number, delimiter = ",")
11
- number.to_s.reverse.scan(/(?:\d*\.)?\d{1,3}-?/).join(",").reverse
12
- end
13
-
14
13
  # type: :count or :decimal
15
14
  def self.format_number(number, type, format = nil)
16
15
  if number.nil?
17
- format_nil(number)
16
+ format_nil
18
17
  elsif type == :count
19
18
  format_count(number)
20
19
  else
@@ -22,7 +21,7 @@ module Spout
22
21
  end
23
22
  end
24
23
 
25
- def self.format_nil(number)
24
+ def self.format_nil
26
25
  "-"
27
26
  end
28
27
 
@@ -32,7 +31,7 @@ module Spout
32
31
  # 1000 -> "1,000"
33
32
  # Input (Numeric) -> Output (String)
34
33
  def self.format_count(number)
35
- (number == 0 || number.nil?) ? "-" : number_with_delimiter(number)
34
+ number.zero? || number.nil? ? "-" : Spout::Helpers::NumberHelper.number_with_delimiter(number)
36
35
  end
37
36
 
38
37
  # decimal:
@@ -44,9 +43,9 @@ module Spout
44
43
  # Input (Numeric) -> Output (String)
45
44
  def self.format_decimal(number, format)
46
45
  precision = 1
47
- precision = -Math.log10(number.abs).floor if number.abs < 1.0 && number != 0
46
+ precision = -Math.log10(number.abs).floor if number.abs < 1.0 && !number.zero?
48
47
 
49
- number = number_with_delimiter(number.round(precision))
48
+ number = Spout::Helpers::NumberHelper.number_with_delimiter(number.to_f.round(precision))
50
49
  number = format % number if format
51
50
  number
52
51
  end
@@ -1 +1 @@
1
- ruby-2.4.1
1
+ ruby-2.5.1
@@ -1,4 +1,4 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.4.1
4
+ - 2.5.1
data/lib/spout/version.rb CHANGED
@@ -5,7 +5,7 @@ module Spout
5
5
  MAJOR = 0
6
6
  MINOR = 13
7
7
  TINY = 0
8
- BUILD = "beta1" # "pre", "rc", "rc2", nil
8
+ BUILD = "beta2" # "pre", "rc", "rc2", nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join(".").freeze
11
11
  end
@@ -121,7 +121,7 @@ tfoot td {
121
121
  <td><%= csv %></td>
122
122
  <td>
123
123
  <% if total_column_count.to_i > 0 %>
124
- <%= "%0.02f %" % (mapped_column_count * 100.0 / total_column_count) %>
124
+ <%= "%0.02f %%" % (mapped_column_count * 100.0 / total_column_count) %>
125
125
  <% else %>
126
126
  <span class="text-muted">---</span>
127
127
  <% end %>
data/spout.gemspec CHANGED
@@ -8,7 +8,7 @@
8
8
  # gem list -r spout
9
9
  # gem install spout
10
10
 
11
- lib = File.expand_path("../lib", __FILE__)
11
+ lib = File.expand_path("lib", __dir__)
12
12
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
13
13
  require "spout/version"
14
14
 
@@ -25,6 +25,10 @@ Gem::Specification.new do |spec|
25
25
  "dictionary using built-in tests, or add your own for "\
26
26
  "further validations."
27
27
  spec.homepage = "https://github.com/sleepepi/spout"
28
+
29
+ spec.required_ruby_version = ">= 2.5.1"
30
+ spec.required_rubygems_version = ">= 2.7.6"
31
+
28
32
  spec.license = "MIT"
29
33
 
30
34
  spec.files = Dir["{bin,lib}/**/*"] + ["CHANGELOG.md", "LICENSE", "Rakefile", "README.md", "spout.gemspec"]
@@ -32,7 +36,7 @@ Gem::Specification.new do |spec|
32
36
  spec.test_files = spec.files.grep(%r{^(test)/})
33
37
  spec.require_paths = ["lib"]
34
38
 
35
- spec.add_dependency "bundler", "~> 1.13"
39
+ spec.add_dependency "bundler", "~> 1.16"
36
40
  spec.add_dependency "rake"
37
41
  spec.add_dependency "minitest"
38
42
  spec.add_dependency "minitest-reporters"
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.13.0.beta1
4
+ version: 0.13.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Remo Mueller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-14 00:00:00.000000000 Z
11
+ date: 2018-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: '1.16'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: '1.16'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -121,6 +121,7 @@ files:
121
121
  - lib/spout/helpers/array_statistics.rb
122
122
  - lib/spout/helpers/chart_types.rb
123
123
  - lib/spout/helpers/config_reader.rb
124
+ - lib/spout/helpers/csv_reader.rb
124
125
  - lib/spout/helpers/framework.rb
125
126
  - lib/spout/helpers/iterators.rb
126
127
  - lib/spout/helpers/json_loader.rb
@@ -202,15 +203,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
203
  requirements:
203
204
  - - ">="
204
205
  - !ruby/object:Gem::Version
205
- version: '0'
206
+ version: 2.5.1
206
207
  required_rubygems_version: !ruby/object:Gem::Requirement
207
208
  requirements:
208
- - - ">"
209
+ - - ">="
209
210
  - !ruby/object:Gem::Version
210
- version: 1.3.1
211
+ version: 2.7.6
211
212
  requirements: []
212
213
  rubyforge_project:
213
- rubygems_version: 2.6.12
214
+ rubygems_version: 2.7.6
214
215
  signing_key:
215
216
  specification_version: 4
216
217
  summary: Turn your CSV data dictionary into a JSON repository. Collaborate with others