From ba07c9f7f599cecac2c0840484f8bfc62d9e716b Mon Sep 17 00:00:00 2001
From: Douwe Maan <douwe@gitlab.com>
Date: Fri, 15 May 2015 14:56:04 +0200
Subject: [PATCH] Improve fix.

---
 .../attr_encrypted_no_db_connection.rb        | 25 +++++++++----------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/config/initializers/attr_encrypted_no_db_connection.rb b/config/initializers/attr_encrypted_no_db_connection.rb
index 72e257a013e..e270028f45d 100644
--- a/config/initializers/attr_encrypted_no_db_connection.rb
+++ b/config/initializers/attr_encrypted_no_db_connection.rb
@@ -1,25 +1,24 @@
 module AttrEncrypted
   module Adapters
     module ActiveRecord
-      protected
-
-      def attribute_instance_methods_as_symbols
-        # We add accessor methods of the db columns to the list of instance
-        # methods returned to let ActiveRecord define the accessor methods
-        # for the db columns
-        if connection_established? && table_exists?
-          columns_hash.keys.inject(super) {|instance_methods, column_name| instance_methods.concat [column_name.to_sym, :"#{column_name}="]}
+      def attribute_instance_methods_as_symbols_with_no_db_connection
+        if connection_established?
+          # Call version from AttrEncrypted::Adapters::ActiveRecord
+          attribute_instance_methods_as_symbols_without_no_db_connection
         else
-          super
+          # Call version from AttrEncrypted (`super` with regards to AttrEncrypted::Adapters::ActiveRecord)
+          AttrEncrypted.instance_method(:attribute_instance_methods_as_symbols).bind(self).call
         end
       end
 
+      alias_method_chain :attribute_instance_methods_as_symbols, :no_db_connection
+
+      private
+
       def connection_established?
         begin
-          # use with_connection so the connection doesn't stay pinned to the thread.
-          ActiveRecord::Base.connection_pool.with_connection {
-            ActiveRecord::Base.connection.active?
-          }
+          # Use with_connection so the connection doesn't stay pinned to the thread.
+          ActiveRecord::Base.connection_pool.with_connection { |con| con.active? }
         rescue Exception
           false
         end
-- 
GitLab