pipeable 1.0.0 → 1.1.0

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: 27d7116b19ded0ad3f247500aed8260a70132154dcd1e5df7a372e3c5c8a6dac
4
- data.tar.gz: 23a044ebbc9a350c513e6ed369f02b25159d017aef9ce449c1f97889de323ae8
3
+ metadata.gz: a09d8c73240d45d6a6a4219a6871a69ceb9ee77aa9387ac90b394571e2bfd24e
4
+ data.tar.gz: 3f0453d8efc7751c29c1f9ddd4f6aa7f5803478efa855d00ce913a434f2c4480
5
5
  SHA512:
6
- metadata.gz: 1eb4c1308d2635ef89d5fc0cc7355b657a0527687108a2af1b2967ad87e659b7417a0e3c53ee4fdb30ce7d3346d7aff58914fc38adb25a39f4d4743f6296c2dd
7
- data.tar.gz: 90a2b478afbc7bb3895cd5478365de3d00e7f4ebbaa6be401c6145cdb2757030d8b29a658acbf554146b337542591a0f03a195143b52bc36efe91e75caf6a5c8
6
+ metadata.gz: bb6a5ff6689c93114eec07926f389d643ea26dcde8f157dda4a444a9236c25b959d2e52ae7d6479c0f3fd1911b208bbdaf148317d2915d68a99497b80b22329c
7
+ data.tar.gz: 610564b7b2de774b517996d524d189cf4ce9439a25df29a24c48ab0adf7fdd3da8acbb9bee573ba4a13fd12713124e6f6a4525627127876a8886607271c623c5
checksums.yaml.gz.sig CHANGED
Binary file
data/README.adoc CHANGED
@@ -171,20 +171,20 @@ The following are the basic (default) steps for building custom pipes for which
171
171
 
172
172
  ===== alt
173
173
 
174
- Allows you to operate on a failure and produce either a success or another failure. This is a convenience wrapper to native {dry_monads_link} `#or` functionality.
174
+ Short for _alternate_ which is the `or` branch of conditional logic. This allows you to operate on a failure and produce either a success or another failure. This is a convenience wrapper to native {dry_monads_link} `#or` functionality.
175
175
 
176
176
  Accepts a failure while answering either a success or failure. Example:
177
177
 
178
178
  [source,ruby]
179
179
  ----
180
- pipe %i[a b c], alt { |object| Success object.join("-") } # Success [:a, :b, :c]
180
+ pipe %i[a b c], alt { |object| Success "Pass!" } # Success [:a, :b, :c]
181
181
  pipe Failure("Danger!"), alt { Success "Resolved" } # Success "Resolved"
182
182
  pipe Failure("Danger!"), alt { |object| Failure "Big #{object}" } # Failure "Big Danger!"
183
183
  ----
184
184
 
185
185
  ===== amap
186
186
 
187
- Allows you to unwrap a failure, make a modification, and wrap the modification as a new failure. This is a convenience wrapper to native {dry_monads_link} `#alt_map` functionality.
187
+ Short for _alternate map_ which allows you to unwrap a failure, make a modification, and wrap the modification as a new failure. This is a convenience wrapper to native {dry_monads_link} `#alt_map` functionality.
188
188
 
189
189
  Accepts and answers a failure. Example:
190
190
 
@@ -196,7 +196,7 @@ pipe Success("Pass"), amap { |object| "#{object}!" } # Success "Pass"
196
196
 
197
197
  ===== as
198
198
 
199
- Allows you to message an object as a different result. The first argument is the method but additional positional and/or keyword arguments can be passed along if the method accepts them.
199
+ Allows you to message an object _as_ a different result. The first argument is always the method to message but additional positional and/or keyword arguments can be passed along if the method accepts them.
200
200
 
201
201
  Accepts and answers a success. Example:
202
202
 
@@ -209,7 +209,7 @@ pipe Failure("Danger!"), as(:inspect) # Failure "Danger!"
209
209
 
210
210
  ===== bind
211
211
 
212
- Allows you to perform operations upon success only. You are then responsible for answering a success or failure accordingly. This is a convenience wrapper to native {dry_monads_link} `#bind` functionality.
212
+ Allows you to perform operations upon success only. You are responsible for answering a success or failure accordingly. This is a convenience wrapper to native {dry_monads_link} `#bind` functionality.
213
213
 
