Module: Sinatra::JSON
- Included in:
- RespondWith::Helpers
- Defined in:
- lib/sinatra/json.rb
Overview
Sinatra::JSON
Sinatra::JSON
adds a helper method, called json
, for (obviously) json generation.
Usage
Classic Application
In a classic application simply require the helper, and start using it:
require "sinatra"
require "sinatra/json"
# define a route that uses the helper
get '/' do
json :foo => 'bar'
end
# The rest of your classic application code goes here...
Modular Application
In a modular application you need to require the helper, and then tell the application you will use it:
require "sinatra/base"
require "sinatra/json"
class MyApp < Sinatra::Base
helpers Sinatra::JSON
# define a route that uses the helper
get '/' do
json :foo => 'bar'
end
# The rest of your modular application code goes here...
end
Encoders
Per default it will try to call to_json
on the object, but if it doesn’t respond to that message, will use its own, rather simple encoder. You can easily change that anyways. To use JSON
, simply require it:
require 'json'
The same goes for Yajl::Encoder
:
require 'yajl'
For other encoders, besides requiring them, you need to define the :json_encoder
setting. For instance, for the Whatever
encoder:
require 'whatever'
set :json_encoder, Whatever
To force json
to simply call to_json
on the object:
set :json_encoder, :to_json
Actually, it can call any method:
set :json_encoder, :my_fancy_json_method
Content-Type
It will automatically set the content type to “application/json”. As usual, you can easily change that, with the :json_content_type
setting:
set :json_content_type, :js
Overriding the Encoder and the Content-Type
The json
helper will also take two options :encoder
and :content_type
. The values of this options are the same as the :json_encoder
and :json_content_type
settings, respectively. You can also pass those to the json method:
get '/' do
json({:foo => 'bar'}, :encoder => :to_json, :content_type => :js)
end
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.encode(object) ⇒ Object
92 93 94 |
# File 'lib/sinatra/json.rb', line 92 def encode(object) enc object, Array, Hash end |
Instance Method Details
#json(object, options = {}) ⇒ Object
114 115 116 117 118 119 120 121 122 |
# File 'lib/sinatra/json.rb', line 114 def json(object, = {}) encoder = [:encoder] || settings.json_encoder content_type [:content_type] || settings.json_content_type if encoder.respond_to? :encode then encoder.encode(object) elsif encoder.respond_to? :generate then encoder.generate(object) elsif encoder.is_a? Symbol then object.__send__(encoder) else fail "#{encoder} does not respond to #generate nor #encode" end end |