Commit Graph

48562 Commits

Author SHA1 Message Date
Sean Griffin
a0e34619b8 Merge pull request #18170 from tgxworld/add_docs_for_rails_application_secrets
[ci skip]
2014-12-23 09:44:12 -07:00
Sean Griffin
e35221cfd9 Don't treat nil as changed in serialized types
We were ignoring the `default_value?` escape clause in the serialized
type, which caused the default value to always be treated as changed.

Fixes #18169
2014-12-23 09:40:01 -07:00
Guo Xiang Tan
2f7b72b793 Rails::Application#secrets should be documented. 2014-12-24 00:32:31 +08:00
Sean Griffin
d26704a15f Refactor a common class to reduce the duplication for references
The code for `TableDefinition#references` and
`SchemaStatements#add_reference` were almost identical both
structurally, and in terms of domain knowledge. This removes that
duplication into a common class, using the `Table` API as the expected
interface of its collaborator.
2014-12-23 09:20:54 -07:00
Sean Griffin
affae7d904 Fix syntax warning
This isn't Seattle.rb, @senny. ;)
2014-12-23 09:13:56 -07:00
Sean Griffin
c81a74c972 Merge pull request #18167 from al2o3cr/checkin_connection_leak
Fix connection leak when a thread checks in additional connections.
2014-12-23 08:37:33 -07:00
Sean Griffin
21289bed3b Merge pull request #18166 from merongivian/search_field_refactor
Remove block from super
2014-12-23 08:37:17 -07:00
Matt Jones
5e024070ab Fix connection leak when a thread checks in additional connections.
The code in `ConnectionPool#release` assumed that a single thread only
ever holds a single connection, and thus that releasing a connection
only requires the owning thread_id.

There is a trivial counterexample to this assumption: code that checks
out additional connections from the pool in the same thread. For
instance:

    connection_1 = ActiveRecord::Base.connection
    connection_2 = ActiveRecord::Base.connection_pool.checkout
    ActiveRecord::Base.connection_pool.checkin(connection_2)
    connection_3 = ActiveRecord::Base.connection

At this point, connection_1 has been removed from the
`@reserved_connections` hash, causing a NEW connection to be returned as
connection_3 and the loss of any tracking info on connection_1. As long
as the thread in this example lives, connection_1 will be inaccessible
and un-reapable. If this block of code runs more times than the size of
the connection pool in a single thread, every subsequent connection
attempt will timeout, as all of the available connections have been
leaked.

Reverts parts of 9e457a8654fa89fe329719f88ae3679aefb21e56 and
essentially all of 4367d2f05cbeda855820e25a08353d4b7b3457ac
2014-12-23 09:54:52 -05:00
Jose Añasco
96f0aad6ec Remove block from super 2014-12-23 09:38:44 -05:00
Sean Griffin
e550bbf8fc Changelog for 99a6f9e60ea55924b44f894a16f8de0162cf2702
Here you go, @senny. 😁
2014-12-23 07:21:43 -07:00
Sean Griffin
b994c0e03d Merge pull request #18145 from georgemillo/patch-2
Add information about "allow_destroy" requiring an ID. [ci skip]
2014-12-23 07:17:01 -07:00
Sean Griffin
a054269ff8 Merge Pull Request #18157
Conflicts:
	activerecord/CHANGELOG.md
