rom-changeset 5.1.2 → 5.2.1

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: 4b42968372a3555e8a1a89480c78f75fc2faa07f338d06f2b32636d4e449e5b7
4
- data.tar.gz: afd3093895d1acc300a8971cae0dff8f92fc4f45a3ad62f24e6756941c320af3
3
+ metadata.gz: b5a4ea75bcd9a214497927450d214530d5a3463e2079ae352ec24438f9c5c8f1
4
+ data.tar.gz: 02d7fdb3a5d700fd800d8170dfa3dee15a898392131f3a4ffff911c7a0e220b0
5
5
  SHA512:
6
- metadata.gz: d6bc1f125a0606285f3b8ab5038aef3af7b987e0fee43f5d3ce026165fbfb231ac67f5b370f11ba96ae24c7fb7f712198a3c6d0415373c18ee21795066460d4d
7
- data.tar.gz: 401db36d8098da987e1ac10b4139d5171b2a15f528d3cc1a8e0eff7a40c00285b0b5478a6baa2894bd04cbce0a81e58e02cd7b0590a68bac4546a952c71e4793
6
+ metadata.gz: 6b913372527a053b698935fc60d17b3e3093c49e2a152f437d699dfbfce78770411f89d968f7e47bc3cba771f313aa3a458a4c9e6d1706278cd3de9e6cef092b
7
+ data.tar.gz: 82701e7bb81506e39207d999b986d544173b9251de886a1c0f4d0d6ba2e6b903ff97bf9d621eb149b296c7d04a5964b39ad1a363993630e1a809a0c54d64c6e8
@@ -114,8 +114,8 @@ module ROM
114
114
  # Enable a plugin for the changeset
115
115
  #
116
116
  # @api public
117
- def self.use(plugin, options = EMPTY_HASH)
118
- ROM.plugin_registry[:changeset].fetch(plugin).apply_to(self, options)
117
+ def self.use(plugin, **options)
118
+ ROM.plugin_registry[:changeset].fetch(plugin).apply_to(self, **options)
119
119
  end
120
120
 
121
121
  # Return a new changeset with provided relation
@@ -128,8 +128,8 @@ module ROM
128
128
  # @return [Changeset]
129
129
  #
130
130
  # @api public
131
- def new(relation, new_options = EMPTY_HASH)
132
- self.class.new(relation, new_options.empty? ? options : options.merge(new_options))
131
+ def new(relation, **new_options)
132
+ self.class.new(relation, **options, **new_options)
133
133
  end
134
134
 
135
135
  # Persist changeset
@@ -161,7 +161,7 @@ module ROM
161
161
  #
162
162
  # @api private
163
163
  def command
164
- relation.command(command_type, command_compiler_options)
164
+ relation.command(command_type, **command_compiler_options)
165
165
  end
166
166
 
167
167
  # Return configured command compiler options
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rom/relation/graph'
2
4
 
3
5
  module ROM
@@ -21,4 +23,4 @@ module ROM
21
23
  end
22
24
  end
23
25
  end
24
- end
26
+ end
@@ -1,61 +1,63 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'transproc/all'
4
- require 'transproc/registry'
5
3
  require 'transproc/transformer'
6
4
 
5
+ require 'rom/changeset/pipe_registry'
6
+
7
7
  module ROM
8
8
  class Changeset
9
- # Transproc Registry useful for pipe
10
- #
11
- # @api private
12
- module PipeRegistry
13
- extend Transproc::Registry
14
-
15
- import Transproc::HashTransformations
16
-
17
- def self.add_timestamps(data)
18
- now = Time.now
19
- Hash(created_at: now, updated_at: now).merge(data)
20
- end
21
-
22
- def self.touch(data)
23
- Hash(updated_at: Time.now).merge(data)
24
- end
25
- end
26
-
27
9
  # Composable data transformation pipe used by default in changesets
28
10
  #
29
11
  # @api private
30
12
  class Pipe < Transproc::Transformer[PipeRegistry]
31
13
  extend Initializer
32
14
 
33
- param :processor, default: -> { self.class.transproc }
15
+ define!(&:identity)
16
+
17
+ param :processor, optional: true
18
+
34
19
  option :use_for_diff, optional: true, default: -> { true }
35
- option :diff_processor, default: -> { use_for_diff ? processor : nil }
20
+ option :diff_processor, default: -> { self[processor] }
36
21
 
37
- def self.[](name)
38
- container[name]
22
+ def self.new(*args, **opts)
23
+ if args.empty?
24
+ initialize(**opts)
25
+ else
26
+ super
27
+ end
28
+ end
29
+
30
+ def self.initialize(**opts)
31
+ transformer = allocate
32
+ transformer.__send__(:initialize, dsl.(transformer), **opts)
33
+ transformer
34
+ end
35
+
36
+ def self.[](name_or_proc)
37
+ container[name_or_proc]
39
38
  end
40
39
 
41
- def [](name)
42
- self.class[name]
40
+ def [](*args)
41
+ self.class[*args]
43
42
  end
44
43
 
45
44
  def bind(context)
46
45
  if processor.is_a?(Proc)
47
- self.class.new(Pipe[-> *args { context.instance_exec(*args, &processor) }])
46
+ new(self.class[-> *args { context.instance_exec(*args, &processor) }])
48
47
  else
49
48
  self
50
49
  end
51
50
  end
52
51
 
53
- def compose(other, for_diff: other.is_a?(Pipe) ? other.use_for_diff : false)
54
- new_proc = processor ? processor >> other : other
52
+ def compose(other, for_diff: other.is_a?(self.class) ? other.use_for_diff : false)
53
+ new_proc = processor >> other
55
54
 
