The project is in a healthy, maintained state
The immosquare-extensions gem provides a set of utility extensions for various Ruby core classes such as String, Hash, and Array. These extensions aim to enhance the standard functionality, offering more convenience and efficiency for Ruby developers.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

immosquare Extensions

Enhance your Ruby experience with utility methods for standard classes like Application Record, Array, File, Hash, String, ...

Installation

Add this line to your application's Gemfile:

gem 'immosquare-extensions'

Then execute:

$ bundle install

Or install it yourself:

$ gem install immosquare-extensions

1- Application Record Extensions (for Rails App)

.dig (This method allows you to access nested attributes of an ActiveRecord model without having to manually check if each level is nil. It will return the value of the last key if all keys are present, or nil if any key is missing.)

user = User.first
user.dig(:profile, :card_type, :slug)         # => "some-slug"
user.dig(:profile, :non_existent_key, :slug)  # => nil

2- Array Extensions

.mean (Compute the average of numerical arrays.)

[1, 2, 3, 4, 5].mean   # => 3.0

3- File Extensions

.normalize_last_line (Ensures that a file ends with a single newline character, facilitating cleaner multi-line blocks.)

total_lines = File.normalize_last_line('path/to/your/file.csv')
puts "Total lines in the normalized file: #{total_lines}"

4- Hash Extensions

.without (Remove multiple keys in one command.)

{a: 1, b: 2, c: 3}.without(:a, :b)  # => {:c=>3}

.depth (Determine the depth of a nested hash.)

{a: {b: {c: 1}}}.depth  # => 3

.sort_by_key (Sort a hash by its keys, and optionally sort nested hashes recursively.)

{b: 1, a: {d: 4, c: 3}}.sort_by_key  # => {:a=>{:c=>3, :d=>4}, :b=>1}
{b: 1, a: {d: 4, c: 3}}.sort_by_key(:recursive => false)  # => {:a=>{:d=>4, :c=>3}, :b=>1}

.flatten_hash (Flatten nested hashes into a single-level hash with dot notation.)

{a: {b: {c: 1}}}.flatten_hash  # => {:a.b.c=>1}

.to_beautiful_json (Render the hash into a beautifully formatted JSON string, with options for alignment and indentation.)

Options:

  • :align (default is true): Aligns the colons in key-value pairs for better readability.

  • :indent_size (default is 2): Specifies the number of spaces for each indentation level.

Example:

hash_example = {
  name: "John",
  age: 30,
  address: {
    street: "123 Apple St",
    city: "FruitVille",
    postal_code: "12345"
  },
  is_student: false,
  courses: ["Math", "Science"]
}

puts hash_example.to_beautiful_json

Output:

{
  "name":       "John",
  "age":        30,
  "address":    {
    "street":      "123 Apple St",
    "city":        "FruitVille",
    "postal_code": "12345"
  },
  "is_student": false,
  "courses":    [
    "Math",
    "Science"
  ]
}

Disabling Alignment:

puts hash_example.to_beautiful_json(align: false)

Output:

{
  "name": "John",
  "age": 30,
  "address": {
    "street": "123 Apple St",
    "city": "FruitVille",
    "postal_code": "12345"
  },
  "is_student": false,
  "courses": [
    "Math",
    "Science"
  ]
}

5 - String Extensions

.to_boolean (Convert strings like "true" and "false" to their boolean counterparts.)

"true".to_boolean             # => true
"true".to_boolean("hello")    # => true
"false".to_boolean            # => false
"string".to_boolean           # => nil
"string".to_boolean("hello")  # => "hello"

.titleize_custom (Titleize strings while preserving hyphens, ideal for city names.)

"SANT-ANDREA-D'ORCINO".titleize_custom  # => "Sant-Andrea-D'orcino"

.upcase (Upcase strings with proper Unicode handling.)

"ä".upcase  # => "Ä"

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/immosquare/immosquare-extensions. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open-source under the terms of the MIT License.