2014-12-23 07:13:54 -07:00
Yves Senn
b5bfd6fe52 docs, replace ` with + for proper rdoc output. [ci skip] 2014-12-23 13:36:13 +01:00
Yves Senn
ad783136d7 Replace deprecated #load_schema with #load_schema_for. 2014-12-23 12:07:15 +01:00
George Millo
7476b90e16 Add information about "allow_destroy" requiring an ID. [ci skip]
I just wasted an absurd amount of time trying to figure out why my model
wasn't being deleted even though I was setting `_destroy` to true like
the instructions said. Making the documentation a little bit clear so
that someone like me doesn't waste their time in future.
2014-12-23 10:18:02 +00:00
Yves Senn
0587070391 cleanup CHANGELOGs. [ci skip] 2014-12-23 08:56:17 +01:00
Yves Senn
d56b766056 Merge pull request #18162 from romaimperator/master
Fixing numeric attrs when set to same negative value
2014-12-23 08:52:40 +01:00
Yves Senn
ced687fe71 Merge pull request #18163 from y-yagi/fix_nodoc_typo
fix typo in nodoc [ci skip]
2014-12-23 08:42:51 +01:00
yuuji.yaginuma
2a110fcfc8 fix typo in nodoc 2014-12-23 16:03:17 +09:00
Daniel Fox
2859341c38 Fixing numeric attrs when set to same negative value
This bug occurs when an attribute of an ActiveRecord model is an
ActiveRecord::Type::Integer type or a ActiveRecord::Type::Decimal type (or any
other type that includes the ActiveRecord::Type::Numeric module. When the value
of the attribute is negative and is set to the same negative value, it is marked
as changed.

Take the following example of a Person model with the integer attribute age:

    class Person < ActiveRecord::Base
      # age          :integer(4)
    end

The following will produce the error:

    person = Person.new(age: -1)
    person.age = -1
    person.changes
    => { "age" => [-1, -1] }
    person.age_changed?
    => true

The problematic line is here:

    module ActiveRecord
      module Type
        module Numeric
          ...

          def non_numeric_string?(value)
            # 'wibble'.to_i will give zero, we want to make sure
            # that we aren't marking int zero to string zero as
            # changed.
            value.to_s !~ /\A\d+\.?\d*\z/
          end
        end
      end
    end

The regex match doesn't accept numbers with a leading '-'.
2014-12-23 00:19:14 -06:00
Sean Griffin
38e9f5b1d8 Merge pull request #18158 from YayConnolly/master
Describe gotcha for 'status' option [ci skip]
2014-12-22 21:30:09 -07:00
J Connolly
2ad466b867 Describe gotcha for 'status' option [ci skip] 2014-12-22 19:04:57 -08:00
Grey Baker
d318badc26 Don't raise on out-of-range datetimes passed by a user 2014-12-23 02:35:12 +00:00
Sean Griffin
d9d865aa40 Merge pull request #18156 from claudiob/better-record-identifier-tests
Better tests for AV::RecordIdentifier
2014-12-22 18:06:16 -07:00
claudiob
b26338e83b Better tests for AV::RecordIdentifier
This commit intends to clarify the scope of ActionView::RecordIdentifier
methods `dom_id` and `dom_class`.

Most of the current documentation comes from da257eb8 (7 years ago) when
the decoupling of ActionView, ActiveRecord and ActiveModel was not a concern.

Since then, steps have been taken to reach such decoupling.
Therefore I think it's important to show that ActionView::RecordIdentifier
**does not strictly depend on the ActiveRecord API**:
any class `Post` implementing `post.to_key` and `post.model_name.param_key`
will work.

This commit adds a test to prove that ActionView::RecordIdentifier methods
can also be used on objects that do not subclass ActiveRecord::Base.
2014-12-23 01:59:25 +01:00
Sean Griffin
8259d79560 Merge pull request #18147 from andreynering/guides-line-breaks-fix
Do not use line breaks on notes [ci skip]
2014-12-22 17:04:26 -07:00
Sean Griffin
be2b98b4ae Improve the performance of reading belongs_to associations
`ActiveRecord::Base#[]` has overhead that was introduced in 4.2. The
`foo["id"]` working with PKs other than ID isn't really a case that we
want to support publicly, but deprecating was painful enough that we
avoid it. `_read_attribute` was introduced as the faster alternative for
use internally. By using that, we can save a lot of overhead. We also
save some overhead by reading the attribute one fewer times in
`stale_state`.

Fixes #18151
2014-12-22 16:38:38 -07:00
Sean Griffin
fb160f6e7d Don't perform statement caching for find when called from a scope
If there is a method defined such as `find_and_do_stuff(id)`, which then
gets called on an association, we will perform statement caching and the
parent ID will not change on subsequent calls.

Fixes #18117
2014-12-22 15:38:58 -07:00
Sean Griffin
18ae0656f5 Don't calculate all in-place changes to determine if attribute_changed?
Calling `changed_attributes` will ultimately check if every mutable
attribute has changed in place. Since this gets called whenever an
attribute is assigned, it's extremely slow. Instead, we can avoid this
calculation until we actually need it.

Fixes #18029
2014-12-22 14:55:58 -07:00
Sean Griffin
849274316d Don't wrap create_table in a transaction for tests which run on MySQL
PG will warn without it, but mysql2 errors out.
2014-12-22 14:15:56 -07:00
Sean Griffin
b7d7e0b15e Add test missed by a03ea684efc3505647cf0327a501aa2dbb591ad2 2014-12-22 14:05:35 -07:00
Sean Griffin
a03ea684ef Use the new foreign_key option on references in generators
Changes `rails g model Post user:references` from

    def change
      create_table :posts do |t|
        t.references :user, index: true
      end

      add_foreign_key :posts, :users
    end

to

    def change
      create_table :posts do |t|
        t.references :user, index: true, foreign_key: true
      end
    end

