Hello community,

here is the log from the commit of package rubygem-activerecord-5_0 for 
openSUSE:Factory checked in at 2017-06-08 14:59:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-activerecord-5_0 (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-activerecord-5_0.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-activerecord-5_0"

Thu Jun  8 14:59:55 2017 rev:5 rq:497672 version:5.0.3

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/rubygem-activerecord-5_0/rubygem-activerecord-5_0.changes
        2017-03-21 22:49:36.118334321 +0100
+++ 
/work/SRC/openSUSE:Factory/.rubygem-activerecord-5_0.new/rubygem-activerecord-5_0.changes
   2017-06-08 14:59:59.156572315 +0200
@@ -1,0 +2,44 @@
+Tue May 23 09:36:46 UTC 2017 - [email protected]
+
+- updated to version 5.0.3
+ see installed CHANGELOG.md
+
+  *   Check whether `Rails.application` defined before calling it
+  
+      In #27674 we changed the migration generator to generate migrations at 
the
+      path defined in `Rails.application.config.paths` however the code checked
+      for the presence of the `Rails` constant but not the `Rails.application`
+      method which caused problems when using Active Record and generators 
outside
+      of the context of a Rails application.
+  
+      Fixes #28325.
+  
+  *   Fix `deserialize` with JSON array.
+  
+      Fixes #28285.
+  
+      *Ryuta Kamizono*
+  
+  *   Fix `rake db:schema:load` with subdirectories.
+  
+      *Ryuta Kamizono*
+  
+  *   Fix `rake db:migrate:status` with subdirectories.
+  
+      *Ryuta Kamizono*
+  
+  *   Don't share options between reference id and type columns
+  
+      When using a polymorphic reference column in a migration, sharing options
+      between the two columns doesn't make sense since they are different 
types.
+      The `reference_id` column is usually an integer and the `reference_type`
+      column a string so options like `unsigned: true` will result in an 
invalid
+      table definition.
+  
+      *Ryuta Kamizono*
+  
+  *   Fix regression of #1969 with SELECT aliases in HAVING clause.
+  
+      *Eugene Kenny*
+
+-------------------------------------------------------------------

Old:
----
  activerecord-5.0.2.gem

New:
----
  activerecord-5.0.3.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-activerecord-5_0.spec ++++++
--- /var/tmp/diff_new_pack.TIvdXD/_old  2017-06-08 15:00:01.364260740 +0200
+++ /var/tmp/diff_new_pack.TIvdXD/_new  2017-06-08 15:00:01.368260175 +0200
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-activerecord-5_0
-Version:        5.0.2
+Version:        5.0.3
 Release:        0
 %define mod_name activerecord
 %define mod_full_name %{mod_name}-%{version}

++++++ activerecord-5.0.2.gem -> activerecord-5.0.3.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md    2017-03-02 00:11:59.000000000 +0100
+++ new/CHANGELOG.md    2017-05-12 22:03:36.000000000 +0200
@@ -1,3 +1,42 @@
+*   Check whether `Rails.application` defined before calling it
+
+    In #27674 we changed the migration generator to generate migrations at the
+    path defined in `Rails.application.config.paths` however the code checked
+    for the presence of the `Rails` constant but not the `Rails.application`
+    method which caused problems when using Active Record and generators 
outside
+    of the context of a Rails application.
+
+    Fixes #28325.
+
+*   Fix `deserialize` with JSON array.
+
+    Fixes #28285.
+
+    *Ryuta Kamizono*
+
+*   Fix `rake db:schema:load` with subdirectories.
+
+    *Ryuta Kamizono*
+
+*   Fix `rake db:migrate:status` with subdirectories.
+
+    *Ryuta Kamizono*
+
+*   Don't share options between reference id and type columns
+
+    When using a polymorphic reference column in a migration, sharing options
+    between the two columns doesn't make sense since they are different types.
+    The `reference_id` column is usually an integer and the `reference_type`
+    column a string so options like `unsigned: true` will result in an invalid
+    table definition.
+
+    *Ryuta Kamizono*
+
+*   Fix regression of #1969 with SELECT aliases in HAVING clause.
+
+    *Eugene Kenny*
+
+
 ## Rails 5.0.2 (March 01, 2017) ##
 
 *   Fix `wait_timeout` to configurable for mysql2 adapter.
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/associations/association.rb 
new/lib/active_record/associations/association.rb
--- old/lib/active_record/associations/association.rb   2017-03-02 
00:11:59.000000000 +0100
+++ new/lib/active_record/associations/association.rb   2017-05-12 
22:03:36.000000000 +0200
@@ -83,7 +83,7 @@
       end
 
       def scope
-        target_scope.merge(association_scope)
+        target_scope.merge!(association_scope)
       end
 
       # The scope for this association.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/associations/collection_association.rb 
new/lib/active_record/associations/collection_association.rb
--- old/lib/active_record/associations/collection_association.rb        
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/associations/collection_association.rb        
2017-05-12 22:03:36.000000000 +0200
@@ -39,13 +39,7 @@
           reload
         end
 
-        if null_scope?
-          # Cache the proxy separately before the owner has an id
-          # or else a post-save proxy will still lack the id
-          @null_proxy ||= CollectionProxy.create(klass, self)
-        else
-          @proxy ||= CollectionProxy.create(klass, self)
-        end
+        CollectionProxy.create(klass, self)
       end
 
       # Implements the writer method, e.g. foo.items= for Foo.has_many :items
@@ -427,37 +421,9 @@
         replace_on_target(record, index, skip_callbacks, &block)
       end
 
-      def replace_on_target(record, index, skip_callbacks)
-        callback(:before_add, record) unless skip_callbacks
-
-        begin
-          if index
-            record_was = target[index]
-            target[index] = record
-          else
-            target << record
-          end
-
-          yield(record) if block_given?
-        rescue
-          if index
-            target[index] = record_was
-          else
-            target.delete(record)
-          end
-
-          raise
-        end
-
-        callback(:after_add, record) unless skip_callbacks
-        set_inverse_instance(record)
-
-        record
-      end
-
-      def scope(opts = {})
-        scope = super()
-        scope.none! if opts.fetch(:nullify, true) && null_scope?
+      def scope
+        scope = super
+        scope.none! if null_scope?
         scope
       end
 
@@ -528,15 +494,19 @@
             transaction do
               add_to_target(build_record(attributes)) do |record|
                 yield(record) if block_given?
-                insert_record(record, true, raise)
+                insert_record(record, true, raise) { @_was_loaded = loaded? }
               end
             end
           end
         end
 
         # Do the relevant stuff to insert the given record into the 
association collection.
-        def insert_record(record, validate = true, raise = false)
-          raise NotImplementedError
+        def insert_record(record, validate = true, raise = false, &block)
+          if raise
+            record.save!(validate: validate, &block)
+          else
+            record.save(validate: validate, &block)
+          end
         end
 
         def create_scope
@@ -590,19 +560,41 @@
           end
         end
 
-        def concat_records(records, should_raise = false)
+        def concat_records(records, raise = false)
           result = true
 
           records.each do |record|
             raise_on_type_mismatch!(record)
-            add_to_target(record) do |rec|
-              result &&= insert_record(rec, true, should_raise) unless 
owner.new_record?
+            add_to_target(record) do
+              result &&= insert_record(record, true, raise) { @_was_loaded = 
loaded? } unless owner.new_record?
             end
           end
 
           result && records
         end
 
+        def replace_on_target(record, index, skip_callbacks)
+          callback(:before_add, record) unless skip_callbacks
+
+          set_inverse_instance(record)
+
+          @_was_loaded = true
+
+          yield(record) if block_given?
+
+          if index
+            target[index] = record
+          elsif @_was_loaded || !loaded?
+            target << record
+          end
+
+          callback(:after_add, record) unless skip_callbacks
+
+          record
+        ensure
+          @_was_loaded = nil
+        end
+
         def callback(method, record)
           callbacks_for(method).each do |callback|
             callback.call(method, owner, record)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/associations/collection_proxy.rb 
new/lib/active_record/associations/collection_proxy.rb
--- old/lib/active_record/associations/collection_proxy.rb      2017-03-02 
00:11:59.000000000 +0100
+++ new/lib/active_record/associations/collection_proxy.rb      2017-05-12 
22:03:36.000000000 +0200
@@ -28,12 +28,9 @@
     # is computed directly through SQL and does not trigger by itself the
     # instantiation of the actual post records.
     class CollectionProxy < Relation
-      delegate :exists?, :update_all, :arel, to: :scope
-
       def initialize(klass, association) #:nodoc:
         @association = association
         super klass, klass.arel_table, klass.predicate_builder
-        merge! association.scope(nullify: false)
       end
 
       def target
@@ -902,19 +899,10 @@
         @association
       end
 
-      # We don't want this object to be put on the scoping stack, because
-      # that could create an infinite loop where we call an @association
-      # method, which gets the current scope, which is this object, which
-      # delegates to @association, and so on.
-      def scoping
-        @association.scope.scoping { yield }
-      end
-
       # Returns a <tt>Relation</tt> object for the records in this association
       def scope
-        @association.scope
+        @scope ||= @association.scope
       end
-      alias spawn scope
 
       # Equivalent to <tt>Array#==</tt>. Returns +true+ if the two arrays
       # contain the same number of elements and if each element is equal
@@ -1046,6 +1034,7 @@
       #   person.pets(true)  # fetches pets from the database
       #   # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]
       def reload
+        @scope = nil
         proxy_association.reload
         self
       end
@@ -1067,20 +1056,51 @@
       #   person.pets  # fetches pets from the database
       #   # => [#<Pet id: 1, name: "Snoop", group: "dogs", person_id: 1>]
       def reset
+        @scope = nil
         proxy_association.reset
         proxy_association.reset_scope
         self
       end
 
+      delegate_methods = [
+        QueryMethods,
+        SpawnMethods,
+      ].flat_map { |klass|
+        klass.public_instance_methods(false)
+      } - self.public_instance_methods(false) + [:scoping]
+
+      delegate(*delegate_methods, to: :scope)
+
+      module DelegateExtending # :nodoc:
+        private
+          def method_missing(method, *args, &block)
+            extending_values = association_scope.extending_values
+            if extending_values.any? && (extending_values - 
self.class.included_modules).any?
+              self.class.include(*extending_values)
+              public_send(method, *args, &block)
+            else
+              super
+            end
+          end
+      end
+
       private
 
         def null_scope?
           @association.null_scope?
         end
 
+        def association_scope
+          @association.association_scope
+        end
+
         def exec_queries
           load_target
         end
+
+        def respond_to_missing?(method, _)
+          association_scope.respond_to?(method) || super
+        end
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/associations/has_many_association.rb 
new/lib/active_record/associations/has_many_association.rb
--- old/lib/active_record/associations/has_many_association.rb  2017-03-02 
00:11:59.000000000 +0100
+++ new/lib/active_record/associations/has_many_association.rb  2017-05-12 
22:03:36.000000000 +0200
@@ -40,13 +40,7 @@
 
       def insert_record(record, validate = true, raise = false)
         set_owner_attributes(record)
-        set_inverse_instance(record)
-
-        if raise
-          record.save!(:validate => validate)
-        else
-          record.save(:validate => validate)
-        end
+        super
       end
 
       def empty?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/associations/has_many_through_association.rb 
new/lib/active_record/associations/has_many_through_association.rb
--- old/lib/active_record/associations/has_many_through_association.rb  
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/associations/has_many_through_association.rb  
2017-05-12 22:03:36.000000000 +0200
@@ -39,11 +39,7 @@
         ensure_not_nested
 
         if record.new_record? || record.changed?
-          if raise
-            record.save!(validate: validate)
-          else
-            return unless record.save(validate: validate)
-          end
+          return unless super
         end
 
         save_through_record(record)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/collection_cache_key.rb 
new/lib/active_record/collection_cache_key.rb
--- old/lib/active_record/collection_cache_key.rb       2017-03-02 
00:11:59.000000000 +0100
+++ new/lib/active_record/collection_cache_key.rb       2017-05-12 
22:03:36.000000000 +0200
@@ -8,17 +8,27 @@
       if collection.loaded?
         size = collection.size
         if size > 0
-          timestamp = 
collection.max_by(&timestamp_column).public_send(timestamp_column)
+          timestamp = 
collection.max_by(&timestamp_column)._read_attribute(timestamp_column)
         end
       else
         column_type = type_for_attribute(timestamp_column.to_s)
         column = 
"#{connection.quote_table_name(collection.table_name)}.#{connection.quote_column_name(timestamp_column)}"
+        select_values = "COUNT(*) AS #{connection.quote_column_name("size")}, 
MAX(%s) AS timestamp"
 
-        query = collection
-          .unscope(:select)
-          .select("COUNT(*) AS #{connection.quote_column_name("size")}", 
"MAX(#{column}) AS timestamp")
-          .unscope(:order)
-        result = connection.select_one(query)
+        if collection.limit_value || collection.offset_value
+          query = collection.spawn
+          query.select_values = [column]
+          subquery_alias = "subquery_for_cache_key"
+          subquery_column = "#{subquery_alias}.#{timestamp_column}"
+          subquery = query.arel.as(subquery_alias)
+          arel = Arel::SelectManager.new(query.engine).project(select_values % 
subquery_column).from(subquery)
+        else
+          query = collection.unscope(:order)
+          query.select_values = [select_values % column]
+          arel = query.arel
+        end
+
+        result = connection.select_one(arel, nil, query.bound_attributes)
 
         if result.blank?
           size = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/abstract/quoting.rb 
new/lib/active_record/connection_adapters/abstract/quoting.rb
--- old/lib/active_record/connection_adapters/abstract/quoting.rb       
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/abstract/quoting.rb       
2017-05-12 22:03:36.000000000 +0200
@@ -155,6 +155,14 @@
         binds.map(&:value_for_database)
       end
 
+      def type_casted_binds(binds) # :nodoc:
+        if binds.first.is_a?(Array)
+          binds.map { |column, value| type_cast(value, column) }
+        else
+          binds.map { |attr| type_cast(attr.value_for_database) }
+        end
+      end
+
       private
 
       def types_which_need_no_typecasting
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/abstract/schema_definitions.rb 
new/lib/active_record/connection_adapters/abstract/schema_definitions.rb
--- old/lib/active_record/connection_adapters/abstract/schema_definitions.rb    
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/abstract/schema_definitions.rb    
2017-05-12 22:03:36.000000000 +0200
@@ -107,16 +107,12 @@
 
       private
 
-      def as_options(value, default = {})
-        if value.is_a?(Hash)
-          value
-        else
-          default
-        end
+      def as_options(value)
+        value.is_a?(Hash) ? value : {}
       end
 
       def polymorphic_options
-        as_options(polymorphic, options)
+        as_options(polymorphic)
       end
 
       def index_options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/abstract/schema_statements.rb 
new/lib/active_record/connection_adapters/abstract/schema_statements.rb
--- old/lib/active_record/connection_adapters/abstract/schema_statements.rb     
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/abstract/schema_statements.rb     
2017-05-12 22:03:36.000000000 +0200
@@ -1022,9 +1022,8 @@
         sm_table = 
quote_table_name(ActiveRecord::Migrator.schema_migrations_table_name)
 
         migrated = select_values("SELECT version FROM #{sm_table}").map(&:to_i)
-        paths = migrations_paths.map {|p| "#{p}/[0-9]*_*.rb" }
-        versions = Dir[*paths].map do |filename|
-          filename.split('/').last.split('_').first.to_i
+        versions = 
ActiveRecord::Migrator.migration_files(migrations_paths).map do |file|
+          ActiveRecord::Migrator.parse_migration_filename(file).first.to_i
         end
 
         unless migrated.include?(version)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/abstract_adapter.rb 
new/lib/active_record/connection_adapters/abstract_adapter.rb
--- old/lib/active_record/connection_adapters/abstract_adapter.rb       
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/abstract_adapter.rb       
2017-05-12 22:03:36.000000000 +0200
@@ -425,7 +425,7 @@
 
       # Provides access to the underlying database driver for this adapter. For
       # example, this method returns a Mysql2::Client object in case of 
Mysql2Adapter,
-      # and a PGconn object in case of PostgreSQLAdapter.
+      # and a PG::Connection object in case of PostgreSQLAdapter.
       #
       # This is useful for when you need to call a proprietary method such as
       # PostgreSQL's lo_* methods.
@@ -579,14 +579,15 @@
         exception
       end
 
-      def log(sql, name = "SQL", binds = [], statement_name = nil)
+      def log(sql, name = "SQL", binds = [], type_casted_binds = [], 
statement_name = nil)
         @instrumenter.instrument(
           "sql.active_record",
-          :sql            => sql,
-          :name           => name,
-          :connection_id  => object_id,
-          :statement_name => statement_name,
-          :binds          => binds) { yield }
+          sql:               sql,
+          name:              name,
+          binds:             binds,
+          type_casted_binds: type_casted_binds,
+          statement_name:    statement_name,
+          connection_id:     object_id) { yield }
       rescue => e
         raise translate_exception_class(e, sql)
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/abstract_mysql_adapter.rb 
new/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
--- old/lib/active_record/connection_adapters/abstract_mysql_adapter.rb 
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/abstract_mysql_adapter.rb 
2017-05-12 22:03:36.000000000 +0200
@@ -324,7 +324,7 @@
 
       def data_sources
         sql = "SELECT table_name FROM information_schema.tables "
