Sha256: 4f2d39a1d2c38fc3a45f8e6128131c4fd938b1b2be5dd298675edd84ed3096b7
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
require "active_record" module ArrayToActiveRecord def self.convert(array, model_class: nil) model_class = determine(array) if model_class.nil? Converter.new(model_class).convert(array) end private def self.determine(array) model = array[0] if array.is_a? Array unless model.is_a? ActiveRecord::Base raise(ArgumentError, "Failed to determine model_class because array is empty, " \ "or array item is non ActiveRecord model. " \ "You can resolve by using model_class option" ) end model.class end end module ArrayToActiveRecord class Converter def initialize(model_class) @model_class = model_class end def convert(array) @relation = new_relation @relation = @relation.where(id: array.map(&:id)) # add query info used by `to_sql` method etc. load_records(array) @relation end private def new_relation @model_class.all end def load_records(array) v5_0 = Gem::Version.create("5.0") v4_0 = Gem::Version.create("4.0") if v5_0 < activerecord_version @relation.send(:load_records, array) elsif v4_0 < activerecord_version @relation.instance_variable_set(:@records, array) @relation.instance_variable_set(:@loaded, true) else raise "ActiveRecord version #{ActiveRecord.gem_version} is not supported" end end def activerecord_version return @activerecord_version if @activerecord_version if ActiveRecord.respond_to? :gem_version # version 5.0 ~ @activerecord_version = ActiveRecord.gem_version elsif ActiveRecord.respond_to? :version # version 4.0 ~ @activerecord_version = ActiveRecord.version else @activerecord_version = nil end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
array_to_activerecord-1.0.2 | lib/array_to_activerecord.rb |