more_core_extensions 3.7.0 → 3.8.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
- SHA1:
3
- metadata.gz: 45280e85179a5cec518a1a078c3ef57502042771
4
- data.tar.gz: a38d6af1cc7f313f4f0254fd466ba3c8309d42cd
2
+ SHA256:
3
+ metadata.gz: 524540f9e367a22c26d7512ba3a1b6fea7853f00cb9c982b847c38647afb50ce
4
+ data.tar.gz: 8ec0767016594dc332cfb62c47bf1807f1c9a0f709f0663c454bdd47bb4bb9b6
5
5
  SHA512:
6
- metadata.gz: ca86d8e6a9a9ff26fbc1a6a5ad96d2b7ef05dc637f9474f0f160bee51b38e97d625cbc6ff85c7765886f38947b924f528c54ea7c99fa3e2fe1a4fcadac2e706b
7
- data.tar.gz: 68af4c4bb3230ece550bc6908016bd4faf5f2f495f4c9e9871704203aeac84fa83b576fa6654d20444f3197b5ce4b57c9bb988f87a6cdbe466ce073e4ddca8ca
6
+ metadata.gz: 6fe6963df47f3334862545d9ab33870a0de051cc5766e62041441fe4a2b51f15fc66d243b36e794470c8db00db45a6864dcbbd26a1df233caa90ebe2c1fb7ec3
7
+ data.tar.gz: fee6fc9df914d2d24f9167503e1ede607f79f7700f444f61803429af7dbc35e0f625f9a69ce5bcc2d65429c9e1d80004b27b41033ddb83bf9156eb86c34c815d
@@ -4,6 +4,15 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [3.8.0] - 2020-01-31
8
+ ### Changed
9
+ - Renamed Enumerable#stable_sort_by to Array#tabular_sort [[#68](https://github.com/ManageIQ/more_core_extensions/pull/68)]
10
+ - Deprecated Enumerable#stable_sort_by [[#74](https://github.com/ManageIQ/more_core_extensions/pull/74)]
11
+
12
+ ### Added
13
+ - Added Class#leaf_subclasses [[#71](https://github.com/ManageIQ/more_core_extensions/pull/71)]
14
+ - Added Array#compact_map [[#63](https://github.com/ManageIQ/more_core_extensions/pull/63)]
15
+
7
16
  ## [3.7.0] - 2019-02-04
8
17
  ### Added
9
18
  - Added Enumerable#stable_sort_by [[#67](https://github.com/ManageIQ/more_core_extensions/pull/67)]
data/README.md CHANGED
@@ -49,6 +49,7 @@ MoreCoreExtensions are a set of core extensions beyond those provided by ActiveS
49
49
  * core_ext/class/hierarchy.rb
50
50
  * `#hierarchy` - Returns a tree-like Hash structure of all descendants.
51
51
  * `#lineage` - Returns an Array of all superclasses.
52
+ * `#leaf_subclasses` - Returns an Array of all descendants which have no subclasses.
52
53
 
53
54
  #### Hash
54
55
 
@@ -1,3 +1,4 @@
1
+ require 'more_core_extensions/core_ext/array/compact_map'
1
2
  require 'more_core_extensions/core_ext/array/deletes'
2
3
  require 'more_core_extensions/core_ext/array/duplicates'
3
4
  require 'more_core_extensions/core_ext/array/element_counts'
@@ -5,5 +6,6 @@ require 'more_core_extensions/core_ext/array/inclusions'
5
6
  require 'more_core_extensions/core_ext/array/math'
6
7
  require 'more_core_extensions/core_ext/array/nested'
7
8
  require 'more_core_extensions/core_ext/array/random'
9
+ require 'more_core_extensions/core_ext/array/sorting'
8
10
  require 'more_core_extensions/core_ext/array/stretch'
9
11
  require 'more_core_extensions/core_ext/array/tableize'
