From 9aec32688b3dc3bca1abc1bb65e4d73de79c5acf Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 31 Mar 2014 12:34:01 +1100 Subject: [PATCH] BUGFIX: when RTT is short likes may not appear to work BUGFIX: site settings db provider not triggering updates at the correct point --- app/models/post_action.rb | 7 +++++-- lib/site_setting_extension.rb | 4 +++- lib/site_settings/db_provider.rb | 22 +++++++++++++--------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/app/models/post_action.rb b/app/models/post_action.rb index 9ea89add5..00eb658bf 100644 --- a/app/models/post_action.rb +++ b/app/models/post_action.rb @@ -20,7 +20,7 @@ class PostAction < ActiveRecord::Base after_save :update_counters after_save :enforce_rules - after_save :notify_subscribers + after_commit :notify_subscribers def self.update_flagged_posts_count posts_flagged_count = PostAction.joins(post: :topic) @@ -154,7 +154,10 @@ class PostAction < ActiveRecord::Base def remove_act!(user) trash!(user) - run_callbacks(:save) + # NOTE: save is called to ensure all callbacks are called + # trash will not trigger callbacks, and triggering after_commit + # is not trivial + save end def is_bookmark? diff --git a/lib/site_setting_extension.rb b/lib/site_setting_extension.rb index 2e3325a94..ee8a66a44 100644 --- a/lib/site_setting_extension.rb +++ b/lib/site_setting_extension.rb @@ -214,8 +214,10 @@ module SiteSettingExtension provider.save(name, val, type) current[name] = convert(val, type) clear_cache! + end - @last_message_sent = MessageBus.publish('/site_settings', {process: process_id}) + def notify_changed! + MessageBus.publish('/site_settings', {process: process_id}) end def has_setting?(name) diff --git a/lib/site_settings/db_provider.rb b/lib/site_settings/db_provider.rb index 0a9a288e6..5b4d79e12 100644 --- a/lib/site_settings/db_provider.rb +++ b/lib/site_settings/db_provider.rb @@ -3,6 +3,10 @@ module SiteSettings; end class SiteSettings::DbProvider def initialize(model) + model.after_commit do + model.notify_changed! + end + @model = model end @@ -28,18 +32,18 @@ class SiteSettings::DbProvider return unless table_exists? - count = @model.where({ + model = @model.find_by({ name: name - }).update_all({ - name: name, - value: value, - data_type: data_type, - updated_at: Time.now }) - if count == 0 - @model.create!(name: name, value: value, data_type: data_type) - end + model ||= @model.new + + model.name = name + model.value = value + model.data_type = data_type + + # save! used to ensure after_commit is called + model.save! true end