Skip to content

Commit

Permalink
feat: trust data in database for constant_like.rb
Browse files Browse the repository at this point in the history
  • Loading branch information
Dim145 committed Mar 27, 2024
1 parent 9b062f2 commit ede716f
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 38 deletions.
39 changes: 2 additions & 37 deletions lib/elvis/constant_like.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,44 +15,9 @@ module ClassMethods
end

def find_or_create_by!(attributes, &block)
res = find_by(attributes)
res = find_by(id: attributes[:id])

if res.present?
if all.where(id: [(self::BUILTIN_IDS.max + 1)..]).any?
const_set('MUST_RESET_PK_SEQUENCE', true) unless const_defined?('MUST_RESET_PK_SEQUENCE')
end

return res
end

if attributes[:id].present?
res = find_by(id: attributes[:id]) # si on trouve un objet avec cet ID, on le met à jour avec nos valeurs afin de le rendre d'equerre

# dans le cas où on a un objet avec cet ID, mais qu'il ne correspond pas à notre modèle
if res.present?

# on duplique l'objet
new_data = res.dup.as_json

# on supprime l'ID afin de créer un nouvel objet
new_data[:id] = nil

new_data = create!(new_data.as_json) # on crée un nouvel objet avec les données dupliquées

# on met à jour les clés étrangères de tous les objets qui pointent vers l'objet que l'on duplique
self.associations_that_reference_me.each do |reflection|
reflection
.active_record # on récupère le modèle de l'association
.where(reflection.foreign_key => attributes[:id])
.update_all(reflection.foreign_key => new_data.id) # on met à jour les clés étrangères avec l'ID du nouvel objet
end

# on met a jour l'objet de base afin qu'il corresponde à notre modèle
res.update! attributes

return res
end
end
return res if res.present?

res = create!(attributes, &block)
const_set('MUST_RESET_PK_SEQUENCE', true) unless const_defined?('MUST_RESET_PK_SEQUENCE')
Expand Down
2 changes: 1 addition & 1 deletion lib/elvis/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# frozen_string_literal: true

module Elvis
VERSION = "2.2.6"
VERSION = "2.2.7"
end

0 comments on commit ede716f

Please sign in to comment.