more_core_extensions 3.8.0 → 4.0.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: 524540f9e367a22c26d7512ba3a1b6fea7853f00cb9c982b847c38647afb50ce
4
- data.tar.gz: 8ec0767016594dc332cfb62c47bf1807f1c9a0f709f0663c454bdd47bb4bb9b6
3
+ metadata.gz: ef4118bf7eac11398770bff4fe85a32527febec7e9d8d45a4c3c91f527e4bac5
4
+ data.tar.gz: c48abbcc780d5cbe1d6284de32c106795cb0d1a268b8adb3f6212c6e838c1228
5
5
  SHA512:
6
- metadata.gz: 6fe6963df47f3334862545d9ab33870a0de051cc5766e62041441fe4a2b51f15fc66d243b36e794470c8db00db45a6864dcbbd26a1df233caa90ebe2c1fb7ec3
7
- data.tar.gz: fee6fc9df914d2d24f9167503e1ede607f79f7700f444f61803429af7dbc35e0f625f9a69ce5bcc2d65429c9e1d80004b27b41033ddb83bf9156eb86c34c815d
6
+ metadata.gz: 62c7e0dc1b63655c03c509899d60e9224e310626ceff3be2095ce4008165692877b9099a86f2a0768eae414831b24ac733d160dbb2cb2fb7ded18cdbc56488b2
7
+ data.tar.gz: f4921953a78e5370e90946da2ec7f6456124f3078688f6d0cc901857d9b5b6b98c5e8c4f34f43b885d8bb79ee62c80a45cacf9baf56a95f384b78070e1699a3f
data/CHANGELOG.md CHANGED
@@ -4,6 +4,11 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [4.0.0] - 2020-01-31
8
+ ### Changed
9
+ - **BREAKING**: Moved Object#descendant_get to Class#descendant_get [[#75](https://github.com/ManageIQ/more_core_extensions/pull/75)]
10
+ - **BREAKING**: Removed deprecated Enumerable#stable_sort_by [[#76](https://github.com/ManageIQ/more_core_extensions/pull/76)]
11
+
7
12
  ## [3.8.0] - 2020-01-31
8
13
  ### Changed
9
14
  - Renamed Enumerable#stable_sort_by to Array#tabular_sort [[#68](https://github.com/ManageIQ/more_core_extensions/pull/68)]
data/README.md CHANGED
@@ -14,6 +14,8 @@ MoreCoreExtensions are a set of core extensions beyond those provided by ActiveS
14
14
 
15
15
  #### Array
16
16
 
17
+ * core_ext/array/compact_map.rb
18
+ * `#compact_map` - Collect non-nil results from the block
17
19
  * core_ext/array/deletes.rb
18
20
  * `#delete_blanks` - Deletes all items where the value is blank
19
21
  * `#delete_nils` - Deletes all items where the value is nil
@@ -35,6 +37,8 @@ MoreCoreExtensions are a set of core extensions beyond those provided by ActiveS
35
37
  * core_ext/array/random.rb
36
38
  * `#random_index` - Picks a valid index randomly
37
39
  * `#random_element` - Picks an element randomly
40
+ * core_ext/array/sorting.rb
41
+ * `#tabular_sort` - Sorts an Array of Hashes by specific columns
38
42
  * core_ext/array/stretch.rb
39
43
  * `.stretch` - Stretch all argument Arrays to make them the same size
40
44
  * `.stretch!` - Stretch all argument Arrays to make them the same size. Modifies the arguments in place.
@@ -47,6 +51,7 @@ MoreCoreExtensions are a set of core extensions beyond those provided by ActiveS
47
51
  #### Class
48
52
 
49
53
  * core_ext/class/hierarchy.rb
54
+ * `#descendant_get` - Returns the descendant with a given name
50
55
  * `#hierarchy` - Returns a tree-like Hash structure of all descendants.
51
56
  * `#lineage` - Returns an Array of all superclasses.
52
57
  * `#leaf_subclasses` - Returns an Array of all descendants which have no subclasses.
@@ -82,8 +87,6 @@ MoreCoreExtensions are a set of core extensions beyond those provided by ActiveS
82
87
 
83
88
  #### Object
84
89
 
85
- * core_ext/module/descendants.rb
86
- * `#descendant_get` - Returns the descendant with a given name
87
90
  * core_ext/module/namespace.rb
88
91
  * `#in_namespace?` - Returns whether or not the object is in the given namespace
89
92
 
@@ -3,7 +3,6 @@ require 'more_core_extensions/version'
3
3
  require 'more_core_extensions/core_ext/array'
4
4
  require 'more_core_extensions/core_ext/benchmark'
5
5
  require 'more_core_extensions/core_ext/class'
6
- require 'more_core_extensions/core_ext/enumerable'
7
6
  require 'more_core_extensions/core_ext/hash'
8
7
  require 'more_core_extensions/core_ext/math'
9
8
  require 'more_core_extensions/core_ext/module'