Changes `rails g migration add_user_to_posts user:references` from

    def change
      add_reference :posts, :users, index: true
      add_foreign_key :posts, :users
    end

to

    def change
      add_reference :posts, :users, index: true, foreign_key: true
    end
2014-12-22 13:47:11 -07:00
Sean Griffin
82afeaf23b Add foreign_key as an option to references for change_table
This has the same comments as 9af90ffa00ba35bdee888e3e1ab775ba0bdbe72c,
however it affects the `add_reference` method, and `t.references` in the
context of a `change_table` block.

There is a lot of duplication of code between creating and updating
tables. We should re-evaluate the structure of this code from a high
level so changes like this don't need to be made in two places. (Note to
self)
2014-12-22 13:47:11 -07:00
Sean Griffin
68a6c8ecc4 Convert add_references to use kwargs
While we still aren't accepting PRs that only make changes like this,
it's fine when we're actively working on a method if it makes our lives
easier.
2014-12-22 13:47:11 -07:00
Sean Griffin
99a6f9e60e Add a foreign_key option to references while creating the table
Rather than having to do:

    create_table :posts do |t|
      t.references :user
    end

    add_foreign_key :posts, :users

You can instead do:

    create_table :posts do |t|
      t.references :user, foreign_key: true
    end

Similar to the `index` option, you can also pass a hash. This will be
passed as the options to `add_foreign_key`. e.g.:

    create_table :posts do |t|
      t.references :user, foreign_key: { primary_key: :other_id }
    end

is equivalent to

    create_table :posts do |t|
      t.references :user
    end

    add_foreign_key :posts, :users, primary_key: :other_id
2014-12-22 13:47:10 -07:00
Sean Griffin
a9c0c46263 Convert references to kwargs
While we aren't taking PRs with these kinds of changes just yet, they
are fine if we're actively working on the method and it makes things
easier.
2014-12-22 13:47:10 -07:00
Sean Griffin
9fff631a06 Skip byebug on all non-MRI rubies, fix tests
The changes in #18149 added tests for the app generator, but only fixed
it for the plugin generator (I should have let CI finish though I think
it would have failed as an allowed failure).
2014-12-22 13:43:58 -07:00
Sean Griffin
569c674773 Merge pull request #18149 from arthurnn/byebug_on_mri
Only add debugger/byebug if on MRI
2014-12-22 13:31:30 -07:00
Arthur Neves
0bb73f03e4
Only add debugger/byebug if on MRI 2014-12-22 15:27:56 -05:00
Sean Griffin
32f30d22d5 Add force: true to table created in tests
If the test is interrupted in a way that the teardown block fails to
run, the tests will fail to run until the table is removed manually
without this option.
2014-12-22 12:49:34 -07:00
Andrey Nering
024edd365b Do not use line breaks on notes [ci skip]
References #18138
2014-12-22 15:25:32 -02:00
Sean Griffin
b0f2b94dd3 Correctly handle limit on int4 and int8 types in PG
PG doesn't register it's types using the `int(4)` format that others do.
As such, if we alias `int8` to the other integer types, the range
information is lost. This is fixed by simply registering it separately.

The other option (which I specifically chose to avoid) is to pass the
information of the original type that was being aliased as an argument.
I'd rather avoid that, since an alias should truly be treated the same.
If we need different behavior for a different type, we should explicitly
register it with that, and not have a conditional based on aliasing.

Fixes #18144

[Sean Griffin & ysbaddaden]
2014-12-22 09:55:41 -07:00
Zachary Scott
0369808917 Merge branch 'master' of github.com:rails/rails 2014-12-22 11:11:32 -05:00
Zachary Scott
3cc9359c2d Remove this section, it adds no real value [ci skip] 2014-12-22 11:11:12 -05:00
Arthur Neves
58b7567bda
Use serve_static_files in guides, take 2 [skip ci] 2014-12-22 10:27:44 -05:00
Arthur Neves
85f7924af1
Use serve_static_files in guides [skip ci] 2014-12-22 10:22:14 -05:00
Zachary Scott
cd01f9f9c5 Add subheadings for these sections [ci skip] 2014-12-22 10:12:06 -05:00
Zachary Scott
eb93e70263 I'm sorry but I would rather not link to a 7 year old blog post [ci skip] 2014-12-22 10:07:15 -05:00
Zachary Scott
2526b95f20 Remove this line since we are using Rake to run our tests [ci skip] 2014-12-22 10:03:03 -05:00
Zachary Scott
a6d9049dc0 s/are edited and rerun/required modifications [ci skip] 2014-12-22 09:50:20 -05:00