ManageIQ/more_core_extensions

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# MoreCoreExtensions

MoreCoreExtensions are a set of core extensions beyond those provided by ActiveSupport.

[![Gem Version](https://badge.fury.io/rb/more_core_extensions.svg)](http://badge.fury.io/rb/more_core_extensions)
[![CI](https://github.com/ManageIQ/more_core_extensions/actions/workflows/ci.yaml/badge.svg)](https://github.com/ManageIQ/more_core_extensions/actions/workflows/ci.yaml)
[![Code Climate](https://codeclimate.com/github/ManageIQ/more_core_extensions.svg)](https://codeclimate.com/github/ManageIQ/more_core_extensions)
[![Coverage Status](http://img.shields.io/coveralls/ManageIQ/more_core_extensions.svg)](https://coveralls.io/r/ManageIQ/more_core_extensions)

[![Join the chat at https://gitter.im/ManageIQ/more_core_extensions](https://badges.gitter.im/ManageIQ/more_core_extensions.svg)](https://gitter.im/ManageIQ/more_core_extensions?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

## Extensions Provided

#### Array

* core_ext/array/compact_map.rb
  * `#compact_map` - Collect non-nil results from the block
* core_ext/array/deletes.rb
  * `#delete_blanks` - Deletes all items where the value is blank
  * `#delete_nils` - Deletes all items where the value is nil
  * `#deep_delete` - Deletes nested hash key elements
* core_ext/array/duplicates.rb
  * `#duplicates` - Returns an Array of the duplicates found
* core_ext/array/element_counts.rb
  * `#element_counts` - Returns a Hash of each element to the count of those elements
* core_ext/array/inclusions.rb
  * `#include_all?` - Returns whether the Array contains all of the items
  * `#include_any?` - Returns whether the Array contains any of the items
  * `#include_none?` - Returns whether the Array contains none of the items
  * `#includes_index?` - Returns whether the Array has a value at the index
* core_ext/array/math.rb
  * `#mean` -  Returns the mean of an Array of Numerics
  * `#stddev` - Returns the standard deviation of an Array of Numerics
  * `#variance` - Returns the variance of an Array of Numerics
* core_ext/array/nested.rb (see [Shared](#shared))
  * `#delete_blank_paths` - Deletes all paths where the value is blank
* core_ext/array/random.rb
  * `#random_index` - Picks a valid index randomly
  * `#random_element` - Picks an element randomly
* core_ext/array/sorting.rb
  * `#tabular_sort` - Sorts an Array of Hashes by specific columns
* core_ext/array/stretch.rb
  * `.stretch` - Stretch all argument Arrays to make them the same size
  * `.stretch!` - Stretch all argument Arrays to make them the same size. Modifies the arguments in place.
  * `#stretch` - Stretch receiver to be the same size as the longest argument Array.
  * `#stretch`! - Stretch receiver to be the same size as the longest argument Array.  Modifies the receiver in place.
  * `#zip_stretched` - Zip arguments stretching the receiver if necessary
* core_ext/array/tableize.rb
  * `#tableize` - Create a string representation of receiver in a tabular format if receiver is an Array of Arrays or an Array of Hashes

#### Class

* core_ext/class/hierarchy.rb
  * `#descendant_get` - Returns the descendant with a given name
  * `#hierarchy` - Returns a tree-like Hash structure of all descendants.
  * `#lineage` - Returns an Array of all superclasses.
  * `#leaf_subclasses` - Returns an Array of all descendants which have no subclasses.

#### Hash

* core_ext/hash/deletes.rb
  * `#delete_blanks` - Deletes all keys where the value is blank
  * `#delete_nils` - Deletes all keys where the value is nil
  * `#deep_delete` - Deletes nested hash key elements
* core_ext/hash/nested.rb (see [Shared](#shared))
  * `#delete_blank_paths` - Deletes all paths where the value is blank
* core_ext/hash/sorting.rb (see [Shared](#shared))
  * `#sort!` - Replace the original with the sorted hash
  * `#sort_by!` - Replace the original with the sorted_by hash

#### Module

* core_ext/module/cache_with_timeout.rb
  * `#cache_with_timeout` - Creates singleton methods that cache the results of the given block, but only for a short amount of time.
  * `.clear_all_cache_with_timeout` - Globally clears all cached values across all classes.
* core_ext/module/namespace.rb
  * `#namespace` - Returns an Array with the namespace to the current Module

#### Numeric

* core_ext/numeric/clamp.rb
  * `#clamp` - Clamp a number to a minimum and/or maximum value
* core_ext/numeric/math.rb
  * `#square` - Returns the square of a Numeric
* core_ext/numeric/rounding.rb
  * `#round_down` - Round down to the specified precision
  * `#round_up` - Round up to the specified precision

#### Object

* core_ext/module/deep_send.rb
  * `#deep_send` - Invokes the specified methods continuously, unless encountering a nil value.
* core_ext/module/namespace.rb
  * `#in_namespace?` - Returns whether or not the object is in the given namespace

#### Process

* core_ext/process/pause_resume.rb
  * `.pause` - Pauses a process
  * `.resume` - Resumes a paused process
  * `.alive?` - Returns whether or not a process is running

#### Range

* core_ext/range/step_value.rb
  * `#step_value` - Step through a range at a given increment

#### String

* core_ext/string/decimal_suffix.rb
  * `#decimal_si_to_big_decimal` - Returns a BigDecimal based on the number and suffix given
  * `#decimal_si_to_f` - Returns a Float based on the number and suffix given
* core_ext/string/formats.rb
  * `#email?` - Returns whether or not the String is an= valid email
  * `#domain_name?` - Returns whether or not the String is a valid domain name
  * `#hostname?` - Returns whether or not the String is a valid hostname
  * `#ipv4?` - Returns whether or not the String is an IPv4 address
  * `#ipv6?` - Returns whether or not the String is an IPv6 address
  * `#ipaddress?` - Returns whether or not the String is an IPv4 or IPv6 address
  * `#integer?` - Returns whether or not the String is an integer
  * `#guid?` - Returns whether or not the String is a valid GUID
* core_ext/string/hex_dump.rb
  * `#hex_dump` - Dumps the string in a hex editor style format
* core_ext/string/iec60027_2.rb
  * `#iec_60027_2_to_i` - Convert strings with an IEC60027-2 suffix to an integer
* core_ext/string/to_i_with_method.rb
  * `#to_f_with_method` - Converts to a Float while also evaluating a method invocation
  * `#to_i_with_method` - Converts to an Integer while also evaluating a method invocation
  * `#number_with_method?` - Determines if the object contains a number with a method invocation

#### Symbol

* core_ext/symbol/to_i.rb
  * `#to_i` - Returns the integer value of a symbol

#### Shared

* core_ext/shared/nested.rb
  * `#deep_clone` - Performs a Marshal based deep clone
  * `#delete_path` - Delete the value at the specified nesting
  * `#fetch_path` - Fetch the value at the specified nesting
  * `#find_path` - Detect which nesting holds the specified value
  * `#has_key_path?` - Check if a key exists at the specified nesting
  * `#include_path?` - alias of `#has_key_path?`
  * `#key_path?` - alias of `#has_key_path?`
  * `#member_path?` - alias of `#has_key_path?`
  * `#store_path` - Store a value at the specified nesting

## Installation

Add this line to your application's Gemfile:

    gem 'more_core_extensions'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install more_core_extensions

## Contributing

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request

## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).