see_as_vee 0.2.5 → 0.4.0

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
2
  SHA1:
3
- metadata.gz: 1029e8e97bc4e8812d7c19928722db03825a1122
4
- data.tar.gz: 32200f35545b5a8f2ed9c64cc46c81dd0bc4c395
3
+ metadata.gz: 1bda0e7c5604b2852ef6a5240f4d501a60d76355
4
+ data.tar.gz: f6a397f42b59089a4ba5c489da697350f8e138f4
5
5
  SHA512:
6
- metadata.gz: 3cb227e8a1ca4d1eadff73ffbe8ef4fcd9c70575df8cc323926948c0019a206a2a4ed04d86dcdb477569596b2cba37d08ae12e58b7c2de2d45018f6c1489f73f
7
- data.tar.gz: 578d65fcc74d7ae0db7cfff090301fd52bf87940ae5fe747396b384941c4237730679ba04ca4ed3c8f74188abdbd91500ae9223ef83c381418f86abcdd6502b2
6
+ metadata.gz: 8d43111bb60b34ff21005eea31cafea0a7633aae858e2489a9f41ec6346e11e1743992619d5c7ba36f357b6d59c32a309926a2155843b8ddb0a4c00a1484166d
7
+ data.tar.gz: 21b09d7abb0a3a408c26bf2c01bbb298362192e9ce6bf1d018c3380a94378077d3f1c0c9e26c0b19457e35d4575c77b2e007d0f7f7d5f4e9d5fa68e813ede564
data/.rubocop.yml CHANGED
@@ -15,6 +15,24 @@ Style/AsciiComments:
15
15
  - 'spec/**/*'
16
16
  - 'lib/**/*'
17
17
 
18
+ Metrics/ClassLength:
19
+ Max: 200
20
+
21
+ Metrics/CyclomaticComplexity:
22
+ Max: 21
23
+
24
+ Metrics/LineLength:
25
+ Max: 180
26
+
27
+ Metrics/MethodLength:
28
+ Max: 42
29
+
30
+ Metrics/PerceivedComplexity:
31
+ Max: 21
32
+
33
+ Metrics/AbcSize:
34
+ Max: 42
35
+
18
36
  Style/MethodDefParentheses:
19
37
  EnforcedStyle: require_no_parentheses
20
38
 
data/README.md CHANGED
@@ -7,14 +7,10 @@
7
7
 
8
8
  Easy dealing with CSV import, including, but not limited to:
9
9
 
10
- ✓ import in any format: `String`, `csv`, `xlsx`;
11
-
12
- ✓ additional input formatting;
13
-
14
- ✓ input checkers;
15
-
16
- ✓ callbacks on errors;
17
-
10
+ ✓ import in any format: `String`, `csv`, `xlsx`;
11
+ ✓ additional input formatting;
12
+ ✓ input checkers;
13
+ ✓ callbacks on errors;
18
14
  ✓ producing of “suggested edits” version of input (both `csv` and `xlsx` formats).
19
15
 
20
16
  ## Installation
data/lib/see_as_vee.rb CHANGED
@@ -2,6 +2,7 @@ begin
2
2
  require 'filemagic'
3
3
  rescue LoadError => e
4
4
  # OK, we do not have filemagick, no worries
5
+ puts "We were unable to find “filemagick,” will use simple file guessing [#{e.message}]."
5
6
  end
6
7
 
7
8
  require 'axlsx'
@@ -26,6 +27,11 @@ module SeeAsVee
26
27
  end
27
28
  module_function :harvest
28
29
 
30
+ def validate whatever, schema
31
+ SeeAsVee::Sheet.new(whatever).map(&schema)
32
+ end
33
+ module_function :validate
34
+
29
35
  def csv *args, **params
30
36
  SeeAsVee::Producers::Hashes.csv(*args, **params)
31
37
  end
@@ -2,15 +2,18 @@ require_relative 'helpers'
2
2
 
3
3
  module SeeAsVee
4
4
  class Sheet
5
- CELL_ERROR_MARKER = ''.freeze
5
+ CELL_ERROR_MARKER = ''.freeze
6
6
  CELL_ERROR_STYLE = {
7
7
  bg_color: "FF880000",
8
8
  fg_color: "FFFFFFFF",
9
9
  sz: 14,
10
10
  border: { style: :thin, color: "FFFF0000" }
11
11
  }.freeze
