more_core_extensions 3.8.0 → 4.0.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: 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)