Posted over 5 years ago. Visible to the public. Linked content.

Subclassing module

Yesterday I stumbled across a talk in which the guy mentioned module sub-classing. I was curious what you can do with it and found his blog post with a cool example. It allows you to inject some state into the module you are including elsewhere. Check it out!

class AttributeAccessor < Module def initialize(name) @name = name end def included(model) super define_accessors end private def define_accessors ivar = "@#{@name}" define_writer(ivar) define_reader(ivar) end def define_writer(ivar) define_method("#{@name}=") do |value| instance_variable_set("#{ivar}", value) end end def define_reader(ivar) define_method(@name) do instance_variable_get("#{ivar}") end end end class Book include def title "#{super} + super works!" end end book = book.title = "Module Subclassing Guide" puts book.title

We also have a gem to help you with this: Modularity Archive .
Modularity enhances Ruby's Module so it can be used with traits and partial classes. This allows very simple definition of meta-programming macros like the has_many that you know from Rails.
Modularity also lets you organize large models into multiple source files in a way that is less awkward than using modules.

Does your version of Ruby on Rails still receive security updates?
Rails LTS provides security patches for unsupported versions of Ruby on Rails (2.3, 3.2, 4.2 and 5.2).

Owner of this card:

Andreas Robecke
Last edit:
over 5 years ago
by Judith Roth
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Andreas Robecke to makandra dev
This website uses short-lived cookies to improve usability.
Accept or learn more