Skip to content

Commit ddd317b

Browse files
authored
Merge pull request #571 from rom-rb/dry-transformer
Switch from transproc to dry-transformer
2 parents 1cc5fcd + b34464d commit ddd317b

File tree

12 files changed

+119
-87
lines changed

12 files changed

+119
-87
lines changed

changeset/lib/rom/changeset/pipe.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
# frozen_string_literal: true
22

3-
require 'transproc/transformer'
4-
53
require 'rom/changeset/pipe_registry'
64

75
module ROM
86
class Changeset
97
# Composable data transformation pipe used by default in changesets
108
#
119
# @api private
12-
class Pipe < Transproc::Transformer[PipeRegistry]
10+
class Pipe < Dry::Transformer[PipeRegistry]
1311
extend Initializer
1412

1513
define!(&:identity)

changeset/lib/rom/changeset/pipe_registry.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
# frozen_string_literal: true
22

3-
require 'transproc/all'
4-
require 'transproc/registry'
3+
require 'dry/transformer/all'
4+
require 'dry/transformer/registry'
55

66
module ROM
77
class Changeset
88
# Transproc Registry useful for pipe
99
#
1010
# @api private
1111
module PipeRegistry
12-
extend Transproc::Registry
12+
extend Dry::Transformer::Registry
1313

14-
import Transproc::Coercions
15-
import Transproc::HashTransformations
14+
import Dry::Transformer::Coercions
15+
import Dry::Transformer::HashTransformations
1616

1717
def self.add_timestamps(data)
1818
now = Time.now

changeset/lib/rom/changeset/stateful.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ class Stateful < Changeset
5252
# end
5353
# end
5454
#
55-
# @return [Array<Pipe>, Transproc::Function>]
55+
# @return [Array<Pipe>, Dry::Transformer::Function>]
5656
#
57-
# @see https://github.com/solnic/transproc Transproc
57+
# @see https://github.com/dry-rb/dry-transformer
5858
#
5959
# @api public
6060
def self.map(**options, &block)
@@ -70,7 +70,7 @@ def self.map(**options, &block)
7070
# @see Changeset::Stateful.map
7171
# @see Changeset::Stateful#extend
7272
#
73-
# @return [Array<Pipe>, Transproc::Function>]
73+
# @return [Array<Pipe>, Dry::Transformer::Function>]
7474
#
7575
# @api public
7676
def self.extend(*, &block)

changeset/rom-changeset.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ Gem::Specification.new do |gem|
1919
}
2020

2121
gem.add_runtime_dependency 'dry-core', '~> 0.4'
22+
gem.add_runtime_dependency 'dry-transformer', '~> 0.1'
2223
gem.add_runtime_dependency 'rom-core', '~> 5.1', '>= 5.1.2'
23-
gem.add_runtime_dependency 'transproc', '~> 1.0', '>= 1.1.0'
2424

2525
gem.add_development_dependency 'rake', '~> 11.2'
2626
gem.add_development_dependency 'rspec', '~> 3.5'

core/lib/rom/core.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
require 'rom/schema_plugin'
1111
require 'rom/relation'
1212
require 'rom/mapper'
13-
require 'rom/processor/transproc'
13+
require 'rom/processor/transformer'
1414
require 'rom/commands'
1515

1616
# rom Global

core/lib/rom/mapper.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def self.headers(header)
6161
# @return [Mapper]
6262
#
6363
# @api private
64-
def self.build(header = self.header, processor = :transproc)
64+
def self.build(header = self.header, processor = :transformer)
6565
new(header, processor)
6666
end
6767

@@ -74,7 +74,7 @@ def self.registry(descendants)
7474
end
7575

7676
# @api private
77-
def initialize(header, processor = :transproc)
77+
def initialize(header, processor = :transformer)
7878
processor = Mapper.processors.fetch(processor)
7979
@transformers = self.class.headers(header).map do |hdr|
8080
processor.build(self, hdr)

core/lib/rom/processor/composer.rb

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# frozen_string_literal: true
2+
3+
module ROM
4+
class Processor
5+
# @api private
6+
module Composer
7+
# @api private
8+
class Factory
9+
attr_reader :fns, :default
10+
11+
# @api private
12+
def initialize(default = nil)
13+
@fns = []
14+
@default = default
15+
end
16+
17+
# @api private
18+
def <<(other)
19+
fns.concat(Array(other).compact)
20+
self
21+
end
22+
23+
# @api private
24+
def to_fn
25+
fns.reduce(:+) || default
26+
end
27+
end
28+
29+
# @api private
30+
def compose(default = nil)
31+
factory = Factory.new(default)
32+
yield(factory)
33+
factory.to_fn
34+
end
35+
end
36+
end
37+
end

core/lib/rom/processor/transproc.rb renamed to core/lib/rom/processor/transformer.rb

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
11
# frozen_string_literal: true
22

3-
require 'transproc/all'
3+
require 'dry/transformer/all'
44

55
require 'rom/processor'
6+
require 'rom/processor/composer'
67

78
module ROM
89
class Processor
9-
# Data mapping transformer builder using Transproc
10+
# Data mapping transformer builder using dry-transformer
1011
#
11-
# This builds a transproc function that is used to map a whole relation
12+
# This builds a transformer object that is used to map a whole relation
1213
#
13-
# @see https://github.com/solnic/transproc too
14+
# @see https://github.com/dry-rb/dry-transformer
1415
#
1516
# @private
16-
class Transproc < Processor
17-
include ::Transproc::Composer
17+
class Transformer < Processor
18+
include Composer
1819

