spout 0.13.0.beta1 → 0.13.0.beta2

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
- 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