- 26 1月, 2015 15 次提交
-
-
由 Sean Griffin 提交于
-
由 Sean Griffin 提交于
We're still using it in `where_unscoping`, which will require moving additional logic.
-
由 Sean Griffin 提交于
This will make it easy to add `having_clause` and `join_clause` later.
-
由 Sean Griffin 提交于
-
由 Sean Griffin 提交于
-
由 Sean Griffin 提交于
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.
-
由 Sean Griffin 提交于
-
由 Sean Griffin 提交于
Bind values are no longer a thing, so this is unnecessary.
-
由 Sean Griffin 提交于
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`
-
由 Sean Griffin 提交于
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.
-
由 Sean Griffin 提交于
See 4d7a6229 for the reasoning
-
由 Sean Griffin 提交于
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.
-
由 Zachary Scott 提交于
Fix typos in migration generator comment
-
由 Sean Collins 提交于
-
由 Sean Collins 提交于
-
- 25 1月, 2015 13 次提交
-
-
由 Robin Dupret 提交于
Fix a typo "devleopment" => "development"
-
由 Rémy Coutable 提交于
[ci skip]
-
由 Yves Senn 提交于
fix task description for tmp:create
-
由 yuuji.yaginuma 提交于
-
由 Yves Senn 提交于
-
由 Yves Senn 提交于
Add tip for running binstubs on Windows [ci skip]
-
由 Abdelkader Boudih 提交于
Add missing options to `datetime_select` [ci skip]
-
由 Bryan Bibat 提交于
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.
-
由 yachibit 提交于
-
由 Sean Griffin 提交于
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.
-
由 Sean Griffin 提交于
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`)
-
由 Sean Griffin 提交于
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.
-
由 Sean Griffin 提交于
-
- 24 1月, 2015 12 次提交
-
-
由 Xavier Noria 提交于
[ci skip] Fix what is pushed to nesting about eval family
-
由 Yves Senn 提交于
Fixed duplicating ActiveModel::Errors#details
-
由 yui-knk 提交于
-
由 Sean Griffin 提交于
Use attribute assignment module logic during ActiveModel initialization.
-
由 Wojciech Wnętrzak 提交于
-
由 Sean Griffin 提交于
pretty_print will use #inspect if a subclass redefines it
-
由 Sean Griffin 提交于
-
由 Eugene Gilburg 提交于
-
由 Sean Griffin 提交于
Extracted attributes assingment from ActiveRecord to ActiveModel
-
由 Sean Griffin 提交于
Minor style changes across the board. Changed an alias to an explicit method declaration, since the alias will not be documented otherwise.
-
由 Bogdan Gusiev 提交于
Allows to use it for any object as an includable module.
-
由 Sean Griffin 提交于
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
-