[Rails-core] Enhancement: improved ActiveModal::Errors enumeration

2016-02-29 Thread Evan Prothro


I love the concept and usability of an ActiveModel::Errors paradigm. 
However, I and others often find it frustrating to work with the 
implementation.


I'd love to see a proper ActiveModel::Error object, where the errors 
attribute of a model including ActiveModel::Errors was an Enumerator of 
these objects.


There are various implied benefits and added flexibility that could be 
introduced in a backwards compatible way later, and immedate benefits. 
Would love to know what y'all think about this. Happy to implement if 
desired.


Immediate
 
Benefits

The
 
error type could be retained

APIs we build prefer to return Error objects to clients with the following 
schema:

{
  attribute:  "The model attribute to which the error applies. If blank, the 
error applies generically to the base model.",
  type:   "The type of error encountered with the model attribute or model."
  messsage:   "An internationalized message that can be displayed to a user.",
}

In particular, the type attribute allows clients to couple any logic they 
need on the error attribute and type, not themessage, which should be able 
to change with business/product needs.

With a proper ActiveModel::Error object, this is easily done. With the 
current enumerable design, this is not a clean extension to make 
.

The
 
error message can be lazily looked up

Currently, the message interpolation is looked up when the error is added 
to the model. This isn't necessarry, and is easily lazily evaluated when a 
derived attribute on an Error object.


Other
 
Enhancements easily enabled

Accessing
 
the attribute value more cleanly

error = model.errors.first
error.attribute
=> :username
error.attribute_value
=> 'eprothro'


Easier
 
custom interpolation parameters

# en.yml
errors:
  models:
user:
  attributes:
username:
  taken: "%{value} has already been taken."

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.


[Rails-core] ActiveRecord::QueryMethods | unexpected behaviors when unscoping?

2015-03-11 Thread Evan Prothro
All,

One of my devs has been attempting to use 
`ActiveRecord::QueryMethods#unscope` for a relation extension he's working 
on.

In doing so, he ran into a couple of unexpected behaviors that I helped 
trace to Rails source.

I wanted to start here before writing tests, a patch, and/or issuing a pull 
request to ask a couple of questions. Apologies in advance if any of these 
are ignorant:

1. Do y'all agree that the following gist exhibits unexpected behaviors?

https://gist.github.com/eprothro/242c03f784b96fb1f674

* Is there a reason for the specific list of Arel Node classes (e.g. 
excluding things like `Arel::Nodes::LessThan`)?
* Is there a reason to not support unscoping for string/array 
`where_values`?

2. If so, should I be branching from a 4-2 branch for a fix, or master?


Thanks for your time and attention!

- Evan Prothro

-- 
You received this message because you are subscribed to the Google Groups Ruby 
on Rails: Core group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.