Skip to content

Streamline array manipulation tasks, enhancing efficiency and ease of use

License

Notifications You must be signed in to change notification settings

WailanTirajoh/ruby_collection

Repository files navigation

Collection Module

The Collection module provides utility functions for working with arrays.

Usage

Collect Class

The Collect class is used to create chainable collections for easy manipulation of arrays.

Before

items = [
  { a: 3, b: 1, x: [1, 2, 3] },
  { a: 1, b: 2, x: [] },
  { a: 2, b: 3, x: [2, 3] },
  nil
]

# Remove nil items
items.compact!

# Filter items where :a is greater than 1
items.select! { |item| item[:a] > 1 }

# Append { a: 0, b: 2 } if specified
items << { a: 0, b: 2 } if params[:should_append]

# Prepend { a: 4, b: 2 }
items.unshift({ a: 4, b: 2 })

# Sort items by :a
items.sort_by! { |item| item[:a] }

# Map items to new structure
items.map! do |item|
  {
    a: item[:a],
    b: item[:b],
    c: item[:a] + item[:b],
    x: item[:x].sort
  }
end

After

collect(items)
  .where_not_nil
  .where(:a, ">", 1)
  .when(params[:should_append]) do |collections|
    collections.append({ a: 0, b: 2 })
  end
  .prepend({ a: 4, b: 2 })
  .sort_by_key(:a)
  .map do |item|
    {
      a: item[:a],
      b: item[:b],
      c: item[:a] + item[:b],
      x: collect(item[:x]).sort.all
    }
  end
  .all

Example:

Filter
include ArrayCollection::Helper # Include collection helper to call collect only instead of ArrayCollection::collect.new

# Create a new collection
collect([1, 2, 3, 4, 5]).filter { |item| item > 2 }.all
# => [3, 4, 5]
Where
include ArrayCollection::Helper

# Create a new collection
collect([
  { name: 'Alice', age: 30 },
  { name: 'Bob', age: 25 }
]).where(:age, '>', 25)
  .all
# => [{ name: 'Alice', age: 30 }]
Where not nil
result = collect([1, 2, nil, 3, 4, nil, 5])
               .where_not_nil
               .all
# => [1, 2, 3, 4, 5]
index_of
collect([1, 2, 3, 4, 2]).index_of(2)
# => 1

About

Streamline array manipulation tasks, enhancing efficiency and ease of use

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published