ROM::Repository::Root purpose and usage

Here’s @solnic’s brief explanation of where this came from.

Essentially, given that you have a UserRepo that inherits ROM::Repository[:users], this means that UserRepo#root will be aliased to users. That’s basically all there is to it.

For instance, here’s something I do in my app.

module Entities; end

class Repository < ROM::Repository::Root
  include Deps[container: "persistence.rom"]

  struct_namespace Entities

  def find(id) = root.by_pk(id).one
  def find_by(...) = root.where(...).one
end

That simple alias trick means I am able to write find and find_by once and use them with all repos.

4 Likes