Sha256: 404f3e9356b8c54091a3993eae06778a5e18c4a1db38d1aaa677a7d474e88b23

Contents?: true

Size: 1.01 KB

Versions: 46

Compression:

Stored size: 1.01 KB

Contents

# require "eitil_core/active_record/array_to_relation"

require "eitil_core/errors/raise_error"

class Array

  def to_relation(fallback_class = ApplicationRecord)
    
    # Return an empty ActiveRecord_Relation instance when no objects are present,
    # instead of returning the empty array itself. The reason being, that when you
    # always return an association, you won't run into problems with undefined methods
    # called later on, expecting an association instead of an array.

    return fallback_class.none unless self.present?

    unless self.all? { |item| item.class.ancestors.include? ApplicationRecord }
      raise_error "InvalidArrayError", ".to_relation requires that all array items are model instances"
    end

    unless self.each_cons(2).all? { |el1, el2| el1.class == el2.class }
      raise_error "InvalidArrayError", ".to_relation requires that all array items are instances of the same model"
    end

    _class = self.first.class
    ids    = self.map(&:id)

    return _class.where(id: ids)

  end

end

Version data entries

46 entries across 46 versions & 1 rubygems

Version Path
eitil-2.0.8 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-2.0.7 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-2.0.6 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-2.0.5 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-2.0.4 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-2.0.3 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-2.0.2 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-2.0.1 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-2.0.0 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.4.1 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.4.0 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.12 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.11 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.10 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.9 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.8 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.7 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.6 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.5 eitil_core/lib/eitil_core/active_record/array_to_relation.rb
eitil-1.3.4 eitil_core/lib/eitil_core/active_record/array_to_relation.rb