Зачем использовать помощники в Grape API, а не включать модуль?

Зачем при написании API с помощью Grape использовать макрос helpers вместо простого включения модуля или добавления метода?

Например, вы можете определить методы в модуле и включить их в качестве помощников в Grape следующим образом:

module HelperMethods
  def useful_method(param)
    "Does a thing with #{param}"
  end
end

class HelpersAPI < Grape::API
  helpers HelperMethods

  get 'do_stuff/:id' do
    useful_method(params[:id])
  end
end

Но почему бы просто не сделать это?

class IncludeAPI < Grape::API
  include HelperMethods

  get 'do_stuff/:id' do
    useful_method(params[:id])
  end
end

Я предполагаю, что немного более ясно, что вы включаете модуль HelperMethods с целью предоставления вспомогательных методов, но это кажется слабой причиной для добавления альтернативного синтаксиса.

Каковы преимущества / причины, по которым вы хотели бы использовать helpers по сравнению с обычным include?


person huntmaster    schedule 15.06.2016    source источник
comment
IIRC, helpers также включает модуль во вложенные пространства имен.   -  person Stefan    schedule 15.06.2016
comment
Это нормально, но вы можете сделать это и с модулями, просто используя стандартный шаблон модуля верхнего уровня, требующий вложенных модулей. Это тоже не так удивительно.   -  person huntmaster    schedule 15.06.2016


Ответы (1)


Вы можете определить повторно используемые параметры с помощью помощников, которые вы не можете сделать в стандартном модуле ruby.

class API < Grape::API
  helpers do
    params :pagination do
      optional :page, type: Integer
      optional :per_page, type: Integer
    end
  end

  desc 'Get collection'
  params do
    use :pagination # aliases: includes, use_scope
  end
  get do
    Collection.page(params[:page]).per(params[:per_page])
  end
end

https://github.com/ruby-grape/grape#helpers

person scorix    schedule 15.06.2016
comment
Это нормально, но зачем мне его использовать для методов? В моем примере параметры не устанавливаются с помощью вспомогательного макроса. - person huntmaster; 15.06.2016