@@ -0,0 +1,19 @@
1
+ module MoreCoreExtensions
2
+ module ArrayCompactMap
3
+ # Collect non-nil results from the block. Basically [].collect { |i| ... }.compact
4
+ #
5
+ # [1,2,3,4,5].compact_map { |i| i * 2 if i.odd?} # => [2,6,10]
6
+ def compact_map
7
+ return enum_for(:compact_map) unless block_given?
8
+
9
+ [].tap do |results|
10
+ each do |i|
11
+ result = yield(i)
12
+ results << result if result
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ Array.send(:include, MoreCoreExtensions::ArrayCompactMap)
@@ -0,0 +1,35 @@
1
+ module MoreCoreExtensions
2
+ module StableSorting
3
+ def tabular_sort(col_names = nil, order = nil, &block)
4
+ # stabilizer is needed because of
5
+ # http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/170565
6
+ stabilizer = 0
7
+ nil_rows, sortable =
8
+ partition do |r|
9
+ Array(col_names).any? { |c| r[c].nil? }
10
+ end
11
+
12
+ data_array =
13
+ if col_names
14
+ sortable.sort_by do |r|
15
+ stabilizer += 1
16
+ [Array(col_names).map do |col|
17
+ val = r[col]
18
+ val = val.downcase if val.kind_of?(String)
19
+ val = val.to_s if val.kind_of?(FalseClass) || val.kind_of?(TrueClass)
20
+ val
21
+ end, stabilizer]
22
+ end
23
+ else
24
+ sortable.sort_by(&block)
25
+ end.to_a
26
+
27
+ data_array += nil_rows
28
+
29
+ data_array.reverse! if order == :descending
30
+ data_array
31
+ end
32
+ end
33
+ end
34
+
35
+ Array.send(:include, MoreCoreExtensions::StableSorting)
@@ -24,6 +24,15 @@ module MoreCoreExtensions
24
24
  def lineage
25
25
  superclass.nil? ? [] : superclass.lineage.unshift(superclass)
26
26
  end
27
+
28
+ # Returns an Array of all descendants which have no subclasses
29
+ #
30
+ # require 'socket'
31
+ # BasicSocket.leaf_subclasses
32
+ # # => [Socket, TCPServer, UDPSocket, UNIXServer]
33
+ def leaf_subclasses
34
+ descendants.select { |d| d.subclasses.empty? }
35
+ end
27
36
  end
28
37
  end
29
38
 
@@ -2,34 +2,10 @@ module MoreCoreExtensions
2
2
  module StableSorting
3
3
  def self.included(klass)
4
4
  klass.class_eval do
5
- def stable_sort_by(col_names = nil, order = nil, &block)
6
- # stabilizer is needed because of
7
- # http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/170565
8
- stabilizer = 0
9
- nil_rows, sortable =
10
- partition do |r|
11
- Array(col_names).any? { |c| r[c].nil? }
12
- end
13
-
14
- data_array =
15
- if col_names
16
- sortable.sort_by do |r|
17
- stabilizer += 1
18
- [Array(col_names).map do |col|
19
- val = r[col]
20
- val = val.downcase if val.kind_of?(String)
21
- val = val.to_s if val.kind_of?(FalseClass) || val.kind_of?(TrueClass)
22
- val
23
- end, stabilizer]
24
- end
25
- else
26
- sortable.sort_by(&block)
27
- end.to_a
28
-
29
- data_array += nil_rows
30
-
31
- data_array.reverse! if order == :descending
32
- data_array
5
+ # <b>DEPRECATED:</b> Please use <tt>tabular_sort</tt> instead.
6
+ def stable_sort_by(*args)
7
+ warn "[DEPRECATION] `stable_sort_by` is deprecated. Please use `Array#tabular_sort` instead."
8
+ to_a.tabular_sort(*args)
33
9
  end
34
10
  end
35
11
  end
@@ -1,3 +1,3 @@
1
1
  module MoreCoreExtensions
2
- VERSION = "3.7.0".freeze
2
+ VERSION = "3.8.0".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: more_core_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.0
4
+ version: 3.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Frey
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-02-04 00:00:00.000000000 Z
12
+ date: 2020-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -133,6 +133,7 @@ files:
133
133
  - lib/more_core_extensions.rb
134
134
  - lib/more_core_extensions/all.rb
135
135
  - lib/more_core_extensions/core_ext/array.rb
136
+ - lib/more_core_extensions/core_ext/array/compact_map.rb
136
137
  - lib/more_core_extensions/core_ext/array/deletes.rb
137
138
  - lib/more_core_extensions/core_ext/array/duplicates.rb
138
139
  - lib/more_core_extensions/core_ext/array/element_counts.rb
@@ -140,6 +141,7 @@ files:
140
141
  - lib/more_core_extensions/core_ext/array/math.rb
141
142
  - lib/more_core_extensions/core_ext/array/nested.rb
142
143
  - lib/more_core_extensions/core_ext/array/random.rb
144
+ - lib/more_core_extensions/core_ext/array/sorting.rb
143
145
  - lib/more_core_extensions/core_ext/array/stretch.rb
144
146
  - lib/more_core_extensions/core_ext/array/tableize.rb
145
147
  - lib/more_core_extensions/core_ext/benchmark.rb
@@ -195,8 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
197
  - !ruby/object:Gem::Version
196
198
  version: '0'
197
199
  requirements: []
198
- rubyforge_project:
199
- rubygems_version: 2.6.14.3
200
+ rubygems_version: 3.0.6
200
201
  signing_key:
201
202
  specification_version: 4
202
203
  summary: MoreCoreExtensions are a set of core extensions beyond those provided by