214
214
  Accepts a success while answering either a success or failure. Example:
215
215
 
@@ -235,7 +235,7 @@ pipe Failure("Danger!"), check(%i[a b], :include?) # Failure "Danger!"
235
235
 
236
236
  ===== fmap
237
237
 
238
- Allows you to unwrap a success, make a modification, and wrap the modification as a new success. This is a convenience wrapper to native {dry_monads_link} `#fmap` functionality.
238
+ Short for _function map_ which allows you to unwrap a success, make a modification, and wrap the modification as a new success. This is a convenience wrapper to native {dry_monads_link} `#fmap` functionality.
239
239
 
240
240
  Accepts and answers a success. Example:
241
241
 
@@ -247,7 +247,9 @@ pipe Failure("Danger!"), fmap { |object| object.join "-" } # Failure "Danger!"
247
247
 
248
248
  ===== insert
249
249
 
250
- Allows you to insert an element after an object (default behavior) as a single array. This step wraps native link:https://rubyapi.org/o/array#method-i-insert[Array#insert] functionality. If the object is not an array, it will be cast as one. You can use the `:at` key to specify where you want insertion to happen. This step is most useful when needing to assemble _positional_ arguments for passing as an array to a subsequent step.
250
+ Allows you to insert one or more elements after an object (default behavior) as a single array. This step wraps native link:https://rubyapi.org/o/array#method-i-insert[Array#insert] functionality. If the object is not an array, it will be cast as one. You can use the `:at` key to specify where you want insertion to happen. This step is most useful when needing to assemble _positional_ arguments for passing to a subsequent step.
251
+
252
+ ⚠️ If given an array from the previous step, this step will mutate it.
251
253
 
252
254
  Accepts and answers a success. Example:
253
255
 
@@ -256,6 +258,9 @@ Accepts and answers a success. Example:
256
258
  pipe :a, insert(:b) # Success [:a, :b]
257
259
  pipe :a, insert(:b, at: 0) # Success [:b, :a]
258
260
  pipe %i[a c], insert(:b, at: 1) # Success [:a, :b, :c]
261
+ pipe :a, insert(:b, :c) # Success [:a, :b, :c]
262
+ pipe :a, insert([:b]) # Success [:a, [:b]]
263
+ pipe :a, insert({b: 2}) # Success [:a, {b: 2}]
259
264
  pipe Failure("Danger!"), insert(:b) # Failure "Danger!"
260
265
  ----
261
266
 
@@ -268,6 +273,7 @@ Accepts and answers a success. Example:
268
273
  [source,ruby]
269
274
  ----
270
275
  pipe %i[a b c], map(&:inspect) # Success [":a", ":b", ":c"]
276
+ pipe %i[a b c], map { "#{it}1" } # Success ["a1", "b1", "c1"]
271
277
  pipe Failure("Danger!"), map(&:inspect) # Failure "Danger!"
272
278
  ----
273
279
 
@@ -275,19 +281,22 @@ pipe Failure("Danger!"), map(&:inspect) # Failure "Danger!"
275
281
 
276
282
  Allows you to merge an object with additional attributes as a single hash. This step wraps native link:https://rubyapi.org/o/hash#method-i-merge[Hash#merge] functionality. If the input is not a hash, then the object will be merged with `step` as the key. The default `step` key can be renamed to a different key by using the `:as` key. Like the _insert_ step, this step is most useful when assembling _keyword_ arguments and/or a hash for a subsequent steps.
277
283
 
284
+ ⚠️ If given a hash from the previous step, this step will mutate it.
285
+
278
286
  Accepts and answers a success. Example:
279
287
 
280
288
  [source,ruby]
281
289
  ----
282
290
  pipe({a: 1}, merge(b: 2)) # Success {a: 1, b: 2}
283
- pipe "test", merge(b: 2) # Success {step: "test", b: 2}
284
- pipe "test", merge(as: :a, b: 2) # Success {a: "test", b: 2}
291
+ pipe({a: 1}, merge(b: 2, c: 3)) # Success {a: 1, b: 2, c: 3}
292
+ pipe "demo", merge(b: 2) # Success {step: "demo", b: 2}
293
+ pipe "demo", merge(as: :a, b: 2) # Success {a: "demo", b: 2}
285
294
  pipe Failure("Danger!"), merge(b: 2) # Failure "Danger!"
