remap 2.0.3 → 2.1.6
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 +4 -4
- data/lib/remap/base.rb +229 -75
- data/lib/remap/compiler.rb +403 -37
- data/lib/remap/constructor/argument.rb +20 -6
- data/lib/remap/constructor/keyword.rb +20 -4
- data/lib/remap/constructor/none.rb +3 -4
- data/lib/remap/constructor.rb +12 -5
- data/lib/remap/contract.rb +27 -0
- data/lib/remap/extensions/enumerable.rb +48 -0
- data/lib/remap/extensions/hash.rb +13 -0
- data/lib/remap/extensions/object.rb +37 -0
- data/lib/remap/failure.rb +25 -15
- data/lib/remap/iteration/array.rb +20 -11
- data/lib/remap/iteration/hash.rb +21 -13
- data/lib/remap/iteration/other.rb +7 -7
- data/lib/remap/iteration.rb +8 -2
- data/lib/remap/mapper/and.rb +29 -7
- data/lib/remap/mapper/binary.rb +3 -6
- data/lib/remap/mapper/or.rb +29 -6
- data/lib/remap/mapper/support/operations.rb +40 -0
- data/lib/remap/mapper/xor.rb +29 -7
- data/lib/remap/mapper.rb +1 -48
- data/lib/remap/notice/traced.rb +19 -0
- data/lib/remap/notice/untraced.rb +11 -0
- data/lib/remap/notice.rb +34 -0
- data/lib/remap/operation.rb +26 -13
- data/lib/remap/path/input.rb +37 -0
- data/lib/remap/path/output.rb +26 -0
- data/lib/remap/path.rb +22 -0
- data/lib/remap/path_error.rb +13 -0
- data/lib/remap/proxy.rb +18 -0
- data/lib/remap/rule/each.rb +25 -24
- data/lib/remap/rule/embed.rb +33 -28
- data/lib/remap/rule/map/optional.rb +42 -0
- data/lib/remap/rule/map/required.rb +35 -0
- data/lib/remap/rule/map.rb +176 -55
- data/lib/remap/rule/set.rb +23 -33
- data/lib/remap/rule/support/collection/empty.rb +7 -7
- data/lib/remap/rule/support/collection/filled.rb +21 -8
- data/lib/remap/rule/support/collection.rb +11 -3
- data/lib/remap/rule/support/enum.rb +44 -21
- data/lib/remap/rule/void.rb +17 -18
- data/lib/remap/rule/wrap.rb +25 -17
- data/lib/remap/rule.rb +8 -1
- data/lib/remap/selector/all.rb +29 -7
- data/lib/remap/selector/index.rb +24 -16
- data/lib/remap/selector/key.rb +31 -16
- data/lib/remap/selector.rb +17 -0
- data/lib/remap/state/extension.rb +182 -208
- data/lib/remap/state/schema.rb +1 -1
- data/lib/remap/state.rb +30 -4
- data/lib/remap/static/fixed.rb +14 -3
- data/lib/remap/static/option.rb +21 -6
- data/lib/remap/static.rb +13 -0
- data/lib/remap/struct.rb +1 -0
- data/lib/remap/types.rb +13 -28
- data/lib/remap.rb +15 -19
- metadata +91 -89
- data/lib/remap/result.rb +0 -11
- data/lib/remap/rule/support/path.rb +0 -45
- data/lib/remap/state/types.rb +0 -11
- data/lib/remap/success.rb +0 -29
- data/lib/remap/version.rb +0 -5
data/lib/remap/struct.rb
CHANGED
data/lib/remap/types.rb
CHANGED
@@ -5,43 +5,28 @@ require "dry/logic/operations/negation"
|
|
5
5
|
require "dry/logic"
|
6
6
|
|
7
7
|
module Remap
|
8
|
+
# Defines callable types used throughout the application
|
8
9
|
module Types
|
9
10
|
include Dry::Types()
|
10
|
-
include Dry::Logic::Operations
|
11
|
-
|
12
11
|
using State::Extension
|
12
|
+
using Extensions::Hash
|
13
13
|
|
14
|
+
Backtrace = Array(Interface(:to_s) | String)
|
14
15
|
Enumerable = Any.constrained(type: Enumerable)
|
15
|
-
Mapper = Interface(:call!) # Class.constrained(lt: Remap::Mapper) | Instance(Remap::Mapper).constructor { |v, &e| Instance(Remap::Mapper::Binary).call(v, &e) }
|
16
16
|
Nothing = Constant(Remap::Nothing)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
Key = Interface(:hash) | Integer
|
21
|
-
Value = Any # .constrained(not_eql: nil)
|
22
|
-
|
23
|
-
State = Hash.constructor do |value, type, &error|
|
24
|
-
type[value, &error]._(&error)
|
25
|
-
end
|
26
|
-
|
27
|
-
Selectors = Array.of(Remap::Selector)
|
28
|
-
|
29
|
-
Dry::Types.define_builder(:not) do |type, owner = Object|
|
30
|
-
type.constrained_type.new(Instance(owner), rule: Negation.new(type.rule))
|
31
|
-
end
|
32
|
-
|
33
|
-
module Report
|
34
|
-
include Dry.Types()
|
35
|
-
|
36
|
-
Problem = Hash.schema(value?: Any, reason: String)
|
17
|
+
Mapper = Interface(:call!)
|
18
|
+
Rule = Interface(:call)
|
19
|
+
Key = Interface(:hash)
|
37
20
|
|
38
|
-
|
21
|
+
# Validates a state according to State::Schema
|
22
|
+
State = Hash.constructor do |input, type, &error|
|
23
|
+
input = type.call(input, &error)
|
24
|
+
result = Remap::State::Schema.call(input)
|
25
|
+
error ||= -> { raise _1 }
|
39
26
|
|
40
|
-
|
41
|
-
(Array(Problem) | Self).call(value, &error)
|
42
|
-
end
|
27
|
+
next input if result.success?
|
43
28
|
|
44
|
-
|
29
|
+
error[result.errors.to_h.formated]
|
45
30
|
end
|
46
31
|
end
|
47
32
|
end
|
data/lib/remap.rb
CHANGED
@@ -1,28 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/struct"
|
4
|
-
require "dry/validation"
|
5
|
-
|
6
3
|
require "active_support/core_ext/module/delegation"
|
7
|
-
require "
|
8
|
-
require "
|
9
|
-
require "
|
10
|
-
|
11
|
-
require "dry
|
4
|
+
require "active_support/core_ext/enumerable"
|
5
|
+
require "active_support/core_ext/array/wrap"
|
6
|
+
require "active_support/proxy_object"
|
7
|
+
|
8
|
+
require "dry/validation"
|
9
|
+
require "dry/interface"
|
12
10
|
require "dry/schema"
|
13
|
-
require "dry/
|
11
|
+
require "dry/struct"
|
14
12
|
require "dry/monads"
|
15
|
-
require "dry/
|
16
|
-
require "zeitwerk"
|
17
|
-
require "dry/interface"
|
18
|
-
|
19
|
-
Dry::Types.load_extensions(:maybe)
|
13
|
+
require "dry/types"
|
20
14
|
|
21
|
-
|
22
|
-
|
23
|
-
loader.setup
|
15
|
+
require "neatjson"
|
16
|
+
require "zeitwerk"
|
24
17
|
|
25
18
|
module Remap
|
19
|
+
loader = Zeitwerk::Loader.for_gem
|
20
|
+
loader.collapse("#{__dir__}/remap/rule/support")
|
21
|
+
loader.collapse("#{__dir__}/remap/mapper/support")
|
22
|
+
loader.setup
|
23
|
+
loader.eager_load
|
26
24
|
end
|
27
|
-
|
28
|
-
loader.eager_load
|
metadata
CHANGED
@@ -1,177 +1,177 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Linus Oleander
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 6.1.4.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 6.1.4.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: dry-
|
28
|
+
name: dry-core
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.7.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.7.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: dry-
|
42
|
+
name: dry-initializer
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 3.0.4
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 3.0.4
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: dry-
|
56
|
+
name: dry-interface
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 1.0.3
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 1.0.3
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: dry-
|
70
|
+
name: dry-monads
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 1.4.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 1.4.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name: dry-
|
84
|
+
name: dry-schema
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 1.8.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 1.8.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name: dry-
|
98
|
+
name: dry-struct
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 1.4.0
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 1.4.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name: dry-
|
112
|
+
name: dry-types
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 1.5.1
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: 1.5.1
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: dry-validation
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 1.7.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 1.7.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: neatjson
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "
|
143
|
+
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
145
|
+
version: '0.9'
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - "
|
150
|
+
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
152
|
+
version: '0.9'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: zeitwerk
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- - "
|
157
|
+
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
159
|
+
version: 2.5.1
|
160
160
|
type: :runtime
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- - "
|
164
|
+
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
166
|
+
version: 2.5.1
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
168
|
+
name: rake
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
|
-
type: :
|
174
|
+
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
@@ -179,13 +179,13 @@ dependencies:
|
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
182
|
+
name: rspec-collection_matchers
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
185
|
- - ">="
|
186
186
|
- !ruby/object:Gem::Version
|
187
187
|
version: '0'
|
188
|
-
type: :
|
188
|
+
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
@@ -193,49 +193,35 @@ dependencies:
|
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - "~>"
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '1.17'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - "~>"
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '1.17'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: rake
|
196
|
+
name: rubocop
|
211
197
|
requirement: !ruby/object:Gem::Requirement
|
212
198
|
requirements:
|
213
199
|
- - "~>"
|
214
200
|
- !ruby/object:Gem::Version
|
215
|
-
version:
|
201
|
+
version: 1.23.0
|
216
202
|
type: :development
|
217
203
|
prerelease: false
|
218
204
|
version_requirements: !ruby/object:Gem::Requirement
|
219
205
|
requirements:
|
220
206
|
- - "~>"
|
221
207
|
- !ruby/object:Gem::Version
|
222
|
-
version:
|
208
|
+
version: 1.23.0
|
223
209
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
210
|
+
name: rubocop-performance
|
225
211
|
requirement: !ruby/object:Gem::Requirement
|
226
212
|
requirements:
|
227
|
-
- - "
|
213
|
+
- - ">="
|
228
214
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
215
|
+
version: '0'
|
230
216
|
type: :development
|
231
217
|
prerelease: false
|
232
218
|
version_requirements: !ruby/object:Gem::Requirement
|
233
219
|
requirements:
|
234
|
-
- - "
|
220
|
+
- - ">="
|
235
221
|
- !ruby/object:Gem::Version
|
236
|
-
version: '
|
222
|
+
version: '0'
|
237
223
|
- !ruby/object:Gem::Dependency
|
238
|
-
name:
|
224
|
+
name: rubocop-rake
|
239
225
|
requirement: !ruby/object:Gem::Requirement
|
240
226
|
requirements:
|
241
227
|
- - ">="
|
@@ -248,7 +234,11 @@ dependencies:
|
|
248
234
|
- - ">="
|
249
235
|
- !ruby/object:Gem::Version
|
250
236
|
version: '0'
|
251
|
-
description:
|
237
|
+
description: |
|
238
|
+
Re:map; an expressive and feature-complete data mapper with an intuitive syntax designed as a domain-specific language using Ruby 3.0.
|
239
|
+
It gives the developer the expressive power of JSONPath, without the hassle of using strings.
|
240
|
+
Its compiler is written on top of an immutable, primitive data structure utilizing Rubys
|
241
|
+
refinements & pattern matching capabilities – making it blazingly fast
|
252
242
|
email:
|
253
243
|
- oleander@users.noreply.github.com
|
254
244
|
executables: []
|
@@ -262,7 +252,11 @@ files:
|
|
262
252
|
- lib/remap/constructor/argument.rb
|
263
253
|
- lib/remap/constructor/keyword.rb
|
264
254
|
- lib/remap/constructor/none.rb
|
255
|
+
- lib/remap/contract.rb
|
265
256
|
- lib/remap/error.rb
|
257
|
+
- lib/remap/extensions/enumerable.rb
|
258
|
+
- lib/remap/extensions/hash.rb
|
259
|
+
- lib/remap/extensions/object.rb
|
266
260
|
- lib/remap/failure.rb
|
267
261
|
- lib/remap/iteration.rb
|
268
262
|
- lib/remap/iteration/array.rb
|
@@ -272,20 +266,29 @@ files:
|
|
272
266
|
- lib/remap/mapper/and.rb
|
273
267
|
- lib/remap/mapper/binary.rb
|
274
268
|
- lib/remap/mapper/or.rb
|
269
|
+
- lib/remap/mapper/support/operations.rb
|
275
270
|
- lib/remap/mapper/xor.rb
|
276
271
|
- lib/remap/nothing.rb
|
272
|
+
- lib/remap/notice.rb
|
273
|
+
- lib/remap/notice/traced.rb
|
274
|
+
- lib/remap/notice/untraced.rb
|
277
275
|
- lib/remap/operation.rb
|
278
|
-
- lib/remap/
|
276
|
+
- lib/remap/path.rb
|
277
|
+
- lib/remap/path/input.rb
|
278
|
+
- lib/remap/path/output.rb
|
279
|
+
- lib/remap/path_error.rb
|
280
|
+
- lib/remap/proxy.rb
|
279
281
|
- lib/remap/rule.rb
|
280
282
|
- lib/remap/rule/each.rb
|
281
283
|
- lib/remap/rule/embed.rb
|
282
284
|
- lib/remap/rule/map.rb
|
285
|
+
- lib/remap/rule/map/optional.rb
|
286
|
+
- lib/remap/rule/map/required.rb
|
283
287
|
- lib/remap/rule/set.rb
|
284
288
|
- lib/remap/rule/support/collection.rb
|
285
289
|
- lib/remap/rule/support/collection/empty.rb
|
286
290
|
- lib/remap/rule/support/collection/filled.rb
|
287
291
|
- lib/remap/rule/support/enum.rb
|
288
|
-
- lib/remap/rule/support/path.rb
|
289
292
|
- lib/remap/rule/void.rb
|
290
293
|
- lib/remap/rule/wrap.rb
|
291
294
|
- lib/remap/selector.rb
|
@@ -295,18 +298,16 @@ files:
|
|
295
298
|
- lib/remap/state.rb
|
296
299
|
- lib/remap/state/extension.rb
|
297
300
|
- lib/remap/state/schema.rb
|
298
|
-
- lib/remap/state/types.rb
|
299
301
|
- lib/remap/static.rb
|
300
302
|
- lib/remap/static/fixed.rb
|
301
303
|
- lib/remap/static/option.rb
|
302
304
|
- lib/remap/struct.rb
|
303
|
-
- lib/remap/success.rb
|
304
305
|
- lib/remap/types.rb
|
305
|
-
- lib/remap/version.rb
|
306
306
|
homepage: https://github.com/oleander/remap
|
307
307
|
licenses:
|
308
308
|
- MIT
|
309
|
-
metadata:
|
309
|
+
metadata:
|
310
|
+
rubygems_mfa_required: 'true'
|
310
311
|
post_install_message:
|
311
312
|
rdoc_options: []
|
312
313
|
require_paths:
|
@@ -325,5 +326,6 @@ requirements: []
|
|
325
326
|
rubygems_version: 3.2.32
|
326
327
|
signing_key:
|
327
328
|
specification_version: 4
|
328
|
-
summary:
|
329
|
+
summary: An expressive and feature-complete data mapper with intuitive syntax thanks
|
330
|
+
to its DSL
|
329
331
|
test_files: []
|
data/lib/remap/result.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Remap
|
4
|
-
class Rule
|
5
|
-
class Path < Struct
|
6
|
-
using State::Extension
|
7
|
-
|
8
|
-
# @example [:a, :b, :c]
|
9
|
-
attribute :to, Types.Array(Types::Key)
|
10
|
-
|
11
|
-
# @example [:a, 0, :b, ALL]
|
12
|
-
attribute :map, Types.Array(Selector)
|
13
|
-
|
14
|
-
# Maps {state} from {map} to {block} to {to}
|
15
|
-
#
|
16
|
-
# @param state [State]
|
17
|
-
#
|
18
|
-
# @yieldparam [State]
|
19
|
-
# @yieldreturn [State<T>]
|
20
|
-
#
|
21
|
-
# @return [State<T>]
|
22
|
-
def call(state, &block)
|
23
|
-
unless block
|
24
|
-
raise ArgumentError, "block required"
|
25
|
-
end
|
26
|
-
|
27
|
-
selector(state).then(&block).fmap do |value|
|
28
|
-
to.reverse.reduce(value) do |val, key|
|
29
|
-
{ key => val }
|
30
|
-
end
|
31
|
-
end._
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def selector(state)
|
37
|
-
stack = map.reverse.reduce(IDENTITY) do |fn, selector|
|
38
|
-
->(st) { selector.call(st, &fn) }
|
39
|
-
end
|
40
|
-
|
41
|
-
stack.call(state)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/lib/remap/state/types.rb
DELETED
data/lib/remap/success.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Remap
|
4
|
-
class Success < Result
|
5
|
-
attribute :result, Types::Any
|
6
|
-
|
7
|
-
def inspect
|
8
|
-
format("Success<[%<result>s]>", result: JSON.pretty_generate(to_h))
|
9
|
-
end
|
10
|
-
|
11
|
-
def to_hash
|
12
|
-
{ success: result, problems: problems }
|
13
|
-
end
|
14
|
-
|
15
|
-
def failure?
|
16
|
-
false
|
17
|
-
end
|
18
|
-
|
19
|
-
def success?(value = Undefined)
|
20
|
-
return true if value.equal?(Undefined)
|
21
|
-
|
22
|
-
result == value
|
23
|
-
end
|
24
|
-
|
25
|
-
def fmap(&block)
|
26
|
-
block[result]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|