Разбираюсь с Grape и сформировал для себя структуру приложения, схожую с описанной
здесь (
репозиторий), только без использования Rails. Получилось следующее:
app/api/v1.rb
app/api/v1/product.rb
app/api/v1/review.rb
app/api/v1.rb:
module API
class V1 < Grape::API
version 'v1', using: :path
content_type :json, 'application/json; charset=UTF-8'
prefix :api
format :json
before do
header['Access-Control-Allow-Origin'] = '*'
header['Access-Control-Request-Method'] = '*'
end
mount Product
mount Review
end
end
app/api/v1/product.rb:
module API
class V1::Product < Grape::API
resource :products do
get do
%w(Cofee Tea Rice Meat)
end
end
end
end
app/api/v1/review.rb:
module API
class V1::Review < Grape::API
resource :reviews do
get do
"This is review"
end
end
end
end
Есть
environment.rb, который перед запуском приложения запрашивает все необходимые файлы. Если запрашиваю сначала
app/api/v1.rb, то ошибка
uninitialized constant API::V1::Product. Если же запрашивать сначала одни из файлов поддиректории —
uninitialized constant API::V1. В принципе это всё логично и понятно.
Конечно, можно объявить прототип Product и Review и запрашивать сначала
app/api/v1.rb. Или же запрашивать сначала файлы в поддиректории, а их делать вида
module API
class V1 < Grape::API
class Product < Grape::API
...
end
end
end
Можно ли оставить структуру и код, при этом избавиться от ошибок? Ведь в приложении, приведенном мною в начале вопроса, используется точно такая же структура и это все работает.