tins 1.35.0 → 1.36.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c4cb4ab5a9b7debca4a2b25d7661de1f7ebe75bccf738d88a02c4b9480bc887f
4
- data.tar.gz: d73eb031538b6daa98e70c46caadf288415716451ffb4cabf808d2b35e3e2438
3
+ metadata.gz: b3d0d3b142299555332881bdd390e8cb2fc4137cbbb92864e96c835790d1f943
4
+ data.tar.gz: c287721ce6b44fb9a1cc4faed1eee2d6f0df250a92c389e811bc033b9c24a48a
5
5
  SHA512:
6
- metadata.gz: 4bde944cf28e96f8de0227e579aaeae21ca2195dc733ca08726ebd097a52fe848b244db7dd30bf1f97db635e774ce5c976c0c2e335a5873e22ce1b63423cb776
7
- data.tar.gz: fa80a61808dcfd564606ed06cf6f32384df4ddaa9c8116f3a07b3a17b80b5234df26c73c9d758a05ec2db9237ff7707664ff094d82ef2e4611ca37317ef67039
6
+ metadata.gz: 6a950643986122ff5e47e419657dbe5f76ffe1d1c80927ab9767297672a5296d08b84479b0ae03fcf7d5112c5297cdc3d8993425488c203321615dad441d7c6d
7
+ data.tar.gz: abec6e88bb19153688f7e5c8069c3ac13fcff850aa9860f4924b360bdb53608d82deabbb8d0d35a234ff84e8149869861fe94b8963ba1187e7ae252d1bafe7af
data/CHANGES.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changes
2
2
 
3
+ ## 2024-10-11 v1.36.0
4
+
5
+ ### Significant Changes
6
+
7
+ * Refactor bfs method in `hash_bfs.rb`:
8
+ + Rename `include_nodes` variable to `visit_interal`
9
+ + Update test cases in `hash_bfs_test.rb` to use new method signature
10
+ + Update method signature and docstring to reflect new behavior
11
+ * Update hash conversion logic:
12
+ + Rename method parameter from `v` to `object`
13
+ + Use `object` instead of `v` consistently throughout the method
14
+ + Add documentation for new method name and behavior
15
+
3
16
  ## 2024-10-10 v1.35.0
4
17
 
5
18
  ### New Features
@@ -23,8 +36,6 @@
23
36
 
24
37
  ## 2024-09-30 v1.34.0
25
38
 
26
- ### Changes in **1.34.0**
27
-
28
39
  * **Secure write functionality updated**
29
40
  + Added support for `Pathname` objects in `secure_write`
30
41
  + Updated `File.new` call to use `to_s` method on filename
data/lib/tins/hash_bfs.rb CHANGED
@@ -6,10 +6,21 @@ module Tins
6
6
 
7
7
  thread_local :seen
8
8
 
9
- def bfs(include_nodes: false, &block)
9
+ # The bfs method performs a breadth-first search on the object's structure,
10
+ # visiting all elements and yielding their indices and values to the block.
11
+ #
12
+ # @param visit_interal [ true, false ] whether to visit internal hashes or arrays
13
+ # @yield [ index, value ] yields each element's index and value to the block
14
+ #
15
+ # @raise [ ArgumentError ] if no &block argument was provided
16
+ #
17
+ # @example bfs { |index, value| … } # performs a breadth-first search on the object's structure
18
+ #
19
+ # @return [ self ] returns the receiver
20
+ def bfs(visit_interal: false, &block)
10
21
  block or raise ArgumentError, 'require &block argument'
11
22
  self.seen = {}
12
- queue = []
23
+ queue = []
13
24
  queue.push([ nil, self ])
14
25
  while (index, object = queue.shift)
15
26
  case
@@ -20,13 +31,13 @@ module Tins
20
31
  object.each do |k, v|
21
32
  queue.push([ k, convert_to_hash_or_ary(v) ])
22
33
  end
23
- include_nodes or next
34
+ visit_interal or next
24
35
  when Array === object
25
36
  seen[object.__id__] = true
26
37
  object.each_with_index do |v, i|
27
38
  queue.push([ i, convert_to_hash_or_ary(v) ])
28
39
  end
29
- include_nodes or next
40
+ visit_interal or next
30
41
  end
31
42
  block.(index, object)
