ex_aequo_base 0.1.14 → 0.1.16

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: 1746c1c418c8045c824b5743d8e96f92b65df9ad7ec48f3a16a1f8f6968195d7
4
- data.tar.gz: e119d80827e15cd36717a0b44f86c790afe3b1e874db7b886dd7aab77cdc1d8e
3
+ metadata.gz: 2bcb8cf68f1e277f44cb2f376b5f49a1e4683a02b136e9dd15a07a993d4ddf33
4
+ data.tar.gz: 35848bf635324d4756242bc20cdad347d13566df3c5a61d56a9640e068a4de23
5
5
  SHA512:
6
- metadata.gz: 3afb8dc073f636eff99e555f38c3605a6e63f37e64b0b03f4b27f3114454c0d27b876902f5e014f59059427e424ca3c5cf363d78bcd0adbdb92d10f08e7a106c
7
- data.tar.gz: c6bf9c7f3f1fd1c8dd4de097bee04290578b03e1df8d797e247bb67d603fdd566b3832d821d06353fc955b49a4ddcd314c85101ea8143c65cacaff6edb65306d
6
+ metadata.gz: 92e30c26cf1037714ba1139418b6e8e0a5ac40f5a3db9f17d114330d8ae736ba4be875c09f2a2357aae3ece8d28fbcb67c1c773af2d3a9a502fc96364701a097
7
+ data.tar.gz: 9e5d71d974b20eda0572cda76332b916a8cc69a4f1b25de3fc625d8725f4841a99db1c5199d3eafe9e1c60e84da9f5f9fe7680b0a3959ec5dd5781f488a335f2
@@ -4,8 +4,10 @@ require_relative 'enumerable'
4
4
  require_relative 'fn'
5
5
  require_relative 'forwarder'
6
6
  require_relative 'kernel'
7
+ require_relative 'import_none'
7
8
  require_relative 'open_struct'
8
9
  require_relative 'regexp'
10
+ require_relative 'string'
9
11
  # require_relative 'match_data'
10
12
  # Colorize = ExAequo::Base::Colorize
11
13
  # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ExAequo
4
+ module Base
5
+ module Enumerable
6
+ module Hash
7
+ class Helper
8
+ def slice_and_rest(keys, default:, ignore:)
9
+ return strict_slice_and_rest!(keys) if None == default && !ignore
10
+ return ignoring_slice_and_rest(keys) if None == default
11
+
12
+ defaulted_slice_and_rest(keys, default:)
13
+ end
14
+
15
+ private
16
+ def initialize(hash)
17
+ @hash = hash
18
+ end
19
+
20
+ def defaulted_slice_and_rest(keys, default:)
21
+ rest = @hash.dup
22
+ slice = keys.inject ::Hash.new do |r, k|
23
+ value = @hash.fetch(k, default)
24
+ rest.delete(k)
25
+ r.merge(k => value)
26
+ end
27
+ [slice, rest]
28
+ end
29
+
30
+ def ignoring_slice_and_rest(keys)
31
+ rest = @hash.dup
32
+ slice = keys.inject ::Hash.new do |r, k|
33
+ if rest.has_key?(k)
34
+ value = @hash.fetch(k)
35
+ rest.delete(k)
36
+ r.merge(k => value)
37
+ else
38
+ r
39
+ end
40
+ end
41
+ [slice, rest]
42
+ end
43
+
44
+ def strict_slice_and_rest!(keys)
45
+ rest = @hash.dup
46
+ slice = keys.inject ::Hash.new do |r, k|
47
+ value = rest.fetch(k)
48
+ rest.delete(k)
49
+ r.merge(k => value)
50
+ end
51
+ [slice, rest]
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'ex_aequo/base/import_none'
4
+ require_relative 'hash/helper'
5
+
3
6
  module ExAequo
4
7
  module Base
5
8
  module Enumerable
@@ -18,6 +21,13 @@ module ExAequo
18
21
  def mapv(&blk)
19
22
  maph { |k, v| [k, blk.(v)] }
20
23
  end
24
+
25
+ def slice_and_rest(*keys, default: None, ignore: false)
26
+ raise ArgumentError, "must not provide default: and ignore: kwds" unless default == None || !ignore
27
+ raise ArgumentError, "ignore keyword must be a boolean, not #{ignore}" unless [false, true].include? ignore
28
+
29
+ Helper.new(self).slice_and_rest(keys, default:, ignore:)
30
+ end
21
31
  end
22
32
  end
23
33
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ require_relative 'none'
3
+
4
+ None = ExAequo::Base::None
5
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ExAequo
4
+ module Base
5
+ None = Object.new.freeze
6
+ end
7
+ end
8
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'to_proc/string'
4
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ class String
3
+ def to_proc
4
+ -> { it.include?(self) ? it : nil }
5
+ end
6
+ end
7
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ExAequo
4
4
  module Base
5
- VERSION = '0.1.14'
5
+ VERSION = '0.1.16'
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: AGPL-3.0-or-later
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ex_aequo_base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
@@ -54,6 +54,7 @@ files:
54
54
  - lib/ex_aequo/base/enumerable.rb
55
55
  - lib/ex_aequo/base/enumerable/array.rb
56
56
  - lib/ex_aequo/base/enumerable/hash.rb
57
+ - lib/ex_aequo/base/enumerable/hash/helper.rb
57
58
  - lib/ex_aequo/base/enumerable/helper.rb
58
59
  - lib/ex_aequo/base/enumerable_helper.rb
59
60
  - lib/ex_aequo/base/fn.rb
@@ -62,16 +63,20 @@ files:
62
63
  - lib/ex_aequo/base/fn/helpers.rb
63
64
  - lib/ex_aequo/base/forwarder.rb
64
65
  - lib/ex_aequo/base/import_all.rb
66
+ - lib/ex_aequo/base/import_none.rb
65
67
  - lib/ex_aequo/base/kernel.rb
66
68
  - lib/ex_aequo/base/kernel/kernel_helper.rb
67
69
  - lib/ex_aequo/base/match_data.rb
70
+ - lib/ex_aequo/base/none.rb
68
71
  - lib/ex_aequo/base/open_struct.rb
69
72
  - lib/ex_aequo/base/regexp.rb
73
+ - lib/ex_aequo/base/string.rb
70
74
  - lib/ex_aequo/base/string/colorize.rb
71
75
  - lib/ex_aequo/base/to_proc.rb
72
76
  - lib/ex_aequo/base/to_proc/false_class.rb
73
77
  - lib/ex_aequo/base/to_proc/nil_class.rb
74
78
  - lib/ex_aequo/base/to_proc/regexp.rb
79
+ - lib/ex_aequo/base/to_proc/string.rb
75
80
  - lib/ex_aequo/base/to_proc/true_class.rb
76
81
  - lib/ex_aequo/base/version.rb
77
82
  homepage: https://codeberg.org/lab419/rb_ex_aequo_base