From b19f631b3ac845150ed98f000bdd36de778eba70 Mon Sep 17 00:00:00 2001 From: Stephan Kaag Date: Sun, 21 Jul 2013 18:50:01 +0200 Subject: [PATCH] Some Rails4 updates --- Gemfile | 4 ++-- Gemfile.lock | 2 +- Gemfile_rails4.lock | 10 ---------- app/models/discourse_version_check.rb | 12 +++++++----- app/models/topic.rb | 4 +--- app/models/user_email_observer.rb | 20 +++++++++++++++----- lib/discourse_observer.rb | 20 +++++++++++++++----- 7 files changed, 41 insertions(+), 31 deletions(-) diff --git a/Gemfile b/Gemfile index fdac95d5758..075404b3bf1 100644 --- a/Gemfile +++ b/Gemfile @@ -49,6 +49,8 @@ else gem 'sprockets', git: 'https://github.com/SamSaffron/sprockets.git', branch: 'rails-compat' gem 'redis-rails' gem 'seed-fu' + gem 'activerecord-postgres-hstore' + gem 'active_attr' end gem 'redis' @@ -71,8 +73,6 @@ gem 'rails_multisite', path: 'vendor/gems/rails_multisite' gem 'simple_handlebars_rails', path: 'vendor/gems/simple_handlebars_rails' gem 'redcarpet', require: false -gem 'activerecord-postgres-hstore' -gem 'active_attr' # until we get ActiveModel::Model with Rails 4 gem 'airbrake', '3.1.2', require: false # errbit is broken with 3.1.3 for now gem 'clockwork', require: false gem 'eventmachine' diff --git a/Gemfile.lock b/Gemfile.lock index aba89c491f0..296c8ab67e4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -248,7 +248,7 @@ GEM minitest (4.7.3) mocha (0.13.3) metaclass (~> 0.0.1) - multi_json (1.7.6) + multi_json (1.7.7) multipart-post (1.2.0) mustache (0.99.4) net-scp (1.1.0) diff --git a/Gemfile_rails4.lock b/Gemfile_rails4.lock index f7fdae95b6c..c9cf3e231a9 100644 --- a/Gemfile_rails4.lock +++ b/Gemfile_rails4.lock @@ -125,9 +125,6 @@ GEM rack-test (~> 0.6.2) actionpack-action_caching (1.0.0) actionpack (>= 4.0.0.beta, < 5.0) - active_attr (0.8.2) - activemodel (>= 3.0.2, < 4.1) - activesupport (>= 3.0.2, < 4.1) activemodel (4.0.0) activesupport (= 4.0.0) builder (~> 3.1.0) @@ -137,10 +134,6 @@ GEM activesupport (= 4.0.0) arel (~> 4.0.0) activerecord-deprecated_finders (1.0.3) - activerecord-postgres-hstore (0.7.6) - activerecord (>= 3.1) - pg-hstore (>= 1.1.5) - rake activesupport (4.0.0) i18n (~> 0.6, >= 0.6.4) minitest (~> 4.2) @@ -316,7 +309,6 @@ GEM redis ruby-openid pg (0.15.1) - pg-hstore (1.1.7) polyglot (0.3.3) progress (2.4.0) protected_attributes (1.0.3) @@ -478,9 +470,7 @@ PLATFORMS DEPENDENCIES actionpack-action_caching - active_attr active_model_serializers! - activerecord-postgres-hstore airbrake (= 3.1.2) annotate! barber diff --git a/app/models/discourse_version_check.rb b/app/models/discourse_version_check.rb index 657f01ddc1d..8cf79a96b48 100644 --- a/app/models/discourse_version_check.rb +++ b/app/models/discourse_version_check.rb @@ -1,9 +1,11 @@ class DiscourseVersionCheck - - # include ActiveModel::Model <-- If we were using Rails 4, we could use this instead of active_attr - include ActiveAttr::Attributes - include ActiveAttr::MassAssignment - include ActiveModel::Serialization + if rails4? + include ActiveModel::Model + else + include ActiveAttr::Attributes + include ActiveAttr::MassAssignment + include ActiveModel::Serialization + end attr_accessor :latest_version, :critical_updates, :installed_version, :installed_sha, :missing_versions_count, :updated_at diff --git a/app/models/topic.rb b/app/models/topic.rb index 793cfef2307..467b1b72cb5 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -51,9 +51,7 @@ class Topic < ActiveRecord::Base self.title = TextCleaner.clean_title(TextSentinel.title_sentinel(title).text) if errors[:title].empty? end - if rails4? - store_accessor :meta_data - else + unless rails4? serialize :meta_data, ActiveRecord::Coders::Hstore end diff --git a/app/models/user_email_observer.rb b/app/models/user_email_observer.rb index 0786386840e..aa36cfd01a0 100644 --- a/app/models/user_email_observer.rb +++ b/app/models/user_email_observer.rb @@ -2,12 +2,22 @@ class UserEmailObserver < ActiveRecord::Observer observe :notification def after_commit(notification) - if notification.send(:transaction_include_action?, :create) - notification_type = Notification.types[notification.notification_type] + if rails4? + if notification.send(:transaction_include_any_action?, [:create]) + notification_type = Notification.types[notification.notification_type] - # Delegate to email_user_{{NOTIFICATION_TYPE}} if exists - email_method = :"email_user_#{notification_type.to_s}" - send(email_method, notification) if respond_to?(email_method) + # Delegate to email_user_{{NOTIFICATION_TYPE}} if exists + email_method = :"email_user_#{notification_type.to_s}" + send(email_method, notification) if respond_to?(email_method) + end + else + if notification.send(:transaction_include_action?, :create) + notification_type = Notification.types[notification.notification_type] + + # Delegate to email_user_{{NOTIFICATION_TYPE}} if exists + email_method = :"email_user_#{notification_type.to_s}" + send(email_method, notification) if respond_to?(email_method) + end end end diff --git a/lib/discourse_observer.rb b/lib/discourse_observer.rb index eebdba73c65..bd64cfa8fa4 100644 --- a/lib/discourse_observer.rb +++ b/lib/discourse_observer.rb @@ -33,12 +33,22 @@ else # Outside of test mode, use after_commit class DiscourseObserver < ActiveRecord::Observer def after_commit(model) - if model.send(:transaction_include_action?, :create) - after_create_delegator(model) - end + if rails4? + if model.send(:transaction_include_any_action?, [:create]) + after_create_delegator(model) + end - if model.send(:transaction_include_action?, :destroy) - after_destroy_delegator(model) + if model.send(:transaction_include_any_action?, [:destroy]) + after_destroy_delegator(model) + end + else + if model.send(:transaction_include_action?, :create) + after_create_delegator(model) + end + + if model.send(:transaction_include_action?, :destroy) + after_destroy_delegator(model) + end end end