From c228b5d85551432c5f2d5d2b2f31f243cf15d74f Mon Sep 17 00:00:00 2001 From: r888888888 Date: Tue, 18 Mar 2014 13:03:38 -0700 Subject: [PATCH] fixes #1897 --- app/models/artist.rb | 46 ++++++++++++++++++++++++++++++---------- test/unit/artist_test.rb | 4 +++- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/app/models/artist.rb b/app/models/artist.rb index 11e2309c2..4c19e4f9e 100644 --- a/app/models/artist.rb +++ b/app/models/artist.rb @@ -95,20 +95,44 @@ class Artist < ActiveRecord::Base module VersionMethods def create_version(force=false) if name_changed? || url_string_changed? || is_active_changed? || is_banned_changed? || other_names_changed? || group_name_changed? || notes_changed? || force - ArtistVersion.create( - :artist_id => id, - :name => name, - :updater_id => CurrentUser.user.id, - :updater_ip_addr => CurrentUser.ip_addr, - :url_string => url_string, - :is_active => is_active, - :is_banned => is_banned, - :other_names => other_names, - :group_name => group_name - ) + if merge_version? + merge_version + else + create_new_version + end end end + def create_new_version + ArtistVersion.create( + :artist_id => id, + :name => name, + :updater_id => CurrentUser.user.id, + :updater_ip_addr => CurrentUser.ip_addr, + :url_string => url_string, + :is_active => is_active, + :is_banned => is_banned, + :other_names => other_names, + :group_name => group_name + ) + end + + def merge_version + prev = versions.last + prev.update_attributes( + :url_string => url_string, + :is_active => is_active, + :is_banned => is_banned, + :other_names => other_names, + :group_name => group_name + ) + end + + def merge_version? + prev = versions.last + prev && prev.updater_id == CurrentUser.user.id && prev.updated_at > 1.hour.ago + end + def revert_to!(version) self.name = version.name self.url_string = version.url_string diff --git a/test/unit/artist_test.rb b/test/unit/artist_test.rb index 0b81cb587..b7798f59a 100644 --- a/test/unit/artist_test.rb +++ b/test/unit/artist_test.rb @@ -185,7 +185,9 @@ class ArtistTest < ActiveSupport::TestCase assert_difference("ArtistVersion.count") do artist.other_names = "xxx" - artist.save + Timecop.travel(1.day.from_now) do + artist.save + end end first_version = ArtistVersion.first