-        sql << "WHERE table_schema = #{quote(@config[:database])}"
+        sql << "WHERE table_schema = DATABASE()"
 
         select_values(sql, 'SCHEMA')
       end
@@ -350,7 +350,7 @@
         schema, name = extract_schema_qualified_name(table_name)
 
         sql = "SELECT table_name FROM information_schema.tables "
-        sql << "WHERE table_schema = #{quote(schema)} AND table_name = 
#{quote(name)}"
+        sql << "WHERE table_schema = #{schema} AND table_name = #{name}"
 
         select_values(sql, 'SCHEMA').any?
       end
@@ -365,7 +365,7 @@
         schema, name = extract_schema_qualified_name(view_name)
 
         sql = "SELECT table_name FROM information_schema.tables WHERE 
table_type = 'VIEW'"
-        sql << " AND table_schema = #{quote(schema)} AND table_name = 
#{quote(name)}"
+        sql << " AND table_schema = #{schema} AND table_name = #{name}"
 
         select_values(sql, 'SCHEMA').any?
       end
@@ -414,8 +414,8 @@
         select_value(<<-SQL.strip_heredoc, 'SCHEMA')
           SELECT table_comment
           FROM information_schema.tables
-          WHERE table_schema = #{quote(schema)}
-            AND table_name = #{quote(name)}
+          WHERE table_schema = #{schema}
+            AND table_name = #{name}
         SQL
       end
 
