Задать вопрос

Как в Ruby разбить класс на несколько файлов?

Разбираюсь с 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


Можно ли оставить структуру и код, при этом избавиться от ошибок? Ведь в приложении, приведенном мною в начале вопроса, используется точно такая же структура и это все работает.
  • Вопрос задан
  • 366 просмотров
Подписаться 3 Оценить 8 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы