morpher 0.4.0 → 0.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc9380b32ac09b2e3765666a2c56baeb3aef272d22be1f7043f1977c9da1d815
4
- data.tar.gz: 0736e2646b93e59dc8fb2bf992bdf7729431260a08f3b158dd1eaf1324a657f1
3
+ metadata.gz: 8f68237f24a5ee7b113c26e9f21c4a7765568b18ba0262dc86a7db3f437205ac
4
+ data.tar.gz: e861789e9b539d77aecbf81b12add653f5ac4f679c55ad9bed37ca4ccb50bc51
5
5
  SHA512:
6
- metadata.gz: 496748be0cfeae869808cb58aead93df98b270020b93310bba695ce03bea0cbc14b7451a881ce3b3e9280acbbf2155caaba7bfba827896bd79dd1119d9fa7fc0
7
- data.tar.gz: 0fc7f421fb376af18c2f1ea41eebf2b44350236e453a38878b1f015cb7cb15794d9e897de66c27c00143e1ce44b9271cc3f69be1ae79cb76f61f68a887e1c305
6
+ metadata.gz: f3adaf243ef357354e7f2b76e80ae4cfdf65f7913d13a0aa6f125656466da971758f03a71632ed5c944be289195d776b0addbc636277beb75a7312b7bfae45b9
7
+ data.tar.gz: aa3411aaf134378b122051c8365d54f08ad5db213fec95d7ff886c10e04ef5656fa2926c298938139b7fe8537f488eaeafafe5ec998e60e95c0cd0aad14a2e31
data/lib/morpher.rb CHANGED
@@ -8,6 +8,8 @@ require 'mprelude'
8
8
 
9
9
  module Morpher
10
10
  Either = MPrelude::Either
11
+
12
+ EMPTY_HASH = {}.freeze
11
13
  end
12
14
 
13
15
  require 'morpher/newtype'
@@ -3,8 +3,17 @@
3
3
  module Morpher
4
4
  # Generator for struct a-like wrappers
5
5
  class Record < Module
6
+ DEFAULTS = {
7
+ required: EMPTY_HASH,
8
+ optional: EMPTY_HASH
9
+ }.freeze
10
+
6
11
  include Anima.new(:required, :optional)
7
12
 
13
+ def self.new(**attributes)
14
+ super(DEFAULTS.merge(attributes))
15
+ end
16
+
8
17
  # rubocop:disable Metrics/AbcSize
9
18
  # rubocop:disable Metrics/MethodLength
10
19
  def included(host)
@@ -20,6 +20,29 @@ module Morpher
20
20
  # @return [Either<Error, Object>]
21
21
  abstract_method :call
22
22
 
23
+ # Build sequence
24
+ #
25
+ # @param [Transform] transform
26
+ #
27
+ # @return [Transform]
28
+ def seq(transform)
29
+ Sequence.new([self, transform])
30
+ end
31
+
32
+ # Build array transform
33
+ #
34
+ # @return [Transform]
35
+ def array
36
+ Array.new(self)
37
+ end
38
+
39
+ # Build maybe transform
40
+ #
41
+ # @return [Transform]
42
+ def maybe
43
+ Maybe.new(self)
44
+ end
45
+
23
46
  # Deep error data structure
24
47
  class Error
25
48
  include Anima.new(
@@ -59,13 +82,13 @@ module Morpher
59
82
 
60
83
  # Wrapper adding a name to a transformation
61
84
  class Named < self
62
- include Concord.new(:name, :transformer)
85
+ include Concord.new(:name, :transform)
63
86
 
64
87
  # Apply transformation to input
65
88
  #
66
89
  # @return [Either<Error, Object>]
67
90
  def call(input)
68
- transformer.call(input).lmap(&method(:wrap_error))
91
+ transform.call(input).lmap(&method(:wrap_error))
69
92
  end
70
93
 
71
94
  # Named slug
@@ -419,6 +442,15 @@ module Morpher
419
442
  class Sequence < self
420
443
  include Concord.new(:steps)
421
444
 
445
+ # Build sequence
446
+ #
447
+ # @param [Transform] transform
448
+ #
449
+ # @return [Transform]
450
+ def seq(transform)
451
+ self.class.new(steps + [transform])
452
+ end
453
+
422
454
  # Apply transformation to input
423
455
  #
424
456
  # @param [Object]
@@ -437,7 +469,7 @@ module Morpher
437
469
  end
438
470
  end # Sequence
439
471
 
440
- # Generic exception transformer
472
+ # Generic exception transform
441
473
  class Exception < self
442
474
  include Concord.new(:error_class, :block)
443
475
 
@@ -467,6 +499,19 @@ module Morpher
467
499
  end
468
500
  end # Success
469
501
 
502
+ # Transform accepting nil values
503
+ class Maybe < Transform
504
+ include Concord.new(:transform)
505
+
506
+ def call(input)
507
+ if input.nil?
508
+ success(nil)
509
+ else
510
+ transform.call(input).lmap(&method(:wrap_error))
511
+ end
512
+ end
513
+ end # Maybe
514
+
470
515
  BOOLEAN = Transform::Boolean.new
471
516
  FLOAT = Transform::Primitive.new(Float)
472
517
  INTEGER = Transform::Primitive.new(Integer)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morpher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-26 00:00:00.000000000 Z
11
+ date: 2021-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: abstract_type
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.3.0
55
- - !ruby/object:Gem::Dependency
56
- name: ast
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.2'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.2'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: concord
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,20 +80,6 @@ dependencies:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
82
  version: 0.0.9
97
- - !ruby/object:Gem::Dependency
98
- name: ice_nine
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 0.11.0
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 0.11.0
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: mprelude
113
85
  requirement: !ruby/object:Gem::Requirement
@@ -251,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
251
223
  - !ruby/object:Gem::Version
252
224
  version: '0'
253
225
  requirements: []
254
- rubygems_version: 3.1.4
226
+ rubygems_version: 3.2.18
255
227
  signing_key:
256
228
  specification_version: 4
257
229
  summary: Domain Transformation Algebra