DEV Community

Augusts Bautra
Augusts Bautra

Posted on • Edited on

1

How I use Rails' `concerning` macro

Turns out Rails models have a neat macro - concerning. It allows defining an inline concern.

Docs: https://api.rubyonrails.org/classes/Module/Concerning.html

Discussion

On the one hand, it's convenient for grouping methods, and have that grouping exist in an actual code structure, not just come comment block, and it's helpful to have that grouping live in the same file.
On the other hand, unfortunately, the separation of the concern from the model is so weak as to be nonexistent - nothing stops us from calling model methods in the concern module, leading to the popular flaw of secret API. And it's unclear how to spec the concern in isolation, we really need a separate file for that.

Conclusion

I'll use concerning exclusively for grouping methods that will never be refactored out of the model, to identify sub-groups of behavior within a model, for example a Document model having two sub-functionalities - one regarding versioning/revisions and the other regarding the underlying file (size, type, etc.), and spec them in the model spec, but in a dedicated describe block

describe Document do 
  describe "#some_method" do
  end

  describe described_class::Revisions do
Enter fullscreen mode Exit fullscreen mode

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (2)

Collapse
 
pimp_my_ruby profile image
Pimp My Ruby

Hi, thanks for sharing this!

Collapse
 
pierre223 profile image
Pierre Malorne

I wasn't even aware that existed, it's very useful thanks!
Regards from Switzerland
Pierre Malorne
E-reputation CCO

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up