Project

General

Profile

Actions

Refactor #5713

closed

Remove method definitions from included block when using Concern

Added by Petr Chalupa over 10 years ago. Updated about 6 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

Also available in: Atom PDF