56
55
  if for_diff
57
- diff_proc = diff_processor ? diff_processor >> other : other
58
- new(new_proc, diff_processor: diff_proc)
56
+ diff_proc = diff_processor >> (
57
+ other.is_a?(self.class) ? other.diff_processor : other
58
+ )
59
+
60
+ new(new_proc, use_for_diff: true, diff_processor: diff_proc)
59
61
  else
60
62
  new(new_proc)
61
63
  end
@@ -63,23 +65,15 @@ module ROM
63
65
  alias_method :>>, :compose
64
66
 
65
67
  def call(data)
66
- if processor
67
- processor.call(data)
68
- else
69
- data
70
- end
68
+ processor.call(data)
71
69
  end
72
70
 
73
71
  def for_diff(data)
74
- if diff_processor
75
- diff_processor.call(data)
76
- else
77
- data
78
- end
72
+ use_for_diff ? diff_processor.call(data) : data
79
73
  end
80
74
 
81
- def new(processor, opts = EMPTY_HASH)
82
- Pipe.new(processor, opts.empty? ? options : options.merge(opts))
75
+ def new(processor, **opts)
76
+ self.class.new(processor, **options, **opts)
83
77
  end
84
78
  end
85
79
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'transproc/all'
4
+ require 'transproc/registry'
5
+
6
+ module ROM
7
+ class Changeset
8
+ # Transproc Registry useful for pipe
9
+ #
10
+ # @api private
11
+ module PipeRegistry
12
+ extend Transproc::Registry
13
+
14
+ import Transproc::Coercions
15
+ import Transproc::HashTransformations
16
+
17
+ def self.add_timestamps(data)
18
+ now = Time.now
19
+ Hash(created_at: now, updated_at: now).merge(data)
20
+ end
21
+
22
+ def self.touch(data)
23
+ Hash(updated_at: Time.now).merge(data)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -57,11 +57,11 @@ module ROM
57
57
  # @see https://github.com/solnic/transproc Transproc
58
58
  #
59
59
  # @api public
60
- def self.map(options = EMPTY_HASH, &block)
60
+ def self.map(**options, &block)
61
61
  if block.parameters.empty?
62
- pipes << Class.new(Pipe, &block).new(options)
62
+ pipes << Class.new(Pipe).define!(&block).new(**options)
63
63
  else
64
- pipes << Pipe.new(block, options)
64
+ pipes << Pipe.new(block, **options)
65
65
  end
66
66
  end
67
67
 
@@ -87,12 +87,13 @@ module ROM
87
87
  #
88
88
  # @return [Pipe]
89
89
  def self.default_pipe(context)
90
- pipes.size > 0 ? pipes.map { |p| p.bind(context) }.reduce(:>>) : EMPTY_PIPE
90
+ !pipes.empty? ? pipes.map { |p| p.bind(context) }.reduce(:>>) : EMPTY_PIPE
91
91
  end
92
92
 
93
93
  # @api private
94
94
  def self.inherited(klass)
95
95
  return if klass == ROM::Changeset
96
+
96
97
  super
97
98
  klass.instance_variable_set(:@__pipes__, pipes.dup)
98
99
  end
@@ -149,13 +150,13 @@ module ROM
149
150
  # @api public
150
151
  def extend(*steps, **options, &block)
151
152
  if block
152
- if steps.size > 0
153
- extend(*steps, options).extend(options, &block)
153
+ if !steps.empty?
154
+ extend(*steps, **options).extend(**options, &block)
154
155
  else
155
- with(pipe: pipe.compose(Pipe.new(block).bind(self), options))
156
+ with(pipe: pipe.compose(Pipe.new(block).bind(self), **options))
156
157
  end
157
158
  else
158
- with(pipe: steps.reduce(pipe.with(options)) { |a, e| a.compose(pipe[e], options) })
159
+ with(pipe: steps.reduce(pipe.with(**options)) { |a, e| a.compose(pipe[e], **options) })
159
160
  end
160
161
  end
161
162
 
@@ -278,6 +279,7 @@ module ROM
278
279
  super
279
280
  end
280
281
  end
282
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
281
283
  end
282
284
  end
283
285
  end
@@ -45,7 +45,7 @@ module ROM
45
45
  #
46
46
  # @api public
47
47
  def diff?
48
- ! diff.empty?
48
+ !diff.empty?
49
49
  end
50
50
 
51
51
  # Return if there's no diff between the original and changeset data
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ROM
4
4
  class Changeset
5
- VERSION = '5.1.2'
5
+ VERSION = '5.2.1'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom-changeset
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.2
4
+ version: 5.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-17 00:00:00.000000000 Z
11
+ date: 2020-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-core
@@ -30,20 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '5.1'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 5.1.2
33
+ version: '5.2'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
38
  - - "~>"
42
39
  - !ruby/object:Gem::Version
43
- version: '5.1'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 5.1.2
40
+ version: '5.2'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: transproc
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +102,7 @@ files:
108
102
  - lib/rom/changeset/delete.rb
109
103
  - lib/rom/changeset/extensions/relation.rb
110
104
  - lib/rom/changeset/pipe.rb
105
+ - lib/rom/changeset/pipe_registry.rb
111
106
  - lib/rom/changeset/stateful.rb
112
107
  - lib/rom/changeset/update.rb
113
108
  - lib/rom/changeset/version.rb
@@ -135,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
130
  - !ruby/object:Gem::Version
136
131
  version: '0'
137
132
  requirements: []
138
- rubygems_version: 3.0.3
133
+ rubygems_version: 3.1.0.pre3
139
134
  signing_key:
140
135
  specification_version: 4
141
136
  summary: Changeset abstraction for rom-rb