dry-transformer 1.0.1 → 1.1.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
  SHA256:
3
- metadata.gz: 10aa5190bb2478c5e0cbdd6bf6173c055dac699a9a63e684c30717daf86571fc
4
- data.tar.gz: 7d6dfba77a1afb33a27ec89cc99a426a165666370b87885534980fafa926949b
3
+ metadata.gz: 951fc90cfe811be95ec2ff41b75c5f570e16d78e13594c434c67dc72986b8b1b
4
+ data.tar.gz: 9ff80c34ffec146bf95b189faef2b6fb8e31b23272b35899d9d8af60db8dddb2
5
5
  SHA512:
6
- metadata.gz: 0662605fdfbeb43f0e2ec18578c590e36b031c08cda6b6e0be4442425b565d776e9f0c638e3f7d3c335f76f17b2e16ccf7c66da0705d4077f7c199c68ece046c
7
- data.tar.gz: baf3d076412311e21befa5fafedbb58d5c7a5fdc7ea5f09bdc89d52b89ff567206d3d85511e8ac6ddb545124e6297179e0cd703f900d53ea0ada53a6f7bd70fa
6
+ metadata.gz: 5c1a12f368f92a769512fa70f815dbd0e65c6c6663a0e7ac4ad727c3b63adc85573b9719dfea3016435cb511e5fbc3b2e64a1a7374635293b2bd2178ac99007e
7
+ data.tar.gz: 5d0d004b5bcb9bbf811c362fbfc0b3c37cd2dd1a5d72965a2732afb193c72ef6d2021a9a241483bc5eccb77c2209a28df0f55a6da7bcac7d866809748af049ba
data/CHANGELOG.md CHANGED
@@ -1,6 +1,20 @@
1
- <!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
1
+ # Changelog
2
2
 