12
+ WORK_SHEET_NAME = 'Processing errors shown in red'.freeze
13
+ LEAVE_ERROR_MARKER = true
12
14
 
13
15
  attr_reader :rows, :formatters, :checkers
16
+
14
17
  def initialize whatever, formatters: {}, checkers: {}
15
18
  @formatters = formatters.map { |k, v| [str_to_sym(k), v] }.to_h
16
19
  @checkers = checkers.map { |k, v| [str_to_sym(k), v] }.to_h
@@ -43,6 +46,14 @@ module SeeAsVee
43
46
  end
44
47
  end
45
48
 
49
+ def map
50
+ return enum_for unless block_given?
51
+
52
+ values.map do |row|
53
+ yield headers(true).zip(row).to_h
54
+ end
55
+ end
56
+
46
57
  def produce csv: true, xlsx: nil, **params
47
58
  [csv && produce_csv(**params), xlsx && produce_xlsx(**params)]
48
59
  end
@@ -50,7 +61,7 @@ module SeeAsVee
50
61
  private
51
62
 
52
63
  def malformed? str
53
- str.to_s =~ /\A#{CELL_ERROR_MARKER}/
64
+ str.to_s.start_with? CELL_ERROR_MARKER
54
65
  end
55
66
 
56
67
  def produce_csv **params
@@ -61,12 +72,17 @@ module SeeAsVee
61
72
  end
62
73
  end
63
74
 
64
- def produce_xlsx **_params
75
+ def produce_xlsx **params
76
+ params, axlsx_params = split_params(params)
65
77
  Tempfile.new(['see_as_vee', '.xlsx']).tap do |f|
66
78
  Axlsx::Package.new do |p|
67
- red = p.workbook.styles.add_style(**CELL_ERROR_STYLE.dup)
68
- p.workbook.add_worksheet(name: 'Processing errors shown in red') do |sheet|
69
- @rows.each { |row| sheet.add_row row, style: row.map { |cell| malformed?(cell) ? red : nil } }
79
+ red = p.workbook.styles.add_style(**params[:ces]) if params[:ces].is_a?(Hash)
80
+ p.workbook.add_worksheet(**axlsx_params) do |sheet|
81
+ @rows.each do |row|
82
+ styles = row.map { |cell| malformed?(cell) ? red : nil }
83
+ row = row.map { |cell| cell.to_s.gsub(/\A#{params[:cem]}/, '') if malformed?(cell) } if params[:lem]
84
+ sheet.add_row row, style: styles
85
+ end
70
86
  end
71
87
  p.serialize(f.path)
72
88
  end
@@ -109,5 +125,14 @@ module SeeAsVee
109
125
  end ? cell : CELL_ERROR_MARKER + cell.to_s.split('').map { |c| "#{c}\u0336" }.join
110
126
  end
111
127
  # rubocop:enable Style/MultilineTernaryOperator
128
+
129
+ def split_params params
130
+ params = params.dup
131
+ [
132
+ { ces: params.delete(:cell_error_style) { CELL_ERROR_STYLE.dup },
133
+ lem: params.delete(:leave_error_marker) { LEAVE_ERROR_MARKER } },
134
+ { name: WORK_SHEET_NAME }.merge(params)
135
+ ]
136
+ end
112
137
  end
113
138
  end
@@ -1,3 +1,3 @@
1
1
  module SeeAsVee
2
- VERSION = '0.2.5'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
data/see_as_vee.gemspec CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_dependency 'simple_xlsx_reader'
29
29
  spec.add_dependency 'axlsx'
30
30
  # spec.add_dependency 'ruby-filemagic', require: false
31
- spec.add_dependency 'mutations', '~> 0.7'
31
+ spec.add_dependency 'dry-mutations'
32
32
 
33
33
  spec.add_development_dependency 'bundler', '~> 1.10'
34
34
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: see_as_vee
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksei Matiushkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-09 00:00:00.000000000 Z
11
+ date: 2016-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_xlsx_reader
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: mutations
42
+ name: dry-mutations
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0.7'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0.7'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement