Sha256: 192de083e432aed97fd2e307be9d769f9caab6a7f40c19e06909eec7511b7334

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

ENV['RACK_ENV'] ||= 'test'
require 'grape-app'
require 'rack/test'

class Article
  include Virtus.model

  class Scope
    include Enumerable

    def maximum(*)
      map(&:updated_at).max
    end

    def each
      yield Article.new(id: 1, title: 'Welcome', updated_at: Time.at(1515151510).utc)
      yield Article.new(id: 2, title: 'Bye', updated_at: Time.at(1515151520).utc)
    end
  end

  def self.all
    Scope.new
  end

  attribute :id
  attribute :title
  attribute :updated_at

  def to_param
    id.to_s
  end
end

class TestAPI < Grape::API::Instance
  format :json

  helpers Grape::App::Helpers::Caching
  helpers Grape::App::Helpers::Params

  get '/articles' do
    scope = Article.all
    opts  = params[:public] ? { public: params[:public] } : {}
    fresh_when(scope, **opts)
    scope.map(&:to_hash)
  end

  get '/articles/:id' do
    article = Article.all.first
    article.to_hash if stale?(article, stale_if_error: 5, extras: { a: 1, b: 2 })
  end

  params do
    requires :title
    optional :fresh
  end
  post '/articles' do
    attrs = { id: 9, updated_at: Time.at(1515151515).utc }
    attrs.update(declared_params)
    Article.new(attrs).to_hash
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grape-app-0.8.3 spec/spec_helper.rb