1920
module Functions
20-
extend ::Transproc::Registry
21+
extend Dry::Transformer::Registry
2122

22-
import ::Transproc::Coercions
23-
import ::Transproc::ArrayTransformations
24-
import ::Transproc::HashTransformations
25-
import ::Transproc::ClassTransformations
26-
import ::Transproc::ProcTransformations
27-
INVALID_INJECT_UNION_VALUE = "%s attribute: block is required for :from with union value.".freeze
23+
import Dry::Transformer::Coercions
24+
import Dry::Transformer::ArrayTransformations
25+
import Dry::Transformer::HashTransformations
26+
import Dry::Transformer::ClassTransformations
27+
import Dry::Transformer::ProcTransformations
2828

29-
def self.identity(tuple)
30-
tuple
31-
end
29+
INVALID_INJECT_UNION_VALUE = '%s attribute: block is required for :from with union value.'
3230

3331
def self.get(arr, idx)
3432
arr[idx]
@@ -39,7 +37,7 @@ def self.filter_empty(arr)
3937
end
4038

4139
def self.inject_union_value(tuple, name, keys, coercer)
42-
raise ROM::MapperMisconfiguredError, INVALID_INJECT_UNION_VALUE % [name] if !coercer
40+
raise ROM::MapperMisconfiguredError, INVALID_INJECT_UNION_VALUE % [name] unless coercer
4341

4442
values = tuple.values_at(*keys)
4543
result = coercer.call(*values)
@@ -73,15 +71,15 @@ def self.inject_union_value(tuple, name, keys, coercer)
7371
# @api private
7472
attr_reader :row_proc
7573

76-
# Build a transproc function from the header
74+
# Build a transformer object from the header
7775
#
7876
# @param [ROM::Header] header
7977
#
80-
# @return [Transproc::Function]
78+
# @return [Dry::Transformer::Pipe]
8179
#
8280
# @api private
8381
def self.build(mapper, header)
84-
new(mapper, header).to_transproc
82+
new(mapper, header).call
8583
end
8684

8785
# @api private
@@ -93,12 +91,12 @@ def initialize(mapper, header)
9391
initialize_row_proc
9492
end
9593

96-
# Coerce mapper header to a transproc data mapping function
94+
# Coerce mapper header to a transformer object
9795
#
98-
# @return [Transproc::Function]
96+
# @return [Dry::Transformer::Pipe]
9997
#
10098
# @api private
101-
def to_transproc
99+
def call
102100
compose(t(:identity)) do |ops|
103101
combined = header.combined
104102
ops << t(:combine, combined.map(&method(:combined_args))) if combined.any?
@@ -315,22 +313,22 @@ def visit_fold(attribute, preprocess = false)
315313
#
316314
# @api private
317315
def visit_unfold(attribute, preprocess = false)
318-
if preprocess
319-
name = attribute.name
320-
header = attribute.header
321-
keys = attribute.pop_keys
322-
key = keys.first
316+
return unless preprocess
323317

324-
others = header.postprocessed
318+
name = attribute.name
319+
header = attribute.header
320+
keys = attribute.pop_keys
321+
key = keys.first
325322

326-
compose do |ops|
327-
ops << others.map { |attr|
328-
t(:map_array, t(:map_value, name, visit(attr, true)))
329-
}
330-
ops << t(:map_array, t(:map_value, name, t(:insert_key, key)))
331-
ops << t(:map_array, t(:reject_keys, [key] - [name]))
332-
ops << t(:ungroup, name, [key])
333-
end
323+
others = header.postprocessed
324+
325+
compose do |ops|
326+
ops << others.map { |attr|
327+
t(:map_array, t(:map_value, name, visit(attr, true)))
328+
}
329+
ops << t(:map_array, t(:map_value, name, t(:insert_key, key)))
330+
ops << t(:map_array, t(:reject_keys, [key] - [name]))
331+
ops << t(:ungroup, name, [key])
334332
end
335333
end
336334

core/lib/rom/transformer.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
# frozen_string_literal: true
22

33
require 'dry/core/class_attributes'
4-
require 'transproc/transformer'
4+
require 'dry/transformer'
55

6-
require 'rom/processor/transproc'
6+
require 'rom/processor/transformer'
77

88
module ROM
9-
# Transformer is a data mapper which uses Transproc's transformer DSL to define
10-
# transformations.
9+
# Transformer is a data mapper which uses `Dry::Transformer`'s DSL to define transformations.
1110
#
1211
# @api public
13-
class Transformer < Transproc::Transformer[ROM::Processor::Transproc::Functions]
12+
class Transformer < Dry::Transformer[Processor::Transformer::Functions]
1413
extend Dry::Core::ClassAttributes
1514

1615
# @!method self.register_as

core/rom-core.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Gem::Specification.new do |gem|
2828
gem.add_runtime_dependency 'dry-types', '~> 1.0'
2929
gem.add_runtime_dependency 'dry-struct', '~> 1.0'
3030
gem.add_runtime_dependency 'dry-initializer', '~> 3.0', '>= 3.0.1'
31-
gem.add_runtime_dependency 'transproc', '~> 1.0', '>= 1.1.0'
31+
gem.add_runtime_dependency 'dry-transformer', '~> 0.1'
3232

3333
gem.add_development_dependency 'rake', '~> 10.3'
3434
gem.add_development_dependency 'rspec', '~> 3.5'

0 commit comments

Comments
 (0)