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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +5 -2
- data/lib/more_core_extensions/all.rb +0 -1
- data/lib/more_core_extensions/core_ext/array/sorting.rb +22 -0
- data/lib/more_core_extensions/core_ext/class/hierarchy.rb +16 -0
- data/lib/more_core_extensions/core_ext/object.rb +0 -1
- data/lib/more_core_extensions/version.rb +1 -1
- metadata +1 -4
- data/lib/more_core_extensions/core_ext/enumerable.rb +0 -1
- data/lib/more_core_extensions/core_ext/enumerable/sorting.rb +0 -15
- data/lib/more_core_extensions/core_ext/object/descendants.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef4118bf7eac11398770bff4fe85a32527febec7e9d8d45a4c3c91f527e4bac5
|
4
|
+
data.tar.gz: c48abbcc780d5cbe1d6284de32c106795cb0d1a268b8adb3f6212c6e838c1228
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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'
|
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:
|
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)
|