rom-rb/rom

Error when a relation with the name `options` exists.

dhnaranjo opened this issue · 2 comments

Describe the bug

When a relation with the name options exists the following error is raised when you create an instance of it:

rom-core-5.2.6/lib/rom/schema.rb:232:in `[]': :struct_namespace attribute doesn't exist in options schema (KeyError)

This happens because ROM::Initializer::InstanceMethods#options is called at either ROM::Relation#struct_namespace or ROM::Relation#meta_ast.

To Reproduce

require "rom"
require "dry-types"

rom = ROM.container(:memory, 'memory://test') do |config|
  config.relation(:options) do
    schema do
      attribute :whatever, Dry::Types["string"]
    end
  end
end

options = rom.relations[:options]
options.changeset(:create, whatever: "who cares").commit

Expected behavior

A relation named options doesn't poop my app

My environment

  • Affects my production application: No in that we're not yet in production, but yes this impacts real job stuff.
  • Ruby version: 3.1.1
  • OS: MacOS 12.whatever on an Apple Silicon device.

Cool thing about being pre-launch is I just went and changed the table name, so I'm not urgently awaiting a fix or nothing.

Thanks for reporting this. It's been on my radar as it's a general issue of having reserved names that cannot be used as relation names. This will be properly addressed in 6.0.