2018-04-06 10:57:19 +00:00
|
|
|
# Remove this initializer when upgraded to Rails 5.0
|
|
|
|
unless Gitlab.rails5?
|
|
|
|
module ActiveRecord
|
|
|
|
class PredicateBuilder
|
|
|
|
class ArrayHandler
|
|
|
|
module TypeCasting
|
|
|
|
def call(attribute, value)
|
|
|
|
# This is necessary because by default ActiveRecord does not respect
|
|
|
|
# custom type definitions (like our `ShaAttribute`) when providing an
|
|
|
|
# array in `where`, like in `where(commit_sha: [sha1, sha2, sha3])`.
|
|
|
|
model = attribute.relation&.engine
|
|
|
|
type = model.user_provided_columns[attribute.name] if model
|
|
|
|
value = value.map { |value| type.type_cast_for_database(value) } if type
|
2017-08-15 11:22:55 +00:00
|
|
|
|
2018-04-06 10:57:19 +00:00
|
|
|
super(attribute, value)
|
|
|
|
end
|
2017-08-15 11:22:55 +00:00
|
|
|
end
|
|
|
|
|
2018-04-06 10:57:19 +00:00
|
|
|
prepend TypeCasting
|
|
|
|
end
|
2017-08-15 11:22:55 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|