@@ -1,5 +1,27 @@
1
1
  module MoreCoreExtensions
2
2
  module StableSorting
3
+ # Sorts an Array of Hashes by specific columns.
4
+ #
5
+ # Rows are sorted by +col_names+, if given, otherwise by the given block.
6
+ # The +order+ parameter can be given :ascending or :descending and
7
+ # defaults to :ascending.
8
+ #
9
+ # Note:
10
+ # - Strings are sorted case-insensitively
11
+ # - nil values are sorted last
12
+ # - Boolean values are sorted alphabetically (i.e. false then true)
13
+ #
14
+ # [
15
+ # {:col1 => 'b', :col2 => 2},
16
+ # {:col1 => 'b', :col2 => 1},
17
+ # {:col1 => 'A', :col2 => 1}
18
+ # ].tabular_sort([:col1, :col2])
19
+ #
20
+ # # => [
21
+ # # {:col1 => 'A', :col2 => 1},
22
+ # # {:col1 => 'b', :col2 => 1},
23
+ # # {:col1 => 'b', :col2 => 2}
24
+ # # ]
3
25
  def tabular_sort(col_names = nil, order = nil, &block)
4
26
  # stabilizer is needed because of
5
27
  # http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/170565
@@ -3,6 +3,22 @@ require 'active_support/core_ext/object/try'
3
3
 
4
4
  module MoreCoreExtensions
5
5
  module ClassHierarchy
6
+ # Returns the descendant with a given name
7
+ #
8
+ # require 'socket'
9
+ # IO.descendant_get("IO")
10
+ # # => IO
11
+ # IO.descendant_get("BasicSocket")
12
+ # # => BasicSocket
13
+ # IO.descendant_get("IPSocket")
14
+ # # => IPSocket
15
+ def descendant_get(desc_name)
16
+ return self if desc_name == name || desc_name.nil?
17
+ klass = descendants.find { |desc| desc.name == desc_name }
18
+ raise ArgumentError, "#{desc_name} is not a descendant of #{name}" unless klass
19
+ klass
20
+ end
21
+
6
22
  # Returns a tree-like Hash structure of all descendants.
7
23
  #
8
24
  # require 'socket'
@@ -1,3 +1,2 @@
1
1
  require 'active_support/core_ext/object/blank'
2
2
  require 'more_core_extensions/core_ext/object/namespace'
3
- require 'more_core_extensions/core_ext/object/descendants'
@@ -1,3 +1,3 @@
1
1
  module MoreCoreExtensions
2
- VERSION = "3.8.0".freeze
2
+ VERSION = "4.0.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.8.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Frey
@@ -148,8 +148,6 @@ files:
148
148
  - lib/more_core_extensions/core_ext/benchmark/realtime_store.rb
149
149
  - lib/more_core_extensions/core_ext/class.rb
150
150
  - lib/more_core_extensions/core_ext/class/hierarchy.rb
151
- - lib/more_core_extensions/core_ext/enumerable.rb
152
- - lib/more_core_extensions/core_ext/enumerable/sorting.rb
153
151
  - lib/more_core_extensions/core_ext/hash.rb
154
152
  - lib/more_core_extensions/core_ext/hash/deletes.rb
155
153
  - lib/more_core_extensions/core_ext/hash/nested.rb
@@ -164,7 +162,6 @@ files:
164
162
  - lib/more_core_extensions/core_ext/numeric/math.rb
165
163
  - lib/more_core_extensions/core_ext/numeric/rounding.rb
166
164
  - lib/more_core_extensions/core_ext/object.rb
167
- - lib/more_core_extensions/core_ext/object/descendants.rb
168
165
  - lib/more_core_extensions/core_ext/object/namespace.rb
169
166
  - lib/more_core_extensions/core_ext/range.rb
170
167
  - lib/more_core_extensions/core_ext/range/step_value.rb
@@ -1 +0,0 @@
1
- require 'more_core_extensions/core_ext/enumerable/sorting'
@@ -1,15 +0,0 @@
1
- module MoreCoreExtensions
2
- module StableSorting
3
- def self.included(klass)
4
- klass.class_eval do
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)
9
- end
10
- end
11
- end
12
- end
13
- end
14
-
15
- Enumerable.send(:include, MoreCoreExtensions::StableSorting)
@@ -1,17 +0,0 @@
1
- require 'active_support/core_ext/class/subclasses'
2
-
3
- module MoreCoreExtensions
4
- module Descendants
5
- #
6
- # Retrieve a descendant by its name
7
- #
8
- def descendant_get(desc_name)
9
- return self if desc_name == name || desc_name.nil?
10
- klass = descendants.find { |desc| desc.name == desc_name }
11
- raise ArgumentError, "#{desc_name} is not a descendant of #{name}" unless klass
12
- klass
13
- end
14
- end
15
- end
16
-
17
- Object.send(:include, MoreCoreExtensions::Descendants)