see_as_vee 0.4.4 → 0.4.5

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
2
  SHA1:
3
- metadata.gz: beae1e71799dc8657eab3630ac1b4f3e65eeea18
4
- data.tar.gz: 3924cfb560e05a54b2313a514c10e6bb72ca92bb
3
+ metadata.gz: f5799a95416f1f098a5251d0813644f9dea12aad
4
+ data.tar.gz: 9e0add6027150787f65b7208ac7bfd341a46676d
5
5
  SHA512:
6
- metadata.gz: 53240a129672637c2c7fca4881af97110a8a2fd7da7af48df7689e3aaaac04f823b35c49b0bf93a31cd424ff6792fab70d0e9492806d6cbdc11b997c535e52a9
7
- data.tar.gz: fb6852cfec396cf810e3493b001e2c8c08f1c47237f3595f25740665525acf560688f38f1b3f901a0c8c89166e64453f9bdd59180013c90e07c949ed086a9462
6
+ metadata.gz: 65166484784b536ec9a28e175075c10d422c912f24de14464ee577c819ef4e475bffd24ef16fad4934850949ad86f8f2dc630866d224fc30fdec60ff97f44471
7
+ data.tar.gz: 7ab8394d15d285433166571ba86adc2e05c476267a7e8fb438daae183dc1b9d010bb7f0220cf49972f8e3faf6b73e7896bbeb46db6aaa21efbc51d873dec007f
data/.rubocop.yml CHANGED
@@ -39,3 +39,8 @@ Style/MethodDefParentheses:
39
39
  Style/MultilineBlockChain:
40
40
  Exclude:
41
41
  - 'spec/**/*'
42
+ - 'lib/see_as_vee/producers/hashes.rb'
43
+
44
+ Style/PercentLiteralDelimiters:
45
+ Exclude:
46
+ - 'lib/see_as_vee/producers/hashes.rb'
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2016-03-11 10:58:55 +0100 using RuboCop version 0.37.2.
3
+ # on 2017-01-16 15:21:47 +0100 using RuboCop version 0.42.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -8,67 +8,19 @@
8
8
 
9
9
  # Offense count: 1
10
10
  # Cop supports --auto-correct.
11
- # Configuration parameters: IgnoreEmptyBlocks.
12
- Lint/UnusedBlockArgument:
13
- Exclude:
14
- - 'lib/see_as_vee.rb'
15
-
16
- # Offense count: 3
17
- # Cop supports --auto-correct.
18
- # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
19
- Lint/UnusedMethodArgument:
20
- Exclude:
21
- - 'lib/see_as_vee.rb'
22
-
23
- # Offense count: 2
24
- Lint/UselessAssignment:
25
- Exclude:
26
- - 'lib/see_as_vee.rb'
27
-
28
- # Offense count: 11
29
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
30
- # URISchemes: http, https
31
- Metrics/LineLength:
32
- Max: 180
33
-
34
- # Offense count: 1
35
- # Cop supports --auto-correct.
36
- # Configuration parameters: EnforcedStyle, SupportedStyles.
11
+ # Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
37
12
  # SupportedStyles: with_first_parameter, with_fixed_indentation
38
13
  Style/AlignParameters:
39
14
  Exclude:
40
15
  - 'spec/see_as_vee_spec.rb'
41
16
 
42
- # Offense count: 1
43
- # Cop supports --auto-correct.
44
- Style/EmptyLines:
45
- Exclude:
46
- - 'lib/see_as_vee.rb'
47
-
48
- # Offense count: 1
49
- # Cop supports --auto-correct.
50
- # Configuration parameters: EnforcedStyle, SupportedStyles.
51
- # SupportedStyles: empty_lines, no_empty_lines
52
- Style/EmptyLinesAroundBlockBody:
53
- Exclude:
54
- - 'lib/see_as_vee.rb'
55
-
56
- # Offense count: 1
57
- # Cop supports --auto-correct.
58
- # Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues.
59
- # SupportedStyles: ruby19, ruby19_no_mixed_keys, hash_rockets
60
- Style/HashSyntax:
61
- Enabled: false
62
-
63
- # Offense count: 1
64
- # Cop supports --auto-correct.
65
- Style/MutableConstant:
66
- Exclude:
67
- - 'lib/see_as_vee/version.rb'
68
-
69
- # Offense count: 133
17
+ # Offense count: 160
70
18
  # Cop supports --auto-correct.
71
19
  # Configuration parameters: EnforcedStyle, SupportedStyles, ConsistentQuotesInMultiline.
72
20
  # SupportedStyles: single_quotes, double_quotes
73
21
  Style/StringLiterals:
