0.05
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
Use Jbuilder in Grape
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 0.3
>= 0
>= 0
 Project Readme

Grape::Jbuilder

Use Jbuilder templates in Grape!

This gem is completely based on grape-rabl.

Build Status

Installation

Add this line to your application's Gemfile:

gem 'grape-jbuilder'

And then execute:

$ bundle

Or install it yourself as:

$ gem install grape-jbuilder

Usage

Require grape-jbuilder

# config.ru
require 'grape/jbuilder'

Setup view root directory

# config.ru
require 'grape/jbuilder'

use Rack::Config do |env|
  env['api.tilt.root'] = '/path/to/view/root/directory'
end

Tell your API to use Grape::Formatter:: Jbuilder

class API < Grape::API
  format :json
  formatter :json, Grape::Formatter::Jbuilder
end

Use Jbuilder templates conditionally

Add the template name to the API options.

get '/user/:id', jbuilder: 'user.jbuilder' do
  @user = User.find(params[:id])
end

You can use instance variables in the Jbuilder template.

json.user do
  json.(@user, :name, :email)
  json.project do
    json.(@project, :name)
  end
end

Use Jbuilder templates dynamically

get ':id' do
  user = User.find_by(id: params[:id])
  if article
    env['api.tilt.template'] = 'users/show'
    env['api.tilt.locals']   = {user: user}
  else
    status 404
    {'status' => 'Not Found', 'errors' => "User id '#{params[:id]}' is not found."}
  end
end

You can omit .jbuilder

The following are identical.

get '/home', jbuilder: 'view'
get '/home', jbuilder: 'view.jbuilder'

Example

# config.ru
require 'grape/jbuilder'

use Rack::Config do |env|
  env['api.tilt.root'] = '/path/to/view/root/directory'
end

class UserAPI < Grape::API
  format :json
  formatter :json, Grape::Formatter::Jbuilder

  # use Jbuilder with 'user.jbuilder' template
  get '/user/:id', jbuilder: 'user' do
    @user = User.find(params[:id])
  end

  # do not use jbuilder, fallback to the defalt Grape JSON formatter
  get '/users' do
    User.all
  end
end
# user.jbuilder
json.user do
  json.(@user, :name)
end

Usage with Rails

Create a grape application.

# app/api/user.rb
class MyAPI < Grape::API
  format :json
  formatter :json, Grape::Formatter::Jbuilder
  get '/user/:id', jbuilder: 'user' do
    @user = User.find(params[:id])
  end
end
# app/views/api/user.jbuilder
json.user do
  json.(@user, :name)
end

Edit your config/application.rb and add view path

# application.rb
class Application < Rails::Application
  config.middleware.use(Rack::Config) do |env|
    env['api.tilt.root'] = Rails.root.join 'app', 'views', 'api'
  end
end

Mount application to Rails router

# routes.rb
GrapeExampleRails::Application.routes.draw do
  mount MyAPI , at: '/api'
end

Rspec

See "Writing Tests" in https://github.com/intridea/grape.

Enjoy :)

Special Thanks

Special thanks to @LTe because this gem is completely based on grape-rabl.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request