Hello community,

here is the log from the commit of package rubygem-activerecord-4_2 for 
openSUSE:Factory checked in at 2017-03-21 22:50:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-activerecord-4_2 (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-activerecord-4_2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-activerecord-4_2"

Tue Mar 21 22:50:25 2017 rev:11 rq:479675 version:4.2.8

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/rubygem-activerecord-4_2/rubygem-activerecord-4_2.changes
        2016-08-25 09:55:31.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.rubygem-activerecord-4_2.new/rubygem-activerecord-4_2.changes
   2017-03-21 22:50:26.419223167 +0100
@@ -1,0 +2,36 @@
+Wed Feb 22 05:30:20 UTC 2017 - co...@suse.com
+
+- updated to version 4.2.8
+ see installed CHANGELOG.md
+
+  ## Rails 4.2.8 (February 21, 2017) ##
+  
+  *   Using a mysql2 connection after it fails to reconnect will now have an 
error message
+      saying the connection is closed rather than an undefined method error 
message.
+  
+      *Dylan Thacker-Smith*
+  
+  *   Bust Model.attribute_names cache when resetting column information
+  
+      *James Coleman*
+  
+  *   Fix query caching when type information is reset
+  
+      Backports ancillary fix in 5.0.
+  
+      *James Coleman*
+  
+  *   Allow `joins` to be unscoped.
+  
+      Fixes #13775.
+  
+      *Takashi Kokubun*
+  
+  *   Hashes can once again be passed to setters of `composed_of`, if all of 
the
+      mapping methods are methods implemented on `Hash`.
+  
+      Fixes #25978.
+  
+      *Sean Griffin*
+
+-------------------------------------------------------------------

Old:
----
  activerecord-4.2.7.1.gem

New:
----
  activerecord-4.2.8.gem

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

Other differences:
------------------
++++++ rubygem-activerecord-4_2.spec ++++++
--- /var/tmp/diff_new_pack.EcDuvb/_old  2017-03-21 22:50:27.255104997 +0100
+++ /var/tmp/diff_new_pack.EcDuvb/_new  2017-03-21 22:50:27.259104431 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package rubygem-activerecord-4_2
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-activerecord-4_2
-Version:        4.2.7.1
+Version:        4.2.8
 Release:        0
 %define mod_name activerecord
 %define mod_full_name %{mod_name}-%{version}

++++++ activerecord-4.2.7.1.gem -> activerecord-4.2.8.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md    2016-08-11 00:25:26.000000000 +0200
+++ new/CHANGELOG.md    2017-02-21 17:07:00.000000000 +0100
@@ -1,3 +1,34 @@
+## Rails 4.2.8 (February 21, 2017) ##
+
+*   Using a mysql2 connection after it fails to reconnect will now have an 
error message
+    saying the connection is closed rather than an undefined method error 
message.
+
+    *Dylan Thacker-Smith*
+
+*   Bust Model.attribute_names cache when resetting column information
+
+    *James Coleman*
+
+*   Fix query caching when type information is reset
+
+    Backports ancillary fix in 5.0.
+
+    *James Coleman*
+
+*   Allow `joins` to be unscoped.
+
+    Fixes #13775.
+
+    *Takashi Kokubun*
+
+*   Hashes can once again be passed to setters of `composed_of`, if all of the
+    mapping methods are methods implemented on `Hash`.
+
+    Fixes #25978.
+
+    *Sean Griffin*
+
+
 ## Rails 4.2.7 (July 12, 2016) ##
 
 *   Inspecting an object with an associated array of over 10 elements no longer
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/aggregations.rb 
new/lib/active_record/aggregations.rb
--- old/lib/active_record/aggregations.rb       2016-08-11 00:25:26.000000000 
+0200
+++ new/lib/active_record/aggregations.rb       2017-02-21 17:07:00.000000000 
+0100
@@ -249,7 +249,9 @@
               part = converter.respond_to?(:call) ? converter.call(part) : 
klass.send(converter, part)
             end
 
-            if part.is_a?(Hash)
+            hash_from_multiparameter_assignment = part.is_a?(Hash) &&
+              part.each_key.all? { |k| k.is_a?(Integer) }
+            if hash_from_multiparameter_assignment
               part = klass.new(*part.values)
             end
 
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        
2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record/associations/collection_association.rb        
2017-02-21 17:07:00.000000000 +0100
@@ -61,10 +61,17 @@
 
       # Implements the ids writer method, e.g. foo.item_ids= for Foo.has_many 
:items
       def ids_writer(ids)
-        pk_type = reflection.primary_key_type
-        ids = Array(ids).reject { |id| id.blank? }
-        ids.map! { |i| pk_type.type_cast_from_user(i) }
-        replace(klass.find(ids).index_by { |r| r.id }.values_at(*ids))
+        pk_column = reflection.association_primary_key
+        pk_type = klass.type_for_attribute(pk_column)
+        ids = Array(ids).reject(&:blank?).map do |i|
+          pk_type.type_cast_from_user(i)
+        end
+
+        if (objs = klass.where(pk_column => ids)).size == ids.size
+          replace(objs.index_by { |r| r.send(pk_column) }.values_at(*ids))
+        else
+          objs.raise_record_not_found_exception!(ids, objs.size, ids.size)
+        end
       end
 
       def reset
@@ -264,7 +271,7 @@
         _options = records.extract_options!
         dependent = _options[:dependent] || options[:dependent]
 
-        records = find(records) if records.any? { |record| 
record.kind_of?(Fixnum) || record.kind_of?(String) }
+        records = find(records) if records.any? { |record| 
record.kind_of?(Integer) || record.kind_of?(String) }
         delete_or_destroy(records, dependent)
       end
 
@@ -275,7 +282,7 @@
       # +:dependent+ option.
       def destroy(*records)
         return if records.empty?
-        records = find(records) if records.any? { |record| 
record.kind_of?(Fixnum) || record.kind_of?(String) }
+        records = find(records) if records.any? { |record| 
record.kind_of?(Integer) || record.kind_of?(String) }
         delete_or_destroy(records, :destroy)
       end
 
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      2016-08-11 
00:25:26.000000000 +0200
+++ new/lib/active_record/associations/collection_proxy.rb      2017-02-21 
17:07:00.000000000 +0100
@@ -562,7 +562,7 @@
       #   Pet.find(1)
       #   # => ActiveRecord::RecordNotFound: Couldn't find Pet with id=1
       #
-      # You can pass +Fixnum+ or +String+ values, it finds the records
+      # You can pass +Integer+ or +String+ values, it finds the records
       # responding to the +id+ and executes delete on them.
       #
       #   class Person < ActiveRecord::Base
@@ -626,7 +626,7 @@
       #
       #   Pet.find(1, 2, 3) # => ActiveRecord::RecordNotFound: Couldn't find 
all Pets with IDs (1, 2, 3)
       #
-      # You can pass +Fixnum+ or +String+ values, it finds the records
+      # You can pass +Integer+ or +String+ values, it finds the records
       # responding to the +id+ and then deletes them from the database.
       #
       #   person.pets.size # => 3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/associations/join_dependency/join_association.rb 
new/lib/active_record/associations/join_dependency/join_association.rb
--- old/lib/active_record/associations/join_dependency/join_association.rb      
2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record/associations/join_dependency/join_association.rb      
2017-02-21 17:07:00.000000000 +0100
@@ -52,7 +52,15 @@
             end
             scope_chain_index += 1
 
-            scope_chain_items.concat [klass.send(:build_default_scope, 
ActiveRecord::Relation.create(klass, table))].compact
+            klass_scope =
+              if klass.current_scope
+                klass.current_scope.clone.tap { |scope|
+                  scope.joins_values = []
+                }
+              else
+                klass.send(:build_default_scope, 
ActiveRecord::Relation.create(klass, table))
+              end
+            scope_chain_items.concat [klass_scope].compact
 
             rel = scope_chain_items.inject(scope_chain_items.shift) do |left, 
right|
               left.merge right
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/attribute_assignment.rb 
new/lib/active_record/attribute_assignment.rb
--- old/lib/active_record/attribute_assignment.rb       2016-08-11 
00:25:26.000000000 +0200
+++ new/lib/active_record/attribute_assignment.rb       2017-02-21 
17:07:00.000000000 +0100
@@ -69,7 +69,7 @@
     # by calling new on the column type or aggregation type (through 
composed_of) object with these parameters.
     # So having the pairs written_on(1) = "2004", written_on(2) = "6", 