3
- ## 1.0.1
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Break Versioning](https://www.taoensso.com/break-versioning).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.1.0] - 2025-12-03
11
+
12
+ ### Added
13
+
14
+ - Fixed using `prefix` option in `Dry::Transformer::HashTransformations.unwrap` in DSL (@flash-gordon)
15
+
16
+
17
+ ## [1.0.1] - 2022-11-23
4
18
 
5
19
 
6
20
  ### Fixed
@@ -8,9 +22,9 @@
8
22
  - Auto-loading issues for array transformations (@flash-gordon)
9
23
 
10
24
 
11
- [Compare v1.0.0...master](https://github.com/dry-rb/dry-transformer/compare/v1.0.0...master)
25
+ [Compare v1.0.0...v1.0.1](https://github.com/dry-rb/dry-transformer/compare/v1.0.0...v1.0.1)
12
26
 
13
- ## 1.0.0 2022-11-20
27
+ ## [1.0.0] - 2022-11-20
14
28
 
15
29
 
16
30
  ### Changed
@@ -20,7 +34,7 @@
20
34
 
21
35
  [Compare v0.1.1...v1.0.0](https://github.com/dry-rb/dry-transformer/compare/v0.1.1...v1.0.0)
22
36
 
23
- ## 0.1.1 2020-01-14
37
+ ## [0.1.1] - 2020-01-14
24
38
 
25
39
 
26
40
  ### Fixed
@@ -30,6 +44,6 @@
30
44
 
31
45
  [Compare v0.1.0...v0.1.1](https://github.com/dry-rb/dry-transformer/compare/v0.1.0...v0.1.1)
32
46
 
33
- ## 0.1.0 2019-12-28
47
+ ## [0.1.0] - 2019-12-28
34
48
 
35
49
  Initial port of the [transproc](https://github.com/solnic/transproc) gem.
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2022 dry-rb team
3
+ Copyright (c) 2015-2025 Hanakai team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
@@ -18,3 +18,4 @@ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
18
  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
19
  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
20
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
data/README.md CHANGED
@@ -1,30 +1,17 @@
1
- <!--- this file is synced from dry-rb/template-gem project -->
2
- [gem]: https://rubygems.org/gems/dry-transformer
3
- [actions]: https://github.com/dry-rb/dry-transformer/actions
4
- [codacy]: https://www.codacy.com/gh/dry-rb/dry-transformer
5
- [chat]: https://dry-rb.zulipchat.com
6
- [inchpages]: http://inch-ci.org/github/dry-rb/dry-transformer
1
+ <!--- This file is synced from hanakai-rb/repo-sync -->
7
2
 
8
- # dry-transformer [![Join the chat at https://dry-rb.zulipchat.com](https://img.shields.io/badge/dry--rb-join%20chat-%23346b7a.svg)][chat]
3
+ [rubygem]: https://rubygems.org/gems/dry-transformer
4
+ [actions]: https://github.com/dry-rb/dry-transformer/actions
9
5
 
10
- [![Gem Version](https://badge.fury.io/rb/dry-transformer.svg)][gem]
11
- [![CI Status](https://github.com/dry-rb/dry-transformer/workflows/ci/badge.svg)][actions]
12
- [![Codacy Badge](https://api.codacy.com/project/badge/Grade/22edf59617be4aef97cfbe4e1c99f1ce)][codacy]
13
- [![Codacy Badge](https://api.codacy.com/project/badge/Coverage/22edf59617be4aef97cfbe4e1c99f1ce)][codacy]
14
- [![Inline docs](http://inch-ci.org/github/dry-rb/dry-transformer.svg?branch=main)][inchpages]
6
+ # dry-transformer [![Gem Version](https://badge.fury.io/rb/dry-transformer.svg)][rubygem] [![CI Status](https://github.com/dry-rb/dry-transformer/workflows/CI/badge.svg)][actions]
15
7
 
16
8
  ## Links
17
9
 
18
- * [User documentation](https://dry-rb.org/gems/dry-transformer)
19
- * [API documentation](http://rubydoc.info/gems/dry-transformer)
20
-
21
- ## Supported Ruby versions
22
-
23
- This library officially supports the following Ruby versions:
24
-
25
- * MRI `>= 2.7.0`
26
- * jruby `>= 9.3` (postponed until 2.7 is supported)
10
+ - [User documentation](https://dry-rb.org/gems/dry-transformer)
11
+ - [API documentation](http://rubydoc.info/gems/dry-transformer)
12
+ - [Forum](https://discourse.dry-rb.org)
27
13
 
28
14
  ## License
29
15
 
30
16
  See `LICENSE` file.
17
+
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # this file is synced from dry-rb/template-gem project
3
+ # This file is synced from hanakai-rb/repo-sync. To update it, edit repo-sync.yml.
4
4
 
5
5
  lib = File.expand_path("lib", __dir__)
6
6
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
@@ -8,8 +8,8 @@ require "dry/transformer/version"
8
8
 
9
9
  Gem::Specification.new do |spec|
10
10
  spec.name = "dry-transformer"
11
- spec.authors = ["Piotr Solnica"]
12
- spec.email = ["piotr.solnica@gmail.com"]
11
+ spec.authors = ["Hanakai team"]
12
+ spec.email = ["info@hanakai.org"]
13
13
  spec.license = "MIT"
14
14
  spec.version = Dry::Transformer::VERSION.dup
15
15
 
@@ -21,14 +21,20 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = []
22
22
  spec.require_paths = ["lib"]
23
23
 
24
+ spec.extra_rdoc_files = ["README.md", "CHANGELOG.md", "LICENSE"]
25
+
24
26
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
25
27
  spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-transformer/blob/main/CHANGELOG.md"
26
28
  spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-transformer"
27
29
  spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-transformer/issues"
30
+ spec.metadata["funding_uri"] = "https://github.com/sponsors/hanami"
28
31
 
29
- spec.required_ruby_version = ">= 2.7.0"
32
+ spec.required_ruby_version = ">= 3.1.0"
30
33
 
31
- # to update dependencies edit project.yml
34
+ spec.add_runtime_dependency "bigdecimal"
32
35
  spec.add_runtime_dependency "zeitwerk", "~> 2.6"
33
-
36
+ spec.add_development_dependency "bundler"
37
+ spec.add_development_dependency "rake"
38
+ spec.add_development_dependency "rspec"
34
39
  end
40
+
@@ -17,7 +17,8 @@ module Dry
17
17
  # { 'city' => 'NYC', 'zipcode' => '312' }
18
18
  # ]
19
19
  # )
20
- # # => [{:address=>{:city=>"Boston", :zipcode=>"123"}}, {:address=>{:city=>"NYC", :zipcode=>"312"}}]
20
+ # # => [{:address=>{:city=>"Boston", :zipcode=>"123"}},
21
+ # # {:address=>{:city=>"NYC", :zipcode=>"312"}}]
21
22
  #
22
23
  # @api public
23
24
  module ArrayTransformations
@@ -35,7 +35,8 @@ module Dry
35
35
  !fn[value]
36
36
  end
37
37
 
38
- # Apply the transformation function to subject if the predicate returns true, or return un-modified
38
+ # Apply the transformation function to subject if the predicate returns true,
39
+ # or return un-modified
39
40
  #
40
41
  # @example
41
42
  # [2, 'Jane'].map do |subject|
@@ -7,9 +7,11 @@ module Dry
7
7
 
8
8
  class FunctionNotFoundError < Error
9
9
  def initialize(function, source = nil)
10
- return super "No registered function #{source}[:#{function}]" if source
11
-
12
- super "No globally registered function for #{function}"
10
+ if source
11
+ super "No registered function #{source}[:#{function}]"
12
+ else
13
+ super "No globally registered function for #{function}"
14
+ end
13
15
  end
14
16
  end
15
17
  end
@@ -5,7 +5,7 @@ module Dry
5
5
  # Transformation functions for Hash objects
6
6
  #
7
7
  # @example
8
- # require 'dry/transformer/hash'
8
+ # require 'dry/transformer/hash_transformations'
9
9
  #
10
10
  # include Dry::Transformer::Helper
11
11
  #
@@ -15,9 +15,16 @@ module Dry
15
15
  # # => {:address => {:street => "Street 1", :zipcode => "123"}}
16
16
  #
17
17
  # @api public
18
+ # rubocop:disable Metrics/ModuleLength
18
19
  module HashTransformations
19
20
  extend Registry
20
21
 
22
+ # @api private
23
+ Undefined = Object.new.freeze
24
+
25
+ # @api private
26
+ EMPTY_HASH = {}.freeze
27
+
21
28
  # Map all keys in a hash with the provided transformation function
22
29
  #
23
30
  # @example
@@ -260,7 +267,9 @@ module Dry
260
267
  # Collapse a nested hash from a specified key
261
268
  #
262
269
  # @example
263
- # Dry::Transformer(:unwrap, :address, [:street, :zipcode])[address: { street: 'Street', zipcode: '123' }]
270
+ # Dry::Transformer(
271
+ # :unwrap, :address, [:street, :zipcode]
272
+ # )[address: { street: 'Street', zipcode: '123' }]
264
273
  # # => {street: "Street", zipcode: "123"}
265
274
  #
266
275
  # @param [Hash] source_hash
@@ -273,9 +282,14 @@ module Dry
273
282
  # @return [Hash]
274
283
  #
275
284
  # @api public
276
- def self.unwrap(source_hash, root, selected = nil, prefix: false)
285
+ # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
286
+ def self.unwrap(source_hash, root, selected = nil, options = Undefined)
277
287
  return source_hash unless source_hash[root]
278
288
 
289
+ selected, options = nil, selected if options.equal?(Undefined) && selected.is_a?(::Hash)
290
+ options = EMPTY_HASH if options.equal?(Undefined)
291
+ prefix = options.fetch(:prefix, false)
292
+
279
293
  add_prefix = lambda do |key|
280
294
  combined = [root, key].join("_")
281
295
  root.is_a?(::Symbol) ? combined.to_sym : combined
@@ -292,6 +306,7 @@ module Dry
292
306
  hash.delete(root) if nested_hash.empty? && !nested_contains_root_key
293
307
  end
294
308
  end
309
+ # rubocop:enable Metrics/AbcSize, Metrics/PerceivedComplexity
295
310
 
296
311
  # Folds array of tuples to array of values from a specified key
297
312
  #
@@ -377,6 +392,7 @@ module Dry
377
392
  # @param [Array] filters A list of attribute names that should be evaluated
378
393
  #
379
394
  # @api public
395
+ # rubocop:disable Metrics/PerceivedComplexity
380
396
  def self.eval_values(hash, args, filters = [])
381
397
  hash.each_with_object({}) do |(key, value), output|
382
398
  output[key] =
@@ -398,6 +414,7 @@ module Dry
398
414
  end
399
415
  end
400
416
  end
417
+ # rubocop:enable Metrics/PerceivedComplexity
401
418
 
402
419
  # Merge a hash recursively
403
420
  #
@@ -427,4 +444,5 @@ module Dry
427
444
  end
428
445
  end
429
446
  end
447
+ # rubocop:enable Metrics/ModuleLength
430
448
  end
@@ -27,7 +27,9 @@ module Dry
27
27
  # Recursively apply the provided transformation function to an enumerable
28
28
  #
29
29
  # @example
30
- # Dry::Transformer(:recursion, Dry::Transformer(:is, ::Hash, Dry::Transformer(:symbolize_keys)))[
30
+ # Dry::Transformer(
31
+ # :recursion, Dry::Transformer(:is, ::Hash, Dry::Transformer(:symbolize_keys))
32
+ # )[
31
33
  # {
32
34
  # 'id' => 1,
33
35
  # 'name' => 'Jane',
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Transformer
5
- VERSION = "1.0.1"
5
+ VERSION = "1.1.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-transformer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Piotr Solnica
8
- autorequire:
7
+ - Hanakai team
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-23 00:00:00.000000000 Z
11
+ date: 2025-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bigdecimal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: zeitwerk
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,12 +38,57 @@ dependencies:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '2.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
27
83
  description: Data transformation toolkit
28
84
  email:
29
- - piotr.solnica@gmail.com
85
+ - info@hanakai.org
30
86
  executables: []
31
87
  extensions: []
32
- extra_rdoc_files: []
88
+ extra_rdoc_files:
89
+ - README.md
90
+ - CHANGELOG.md
91
+ - LICENSE
33
92
  files:
34
93
  - CHANGELOG.md
35
94
  - LICENSE
@@ -64,7 +123,8 @@ metadata:
64
123
  changelog_uri: https://github.com/dry-rb/dry-transformer/blob/main/CHANGELOG.md
65
124
  source_code_uri: https://github.com/dry-rb/dry-transformer
66
125
  bug_tracker_uri: https://github.com/dry-rb/dry-transformer/issues
67
- post_install_message:
126
+ funding_uri: https://github.com/sponsors/hanami
127
+ post_install_message:
68
128
  rdoc_options: []
69
129
  require_paths:
70
130
  - lib
@@ -72,15 +132,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
132
  requirements:
73
133
  - - ">="
74
134
  - !ruby/object:Gem::Version
75
- version: 2.7.0
135
+ version: 3.1.0
76
136
  required_rubygems_version: !ruby/object:Gem::Requirement
77
137
  requirements:
78
138
  - - ">="
79
139
  - !ruby/object:Gem::Version
80
140
  version: '0'
81
141
  requirements: []
82
- rubygems_version: 3.1.6
83
- signing_key:
142
+ rubygems_version: 3.3.27
143
+ signing_key:
84
144
  specification_version: 4
85
145
  summary: Data transformation toolkit
86
146
  test_files: []