honey_format 0.23.0 → 0.24.0

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
  SHA256:
3
- metadata.gz: 54b1c442221f4921f054ba328b55f066166d27b27bd56aa8499bf195bac65847
4
- data.tar.gz: 58977315c3fb95a54a0cbc7ab930a8ade04016865c589f4e6374ce113a080c1c
3
+ metadata.gz: 4e7b05a5cbde9ef4df67f043ff78e75c545563faa02333c57c97f70f1adec0f9
4
+ data.tar.gz: 91275865eabfd283c22ef0507a76b0c433d64a36c2ab68d92501548b982a00c8
5
5
  SHA512:
6
- metadata.gz: 1cbbc61c953422dea9de989ebe429b05325140868c54b2861dbaafac222425706d8af481d86c0a0f3a75bbc19bcabfb5d580d0261c0a3ba928c3a2d45390abf7
7
- data.tar.gz: d07789988d8ad6f335fa517bc07954f0f9800c3dce3ab10a9295c6edae81994fd78ca9ed2e44c6ac6b8759593e0807edeb78457bbb54ce4e348db116f953374a
6
+ metadata.gz: c5904b276f295163855c1d74f7afa27568572e50583ec54532e571f70eb59ce06648e60a0e0d29806289d7126b8d0a9351acdd746967c247db03004cec3c4356
7
+ data.tar.gz: e498be3c0e31e594cc42d2186404d367564111d70d2fffbe0011d0ea208e5f217ff8416061f12cbdff5137b3075e1f09d857b2dd189d785b865381d02c429d07
data/CHANGELOG.md CHANGED
@@ -1,8 +1,19 @@
1
1
  # HEAD
2
2
 