written_on(3) = "24", will instantiate
     # written_on (a date type) with Date.new("2004", "6", "24"). You can also 
specify a typecast character in the
-    # parentheses to have the parameters typecasted before they're used in the 
constructor. Use i for Fixnum and
+    # parentheses to have the parameters typecasted before they're used in the 
constructor. Use i for Integer and
     # f for Float. If all the values for a given attribute are empty, the 
attribute will be set to +nil+.
     def assign_multiparameter_attributes(pairs)
       execute_callstack_for_multiparameter_attributes(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/attribute_methods/write.rb 
new/lib/active_record/attribute_methods/write.rb
--- old/lib/active_record/attribute_methods/write.rb    2016-08-11 
00:25:26.000000000 +0200
+++ new/lib/active_record/attribute_methods/write.rb    2017-02-21 
17:07:00.000000000 +0100
@@ -50,7 +50,7 @@
       end
 
       # Updates the attribute identified by <tt>attr_name</tt> with the
-      # specified +value+. Empty strings for fixnum and float columns are
+      # specified +value+. Empty strings for Integer and Float columns are
       # turned into +nil+.
       def write_attribute(attr_name, value)
         write_attribute_with_type_cast(attr_name, value, true)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/attribute_methods.rb 
new/lib/active_record/attribute_methods.rb
--- old/lib/active_record/attribute_methods.rb  2016-08-11 00:25:26.000000000 
+0200
+++ new/lib/active_record/attribute_methods.rb  2017-02-21 17:07:00.000000000 
+0100
@@ -364,7 +364,7 @@
     #   person = Person.new
     #   person[:age] = '22'
     #   person[:age] # => 22
-    #   person[:age] # => Fixnum
+    #   person[:age].class # => Integer
     def []=(attr_name, value)
       write_attribute(attr_name, value)
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/attributes.rb 
new/lib/active_record/attributes.rb
--- old/lib/active_record/attributes.rb 2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record/attributes.rb 2017-02-21 17:07:00.000000000 +0100
@@ -136,6 +136,7 @@
         @content_columns = nil
         @default_attributes = nil
         @persistable_attribute_names = nil
+        @attribute_names = nil
       end
 
       def raw_default_values
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/abstract/connection_pool.rb 
new/lib/active_record/connection_adapters/abstract/connection_pool.rb
--- old/lib/active_record/connection_adapters/abstract/connection_pool.rb       
2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record/connection_adapters/abstract/connection_pool.rb       
2017-02-21 17:07:00.000000000 +0100
@@ -637,7 +637,7 @@
       end
 
       def pool_from_any_process_for(owner)
-        owner_to_pool = @owner_to_pool.values.find { |v| v[owner.name] }
+        owner_to_pool = @owner_to_pool.values.reverse.find { |v| v[owner.name] 
}
         owner_to_pool && owner_to_pool[owner.name]
       end
     end
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       
2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record/connection_adapters/abstract/quoting.rb       
2017-02-21 17:07:00.000000000 +0100
@@ -1,4 +1,5 @@
 require 'active_support/core_ext/big_decimal/conversions'
+require "active_support/multibyte/chars"
 
 module ActiveRecord
   module ConnectionAdapters # :nodoc:
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 
2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record/connection_adapters/abstract_mysql_adapter.rb 
2017-02-21 17:07:00.000000000 +0100
@@ -750,7 +750,7 @@
           case length
           when Hash
             column_names.each {|name| option_strings[name] += 
"(#{length[name]})" if length.has_key?(name) && length[name].present?}
-          when Fixnum
+          when Integer
             column_names.each {|name| option_strings[name] += "(#{length})"}
           end
         end
@@ -864,7 +864,7 @@
 
         # Increase timeout so the server doesn't disconnect us.
         wait_timeout = @config[:wait_timeout]
-        wait_timeout = 2147483 unless wait_timeout.is_a?(Fixnum)
+        wait_timeout = 2147483 unless wait_timeout.is_a?(Integer)
         variables['wait_timeout'] = 
self.class.type_cast_config_to_integer(wait_timeout)
 
         # Make MySQL reject illegal values rather than truncating or blanking 
them, see
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/lib/active_record/connection_adapters/mysql2_adapter.rb 
new/lib/active_record/connection_adapters/mysql2_adapter.rb
--- old/lib/active_record/connection_adapters/mysql2_adapter.rb 2016-08-11 
00:25:26.000000000 +0200
+++ new/lib/active_record/connection_adapters/mysql2_adapter.rb 2017-02-21 
17:07:00.000000000 +0100
@@ -87,7 +87,6 @@
       #++
 
       def active?
-        return false unless @connection
         @connection.ping
       end
 
@@ -102,10 +101,7 @@
       # Otherwise, this method does nothing.
       def disconnect!
         super
-        unless @connection.nil?
-          @connection.close
-          @connection = nil
-        end
+        @connection.close
       end
 
       #--
@@ -222,11 +218,9 @@
 
       # Executes the SQL statement in the context of this connection.
       def execute(sql, name = nil)
-        if @connection
-          # make sure we carry over any changes to 
ActiveRecord::Base.default_timezone that have been
-          # made since we established the connection
-          @connection.query_options[:database_timezone] = 
ActiveRecord::Base.default_timezone
-        end
+        # make sure we carry over any changes to 
ActiveRecord::Base.default_timezone that have been
+        # made since we established the connection
+        @connection.query_options[:database_timezone] = 
ActiveRecord::Base.default_timezone
 
         super
       end
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   
2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record/connection_adapters/postgresql/oid/array.rb   
2017-02-21 17:07:00.000000000 +0100
@@ -80,6 +80,7 @@
                 value
               end
             when nil then "NULL"
+            when ::Date, ::DateTime, ::Time then 
subtype.type_cast_for_schema(value)
             else value
             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        2016-08-11 00:25:26.000000000 
+0200
+++ new/lib/active_record/gem_version.rb        2017-02-21 17:07:00.000000000 
+0100
@@ -7,8 +7,8 @@
   module VERSION
     MAJOR = 4
     MINOR = 2
-    TINY  = 7
-    PRE   = "1"
+    TINY  = 8
+    PRE   = nil
 
     STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/model_schema.rb 
new/lib/active_record/model_schema.rb
--- old/lib/active_record/model_schema.rb       2016-08-11 00:25:26.000000000 
+0200
+++ new/lib/active_record/model_schema.rb       2017-02-21 17:07:00.000000000 
+0100
@@ -247,7 +247,7 @@
       # Returns a hash where the keys are column names and the values are
       # default values when instantiating the AR object for this table.
       def column_defaults
-        _default_attributes.to_hash
+        _default_attributes.dup.to_hash
       end
 
       def _default_attributes # :nodoc:
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      2016-08-11 
00:25:26.000000000 +0200
+++ new/lib/active_record/relation/calculations.rb      2017-02-21 
17:07:00.000000000 +0100
@@ -94,7 +94,7 @@
     #
     # There are two basic forms of output:
     #
-    #   * Single aggregate value: The single value is type cast to Fixnum for 
COUNT, Float
+    #   * Single aggregate value: The single value is type cast to Integer for 
COUNT, Float
     #     for AVG, and the given column's type for everything else.
     #
     #   * Grouped values: This returns an ordered hash of the values and 
groups them. It
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/schema_migration.rb 
new/lib/active_record/schema_migration.rb
--- old/lib/active_record/schema_migration.rb   2016-08-11 00:25:26.000000000 
+0200
+++ new/lib/active_record/schema_migration.rb   2017-02-21 17:07:00.000000000 
+0100
@@ -34,10 +34,7 @@
       end
 
       def drop_table
-        if table_exists?
-          connection.remove_index table_name, name: index_name
-          connection.drop_table(table_name)
-        end
+        connection.drop_table table_name if table_exists?
       end
 
       def normalize_migration_number(number)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record/type/value.rb 
new/lib/active_record/type/value.rb
--- old/lib/active_record/type/value.rb 2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record/type/value.rb 2017-02-21 17:07:00.000000000 +0100
@@ -86,6 +86,11 @@
           scale == other.scale &&
           limit == other.limit
       end
+      alias eql? ==
+
+      def hash
+        [self.class, precision, scale, limit].hash
+      end
 
       private
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/active_record.rb new/lib/active_record.rb
--- old/lib/active_record.rb    2016-08-11 00:25:26.000000000 +0200
+++ new/lib/active_record.rb    2017-02-21 17:07:00.000000000 +0100
@@ -43,7 +43,6 @@
   autoload :Explain
   autoload :Inheritance
   autoload :Integration
-  autoload :LegacyYamlAdapter
   autoload :Migration
   autoload :Migrator, 'active_record/migration'
   autoload :ModelSchema
@@ -80,6 +79,8 @@
     autoload :AttributeMethods
     autoload :AutosaveAssociation
 
+    autoload :LegacyYamlAdapter
+
     autoload :Relation
     autoload :AssociationRelation
     autoload :NullRelation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2016-08-11 00:25:26.000000000 +0200
+++ new/metadata        2017-02-21 17:07:00.000000000 +0100
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: activerecord
 version: !ruby/object:Gem::Version
-  version: 4.2.7.1
+  version: 4.2.8
 platform: ruby
 authors:
 - David Heinemeier Hansson
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2016-08-10 00:00:00.000000000 Z
+date: 2017-02-21 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: activesupport
@@ -16,28 +16,28 @@
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 4.2.7.1
+        version: 4.2.8
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 4.2.7.1
+        version: 4.2.8
 - !ruby/object:Gem::Dependency
   name: activemodel
   requirement: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 4.2.7.1
+        version: 4.2.8
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - '='
       - !ruby/object:Gem::Version
-        version: 4.2.7.1
+        version: 4.2.8
 - !ruby/object:Gem::Dependency
   name: arel
   requirement: !ruby/object:Gem::Requirement
@@ -304,9 +304,8 @@
       version: '0'
 requirements: []
 rubyforge_project: 
-rubygems_version: 2.6.6
+rubygems_version: 2.6.10
 signing_key: 
 specification_version: 4
 summary: Object-relational mapper framework (part of Rails).
 test_files: []
-has_rdoc: 


Reply via email to