From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-2.7 required=3.0 tests=AWL,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,SPF_PASS,T_RP_MATCHES_RCVD shortcircuit=no autolearn=no autolearn_force=no version=3.4.0 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id CE1741F404 for ; Wed, 10 Jan 2018 18:05:41 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 379E8120A0D; Thu, 11 Jan 2018 03:05:37 +0900 (JST) Received: from o1678948x4.outbound-mail.sendgrid.net (o1678948x4.outbound-mail.sendgrid.net [167.89.48.4]) by neon.ruby-lang.org (Postfix) with ESMTPS id AFBA2120915 for ; Thu, 11 Jan 2018 03:05:28 +0900 (JST) Received: by filter0004p3las1.sendgrid.net with SMTP id filter0004p3las1-32600-5A5655E4-66 2018-01-10 18:05:25.007958086 +0000 UTC Received: from herokuapp.com (ec2-54-163-35-168.compute-1.amazonaws.com [54.163.35.168]) by ismtpd0004p1iad2.sendgrid.net (SG) with ESMTP id QjbF-4gvSjCwTVkD7Xa7lg Wed, 10 Jan 2018 18:05:24.953 +0000 (UTC) Date: Wed, 10 Jan 2018 18:05:25 +0000 (UTC) From: eregontp@gmail.com To: ruby-core@ruby-lang.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 60051 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 14344 X-Redmine-Issue-Author: kddeisz X-Redmine-Sender: Eregon X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: ync6xU2WACa70kv/Ymy4QrNMhiuLXJG8OTL2vJD1yS41y4zigEalpqCJNqGbz2U94I6jxBf8aSFyZG E1UaA/YO+hRR46TKO56fNc9fcDozfUn/JfcSwnjF1mrgt3GBSgj2GpyNhHGPD3RtfOczQMN42gKCcw MvkrzynGp9qLE3kw+5sYYmvHZTLhffYbWp7Zsu2NmoMtZiz97iVNSH6XnA== X-ML-Name: ruby-core X-Mail-Count: 84818 Subject: [ruby-core:84818] [Ruby trunk Feature#14344] refine at class level X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" Issue #14344 has been updated by Eregon (Benoit Daloze). kddeisz (Kevin Deisz) wrote: > Just to take a real example from my current application, here's a job (from Rails ActiveJob) that I want to refine by moving the logic into the class in which it belongs. It currently looks like this: That's an interesting example indeed: using refinements to not pollute the model class but still make it convenient to write methods with the model as `self`. To clarify my comment above: I'm not against a shorter way to define refinements+use them. But #refine as proposed is wrong: if EventEndActionsJob was a module it would stop working because then it would be the refine-just-define-refinements (current semantics) and not the refine-define-and-use-refinements you propose. Or are you proposing to change the behavior of `refine do ... end` to always enable refinements after it until the end of the class/module body or the end of the file? Then there would be a compatibility risk. ---------------------------------------- Feature #14344: refine at class level https://bugs.ruby-lang.org/issues/14344#change-69531 * Author: kddeisz (Kevin Deisz) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- I rely on refinements a lot, but don't want to keep writing `Module.new` in code. I'm proposing `Object::refine`, which would create an anonymous module behind the scenes with equivalent functionality. So: ~~~ ruby class Test using Module.new { refine String do def refined? true end end } end ~~~ would become ~~~ ruby class Test refine String do def refined? true end end end ~~~ It's a small change, but reads a lot more clearly. Thoughts? -- https://bugs.ruby-lang.org/