3
+ ## v0.24.0
4
+
5
+ * Add support for multiple/chained converters. [PR#69](https://github.com/buren/honey_format/pull/69)
6
+ ```ruby
7
+ csv_string = "Id,Username\n1, BuRen "
8
+ type_map = { username: [:strip, :downcase] }
9
+ csv = HoneyFormat::CSV.new(csv_string, type_map: type_map)
10
+ csv.rows.first.username # => "buren"
11
+ ```
12
+ * Add `strip` and `strip!` converter
13
+
3
14
  ## v0.23.0
4
15
 
5
- * Add `Rows#columnns` method that returns header columns
16
+ * Add `Rows#columns` method that returns header columns
6
17
 
7
18
  ## v0.22.0
8
19
 
data/README.md CHANGED
@@ -107,6 +107,14 @@ csv = HoneyFormat::CSV.new(csv_string, type_map: type_map)
107
107
  csv.rows.first.username # => "BUREN"
108
108
  ```
109
109
 
110
+ Combine multiple converters
111
+ ```ruby
112
+ csv_string = "Id,Username\n1, BuRen "
113
+ type_map = { username: [:strip, :downcase] }
114
+ csv = HoneyFormat::CSV.new(csv_string, type_map: type_map)
115
+ csv.rows.first.username # => "buren"
116
+ ```
117
+
110
118
  Register your own converter
111
119
  ```ruby
112
120
  HoneyFormat.configure do |config|
@@ -376,6 +384,50 @@ matrix.to_csv # => "name,id\nJACOB,1\n"
376
384
 
377
385
  If you want to see more usage examples check out the [`examples/`](https://github.com/buren/honey_format/tree/master/examples) and [`spec/`](https://github.com/buren/honey_format/tree/master/spec) directories and of course [on RubyDoc](https://www.rubydoc.info/gems/honey_format/).
378
386
 
387
+
388
+ __SQL example__
389
+
390
+ When you want the result as an object, with certain columns converted to objects.
391
+
392
+ ```ruby
393
+ require 'mysql2'
394
+
395
+ class DBClient
396
+ def initialize(host:, username:, password:, port: 3306)
397
+ @client = Mysql2::Client.new(
398
+ host: host,
399
+ username: username,
400
+ password: password,
401
+ port: port
402
+ )
403
+ end
404
+
405
+ def query(sql, type_map: {})
406
+ result = @client.query(sql)
407
+ return if result.first.nil?
408
+
409
+ matrix = HoneyFormat::Matrix.new(
410
+ result.map(&:values),
411
+ header: result.first.keys,
412
+ type_map: type_map
413
+ )
414
+ matrix.rows
415
+ end
416
+ end
417
+ ```
418
+
419
+ Usage example with a fictional "users" database table (schema: `name`, `created_at`)
420
+ ```ruby
421
+ client = DbClient.new(host: '127.0.0.1', username: 'root', password: nil)
422
+ users = client.query(
423
+ 'SELECT * FROM users',
424
+ type_map: { created_at: :datetime! }
425
+ )
426
+ user = users.first
427
+ user.name # => buren
428
+ user.created_at.class # => Time
429
+ ```
430
+
379
431
  ## CLI
380
432
 
381
433
  > Perfect when you want to get something simple done quickly.
@@ -10,6 +10,9 @@ module HoneyFormat
10
10
  # Convert to upcase or nil
11
11
  ConvertUpcase = proc { |v| v&.upcase }
12
12
 
13
+ # Convert to stripped string
14
+ ConvertStrip = proc { |v| v&.strip }
15
+
13
16
  # Convert to symbol or nil
14
17
  ConvertSymbol = proc { |v| v&.to_sym }
15
18
 
@@ -35,8 +38,13 @@ module HoneyFormat
35
38
  ConvertDowncase.call(v) || raise(ArgumentError, "can't convert nil to downcased string")
36
39
  end
37
40
 
41
+ # Convert to downcase or raise error
42
+ StrictConvertStrip = proc do |v|
43
+ ConvertStrip.call(v) || raise(ArgumentError, "can't convert nil to downcased string")
44
+ end
45
+
38
46
  # Convert to symbol or raise error
39
47
  StrictConvertSymbol = proc do |v|
40
- ConvertSymbol.call(v) || raise(ArgumentError, "can't convert nil to symbol")
48
+ ConvertSymbol.call(v) || raise(ArgumentError, "can't convert nil to stripped string")
41
49
  end
42
50
  end
@@ -20,6 +20,7 @@ module HoneyFormat
20
20
  symbol!: StrictConvertSymbol,
21
21
  downcase!: StrictConvertDowncase,
22
22
  upcase!: StrictConvertUpcase,
23
+ strip!: StrictConvertStrip,
23
24
  boolean!: StrictConvertBoolean,
24
25
  # safe variants
25
26
  decimal: ConvertDecimal,
@@ -31,6 +32,7 @@ module HoneyFormat
31
32
  symbol: ConvertSymbol,
32
33
  downcase: ConvertDowncase,
33
34
  upcase: ConvertUpcase,
35
+ strip: ConvertStrip,
34
36
  boolean: ConvertBoolean,
35
37
  md5: ConvertMD5,
36
38
  hex: ConvertHex,
@@ -57,7 +57,11 @@ module HoneyFormat
57
57
 
58
58
  # Convert values
59
59
  @type_map.each do |column, type|
60
- row[column] = @converter.call(row[column], type)
60
+ types = type.respond_to?(:each) ? type : [type]
61
+ value = row[column]
62
+ types.each { |t| value = @converter.call(value, t) }
63
+
64
+ row[column] = value
61
65
  end
62
66
 
63
67
  return row unless @builder
@@ -4,7 +4,7 @@ module HoneyFormat
4
4
  # Gem version
5
5
  VERSION = [
6
6
  MAJOR_VERSION = 0,
7
- MINOR_VERSION = 23,
7
+ MINOR_VERSION = 24,
8
8
  PATCH_VERSION = 0,
9
9
  ].join('.')
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honey_format
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Burenstam
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-29 00:00:00.000000000 Z
11
+ date: 2021-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -153,7 +153,7 @@ homepage: https://github.com/buren/honey_format
153
153
  licenses:
154
154
  - MIT
155
155
  metadata: {}
156
- post_install_message:
156
+ post_install_message:
157
157
  rdoc_options: []
158
158
  require_paths:
159
159
  - lib
@@ -168,8 +168,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
168
  - !ruby/object:Gem::Version
169
169
  version: '0'
170
170
  requirements: []
171
- rubygems_version: 3.0.3
172
- signing_key:
171
+ rubygems_version: 3.1.4
172
+ signing_key:
173
173
  specification_version: 4
174
174
  summary: Makes working with CSVs as smooth as honey.
175
175
  test_files: []