@@ -528,9 +528,9 @@
           JOIN information_schema.referential_constraints rc
           USING (constraint_schema, constraint_name)
           WHERE fk.referenced_column_name IS NOT NULL
-            AND fk.table_schema = #{quote(schema)}
-            AND fk.table_name = #{quote(name)}
-            AND rc.table_name = #{quote(name)}
+            AND fk.table_schema = #{schema}
+            AND fk.table_name = #{name}
+            AND rc.table_name = #{name}
         SQL
 
         fk_info.map do |row|
@@ -607,8 +607,8 @@
           SELECT column_name
           FROM information_schema.key_column_usage
           WHERE constraint_name = 'PRIMARY'
-            AND table_schema = #{quote(schema)}
-            AND table_name = #{quote(name)}
+            AND table_schema = #{schema}
+            AND table_name = #{name}
           ORDER BY ordinal_position
         SQL
       end
@@ -904,8 +904,8 @@
       end
 
       def extract_schema_qualified_name(string) # :nodoc:
-        schema, name = string.to_s.scan(/[^`.\s]+|`[^`]*`/)
-        schema, name = @config[:database], schema unless name
+        schema, name = string.to_s.scan(/[^`.\s]+|`[^`]*`/).map { |s| quote(s) 
}
+        schema, name = "DATABASE()", schema unless name
         [schema, name]
       end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/mysql/database_statements.rb 
new/lib/active_record/connection_adapters/mysql/database_statements.rb
--- old/lib/active_record/connection_adapters/mysql/database_statements.rb      
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/mysql/database_statements.rb      
2017-05-12 22:03:36.000000000 +0200
@@ -73,9 +73,9 @@
           # made since we established the connection
           @connection.query_options[:database_timezone] = 
ActiveRecord::Base.default_timezone
 
-          type_casted_binds = binds.map { |attr| 
type_cast(attr.value_for_database) }
+          type_casted_binds = type_casted_binds(binds)
 
-          log(sql, name, binds) do
+          log(sql, name, binds, type_casted_binds) do
             if cache_stmt
               cache = @statements[sql] ||= {
                 stmt: @connection.prepare(sql)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/postgresql/oid/array.rb 
new/lib/active_record/connection_adapters/postgresql/oid/array.rb
--- old/lib/active_record/connection_adapters/postgresql/oid/array.rb   
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/postgresql/oid/array.rb   
2017-05-12 22:03:36.000000000 +0200
@@ -23,7 +23,7 @@
             when ::String
               type_cast_array(@pg_decoder.decode(value), :deserialize)
             when Data
-              deserialize(value.values)
+              type_cast_array(value.values, :deserialize)
             else
               super
             end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/postgresql/oid/bytea.rb 
new/lib/active_record/connection_adapters/postgresql/oid/bytea.rb
--- old/lib/active_record/connection_adapters/postgresql/oid/bytea.rb   
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/postgresql/oid/bytea.rb   
2017-05-12 22:03:36.000000000 +0200
@@ -6,7 +6,7 @@
           def deserialize(value)
             return if value.nil?
             return value.to_s if value.is_a?(Type::Binary::Data)
-            PGconn.unescape_bytea(super)
+            PG::Connection.unescape_bytea(super)
           end
         end
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/postgresql/quoting.rb 
new/lib/active_record/connection_adapters/postgresql/quoting.rb
--- old/lib/active_record/connection_adapters/postgresql/quoting.rb     
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/postgresql/quoting.rb     
2017-05-12 22:03:36.000000000 +0200
@@ -33,7 +33,7 @@
 
         # Quotes schema names for use in SQL queries.
         def quote_schema_name(name)
-          PGconn.quote_ident(name)
+          PG::Connection.quote_ident(name)
         end
 
         def quote_table_name_for_assignment(table, attr)
@@ -42,7 +42,7 @@
 
         # Quotes column names for use in SQL queries.
         def quote_column_name(name) # :nodoc:
-          @quoted_column_names[name] ||= PGconn.quote_ident(super)
+          @quoted_column_names[name] ||= PG::Connection.quote_ident(super)
         end
 
         # Quote date/time values for use in SQL input.
@@ -103,7 +103,7 @@
           case value
           when Type::Binary::Data
             # Return a bind param hash with format as binary.
-            # See 
http://deveiate.org/code/pg/PGconn.html#method-i-exec_prepared-doc
+            # See 
https://deveiate.org/code/pg/PG/Connection.html#method-i-exec_prepared-doc
             # for more information
             { value: value.to_s, format: 1 }
           when OID::Xml::Data, OID::Bit::Data
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/postgresql/utils.rb 
new/lib/active_record/connection_adapters/postgresql/utils.rb
--- old/lib/active_record/connection_adapters/postgresql/utils.rb       
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/postgresql/utils.rb       
2017-05-12 22:03:36.000000000 +0200
@@ -19,9 +19,9 @@
 
         def quoted
           if schema
-            PGconn.quote_ident(schema) << SEPARATOR << 
PGconn.quote_ident(identifier)
+            PG::Connection.quote_ident(schema) << SEPARATOR << 
PG::Connection.quote_ident(identifier)
           else
-            PGconn.quote_ident(identifier)
+            PG::Connection.quote_ident(identifier)
           end
         end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/postgresql_adapter.rb 
new/lib/active_record/connection_adapters/postgresql_adapter.rb
--- old/lib/active_record/connection_adapters/postgresql_adapter.rb     
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/postgresql_adapter.rb     
2017-05-12 22:03:36.000000000 +0200
@@ -28,11 +28,11 @@
       conn_params[:user] = conn_params.delete(:username) if 
conn_params[:username]
       conn_params[:dbname] = conn_params.delete(:database) if 
conn_params[:database]
 
-      # Forward only valid config params to PGconn.connect.
-      valid_conn_param_keys = PGconn.conndefaults_hash.keys + [:requiressl]
+      # Forward only valid config params to PG::Connection.connect.
+      valid_conn_param_keys = PG::Connection.conndefaults_hash.keys + 
[:requiressl]
       conn_params.slice!(*valid_conn_param_keys)
 
-      # The postgres drivers don't allow the creation of an unconnected PGconn 
object,
+      # The postgres drivers don't allow the creation of an unconnected 
PG::Connection object,
       # so just pass a nil connection object for the time being.
       ConnectionAdapters::PostgreSQLAdapter.new(nil, logger, conn_params, 
config)
     end
@@ -198,8 +198,8 @@
           end
 
           def connection_active?
-            @connection.status == PGconn::CONNECTION_OK
-          rescue PGError
+            @connection.status == PG::CONNECTION_OK
+          rescue PG::Error
             false
           end
       end
@@ -244,7 +244,7 @@
       def active?
         @connection.query 'SELECT 1'
         true
-      rescue PGError
+      rescue PG::Error
         false
       end
 
@@ -410,7 +410,7 @@
         def translate_exception(exception, message)
           return exception unless exception.respond_to?(:result)
 
-          case exception.result.try(:error_field, PGresult::PG_DIAG_SQLSTATE)
+          case exception.result.try(:error_field, PG::PG_DIAG_SQLSTATE)
           when UNIQUE_VIOLATION
             RecordNotUnique.new(message)
           when FOREIGN_KEY_VIOLATION
@@ -594,15 +594,15 @@
         end
 
         def exec_no_cache(sql, name, binds)
-          type_casted_binds = binds.map { |attr| 
type_cast(attr.value_for_database) }
-          log(sql, name, binds) { @connection.async_exec(sql, 
type_casted_binds) }
+          type_casted_binds = type_casted_binds(binds)
+          log(sql, name, binds, type_casted_binds) { 
@connection.async_exec(sql, type_casted_binds) }
         end
 
         def exec_cache(sql, name, binds)
           stmt_key = prepare_statement(sql)
-          type_casted_binds = binds.map { |attr| 
type_cast(attr.value_for_database) }
+          type_casted_binds = type_casted_binds(binds)
 
-          log(sql, name, binds, stmt_key) do
+          log(sql, name, binds, type_casted_binds, stmt_key) do
             @connection.exec_prepared(stmt_key, type_casted_binds)
           end
         rescue ActiveRecord::StatementInvalid => e
@@ -631,7 +631,7 @@
         CACHED_PLAN_HEURISTIC = 'cached plan must not change result 
type'.freeze
         def is_cached_plan_failure?(e)
           pgerror = e.cause
-          code = pgerror.result.result_error_field(PGresult::PG_DIAG_SQLSTATE)
+          code = pgerror.result.result_error_field(PG::PG_DIAG_SQLSTATE)
           code == FEATURE_NOT_SUPPORTED && 
pgerror.message.include?(CACHED_PLAN_HEURISTIC)
         rescue
           false
@@ -668,7 +668,7 @@
         # Connects to a PostgreSQL server and sets up the adapter depending on 
the
         # connected server's characteristics.
         def connect
-          @connection = PGconn.connect(@connection_parameters)
+          @connection = PG.connect(@connection_parameters)
           configure_connection
         rescue ::PG::Error => error
           if error.message.include?("does not exist")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/sqlite3_adapter.rb 
new/lib/active_record/connection_adapters/sqlite3_adapter.rb
--- old/lib/active_record/connection_adapters/sqlite3_adapter.rb        
2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/connection_adapters/sqlite3_adapter.rb        
2017-05-12 22:03:36.000000000 +0200
@@ -188,9 +188,9 @@
       end
 
       def exec_query(sql, name = nil, binds = [], prepare: false)
-        type_casted_binds = binds.map { |attr| 
type_cast(attr.value_for_database) }
+        type_casted_binds = type_casted_binds(binds)
 
-        log(sql, name, binds) do
+        log(sql, name, binds, type_casted_binds) do
           # Don't cache statements if they are not prepared
           unless prepare
             stmt    = @connection.prepare(sql)
@@ -203,7 +203,6 @@
             ensure
               stmt.close
             end
-            stmt = records
           else
             cache = @statements[sql] ||= {
               :stmt => @connection.prepare(sql)
@@ -212,9 +211,10 @@
             cols = cache[:cols] ||= stmt.columns
             stmt.reset!
             stmt.bind_params(type_casted_binds)
+            records = stmt.to_a
           end
 
-          ActiveRecord::Result.new(cols, stmt.to_a)
+          ActiveRecord::Result.new(cols, records)
         end
       end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/explain.rb 
new/lib/active_record/explain.rb
--- old/lib/active_record/explain.rb    2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/explain.rb    2017-05-12 22:03:36.000000000 +0200
@@ -16,15 +16,14 @@
     # Makes the adapter execute EXPLAIN for the tuples of queries and bindings.
     # Returns a formatted string ready to be logged.
     def exec_explain(queries) # :nodoc:
-      str = queries.map do |sql, bind|
-        [].tap do |msg|
-          msg << "EXPLAIN for: #{sql}"
-          unless bind.empty?
-            bind_msg = bind.map {|col, val| [col.name, val]}.inspect
-            msg.last << " #{bind_msg}"
-          end
-          msg << connection.explain(sql, bind)
-        end.join("\n")
+      str = queries.map do |sql, binds|
+        msg = "EXPLAIN for: #{sql}"
+        unless binds.empty?
+          msg << " "
+          msg << binds.map { |attr| render_bind(attr) }.inspect
+        end
+        msg << "\n"
+        msg << connection.explain(sql, binds)
       end.join("\n")
 
       # Overriding inspect to be more human readable, especially in the 
console.
@@ -34,5 +33,17 @@
 
       str
     end
+
+    private
+
+      def render_bind(attr)
+        value = if attr.type.binary? && attr.value
+          "<#{attr.value_for_database.to_s.bytesize} bytes of binary data>"
+        else
+          connection.type_cast(attr.value_for_database)
+        end
+
+        [attr.name, value]
+      end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/gem_version.rb 
new/lib/active_record/gem_version.rb
--- old/lib/active_record/gem_version.rb        2017-03-02 00:11:59.000000000 
+0100
+++ new/lib/active_record/gem_version.rb        2017-05-12 22:03:36.000000000 
+0200
@@ -7,7 +7,7 @@
   module VERSION
     MAJOR = 5
     MINOR = 0
-    TINY  = 2
+    TINY  = 3
     PRE   = nil
 
     STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/log_subscriber.rb 
new/lib/active_record/log_subscriber.rb
--- old/lib/active_record/log_subscriber.rb     2017-03-02 00:11:59.000000000 
+0100
+++ new/lib/active_record/log_subscriber.rb     2017-05-12 22:03:36.000000000 
+0200
@@ -20,20 +20,6 @@
       @odd = false
     end
 
-    def render_bind(attribute)
-      value = if attribute.type.binary? && attribute.value
-        if attribute.value.is_a?(Hash)
-          "<#{attribute.value_for_database.to_s.bytesize} bytes of binary 
data>"
-        else
-          "<#{attribute.value.bytesize} bytes of binary data>"
-        end
-      else
-        attribute.value_for_database
-      end
-
-      [attribute.name, value]
-    end
-
     def sql(event)
       self.class.runtime += event.duration
       return unless logger.debug?
@@ -47,7 +33,10 @@
       binds = nil
 
       unless (payload[:binds] || []).empty?
-        binds = "  " + payload[:binds].map { |attr| render_bind(attr) }.inspect
+        casted_params = type_casted_binds(payload[:binds], 
payload[:type_casted_binds])
+        binds = "  " + payload[:binds].zip(casted_params).map { |attr, value|
+          render_bind(attr, value)
+        }.inspect
       end
 
       name = colorize_payload_name(name, payload[:name])
@@ -58,6 +47,20 @@
 
     private
 
+    def type_casted_binds(binds, casted_binds)
+      casted_binds || ActiveRecord::Base.connection.type_casted_binds(binds)
+    end
+
+    def render_bind(attr, value)
+      if attr.is_a?(Array)
+        attr = attr.first
+      elsif attr.type.binary? && attr.value
+        value = "<#{attr.value_for_database.to_s.bytesize} bytes of binary 
data>"
+      end
+
+      [attr && attr.name, value]
+    end
+
     def colorize_payload_name(name, payload_name)
       if payload_name.blank? || payload_name == "SQL" # SQL vs Model 
Load/Exists
         color(name, MAGENTA, true)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/migration.rb 
new/lib/active_record/migration.rb
--- old/lib/active_record/migration.rb  2017-03-02 00:11:59.000000000 +0100
+++ new/lib/active_record/migration.rb  2017-05-12 22:03:36.000000000 +0200
@@ -1057,10 +1057,6 @@
         Array(@migrations_paths)
       end
 
-      def match_to_migration_filename?(filename) # :nodoc:
-        File.basename(filename) =~ Migration::MigrationFilenameRegexp
-      end
-
       def parse_migration_filename(filename) # :nodoc:
         File.basename(filename).scan(Migration::MigrationFilenameRegexp).first
       end
@@ -1068,9 +1064,7 @@
       def migrations(paths)
         paths = Array(paths)
 
-        files = Dir[*paths.map { |p| "#{p}/**/[0-9]*_*.rb" }]
-
-        migrations = files.map do |file|
+        migrations = migration_files(paths).map do |file|
           version, name, scope = parse_migration_filename(file)
           raise IllegalMigrationNameError.new(file) unless version
           version = version.to_i
@@ -1082,6 +1076,30 @@
         migrations.sort_by(&:version)
       end
 
+      def migrations_status(paths)
+        paths = Array(paths)
+
+        db_list = ActiveRecord::SchemaMigration.normalized_versions
+
+        file_list = migration_files(paths).map do |file|
+          version, name, scope = parse_migration_filename(file)
+          raise IllegalMigrationNameError.new(file) unless version
+          version = 
ActiveRecord::SchemaMigration.normalize_migration_number(version)
+          status = db_list.delete(version) ? "up" : "down"
+          [status, version, (name + scope).humanize]
+        end.compact
+
+        db_list.map! do |version|
+          ["up", version, "********** NO FILE **********"]
+        end
+
+        (db_list + file_list).sort_by { |_, version, _| version }
+      end
+
+      def migration_files(paths)
+        Dir[*paths.flat_map { |path| "#{path}/**/[0-9]*_*.rb" }]
+      end
+
       private
 
       def move(direction, migrations_paths, steps)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/persistence.rb 
new/lib/active_record/persistence.rb
--- old/lib/active_record/persistence.rb        2017-03-02 00:11:59.000000000 
+0100
+++ new/lib/active_record/persistence.rb        2017-05-12 22:03:36.000000000 
+0200
@@ -100,6 +100,10 @@
       !(@new_record || @destroyed)
     end
 
+    ##
+    # :call-seq:
+    #   save(*args)
+    #
     # Saves the model.
     #
     # If the model is new, a record gets created in the database, otherwise
@@ -121,12 +125,16 @@
     #
     # Attributes marked as readonly are silently ignored if the record is
     # being updated.
-    def save(*args)
-      create_or_update(*args)
+    def save(*args, &block)
+      create_or_update(*args, &block)
     rescue ActiveRecord::RecordInvalid
       false
     end
 
+    ##
+    # :call-seq:
+    #   save!(*args)
+    #
     # Saves the model.
     #
     # If the model is new, a record gets created in the database, otherwise
@@ -148,8 +156,8 @@
     #
     # Attributes marked as readonly are silently ignored if the record is
     # being updated.
-    def save!(*args)
-      create_or_update(*args) || raise(RecordNotSaved.new("Failed to save the 
record", self))
+    def save!(*args, &block)
+      create_or_update(*args, &block) || raise(RecordNotSaved.new("Failed to 
save the record", self))
     end
 
     # Deletes the record in the database and freezes this instance to
@@ -535,9 +543,9 @@
       self.class.unscoped.where(self.class.primary_key => id)
     end
 
-    def create_or_update(*args)
+    def create_or_update(*args, &block)
       raise ReadOnlyRecord, "#{self.class} is marked as readonly" if readonly?
-      result = new_record? ? _create_record : _update_record(*args)
+      result = new_record? ? _create_record(&block) : _update_record(*args, 
&block)
       result != false
     end
 
@@ -546,10 +554,14 @@
     def _update_record(attribute_names = self.attribute_names)
       attributes_values = 
arel_attributes_with_values_for_update(attribute_names)
       if attributes_values.empty?
-        0
+        rows_affected = 0
       else
-        self.class.unscoped._update_record attributes_values, id, id_was
+        rows_affected = self.class.unscoped._update_record attributes_values, 
id, id_was
       end
+
+      yield(self) if block_given?
+
+      rows_affected
     end
 
     # Creates a record with values matching those of the instance attributes
@@ -561,6 +573,9 @@
       self.id ||= new_id if self.class.primary_key
 
       @new_record = false
+
+      yield(self) if block_given?
+
       id
     end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/railties/databases.rake 
new/lib/active_record/railties/databases.rake
--- old/lib/active_record/railties/databases.rake       2017-03-02 
00:11:59.000000000 +0100
+++ new/lib/active_record/railties/databases.rake       2017-05-12 
22:03:36.000000000 +0200
@@ -77,6 +77,8 @@
   namespace :migrate do
     # desc  'Rollbacks the database one migration and re migrate up (options: 
STEP=x, VERSION=x).'
     task :redo => [:environment, :load_config] do
+      raise "Empty VERSION provided" if ENV["VERSION"] && ENV["VERSION"].empty?
+
       if ENV['VERSION']
         db_namespace['migrate:down'].invoke
         db_namespace['migrate:up'].invoke
@@ -91,16 +93,17 @@
 
     # desc 'Runs the "up" for a given migration VERSION.'
     task :up => [:environment, :load_config] do
+      raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
+
       version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
-      raise 'VERSION is required' unless version
       ActiveRecord::Migrator.run(:up, 
ActiveRecord::Tasks::DatabaseTasks.migrations_paths, version)
       db_namespace['_dump'].invoke
     end
 
     # desc 'Runs the "down" for a given migration VERSION.'
     task :down => [:environment, :load_config] do
+      raise "VERSION is required - To go down one migration, use db:rollback" 
if !ENV["VERSION"] || ENV["VERSION"].empty?
       version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
-      raise 'VERSION is required - To go down one migration, run db:rollback' 
unless version
       ActiveRecord::Migrator.run(:down, 
ActiveRecord::Tasks::DatabaseTasks.migrations_paths, version)
       db_namespace['_dump'].invoke
     end
@@ -110,28 +113,13 @@
       unless ActiveRecord::SchemaMigration.table_exists?
         abort 'Schema migrations table does not exist yet.'
       end
-      db_list = ActiveRecord::SchemaMigration.normalized_versions
 
-      file_list =
-          ActiveRecord::Tasks::DatabaseTasks.migrations_paths.flat_map do 
|path|
-            Dir.foreach(path).map do |file|
-              next unless 
ActiveRecord::Migrator.match_to_migration_filename?(file)
-
-              version, name, scope = 
ActiveRecord::Migrator.parse_migration_filename(file)
-              version = 
ActiveRecord::SchemaMigration.normalize_migration_number(version)
-              status = db_list.delete(version) ? 'up' : 'down'
-              [status, version, (name + scope).humanize]
-            end.compact
-          end
-
-      db_list.map! do |version|
-        ['up', version, '********** NO FILE **********']
-      end
       # output
       puts "\ndatabase: #{ActiveRecord::Base.connection_config[:database]}\n\n"
       puts "#{'Status'.center(8)}  #{'Migration ID'.ljust(14)}  Migration Name"
       puts "-" * 50
-      (db_list + file_list).sort_by { |_, version, _| version }.each do 
|status, version, name|
+      paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
+      ActiveRecord::Migrator.migrations_status(paths).each do |status, 
version, name|
         puts "#{status.center(8)}  #{version.ljust(14)}  #{name}"
       end
       puts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/relation/calculations.rb 
new/lib/active_record/relation/calculations.rb
--- old/lib/active_record/relation/calculations.rb      2017-03-02 
00:11:59.000000000 +0100
+++ new/lib/active_record/relation/calculations.rb      2017-05-12 
22:03:36.000000000 +0200
@@ -282,7 +282,7 @@
           operation,
           distinct).as(aggregate_alias)
       ]
-      select_values += select_values unless having_clause.empty?
+      select_values += self.select_values unless having_clause.empty?
 
       select_values.concat group_columns.map { |aliaz, field|
         if field.respond_to?(:as)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/relation/delegation.rb 
new/lib/active_record/relation/delegation.rb
--- old/lib/active_record/relation/delegation.rb        2017-03-02 
00:11:59.000000000 +0100
+++ new/lib/active_record/relation/delegation.rb        2017-05-12 
22:03:36.000000000 +0200
@@ -24,6 +24,8 @@
 
       def inherited(child_class)
         child_class.initialize_relation_delegate_cache
+        delegate = 
child_class.relation_delegate_class(ActiveRecord::Associations::CollectionProxy)
+        delegate.include 
ActiveRecord::Associations::CollectionProxy::DelegateExtending
         super
       end
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/tasks/database_tasks.rb 
new/lib/active_record/tasks/database_tasks.rb
--- old/lib/active_record/tasks/database_tasks.rb       2017-03-02 
00:12:00.000000000 +0100
+++ new/lib/active_record/tasks/database_tasks.rb       2017-05-12 
22:03:36.000000000 +0200
@@ -154,6 +154,8 @@
       end
 
       def migrate
+        raise "Empty VERSION provided" if ENV["VERSION"] && 
ENV["VERSION"].empty?
+
         verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
         version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
         scope   = ENV['SCOPE']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/transactions.rb 
new/lib/active_record/transactions.rb
--- old/lib/active_record/transactions.rb       2017-03-02 00:12:00.000000000 
+0100
+++ new/lib/active_record/transactions.rb       2017-05-12 22:03:36.000000000 
+0200
@@ -124,7 +124,7 @@
     #     # statement will cause a PostgreSQL error, even though the unique
     #     # constraint is no longer violated:
     #     Number.create(i: 1)
-    #     # => "PGError: ERROR:  current transaction is aborted, commands
+    #     # => "PG::Error: ERROR:  current transaction is aborted, commands
     #     #     ignored until end of transaction block"
     #   end
     #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/rails/generators/active_record/migration/migration_generator.rb 
new/lib/rails/generators/active_record/migration/migration_generator.rb
--- old/lib/rails/generators/active_record/migration/migration_generator.rb     
2017-03-02 00:12:00.000000000 +0100
+++ new/lib/rails/generators/active_record/migration/migration_generator.rb     
2017-05-12 22:03:36.000000000 +0200
@@ -68,14 +68,6 @@
         def normalize_table_name(_table_name)
           pluralize_table_names? ? _table_name.pluralize : 
_table_name.singularize
         end
-
-        def db_migrate_path
-          if defined?(Rails) && Rails.application
-            Rails.application.config.paths["db/migrate"].to_ary.first
-          else
-            "db/migrate"
-          end
-        end
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rails/generators/active_record/migration.rb 
new/lib/rails/generators/active_record/migration.rb
--- old/lib/rails/generators/active_record/migration.rb 2017-03-02 
00:12:00.000000000 +0100
+++ new/lib/rails/generators/active_record/migration.rb 2017-05-12 
22:03:36.000000000 +0200
@@ -20,6 +20,14 @@
           key_type = options[:primary_key_type]
           ", id: :#{key_type}" if key_type
         end
+
+        def db_migrate_path
+          if defined?(Rails.application) && Rails.application
+            Rails.application.config.paths["db/migrate"].to_ary.first
+          else
+            "db/migrate"
+          end
+        end
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/rails/generators/active_record/model/model_generator.rb 
new/lib/rails/generators/active_record/model/model_generator.rb
--- old/lib/rails/generators/active_record/model/model_generator.rb     
2017-03-02 00:12:00.000000000 +0100
+++ new/lib/rails/generators/active_record/model/model_generator.rb     
2017-05-12 22:03:36.000000000 +0200
@@ -64,14 +64,6 @@
             'app/models/application_record.rb'
           end
         end
-
-        def db_migrate_path
-          if defined?(Rails) && Rails.application
-            Rails.application.config.paths["db/migrate"].to_ary.first
-          else
-            "db/migrate"
-          end
-        end
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2017-03-02 00:11:59.000000000 +0100
+++ new/metadata        2017-05-12 22:03:36.000000000 +0200
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: activerecord
 version: !ruby/object:Gem::Version
-  version: 5.0.2
+  version: 5.0.3
 platform: ruby
 authors:
 - David Heinemeier Hansson
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2017-03-01 00:00:00.000000000 Z
+date: 2017-05-12 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: activesupport
@@ -16,28 +16,28 @@
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 5.0.2
+        version: 5.0.3
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 5.0.2
+        version: 5.0.3
 - !ruby/object:Gem::Dependency
   name: activemodel
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 5.0.2
+        version: 5.0.3
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 5.0.2
+        version: 5.0.3
 - !ruby/object:Gem::Dependency
   name: arel
   requirement: !ruby/object:Gem::Requirement
@@ -333,3 +333,4 @@
 specification_version: 4
 summary: Object-relational mapper framework (part of Rails).
 test_files: []
+has_rdoc: 


Reply via email to