remap 2.0.3 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/lib/remap/base.rb +229 -75
  3. data/lib/remap/compiler.rb +127 -37
  4. data/lib/remap/constructor/argument.rb +20 -6
  5. data/lib/remap/constructor/keyword.rb +20 -4
  6. data/lib/remap/constructor/none.rb +3 -4
  7. data/lib/remap/constructor.rb +12 -5
  8. data/lib/remap/contract.rb +27 -0
  9. data/lib/remap/extensions/enumerable.rb +48 -0
  10. data/lib/remap/extensions/hash.rb +13 -0
  11. data/lib/remap/extensions/object.rb +37 -0
  12. data/lib/remap/failure.rb +25 -15
  13. data/lib/remap/iteration/array.rb +20 -11
  14. data/lib/remap/iteration/hash.rb +21 -13
  15. data/lib/remap/iteration/other.rb +7 -7
  16. data/lib/remap/iteration.rb +8 -2
  17. data/lib/remap/mapper/and.rb +29 -7
  18. data/lib/remap/mapper/binary.rb +3 -6
  19. data/lib/remap/mapper/or.rb +29 -6
  20. data/lib/remap/mapper/support/operations.rb +40 -0
  21. data/lib/remap/mapper/xor.rb +29 -7
  22. data/lib/remap/mapper.rb +1 -48
  23. data/lib/remap/notice/traced.rb +19 -0
  24. data/lib/remap/notice/untraced.rb +11 -0
  25. data/lib/remap/notice.rb +34 -0
  26. data/lib/remap/operation.rb +26 -13
  27. data/lib/remap/path/input.rb +37 -0
  28. data/lib/remap/path/output.rb +26 -0
  29. data/lib/remap/path.rb +22 -0
  30. data/lib/remap/path_error.rb +13 -0
  31. data/lib/remap/proxy.rb +18 -0
  32. data/lib/remap/rule/each.rb +25 -24
  33. data/lib/remap/rule/embed.rb +33 -28
  34. data/lib/remap/rule/map/optional.rb +42 -0
  35. data/lib/remap/rule/map/required.rb +35 -0
  36. data/lib/remap/rule/map.rb +176 -55
  37. data/lib/remap/rule/set.rb +23 -33
  38. data/lib/remap/rule/support/collection/empty.rb +7 -7
  39. data/lib/remap/rule/support/collection/filled.rb +21 -8
  40. data/lib/remap/rule/support/collection.rb +11 -3
  41. data/lib/remap/rule/support/enum.rb +44 -21
  42. data/lib/remap/rule/void.rb +17 -18
  43. data/lib/remap/rule/wrap.rb +25 -17
  44. data/lib/remap/rule.rb +8 -1
  45. data/lib/remap/selector/all.rb +29 -7
  46. data/lib/remap/selector/index.rb +24 -16
  47. data/lib/remap/selector/key.rb +31 -16
  48. data/lib/remap/selector.rb +17 -0
  49. data/lib/remap/state/extension.rb +182 -208
  50. data/lib/remap/state/schema.rb +1 -1
  51. data/lib/remap/state.rb +30 -4
  52. data/lib/remap/static/fixed.rb +14 -3
  53. data/lib/remap/static/option.rb +21 -6
  54. data/lib/remap/static.rb +13 -0
  55. data/lib/remap/struct.rb +1 -0
  56. data/lib/remap/types.rb +13 -28
  57. data/lib/remap.rb +15 -19
  58. metadata +91 -89
  59. data/lib/remap/result.rb +0 -11
  60. data/lib/remap/rule/support/path.rb +0 -45
  61. data/lib/remap/state/types.rb +0 -11
  62. data/lib/remap/success.rb +0 -29
  63. data/lib/remap/version.rb +0 -5
data/lib/remap/struct.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Remap
4
+ # Base class used throughout the library
4
5
  class Struct < Dry::Struct
5
6
  schema schema.strict(true)
6
7
  end
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
- Maybe = Instance(Dry::Monads::Maybe).fallback(&Dry::Monads::Maybe)
18
- # Remap = Class.constrained(lt: Remap)
19
- Proc = Instance(Proc)
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
- Key = String | Symbol | Integer
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
- Value = Any.constructor do |value, &error|
41
- (Array(Problem) | Self).call(value, &error)
42
- end
27
+ next input if result.success?
43
28
 
44
- Self = Hash.map(Key, Value) | Hash.schema(base: Array(Problem))
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 "dry/core/class_builder"
8
- require "dry/core/memoizable"
9
- require "dry/core/deprecations"
10
- require "dry/logic/builder"
11
- require "dry-configurable"
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/types"
11
+ require "dry/struct"
14
12
  require "dry/monads"
15
- require "dry/logic"
16
- require "zeitwerk"
17
- require "dry/interface"
18
-
19
- Dry::Types.load_extensions(:maybe)
13
+ require "dry/types"
20
14
 
21
- loader = Zeitwerk::Loader.for_gem
22
- loader.collapse("#{__dir__}/remap/rule/support")
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.0.3
4
+ version: 2.1.0
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-26 00:00:00.000000000 Z
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: '0'
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: '0'
26
+ version: 6.1.4.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: dry-configurable
28
+ name: dry-core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
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: '0'
40
+ version: 0.7.1
41
41
  - !ruby/object:Gem::Dependency
42
- name: dry-core
42
+ name: dry-initializer
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
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: '0'
54
+ version: 3.0.4
55
55
  - !ruby/object:Gem::Dependency
56
- name: dry-initializer
56
+ name: dry-interface
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
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: '0'
68
+ version: 1.0.3
69
69
  - !ruby/object:Gem::Dependency
70
- name: dry-interface
70
+ name: dry-monads
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
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: '0'
82
+ version: 1.4.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: dry-logic
84
+ name: dry-schema
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
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: '0'
96
+ version: 1.8.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: dry-monads
98
+ name: dry-struct
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
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: '0'
110
+ version: 1.4.0
111
111
  - !ruby/object:Gem::Dependency
112
- name: dry-schema
112
+ name: dry-types
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
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: '0'
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: '0'
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: '0'
138
+ version: 1.7.0
139
139
  - !ruby/object:Gem::Dependency
140
- name: dry-struct
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: '0'
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: '0'
166
+ version: 2.5.1
167
167
  - !ruby/object:Gem::Dependency
168
- name: dry-types
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: :runtime
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: rake
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: :runtime
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: bundler
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: '10.0'
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: '10.0'
208
+ version: 1.23.0
223
209
  - !ruby/object:Gem::Dependency
224
- name: rspec
210
+ name: rubocop-performance
225
211
  requirement: !ruby/object:Gem::Requirement
226
212
  requirements:
227
- - - "~>"
213
+ - - ">="
228
214
  - !ruby/object:Gem::Version
229
- version: '3.0'
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: '3.0'
222
+ version: '0'
237
223
  - !ruby/object:Gem::Dependency
238
- name: rspec-github
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/result.rb
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: Makes mapping easy
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,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Remap
4
- class Result < Dry::Struct
5
- attribute :problems, Types::Hash
6
-
7
- def has_problem?
8
- !problems.blank?
9
- end
10
- end
11
- end
@@ -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
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Remap
4
- module State
5
- module Types
6
- include Dry.Types()
7
-
8
- Key = String | Symbol | Integer
9
- end
10
- end
11
- end
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
data/lib/remap/version.rb DELETED
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Remap
4
- VERSION = "0.1.0"
5
- end