Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport b63d532f1ed to 4.2 #26062

Merged
merged 1 commit into from
Aug 5, 2016
Merged

Commits on Aug 5, 2016

  1. Don't assume all hashes are from multiparameter assignment in `compos…

    …ed_of`
    
    So this bug is kinda funky. The code path is basically "if we weren't passed an
    instance of the class we compose to, and we have a converter, call that".
    Ignoring the hash case for a moment, everything after that was roughly intended
    to be the "else" clause, meaning that we are expected to have an instance of
    the class we compose to. Really, we should be blowing up in that case, as we
    can give a much better error message than what they user will likely get (e.g.
    `NameError: No method first for String` or something). Still, Ruby is duck
    typed, so if the object you're assigning responds to the same methods as the
    type you compose to, knock yourself out.
    
    The hash case was added in 36e9be8 to remove a bunch of special cased code from
    multiparameter assignment. I wrongly assumed that the only time we'd get a hash
    there is in that case. Multiparameter assignment will construct a very specific
    hash though, where the keys are integers, and we will have a set of keys
    covering `1..part.size` exactly. I'm pretty sure this could actually be passed
    around as an array, but that's a different story. Really I should convert this
    to something like `class MultiParameterAssignment < Hash; end`, which I might
    do soon. However for a change that I'm willing to backport to 4-2-stable, this
    is what I want to go with for the time being.
    
    Fixes rails#25978
    sgrif committed Aug 5, 2016
    Configuration menu
    Copy the full SHA
    4e7cfbf View commit details
    Browse the repository at this point in the history