Project

General

Profile

Actions

Refactor #5713

closed

Remove method definitions from included block when using Concern

Added by Petr Chalupa almost 10 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
-
Target version:
Branch:
Difficulty:
Triaged:
Yes
Fixed in Releases:
Found in Releases:

Description

Hi fellow Rubyists,

I saw methods defined directly in included block when using Concern several times.

module AModule
  extend ActiveSupport::Concern

  included do
   # this is BAD
   def a_method
    end
  end
end

It is a bad practice and it breaks things, all instance methods should go to the AModule, and all class methods to a ClassMethods module.

- It dynamically creates methods in each class, they are not shared through module, it is slow.
- It cannot be accessed for extension, there is no module to include to.
- it breaks `super` calls.

We should avoid using this and go for:

module AModule
  extend ActiveSupport::Concern

  included do
    # e.g.
    has_one :user
  end

  module ClassMethods
    def a_method
    end
  end
end

Thanks.

I'll create issue to remove these bad definitions.

Petr


Related issues 2 (1 open1 closed)

Related to Katello - Bug #6317: rake katello:reindex fails with NoMethodError: undefined method `delete_index' for Katello::PuppetModule:Class ClosedJustin Sherrill06/20/2014Actions
Copied to Foreman - Refactor #5714: Remove method definitions from included block when using ConcernNew05/14/2014Actions
Actions #1

Updated by Petr Chalupa almost 10 years ago

  • Description updated (diff)
Actions #2

Updated by Petr Chalupa almost 10 years ago

  • Tracker changed from Bug to Refactor
Actions #3

Updated by Petr Chalupa almost 10 years ago

  • Copied to Refactor #5714: Remove method definitions from included block when using Concern added
Actions #4

Updated by Eric Helms almost 10 years ago

  • Target version set to 48
  • Triaged changed from No to Yes
Actions #5

Updated by Eric Helms almost 10 years ago

  • Status changed from New to Closed
  • % Done changed from 0 to 100

Applied in changeset katello|commit:da7584bd9c6a14d3c641cb8777a58b4a8211cd26.

Actions #6

Updated by David Davis almost 10 years ago

  • Related to Bug #6317: rake katello:reindex fails with NoMethodError: undefined method `delete_index' for Katello::PuppetModule:Class added
Actions #7

Updated by Eric Helms over 9 years ago

  • translation missing: en.field_release set to 13
Actions

Also available in: Atom PDF