Skip to content

Commit d4121c0

Browse files
committed
[core] port processor to use dry-transformer
1 parent 7a5b9d6 commit d4121c0

File tree

8 files changed

+94
-56
lines changed

8 files changed

+94
-56
lines changed

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: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
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
22+
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
2128

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

2931
def self.identity(tuple)
@@ -73,15 +75,15 @@ def self.inject_union_value(tuple, name, keys, coercer)
7375
# @api private
7476
attr_reader :row_proc
7577

76-
# Build a transproc function from the header
78+
# Build a transformer object from the header
7779
#
7880
# @param [ROM::Header] header
7981
#
80-
# @return [Transproc::Function]
82+
# @return [Dry::Transformer::Pipe]
8183
#
8284
# @api private
8385
def self.build(mapper, header)
84-
new(mapper, header).to_transproc
86+
new(mapper, header).call
8587
end
8688

8789
# @api private
@@ -93,12 +95,12 @@ def initialize(mapper, header)
9395
initialize_row_proc
9496
end
9597

96-
# Coerce mapper header to a transproc data mapping function
98+
# Coerce mapper header to a transformer object
9799
#
98-
# @return [Transproc::Function]
100+
# @return [Dry::Transformer::Pipe]
99101
#
100102
# @api private
101-
def to_transproc
103+
def call
102104
compose(t(:identity)) do |ops|
103105
combined = header.combined
104106
ops << t(:combine, combined.map(&method(:combined_args))) if combined.any?

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)