GitXplorerGitXplorer
m

grape-jbuilder

public
49 stars
18 forks
4 issues

Commits

List of commits on branch master.
Unverified
b6e8d3daef7f9e0a0774bd69c35d8a13838cfa29

Bump version to 0.2.0.

mmilkcocoa committed 11 years ago
Unverified
493c7ee84efaf64fc681e6df2922392e94a2627d

Removed redundant code.

mmilkcocoa committed 11 years ago
Unverified
7bf3b441483a68b4222d2322784d22780a19d688

Add dynamic template changing in README.

mmilkcocoa committed 11 years ago
Unverified
e24473610b756e5e069b6aa7ff10972011793845

Add CHANGELOG.

mmilkcocoa committed 11 years ago
Unverified
28fd049b5b4b0bdb5967a0ec8cfddc9f7372fa7b

Add Ruby 2.1.1 to Travis.

mmilkcocoa committed 11 years ago
Unverified
e4d8bbe56228ab5c7249d7d7e69cf8a479816ad6

Merge pull request #4 from pat/master

mmilkcocoa committed 11 years ago

README

The README file for this repository.

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