@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 <javascript:>>: > > 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 <javascript:>. > To post to this group, send email to rubyonra...@googlegroups.com > <javascript:>. > 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.