74
- Enabled: false
22
+ Exclude:
23
+ - 'Gemfile'
24
+ - 'bin/console'
25
+ - 'lib/see_as_vee/sheet.rb'
26
+ - 'spec/see_as_vee_spec.rb'
data/README.md CHANGED
@@ -86,8 +86,31 @@ The returned value is an array of [validation results](http://dry-rb.org/gems/dr
86
86
  # John 3.14
87
87
  ```
88
88
 
89
+ ### Expand `GROUP_CONCAT` column
90
+
91
+ From the version `0.4.5` we support expanding the column produced by `GROUP_CONCAT`
92
+
93
+ ```ruby
94
+ ▶ require 'see_as_vee'
95
+ #⇒ true
96
+ ▶ SeeAsVee.csv(
97
+ ▷ [{name: 'Aleksei', value: 42, nicks: 'matiushkin,mudasobwa,am-kantox'},
98
+ ▷ {name: 'Saverio', value: 3.14, nicks: 'trioni,rewritten,saverio-kantox'}],
99
+ ▷ col_sep: "\t", ungroup: :nicks)
100
+ #⇒ #<File:/tmp/am/see_as_vee20161109-6031-6he5m7.csv>
101
+ # -rw------- 1 am am 32 nov 9 07:18 /tmp/am/see_as_vee20161109-6031-6he5m7.csv
102
+ ▶ .cat /tmp/am/see_as_vee20161109-6031-6he5m7.csv
103
+ #⇒ name value nick 1 nick 2 nick 3
104
+ # Aleksei 42 matiushkin mudasobwa am-kantox
105
+ # Saverio 3.14 trioni rewritten saverio-kantox
106
+ ```
107
+
89
108
  ## Changelog
90
109
 
110
+ ### `0.4.5` support for expanding `GROUP_CONCAT` column
111
+
112
+
113
+
91
114
  ### `0.4.0` support for `Dry::Validation`
92
115
 
93
116
  ### `0.3.0` support for XLSX options
@@ -1,6 +1,7 @@
1
1
  module SeeAsVee
2
2
  module Producers
3
3
  class Hashes
4
+ INTERNAL_PARAMS = %i|ungroup delimiter|.freeze
4
5
  NORMALIZER = ->(symbol, hash) { hash.map { |k, v| [k.public_send(symbol ? :to_sym : :to_s), v] }.to_h }.freeze
5
6
  HUMANIZER = lambda do |hash|
6
7
  hash.map do |k, v|
@@ -10,14 +11,13 @@ module SeeAsVee
10
11
 
11
12
  def initialize *args, **params
12
13
  @hashes = []
13
- add(*args, **params)
14
+ @params = params
15
+ add(*args)
14
16
  end
15
17
 
16
- def add *args, **params
18
+ def add *args
17
19
  @keys, @joined = [nil] * 2
18
-
19
- @hashes << params unless params.size.zero?
20
- @hashes |= args.flatten.select(&Hash.method(:===))
20
+ @hashes |= degroup(args.flatten.select(&Hash.method(:===)), @params[:ungroup], @params[:delimiter] || ',')
21
21
  normalize!(false)
22
22
  end
23
23
 
@@ -53,6 +53,22 @@ module SeeAsVee
53
53
  SeeAsVee::Sheet.new(humanize!.join.map(&:values).unshift(keys))
54
54
  end
55
55
 
56
+ private
57
+
58
+ def degroup hashes, columns, delimiter
59
+ return hashes if (columns = [*columns]).empty?
60
+
61
+ hashes.tap do |hs|
62
+ hs.each do |hash|
63
+ columns.each do |column|
64
+ hash.delete(column).split(delimiter).each.with_index(1) do |value, idx|
65
+ hash["#{column}_#{idx}"] = value
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
56
72
  class << self
57
73
  def join *args, normalize: :human
58
74
  Hashes.new(*args).join.tap do |result|
@@ -65,14 +81,26 @@ module SeeAsVee
65
81
  end
66
82
 
67
83
  def csv *args, **params
68
- result, = Hashes.new(*args).to_sheet.produce csv: true, xlsx: false, **params
84
+ constructor_params, params = split_params(**params)
85
+ result, = Hashes.new(*args, **constructor_params).to_sheet.produce csv: true, xlsx: false, **params
69
86
  result
70
87
  end
71
88
 
72
89
  def xlsx *args, **params
73
- _, result = Hashes.new(*args).to_sheet.produce csv: false, xlsx: true, **params
90
+ constructor_params, params = split_params(**params)
91
+ _, result = Hashes.new(*args, **constructor_params).to_sheet.produce csv: false, xlsx: true, **params
74
92
  result
75
93
  end
94
+
95
+ # **NB** this method is NOT idempotent!
96
+ def split_params **params
97
+ [
98
+ INTERNAL_PARAMS.each_with_object({}) do |param, acc|
99
+ acc[param] = params.delete(param)
100
+ end.reject { |_, v| v.nil? },
101
+ params
102
+ ]
103
+ end
76
104
  end
77
105
  end
78
106
  end
@@ -4,10 +4,10 @@ module SeeAsVee
4
4
  class Sheet
5
5
  CELL_ERROR_MARKER = '⚑ '.freeze
6
6
  CELL_ERROR_STYLE = {
7
- bg_color: "FF880000",
8
- fg_color: "FFFFFFFF",
7
+ bg_color: 'FF880000',
8
+ fg_color: 'FFFFFFFF',
9
9
  sz: 14,
10
- border: { style: :thin, color: "FFFF0000" }
10
+ border: { style: :thin, color: 'FFFF0000' }
11
11
  }.freeze
12
12
  WORK_SHEET_NAME = 'Processing errors shown in red'.freeze
13
13
  LEAVE_ERROR_MARKER = true
@@ -1,3 +1,3 @@
1
1
  module SeeAsVee
2
- VERSION = '0.4.4'.freeze
2
+ VERSION = '0.4.5'.freeze
3
3
  end
data/lib/see_as_vee.rb CHANGED
@@ -16,13 +16,13 @@ require 'axlsx'
16
16
  require 'simple_xlsx_reader'
17
17
  require 'csv'
18
18
 
19
- require "see_as_vee/version"
20
- require "see_as_vee/exceptions"
19
+ require 'see_as_vee/version'
20
+ require 'see_as_vee/exceptions'
21
21
 
22
- require "see_as_vee/helpers"
23
- require "see_as_vee/sheet"
22
+ require 'see_as_vee/helpers'
23
+ require 'see_as_vee/sheet'
24
24
 
25
- require "see_as_vee/producers/hashes"
25
+ require 'see_as_vee/producers/hashes'
26
26
 
27
27
  module SeeAsVee
28
28
  def harvest whatever, formatters: {}, checkers: {}
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.4.4
4
+ version: 0.4.5
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-11 00:00:00.000000000 Z
11
+ date: 2017-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_xlsx_reader