Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

grape-jbuilder

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

grape-jbuilder

  • 0.2.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

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

FAQs

Package last updated on 02 Mar 2014

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc