Hi there,
I’m attempting to add attributes to a schema using an external configuration, but it appears the blocks passed into the DSL are stripped of their execution context.
Are there any other options for creating a schema? Is it possible to define a schema using a hash rather then using the DSL?
Here is simplified example:
require "rom"
attrs = [:one, :two, :three]
rom = ROM.container(:sql, 'sqlite::memory') do |config|
class Tasks < ROM::Relation[:sql]
schema(:tasks) do
attrs.each do |attr|
attribute attr, Types::String
end
end
end
config.register_relation(Tasks)
end
rfb@simple:~/Projects/gpe$ ruby test.rb
test.rb:9:in `block in <class:Tasks>': undefined local variable or method `attrs' for #<ROM::SQL::Schema::DSL:0x00007f53d8770c58> (NameError)
attrs.each do |attr|
^^^^^
from /home/rfb/.asdf/installs/ruby/3.1.0/lib/ruby/gems/3.1.0/gems/rom-core-5.3.0/lib/rom/schema/dsl.rb:184:in `instance_exec'
from /home/rfb/.asdf/installs/ruby/3.1.0/lib/ruby/gems/3.1.0/gems/rom-core-5.3.0/lib/rom/schema/dsl.rb:184:in `call'
Also thank you to the creator and maintainers. This is an exceptional library!