286
295
  ----
287
296
 
288
297
  ===== tee
289
298
 
290
- Allows you to run an operation and ignore the response while input is passed through as output. This behavior is similar in nature to the link:https://www.gnu.org/savannah-checkouts/gnu/gawk/manual/html_node/Tee-Program.html[tee] program in Bash.
299
+ Allows you to run an operation and ignore the response while input is passed through as output. This behavior is similar in nature to the link:https://www.gnu.org/savannah-checkouts/gnu/gawk/manual/html_node/Tee-Program.html[tee] Bash program.
291
300
 
292
301
  Accepts either a success or failure and passes the result through while allowing you to execute arbitrary behavior. Example:
293
302
 
@@ -361,7 +370,7 @@ pipe Failure("Danger!"), use(function) # Failure "Danger!"
361
370
 
362
371
  Allows you to use an contract for validating an object. This is especially useful when using {dry_schema_link}, {dry_validation_link}, or any contract that responds to `#call` and answers a `Result`.
363
372
 
364
- By default, the `:as` key's value is `nil`. Use `:to_h`, for example, as the value for automatic casting to a `Hash`. You can also pass in any value to the `:as` key which is a valid method that the contract's result will respond to.
373
+ By default, the `:as` key's value is `nil`. Use `:to_h`, for example, as the value for automatic casting to a `Hash`. You can also pass any value to the `:as` key which is a valid method that the contract's result will respond to.
365
374
 
366
375
  Accepts a success and rewraps as a success if the `:as` keyword is supplied. Otherwise, any failure is immediately passed through. Example:
367
376
 
@@ -637,7 +646,7 @@ The following might be of aid to as you implement your own pipes.
637
646
  If you get a `TypeError: Step must be functionally composable and answer a monad`, it means:
638
647
 
639
648
  . The step must be a `Proc`, `Method`, or any object which responds to `\#>>`, `#<<`, and `#call`.
640
- . The step doesn't answer a result monad (i.e. `Success object` or `Failure object`).
649
+ . The step doesn't answer a result monad (i.e. `Success` or `Failure`).
641
650
 
642
651
  ==== No Method Errors
643
652
 
@@ -6,22 +6,21 @@ module Pipeable
6
6
  class Insert < Abstract
7
7
  LAST = -1
8
8
 
9
- def initialize(*positionals, at: LAST, **)
10
- super(*positionals, **)
11
- @value = positionals.empty? ? base_keywords : positionals.flatten
9
+ def initialize(*, at: LAST)
10
+ super(*)
12
11
  @at = at
13
12
  end
14
13
 
15
14
  def call result
16
15
  result.fmap do |object|
17
16
  cast = object.is_a?(Array) ? object : [object]
18
- value.is_a?(Array) ? cast.insert(at, *value) : cast.insert(at, value)
17
+ cast.insert(at, *base_positionals)
19
18
  end
20
19
  end
21
20
 
22
21
  private
23
22
 
24
- attr_reader :value, :at
23
+ attr_reader :at
25
24
  end
26
25
  end
27
26
  end
data/pipeable.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "pipeable"
5
- spec.version = "1.0.0"
5
+ spec.version = "1.1.0"
6
6
  spec.authors = ["Brooke Kuhlmann"]
7
7
  spec.email = ["brooke@alchemists.io"]
8
8
  spec.homepage = "https://alchemists.io/projects/pipeable"
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.required_ruby_version = "~> 3.4"
26
26
  spec.add_dependency "containable", "~> 1.0"
27
27
  spec.add_dependency "dry-monads", "~> 1.6"
28
- spec.add_dependency "marameters", "~> 4.0"
28
+ spec.add_dependency "marameters", "~> 4.1"
29
29
  spec.add_dependency "refinements", "~> 13.0"
30
30
  spec.add_dependency "zeitwerk", "~> 2.7"
31
31
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pipeable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -34,7 +34,7 @@ cert_chain:
34
34
  3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
35
35
  gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
36
36
  -----END CERTIFICATE-----
37
- date: 2024-12-28 00:00:00.000000000 Z
37
+ date: 2025-01-10 00:00:00.000000000 Z
38
38
  dependencies:
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: containable
@@ -70,14 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '4.0'
73
+ version: '4.1'
74
74
  type: :runtime
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: '4.0'
80
+ version: '4.1'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: refinements
83
83
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file