使用Grape时,模拟`around_filter`的最佳方法是什么?

时间:2016-04-18 14:05:14

标签: ruby-on-rails ruby grape

我想为我的应用收到的每个请求设置时区,application_controller.rb我这样做了:

around_filter :user_time_zone, :if => :current_user

def user_time_zone(&block)
  Time.use_zone(current_user.time_zone, &block)
end

但我很难找到适合使用Grape gem的当前应用程序的等价物。

我发现的唯一似乎是this

use Grape::Middleware::Filter, before: lambda {  Time.zone current_user.time_zone }, after: lambda { Time.zone 'UTC' }

但我想知道是否有更清洁的东西

1 个答案:

答案 0 :(得分:0)

您可以将该常见行为放在模块中。

以下是我做类似的事情:

module API
  module V1
    module Defaults
      extend ActiveSupport::Concern

      included do
        helpers do
          def current_user
            # ...
          end
        end

        before do
          Time.zone = current_user.timezone
        end

        after do
          Time.zone = Rails.configuration.time_zone
        end
      end
    end
  end
end

module API
  module V1
    class Things < Grape::API

      include API::V1::Defaults

    end
  end
end