Учитывая, что у вас есть:
app/entities/keycard_generator/data_source.rb
Тогда содержимое этого файла, по соглашению, должно быть:
module KeycardGenerator
module DataSource
...
end
end
Поскольку rails по существу игнорирует имя каталога в app
(здесь entities
) с точки зрения именования:
app/entities/keycard_generator/data_source.rb
^^^^^^^^
Но ожидает, что имя каталога в каталоге в приложении (здесь keycard_generator
) будет именем модуля:
app/entities/keycard_generator/data_source.rb
^^^^^^^^^^^^^^^^^
И учитывая, что у вас есть:
app/entities/keycard_generator/register_keycard.rb
Тогда содержимое этого файла, по соглашению, должно быть:
module KeycardGenerator
class RegisterKeycard
include DataSource
end
end
При соблюдении соглашения вам не нужно:
Dir[Rails.root.join('app/entities/keycard_generator/**/*.rb')].each(&method(:require))
Лично мне нравится добавлять тип (здесь обозначенный entities
) к файлам и модулям / классам, например:
app/entities/keycard_generator/data_source_entity.rb
module KeycardGenerator
module DataSourceEntity
...
end
end
Вот как это часто делают рельсы (например, с controller
), но не всегда (например, с model
).
В этом случае вы также сделаете:
app/entities/keycard_generator/register_keycard_entity.rb
module KeycardGenerator
class RegisterKeycardEntity
include DataSourceEntity
end
end