aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | Move `where_unscoping` logic over to `WhereClause`Sean Griffin2015-01-253-17/+39
| | | | |
* | | | | Remove most references to `where_values` in `QueryMethods`Sean Griffin2015-01-251-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | We're still using it in `where_unscoping`, which will require moving additional logic.
* | | | | `Relation#Merger` can merge all clause methodsSean Griffin2015-01-251-3/+11
| | | | | | | | | | | | | | | | | | | | This will make it easy to add `having_clause` and `join_clause` later.
* | | | | Rename `WhereClause#parts` to `WhereClause#predicates`Sean Griffin2015-01-252-16/+16
| | | | |
* | | | | Move `where.not` logic into `WhereClause`Sean Griffin2015-01-253-15/+51
| | | | |
* | | | | Move the construction of `WhereClause` objects out of `Relation`Sean Griffin2015-01-252-14/+42
| | | | | | | | | | | | | | | | | | | | | | | | | Yes, I know, I called it a factory so I'm basically the worst person ever who loves Java and worships the Gang of Four.
* | | | | Remove all references to `where_values` in association codeSean Griffin2015-01-256-12/+14
| | | | |
* | | | | Remove references to `:bind` in `except`Sean Griffin2015-01-252-4/+1
| | | | | | | | | | | | | | | | | | | | Bind values are no longer a thing, so this is unnecessary.
* | | | | Move where merging logic over to `WhereClause`Sean Griffin2015-01-253-40/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This object being a black box, it knows the details of how to merge itself with another where clause. This removes all references to where values or bind values in `Relation::Merger`
* | | | | Introduce `Relation::WhereClause`Sean Griffin2015-01-255-11/+110
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The way that bind values are currently stored on Relation is a mess. They can come from `having`, `where`, or `join`. I'm almost certain that `having` is actually broken, and calling `where` followed by `having` followed by `where` will completely scramble the binds. Joins don't actually add the bind parameters to the relation itself, but instead add it onto an accessor on the arel AST which is undocumented, and unused in Arel itself. This means that the bind values must always be accessed as `relation.arel.bind_values + relation.bind_values`. Anything that doesn't is likely broken (and tons of bugs have come up for exactly that reason) The result is that everything dealing with `Relation` instances has to know far too much about the internals. The binds are split, combined, and re-stored in non-obvious ways that makes it difficult to change anything about the internal representation of `bind_values`, and is extremely prone to bugs. So the goal is to move a lot of logic off of `Relation`, and into separate objects. This is not the same as what is currently done with `JoinDependency`, as `Relation` knows far too much about its internals, and vice versa. Instead these objects need to be black boxes that can have their implementations swapped easily. The end result will be two classes, `WhereClause` and `JoinClause` (`having` will just re-use `WhereClause`), and there will be a single method to access the bind values of a `Relation` which will be implemented as ``` join_clause.binds + where_clause.binds + having_clause.binds ``` This is the first step towards that refactoring, with the internal representation of where changed, and an intermediate representation of `where_values` and `bind_values` to let the refactoring take small steps. These will be removed shortly.
* | | | | Don't access the where values hash directly in through associationsSean Griffin2015-01-251-1/+1
| | | | | | | | | | | | | | | | | | | | See 4d7a62293e148604045a5f78a9d4312e79e90d13 for the reasoning
* | | | | Don't rely as much on the structure of the values hash in associationsSean Griffin2015-01-252-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The structure of `values[:where]` is going to change, with an intermediate definition of `where_values` to aid the refactoring. Accessing `values[:where]` directly messes with that, signficantly. The array wrapping is no longer necessary, since `where_values` will always return an array.
* | | | | Merge pull request #18683 from cllns/fix-typo-in-migration-generator-commentZachary Scott2015-01-251-2/+2
|\ \ \ \ \ | | | | | | | | | | | | Fix typos in migration generator comment
| * | | | | Fix typo 'has' => 'have'Sean Collins2015-01-251-1/+1
| | | | | |
| * | | | | Fix typo 'another frameworks' => 'other frameworks'Sean Collins2015-01-251-1/+1
|/ / / / /
* | | | | Merge pull request #18681 from rymai/patch-1Robin Dupret2015-01-251-1/+1
|\ \ \ \ \ | | | | | | | | | | | | Fix a typo "devleopment" => "development"
| * | | | | Fix a typo "devleopment" => "development"Rémy Coutable2015-01-251-1/+1
|/ / / / / | | | | | | | | | | [ci skip]
* | | | | Merge pull request #18680 from y-yagi/tmp_sessionsYves Senn2015-01-251-1/+1
|\ \ \ \ \ | | | | | | | | | | | | fix task description for tmp:create
| * | | | | fix task description for tmp:createyuuji.yaginuma2015-01-251-1/+1
|/ / / / /
* | | | | remove trailing whitespace. [ci skip]Yves Senn2015-01-251-1/+1
| | | | |
* | | | | Merge pull request #18678 from bryanbibat/windows_binstubsYves Senn2015-01-251-0/+3
|\ \ \ \ \ | | | | | | | | | | | | Add tip for running binstubs on Windows [ci skip]
| * | | | | Add tip for running binstubs on Windows [ci skip]Bryan Bibat2015-01-251-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The default command prompt under Windows doesn't run binstubs correctly while PowerShell needs to find the location of the Ruby interpreter for it to work properly. Passing the binstubs manually to the interpreter solves this problem.
* | | | | | Merge pull request #18677 from yachibit/docs_for_datetime_selectAbdelkader Boudih2015-01-251-0/+2
|\ \ \ \ \ \ | |/ / / / / |/| | | | | Add missing options to `datetime_select` [ci skip]
| * | | | | Add missing options to `datetime_select` [ci skip]yachibit2015-01-251-0/+2
|/ / / / /
* | | | | Expand the number of types which can use prepared statementsSean Griffin2015-01-243-6/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This will allow all types which require no additional handling to use prepared statements. Specifically, this will allow for `true`, `false`, `Date`, `Time`, and any custom PG type to use prepared statements. This also revealed another source of nil columns in bind params, and an inconsistency in their use. The specific inconsistency comes from a nested query coming from a through association, where one of the inversed associations is not bi-directional. The stop-gap is to simply construct the column at the site it is being used. This should simply go away on its own once we use `Attribute` to represent them instead, since we already have all of the information we need.
* | | | | Don't mutate `where_values`Sean Griffin2015-01-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is to help facilitate future refactorings, as the internal representation is changed. I'm planning on having `where_values` return an array that's computed on call, which means that mutation will have no affect. This is the only remaining place that was mutating (tested by replacing the method with calling `dup`)
* | | | | Don't rely on relation mutability when building through associationsSean Griffin2015-01-242-19/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Specifically, the issue is relying on `where_unscoping` mutating the where values. It does not, however, mutate the bind values, which could cause an error under certain circumstances. This was not exposed by the tests, since the only place which would have been affected is unscoping a boolean, which doesn't go through prepared statements. I had a hard time getting better test coverage to demonstrate the issue. This in turn, caused `merge` to go through proper logic, and try to clear out the binds associated with the unscoped relation, which then exposed a source of `nil` for the columns, as binds weren't expanding `{ "posts.id" => 1 }` to `{ "posts" => { "id" => 1 } }`. This has been fixed. The bulk of `create_binds` needed to be moved to a separate method, since the dot notation should not be expanded recursively. I'm pretty sure this removes a subtle quirk that a ton of code in `Relation::Merger` is working around, and I suspect that code can be greatly simplified. However, unraveling that rats nest is no small task.
* | | | | Don't duplicate `Relation::VALUE_METHODS` in `Relation::Merger`Sean Griffin2015-01-241-2/+1
| | | | |
* | | | | Merge pull request #18671 from yui-knk/fix/const_guideXavier Noria2015-01-241-2/+3
|\ \ \ \ \ | | | | | | | | | | | | [ci skip] Fix what is pushed to nesting about eval family
| * | | | | [ci skip] Fix what is pushed to nesting about eval familyyui-knk2015-01-241-2/+3
| | | | | |
* | | | | | Merge pull request #18670 from morgoth/fix-duplicating-errors-detailsYves Senn2015-01-242-2/+3
|\ \ \ \ \ \ | |/ / / / / |/| | | | | Fixed duplicating ActiveModel::Errors#details
| * | | | | Fixed duplicating ActiveModel::Errors#detailsWojciech Wnętrzak2015-01-242-2/+3
| | | | | |
* | | | | | Merge pull request #18663 from egilburg/reuse-attribute-assignmentSean Griffin2015-01-243-5/+17
|\ \ \ \ \ \ | |/ / / / / |/| | | | | Use attribute assignment module logic during ActiveModel initialization.
| * | | | | use attribute assignment module logic during active model initializationEugene Gilburg2015-01-233-5/+17
| | |_|/ / | |/| | |
* | | | | Merge pull request #18474 from notEthan/pretty_print_inspectSean Griffin2015-01-232-0/+16
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | pretty_print will use #inspect if a subclass redefines it
| * | | | | pretty_print will use #inspect if a subclass redefines itEthan2015-01-122-14/+29
| | | | | |
* | | | | | Fix test failure on PG caused by 7c6f3938dee47f093Sean Griffin2015-01-231-2/+2
| |/ / / / |/| | | |
* | | | | Merge pull request #10776 from bogdan/assign-attributesSean Griffin2015-01-2310-60/+212
|\ \ \ \ \ | | | | | | | | | | | | | | | | | | Extracted attributes assingment from ActiveRecord to ActiveModel
| * | | | | ✂️ and 💅 for #10776Sean Griffin2015-01-234-49/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Minor style changes across the board. Changed an alias to an explicit method declaration, since the alias will not be documented otherwise.
| * | | | | Extracted `ActiveRecord::AttributeAssignment` to ↵Bogdan Gusiev2015-01-2310-56/+220
| | |_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | `ActiveModel::AttributesAssignment` Allows to use it for any object as an includable module.
* | | | | Move integer range validation to never raise on assignmentSean Griffin2015-01-234-20/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Given that this was originally added to normalize an error that would have otherwise come from the database (inconsistently), it's more natural for us to raise in `type_cast_for_database`, rather than `type_cast_from_user`. This way, things like numericality validators can handle it instead if the user chooses to do so. It also fixes an issue where assigning an out of range value would make it impossible to assign a new value later. This fixes several vague issues, none of which were ever directly reported, so I have no issue number to give. Places it was mentioned which I can remember: - https://github.com/thoughtbot/shoulda-matchers/blob/9ba21381d7caf045053a81f32df7de2f49687820/lib/shoulda/matchers/active_model/allow_value_matcher.rb#L261-L263 - https://github.com/rails/rails/issues/18653#issuecomment-71197026
* | | | | Errors raised in `type_cast_for_database` no longer raise on assignmentSean Griffin2015-01-234-3/+29
| | | | | | | | | | | | | | | | | | | | Fixes #18580.
* | | | | Don't remove join dependencies in `Relation#exists?`Sean Griffin2015-01-233-1/+13
| | | | | | | | | | | | | | | | | | | | Fixes #18632
* | | | | Merge pull request #18651 from mechanicles/use-public-sendRafael Mendonça França2015-01-231-2/+2
|\ \ \ \ \ | | | | | | | | | | | | Use 'public_send' over the 'send' method for object's properties and public methods.
| * | | | | Use 'public_send' over the 'send' method for object's properties.Santosh Wadghule2015-01-231-2/+2
| |/ / / /
* / / / / constants guide: make assumption explicit in an example [closes #18465] [ci ↵Xavier Noria2015-01-231-0/+10
|/ / / / | | | | | | | | | | | | skip]
* | | | Merge pull request #18643 from kaspth/renderer-normalize_keys-speedupRafael Mendonça França2015-01-221-9/+6
|\ \ \ \ | | | | | | | | | | Speed up ActionController::Renderer `normalize_keys` by ~28%.
| * | | | Speed up `normalize_keys` by removing dup step.Kasper Timm Hansen2015-01-221-9/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously env was duplicated and then had it's keys mutated. This iterates through the hash twice. Using `transform_keys`, duplication and key mutation is a single iteration. `convert_symbols` was renamed to `http_header_format`.
* | | | | Merge pull request #18644 from rwarbelow/fix-wording-of-css-manifestZachary Scott2015-01-222-6/+4
|\ \ \ \ \ | |/ / / / |/| | | | fix wording of CSS manifest instructions [ci skip]
| * | | | fix wording of CSS manifest instructionsRachel Warbelow2015-01-222-6/+4
|/ / / /