module Origin::Extensions::Array

The array module adds custom behaviour for Origin onto the Array class.

Public Instance Methods

__add__(object) click to toggle source

Combine the two objects using the add strategy.

@example Add the object to the array.

[ 1, 2, 3 ].__add__(4)

@param [ Object ] object The object to add.

@return [ Object ] The result of the add.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 17
def __add__(object)
  object.__add_from_array__(self)
end
__array__() click to toggle source

Return the object as an array.

@example Get the array.

[ 1, 2 ].__array__

@return [ Array ] self

@since 1.0.0

# File lib/origin/extensions/array.rb, line 29
def __array__; self; end
__deep_copy__() click to toggle source

Makes a deep copy of the array, deep copying every element inside the array.

@example Get a deep copy of the array.

[ 1, 2, 3 ].__deep_copy__

@return [ Array ] The deep copy of the array.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 40
def __deep_copy__
  map { |value| value.__deep_copy__ }
end
__evolve_date__() click to toggle source

Evolve the array into an array of mongo friendly dates. (Times at midnight).

@example Evolve the array to dates.

[ Date.new(2010, 1, 1) ].__evolve_date__

@return [ Array<Time> ] The array as times at midnight UTC.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 53
def __evolve_date__
  map { |value| value.__evolve_date__ }
end
__evolve_time__() click to toggle source

Evolve the array to an array of times.

@example Evolve the array to times.

[ 1231231231 ].__evolve_time__

@return [ Array<Time> ] The array as times.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 79
def __evolve_time__
  map { |value| value.__evolve_time__ }
end
__expand_complex__() click to toggle source

Get the object as expanded.

@example Get the object expanded.

obj.__expand_complex__

@return [ Array ] The expanded array.

@since 1.1.0

# File lib/origin/extensions/array.rb, line 65
def __expand_complex__
  map do |value|
    value.__expand_complex__
  end
end
__intersect__(object) click to toggle source

Combine the two objects using an intersection strategy.

@example Interset with the object.

[ 1, 2 ].__intersect__(3)

@param [ Object ] object The object to intersect with.

@return [ Object ] The result of the intersection.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 93
def __intersect__(object)
  object.__intersect_from_array__(self)
end
__sort_option__() click to toggle source

Gets the array as options in the proper format to pass as MongoDB sort criteria.

@example Get the array as sorting options.

[ :field, 1 ].__sort_option__

@return [ Hash ] The array as sort criterion.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 106
def __sort_option__
  multi.inject({}) do |options, criteria|
    options.merge!(criteria.__sort_pair__)
    options
  end
end
__sort_pair__() click to toggle source

Get the array as a sort pair.

@example Get the array as field/direction pair.

[ field, 1 ].__sort_pair__

@return [ Hash ] The field/direction pair.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 121
def __sort_pair__
  { first => last.to_direction }
end
update_values(&block) click to toggle source

Update all the values in the hash with the provided block.

@example Update the values in place.

[ 1, 2, 3 ].update_values(&:to_s)

@param [ Proc ] block The block to execute on each value.

@return [ Array ] the array.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 135
def update_values(&block)
  replace(map(&block))
end

Private Instance Methods

multi() click to toggle source

Converts the array to a multi-dimensional array.

@api private

@example Convert to multi-dimensional.

[ 1, 2, 3 ].multi

@return [ Array ] The multi-dimensional array.

@since 1.0.0

# File lib/origin/extensions/array.rb, line 151
def multi
  first.is_a?(::Symbol) || first.is_a?(::String) ? [ self ] : self
end