Please do open a PR!

On Tue, Nov 27, 2018 at 12:33 PM Abhishek Chandrasekhar <
abhishek.chandrasek...@gmail.com> wrote:

> @kasper - Allowing the one-off options on a given variant is an even
> better approach and just as easily implementable. Thanks for the suggestion.
>
> > I’m not looking to see this through though, so you’d have to get George
> Claghorn or someone else on board for this ride.
>
> Totally understood :)
> @George - would love to hear your thoughts on this. If you agree, I don't
> mind picking up the development and submitting a patch.
>
> Thanks.
>
> On Tuesday, November 27, 2018 at 10:02:39 AM UTC-5, Kasper Timm Hansen
> wrote:
>>
>> I do remember proposing this at one point internally:
>>
>> has_one_attached :avatar do |attachable|
>>   attachable.variant :small, resize: ’100x100>’
>>   …
>> end
>>
>> I’m also fine with exposing it as `variant(:small)` or for one offs
>> `variant(:small, caption: ’foo’)`.
>>
>> I’m not looking to see this through though, so you’d have to get George
>> Claghorn or someone else on board for this ride.
>>
>> Appreciate the extensive write up with reasoning!
>>
>> Den 27. nov. 2018 kl. 14.28 skrev Abhishek Chandrasekhar <
>> abhishek.ch...@gmail.com>:
>>
>> Hello all -
>>
>> Firstly, huge thanks to those who have worked on ActiveStorage so far.
>> The library seems to be coming along nicely.
>>
>>
>> ActiveStorage currently allows you to define variants of an attachment as
>> follows:
>>
>> ```ruby
>> class User < ActiveRecord::Base
>>   has_one_attached :avatar
>>
>>   # ...
>> end
>>
>> user.avatar.variant(resize: "100x100>")
>> user.avatar.variant(resize: "100x100>", caption: "foo")
>> user.avatar.variant(resize: "200x200", rotate: "-90")
>> ```
>>
>>
>> I'd like to propose the following functionality that lets users configure
>> and pre-define variants.
>>
>> ```ruby
>> class User < ActiveRecord::Base
>>   has_one_attached(
>>     :avatar,
>>     variants: {
>>       small: { resize: "100x100>" }
>>       small_captioned: { resize: "100x100>", caption: "foo" }
>>       medium_rotated: { resize: "200x200", rotate: "-90" }
>>     }
>>   )
>>
>>   # ...
>> end
>>
>> user.avatar.variant(:small)
>> user.avatar.variant(:small_captioned)
>> user.avatar.variant(:medium_rotated)
>>
>> # Something not pre-definied
>> user.avatar.variant(rotate: "120")
>> ```
>>
>> This is similar in concept to how existing attachment libraries
>> (paperclip, carrierwave, etc...) have allowed definition and configuration
>> of variants.
>>
>> It is true that this functionality can be mimicked outside of
>> activestorage by having the developer maintain a manual mapping of key
>> names to variant configurations. However, I believe this should be part of
>> ActiveStorage directly because -
>>
>>
>> 1. It leads to cleaner/more readable code (e.g. `
>> user.avatar.variant(:small)` is easy to understand)
>> 2. It keeps configuration consolidated inline with `has_one_attached`,
>> which is similar to how options are already defined inline with `has_one`,
>> `has_many`, etc...
>> 3. It's fully backward compatible with how variants are invoked right now
>> and doesn't force you to use a particular approach.
>>
>> Would such a feature be accepted if I were to submit a pull request for
>> it?
>>
>> Thank you!
>>
>> --
>> 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-co...@googlegroups.com.
>> To post to this group, send email to rubyonra...@googlegroups.com.
>> Visit this group at https://groups.google.com/group/rubyonrails-core.
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>> --
>> Kasper
>>
>> --
> 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.
>

-- 
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.

Reply via email to