32
43
  end
@@ -35,14 +46,19 @@ module Tins
35
46
  self.seen = nil
36
47
  end
37
48
 
38
- def convert_to_hash_or_ary(v)
49
+ # Converts the given object into a hash or array if possible
50
+ #
51
+ # @param object [Object] The object to convert
52
+ #
53
+ # @return [Hash, Array, Object] The converted object or itself if not convertible
54
+ def convert_to_hash_or_ary(object)
39
55
  case
40
- when v.respond_to?(:to_hash)
41
- v = v.to_hash
42
- when v.respond_to?(:to_ary)
43
- v = v.to_ary
56
+ when object.respond_to?(:to_hash)
57
+ object.to_hash
58
+ when object.respond_to?(:to_ary)
59
+ object.to_ary
44
60
  else
45
- v
61
+ object
46
62
  end
47
63
  end
48
64
  end
data/lib/tins/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Tins
2
2
  # Tins version
3
- VERSION = '1.35.0'
3
+ VERSION = '1.36.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -15,7 +15,7 @@ module Tins
15
15
 
16
16
  def test_with_nodes
17
17
  results = []
18
- @hash.bfs(include_nodes: true) { |*a| results.push(a) }
18
+ @hash.bfs(visit_interal: true) { |*a| results.push(a) }
19
19
  assert_equal(
20
20
  [[nil, {a:"foo", b:[{c:"baz"}, {d:"quux"}, ["blub"]]}], [:a, "foo"],
21
21
  [:b, [{c:"baz"}, {d:"quux"}, ["blub"]]], [0, {c:"baz"}], [1, {d:"quux"}],
@@ -27,7 +27,7 @@ module Tins
27
27
  def test_with_nodes_with_circle
28
28
  results = []
29
29
  @hash[:b].last << @hash
30
- @hash.bfs(include_nodes: true) { |*a| results.push(a) }
30
+ @hash.bfs(visit_interal: true) { |*a| results.push(a) }
31
31
  assert_equal 9, results.size
32
32
  end
33
33
  end
data/tins.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: tins 1.35.0 ruby lib
2
+ # stub: tins 1.36.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "tins".freeze
6
- s.version = "1.35.0".freeze
6
+ s.version = "1.36.0".freeze
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2024-10-10"
11
+ s.date = "2024-10-11"
12
12
  s.description = "All the stuff that isn't good/big enough for a real library.".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.extra_rdoc_files = ["README.md".freeze, "lib/dslkit.rb".freeze, "lib/dslkit/polite.rb".freeze, "lib/dslkit/rude.rb".freeze, "lib/spruz.rb".freeze, "lib/tins.rb".freeze, "lib/tins/alias.rb".freeze, "lib/tins/annotate.rb".freeze, "lib/tins/ask_and_send.rb".freeze, "lib/tins/attempt.rb".freeze, "lib/tins/bijection.rb".freeze, "lib/tins/case_predicate.rb".freeze, "lib/tins/complete.rb".freeze, "lib/tins/concern.rb".freeze, "lib/tins/count_by.rb".freeze, "lib/tins/date_dummy.rb".freeze, "lib/tins/date_time_dummy.rb".freeze, "lib/tins/deep_const_get.rb".freeze, "lib/tins/deep_dup.rb".freeze, "lib/tins/deprecate.rb".freeze, "lib/tins/dslkit.rb".freeze, "lib/tins/duration.rb".freeze, "lib/tins/expose.rb".freeze, "lib/tins/extract_last_argument_options.rb".freeze, "lib/tins/file_binary.rb".freeze, "lib/tins/find.rb".freeze, "lib/tins/generator.rb".freeze, "lib/tins/go.rb".freeze, "lib/tins/hash_bfs.rb".freeze, "lib/tins/hash_symbolize_keys_recursive.rb".freeze, "lib/tins/hash_union.rb".freeze, "lib/tins/if_predicate.rb".freeze, "lib/tins/implement.rb".freeze, "lib/tins/limited.rb".freeze, "lib/tins/lines_file.rb".freeze, "lib/tins/lru_cache.rb".freeze, "lib/tins/memoize.rb".freeze, "lib/tins/method_description.rb".freeze, "lib/tins/minimize.rb".freeze, "lib/tins/module_group.rb".freeze, "lib/tins/named_set.rb".freeze, "lib/tins/null.rb".freeze, "lib/tins/once.rb".freeze, "lib/tins/p.rb".freeze, "lib/tins/partial_application.rb".freeze, "lib/tins/proc_compose.rb".freeze, "lib/tins/proc_prelude.rb".freeze, "lib/tins/range_plus.rb".freeze, "lib/tins/require_maybe.rb".freeze, "lib/tins/responding.rb".freeze, "lib/tins/secure_write.rb".freeze, "lib/tins/sexy_singleton.rb".freeze, "lib/tins/string_byte_order_mark.rb".freeze, "lib/tins/string_camelize.rb".freeze, "lib/tins/string_underscore.rb".freeze, "lib/tins/string_version.rb".freeze, "lib/tins/subhash.rb".freeze, "lib/tins/temp_io.rb".freeze, "lib/tins/temp_io_enum.rb".freeze, "lib/tins/terminal.rb".freeze, "lib/tins/thread_local.rb".freeze, "lib/tins/time_dummy.rb".freeze, "lib/tins/timed_cache.rb".freeze, "lib/tins/to.rb".freeze, "lib/tins/to_proc.rb".freeze, "lib/tins/token.rb".freeze, "lib/tins/uniq_by.rb".freeze, "lib/tins/unit.rb".freeze, "lib/tins/version.rb".freeze, "lib/tins/write.rb".freeze, "lib/tins/xt.rb".freeze, "lib/tins/xt/annotate.rb".freeze, "lib/tins/xt/ask_and_send.rb".freeze, "lib/tins/xt/attempt.rb".freeze, "lib/tins/xt/blank.rb".freeze, "lib/tins/xt/case_predicate.rb".freeze, "lib/tins/xt/complete.rb".freeze, "lib/tins/xt/concern.rb".freeze, "lib/tins/xt/count_by.rb".freeze, "lib/tins/xt/date_dummy.rb".freeze, "lib/tins/xt/date_time_dummy.rb".freeze, "lib/tins/xt/deep_const_get.rb".freeze, "lib/tins/xt/deep_dup.rb".freeze, "lib/tins/xt/deprecate.rb".freeze, "lib/tins/xt/dslkit.rb".freeze, "lib/tins/xt/expose.rb".freeze, "lib/tins/xt/extract_last_argument_options.rb".freeze, "lib/tins/xt/file_binary.rb".freeze, "lib/tins/xt/full.rb".freeze, "lib/tins/xt/hash_bfs.rb".freeze, "lib/tins/xt/hash_symbolize_keys_recursive.rb".freeze, "lib/tins/xt/hash_union.rb".freeze, "lib/tins/xt/if_predicate.rb".freeze, "lib/tins/xt/implement.rb".freeze, "lib/tins/xt/irb.rb".freeze, "lib/tins/xt/method_description.rb".freeze, "lib/tins/xt/named.rb".freeze, "lib/tins/xt/null.rb".freeze, "lib/tins/xt/p.rb".freeze, "lib/tins/xt/partial_application.rb".freeze, "lib/tins/xt/proc_compose.rb".freeze, "lib/tins/xt/proc_prelude.rb".freeze, "lib/tins/xt/range_plus.rb".freeze, "lib/tins/xt/require_maybe.rb".freeze, "lib/tins/xt/responding.rb".freeze, "lib/tins/xt/secure_write.rb".freeze, "lib/tins/xt/sexy_singleton.rb".freeze, "lib/tins/xt/string.rb".freeze, "lib/tins/xt/string_byte_order_mark.rb".freeze, "lib/tins/xt/string_camelize.rb".freeze, "lib/tins/xt/string_underscore.rb".freeze, "lib/tins/xt/string_version.rb".freeze, "lib/tins/xt/subhash.rb".freeze, "lib/tins/xt/temp_io.rb".freeze, "lib/tins/xt/time_dummy.rb".freeze, "lib/tins/xt/time_freezer.rb".freeze, "lib/tins/xt/to.rb".freeze, "lib/tins/xt/uniq_by.rb".freeze, "lib/tins/xt/write.rb".freeze]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tins
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.35.0
4
+ version: 1.36.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-10 00:00:00.000000000 Z
11
+ date: 2024-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar