rabl 0.6.9 → 0.6.10
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +2 -1
- data/CHANGELOG.md +5 -0
- data/README.md +21 -154
- data/lib/rabl/configuration.rb +7 -3
- data/lib/rabl/engine.rb +4 -2
- data/lib/rabl/renderer.rb +2 -1
- data/lib/rabl/version.rb +1 -1
- data/test/configuration_test.rb +4 -2
- data/test/engine_test.rb +8 -0
- data/test/renderer_test.rb +51 -12
- metadata +98 -141
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -37,19 +37,17 @@ and run `bundle install` to install the dependency.
|
|
37
37
|
If you are using **Rails 2.X, Rails 3.X or Padrino**, RABL works without configuration.
|
38
38
|
|
39
39
|
**Important:** With Padrino, be sure that **the rabl gem is listed after the padrino gem in your Gemfile**, otherwise
|
40
|
-
Rabl will not register as a template engine.
|
40
|
+
Rabl will not register properly as a template engine.
|
41
41
|
|
42
42
|
With Sinatra, or any other tilt-based framework, simply register:
|
43
43
|
|
44
|
-
|
44
|
+
```ruby
|
45
|
+
Rabl.register!
|
46
|
+
```
|
45
47
|
|
46
48
|
and RABL will be initialized and ready for use. For usage with Sinatra, check out
|
47
49
|
the [Sinatra Usage](https://github.com/nesquena/rabl/wiki/Setup-for-Sinatra) guide.
|
48
50
|
|
49
|
-
**Note:** Users have reported a few rendering issues with Rails 3.2.
|
50
|
-
The [template handler](https://github.com/nesquena/rabl/blob/master/lib/rabl/template.rb) probably needs
|
51
|
-
a patch to properly support Rails 3.2. Hopefully I can get to it soon but patches are welcome.
|
52
|
-
|
53
51
|
## Overview ##
|
54
52
|
|
55
53
|
You can use RABL to generate JSON and XML based APIs from any ruby object.
|
@@ -139,93 +137,10 @@ gem 'yajl-ruby', :require => "yajl"
|
|
139
137
|
|
140
138
|
and RABL will automatically start using that engine for encoding your JSON responses!
|
141
139
|
|
142
|
-
###
|
143
|
-
|
144
|
-
Rabl also includes optional support for [Message Pack](http://www.msgpack.org/) serialization format using the [msgpack gem](https://rubygems.org/gems/msgpack).
|
145
|
-
To enable, include the msgpack gem in your project's Gemfile. Then use Rabl as normal with the `msgpack` format (akin to json and xml formats).
|
146
|
-
|
147
|
-
```ruby
|
148
|
-
# Gemfile
|
149
|
-
gem 'msgpack', '~> 0.4.5'
|
150
|
-
```
|
151
|
-
|
152
|
-
One can additionally use a custom Message Pack implementation by setting the Rabl `msgpack_engine` configuration attribute. This custom message pack engine must conform to the MessagePack#pack method signature.
|
153
|
-
|
154
|
-
```ruby
|
155
|
-
class CustomEncodeEngine
|
156
|
-
def self.pack string
|
157
|
-
# Custom Encoding by your own engine.
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
Rabl.configure do |config|
|
162
|
-
config.msgpack_engine = CustomEncodeEngine
|
163
|
-
end
|
164
|
-
```
|
165
|
-
|
166
|
-
*NOTE*: Attempting to render the msgpack format without either including the msgpack gem
|
167
|
-
or setting a `msgpack_engine` will cause an exception to be raised.
|
168
|
-
|
169
|
-
### BSON ###
|
170
|
-
|
171
|
-
Rabl also includes optional support for [BSON](http://bsonspec.org/) serialization format using the [bson gem](https://rubygems.org/gems/bson).
|
172
|
-
To enable, include the bson gem in your project's Gemfile. Then use Rabl as normal with the `bson` format (akin to json and xml formats).
|
173
|
-
|
174
|
-
```ruby
|
175
|
-
# Gemfile
|
176
|
-
gem 'bson', '~> 1.5.2'
|
177
|
-
```
|
178
|
-
|
179
|
-
To use it with Rails, also register the bson mime type format:
|
180
|
-
|
181
|
-
```ruby
|
182
|
-
# config/initializers/mime_types.rb
|
183
|
-
Mime::Type.register "application/bson", :bson
|
184
|
-
```
|
185
|
-
|
186
|
-
One can additionally use a custom BSON implementation by setting the Rabl `bson_engine` configuration attribute.
|
187
|
-
This custom BSON engine must conform to the BSON#serialize method signature.
|
188
|
-
|
189
|
-
```ruby
|
190
|
-
class CustomEncodeEngine
|
191
|
-
def self.serialize string
|
192
|
-
# Custom Encoding by your own engine.
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
Rabl.configure do |config|
|
197
|
-
config.bson_engine = CustomEncodeEngine
|
198
|
-
end
|
199
|
-
```
|
200
|
-
|
201
|
-
*NOTE*: Attempting to render the bson format without either including the bson gem or
|
202
|
-
setting a `bson_engine` will cause an exception to be raised.
|
203
|
-
|
204
|
-
### Plist ###
|
205
|
-
|
206
|
-
Rabl also includes optional support for [Plist](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html]) serialization format using the [plist gem](http://plist.rubyforge.org/).
|
207
|
-
To enable, include the plist gem in your project's Gemfile. Then use Rabl as normal with the `plist` format (akin to other formats).
|
208
|
-
|
209
|
-
```ruby
|
210
|
-
# Gemfile
|
211
|
-
gem 'plist'
|
212
|
-
```
|
213
|
-
|
214
|
-
There is also an option for a custom Plist implementation by setting the Rabl `plist_engine` configuration attribute.
|
215
|
-
|
216
|
-
```ruby
|
217
|
-
class CustomEncodeEngine
|
218
|
-
def self.dump string
|
219
|
-
# Custom Encoding by your own engine.
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
Rabl.configure do |config|
|
224
|
-
config.plist_engine = CustomEncodeEngine
|
225
|
-
end
|
226
|
-
```
|
140
|
+
### Format Configuration ###
|
227
141
|
|
228
|
-
|
142
|
+
RABL supports configuration for MessagePack, BSON, and Plist. Check the
|
143
|
+
[Format Configuration](https://github.com/nesquena/rabl/wiki/Configuring-Formats) page for more details.
|
229
144
|
|
230
145
|
## Usage ##
|
231
146
|
|
@@ -465,10 +380,7 @@ Note that RABL can be nested arbitrarily deep within child nodes to allow for th
|
|
465
380
|
|
466
381
|
### Caching ###
|
467
382
|
|
468
|
-
|
469
|
-
Rails but support for other frameworks is planned in a future release.
|
470
|
-
|
471
|
-
For Rails, requires `action_controller.perform_caching` to be set to true in your environment, and for `cache` to be set to a key (object that responds to cache_key method, array or string).
|
383
|
+
RABL has built-in caching support for templates leveraging fragment caching strategies. Note that caching is currently **only available** for but support for other frameworks is planned in a future release. Simplest caching usage is:
|
472
384
|
|
473
385
|
```ruby
|
474
386
|
# app/views/users/show.json.rabl
|
@@ -477,62 +389,7 @@ cache @quiz # key = rabl/quiz/[cache_key]
|
|
477
389
|
attribute :title
|
478
390
|
```
|
479
391
|
|
480
|
-
|
481
|
-
|
482
|
-
```ruby
|
483
|
-
cache @user # calls @user.cache_key
|
484
|
-
cache ['keel', @user] # calls @user.cache_key and prefixes with kewl/
|
485
|
-
cache 'lists' # explicit key of 'lists'
|
486
|
-
cache 'lists', expires_in: 1.hour
|
487
|
-
```
|
488
|
-
|
489
|
-
The cache keyword can be used from within the base template or any extended template including partials.
|
490
|
-
|
491
|
-
```ruby
|
492
|
-
# app/views/users/index.json.rabl
|
493
|
-
collection @users
|
494
|
-
cache @users # key = rabl/users/[cache_key]/users/[cache_key]/...
|
495
|
-
|
496
|
-
extends "users/show"
|
497
|
-
```
|
498
|
-
|
499
|
-
And within the extended template:
|
500
|
-
|
501
|
-
```ruby
|
502
|
-
# app/views/users/show.json.rabl
|
503
|
-
object @user
|
504
|
-
cache @user # key = rabl/user/[cache_key]/...
|
505
|
-
|
506
|
-
attributes :name, :email
|
507
|
-
```
|
508
|
-
|
509
|
-
Another example of extending your object templates.
|
510
|
-
|
511
|
-
```ruby
|
512
|
-
# app/views/users/show.json.rabl
|
513
|
-
object @user
|
514
|
-
|
515
|
-
extends "users/user"
|
516
|
-
```
|
517
|
-
|
518
|
-
```ruby
|
519
|
-
# app/views/users/user.json.rabl
|
520
|
-
cache # key = rabl/user/[cache_key]/...
|
521
|
-
|
522
|
-
attributes :name, :email
|
523
|
-
```
|
524
|
-
|
525
|
-
Caching can significantly speed up the rendering of RABL templates in production and is strongly recommended when possible.
|
526
|
-
|
527
|
-
### Content Type Assignment ###
|
528
|
-
|
529
|
-
Currently in RABL, the content-type of your response is not set automatically. This is because RABL is intended
|
530
|
-
to work for any Rack-based framework and as agostic to format as possible.
|
531
|
-
Check [this issue](https://github.com/nesquena/rabl/issues/185#issuecomment-4501232) for more
|
532
|
-
details, and if you have any ideas or patches please let me know.
|
533
|
-
|
534
|
-
In the meantime, be sure to set the proper content-types if needed. This is usually pretty simple in both
|
535
|
-
Rails and Padrino. I recommend a before_filter on that controller or directly specified in an action.
|
392
|
+
Caching can significantly speed up the rendering of RABL templates in production and is strongly recommended when possible. For more a more detailed look at caching, check out the [Caching](https://github.com/nesquena/rabl/wiki/Caching-in-RABL) guide on the wiki.
|
536
393
|
|
537
394
|
### Rendering Templates Directly ###
|
538
395
|
|
@@ -554,6 +411,16 @@ Rabl::Renderer.xml(@post, 'posts/show')
|
|
554
411
|
|
555
412
|
These methods allow RABL to be used for arbitrary conversions of an object into a desired format.
|
556
413
|
|
414
|
+
### Content Type Headers ###
|
415
|
+
|
416
|
+
Currently in RABL, the content-type of your response is not set automatically. This is because RABL is intended
|
417
|
+
to work for any Rack-based framework and as agostic to format as possible.
|
418
|
+
Check [this issue](https://github.com/nesquena/rabl/issues/185#issuecomment-4501232) for more
|
419
|
+
details, and if you have any ideas or patches please let me know.
|
420
|
+
|
421
|
+
In the meantime, be sure to set the proper content-types if needed. This is usually pretty simple in both
|
422
|
+
Rails and Padrino. I recommend a before_filter on that controller or directly specified in an action.
|
423
|
+
|
557
424
|
## Resources ##
|
558
425
|
|
559
426
|
There are many resources available relating to RABL including the [RABL Wiki](https://github.com/nesquena/rabl/wiki),
|
@@ -563,6 +430,7 @@ and many tutorials and guides detailed below.
|
|
563
430
|
|
564
431
|
Links to resources for advanced usage:
|
565
432
|
|
433
|
+
* Grape Integration: https://github.com/nesquena/rabl/wiki/Using-Rabl-with-Grape
|
566
434
|
* Rendering JSON for a tree structure using RABL: https://github.com/nesquena/rabl/issues/70
|
567
435
|
* Layouts (erb, haml and rabl) in RABL: https://github.com/nesquena/rabl/wiki/Using-Layouts
|
568
436
|
* Backbone or [Ember.js](http://www.emberjs.com) Integration: https://github.com/nesquena/rabl/wiki/Backbone-Integration
|
@@ -588,9 +456,8 @@ Let me know if there's any other useful resources not listed here.
|
|
588
456
|
|
589
457
|
### Related Libraries ###
|
590
458
|
|
591
|
-
There are
|
459
|
+
There are other libraries that can either complement or extend the functionality of RABL:
|
592
460
|
|
593
|
-
* [grape-rabl](https://github.com/LTe/grape-rabl) - Allows rabl templates to be used with [grape](https://github.com/intridea/grape)
|
594
461
|
* [gon](https://github.com/gazay/gon) - Exposes your Rails variables in JS with RABL support integrated.
|
595
462
|
|
596
463
|
Let me know if there's any other related libraries not listed here.
|
data/lib/rabl/configuration.rb
CHANGED
@@ -61,7 +61,10 @@ module Rabl
|
|
61
61
|
# or class that responds to `encode`, to use to encode Rabl templates
|
62
62
|
# into JSON. For more details, see the MultiJson gem.
|
63
63
|
def json_engine=(engine_name_or_class)
|
64
|
-
|
64
|
+
@engine_name = engine_name_or_class
|
65
|
+
# multi_json compatibility TODO
|
66
|
+
MultiJson.respond_to?(:use) ? MultiJson.use(@engine_name) :
|
67
|
+
MultiJson.engine = @engine_name
|
65
68
|
end
|
66
69
|
|
67
70
|
# @return The JSON engine used to encode Rabl templates into JSON
|
@@ -104,8 +107,9 @@ module Rabl
|
|
104
107
|
def get_json_engine
|
105
108
|
if !defined?(@engine_name) && defined?(Rails)
|
106
109
|
ActiveSupport::JSON
|
107
|
-
else
|
108
|
-
|
110
|
+
else # use multi_json
|
111
|
+
# multi_json compatibility TODO
|
112
|
+
MultiJson.respond_to?(:adapter) ? MultiJson.adapter : MultiJson.engine
|
109
113
|
end
|
110
114
|
end
|
111
115
|
end
|
data/lib/rabl/engine.rb
CHANGED
@@ -118,7 +118,7 @@ module Rabl
|
|
118
118
|
@_collection_name = options[:root] if options[:root]
|
119
119
|
@_collection_name ||= data.values.first if data.respond_to?(:each_pair)
|
120
120
|
@_object_root_name = options[:object_root] if options.has_key?(:object_root)
|
121
|
-
self.object(data_object(data).to_a)
|
121
|
+
self.object(data_object(data).to_a)
|
122
122
|
end
|
123
123
|
|
124
124
|
# Sets the cache key to be used by ActiveSupport::Cache.expand_cache_key
|
@@ -211,7 +211,9 @@ module Rabl
|
|
211
211
|
# format_json({ :foo => "bar" }) => "test({ foo : 'bar' })"
|
212
212
|
# format_json("{ foo : "bar" }") => "test({ foo : 'bar' })"
|
213
213
|
def format_json(json_output)
|
214
|
-
|
214
|
+
json_engine = Rabl.configuration.json_engine
|
215
|
+
json_method = json_engine.respond_to?(:dump) ? 'dump' : 'encode' # multi_json compatibility TODO
|
216
|
+
json_output = json_engine.send(json_method, json_output) unless json_output.is_a?(String)
|
215
217
|
use_callback = Rabl.configuration.enable_json_callbacks && request_params[:callback].present?
|
216
218
|
use_callback ? "#{request_params[:callback]}(#{json_output})" : json_output
|
217
219
|
end
|
data/lib/rabl/renderer.rb
CHANGED
@@ -44,7 +44,8 @@ module Rabl
|
|
44
44
|
def render(context_scope = nil)
|
45
45
|
context_scope = context_scope ? context_scope : options.delete(:scope) || self
|
46
46
|
set_instance_variable(object) if context_scope == self
|
47
|
-
|
47
|
+
locals = options.fetch(:locals, {}).reverse_merge(:object => object)
|
48
|
+
engine.render(context_scope, locals)
|
48
49
|
end
|
49
50
|
|
50
51
|
protected
|
data/lib/rabl/version.rb
CHANGED
data/test/configuration_test.rb
CHANGED
@@ -3,12 +3,14 @@ require File.expand_path('../../lib/rabl', __FILE__)
|
|
3
3
|
|
4
4
|
context 'Rabl::Configuration' do
|
5
5
|
context 'defaults' do
|
6
|
+
# multi_json compatibility TODO
|
7
|
+
helper(:json_engine) { MultiJson.respond_to?(:adapter) ? MultiJson.adapter : MultiJson.engine }
|
6
8
|
setup { Rabl.configuration }
|
7
9
|
|
8
10
|
asserts(:include_json_root).equals true
|
9
11
|
asserts(:include_xml_root).equals false
|
10
12
|
asserts(:enable_json_callbacks).equals false
|
11
|
-
asserts(:json_engine).equals
|
13
|
+
asserts(:json_engine).equals { json_engine }
|
12
14
|
end
|
13
15
|
|
14
16
|
context 'custom JSON engine' do
|
@@ -18,6 +20,6 @@ context 'Rabl::Configuration' do
|
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
|
-
asserts('uses a custom JSON engine') { topic.json_engine
|
23
|
+
asserts('uses a custom JSON engine') { topic.json_engine.to_s =~ /MultiJson.*::Yajl/ }
|
22
24
|
end
|
23
25
|
end
|
data/test/engine_test.rb
CHANGED
@@ -111,6 +111,14 @@ context "Rabl::Engine" do
|
|
111
111
|
end
|
112
112
|
|
113
113
|
context "#collection" do
|
114
|
+
asserts "that it sets object to be blank array" do
|
115
|
+
template = rabl %{
|
116
|
+
collection []
|
117
|
+
}
|
118
|
+
scope = Object.new
|
119
|
+
template.render(scope)
|
120
|
+
end.equals "[]"
|
121
|
+
|
114
122
|
asserts "that it sets object to be casted as a simple array" do
|
115
123
|
template = rabl %{
|
116
124
|
collection @users
|
data/test/renderer_test.rb
CHANGED
@@ -4,6 +4,19 @@ require 'pathname'
|
|
4
4
|
context "Rabl::Renderer" do
|
5
5
|
helper(:tmp_path) { @tmp_path ||= Pathname.new(Dir.mktmpdir) }
|
6
6
|
context "#render" do
|
7
|
+
asserts 'renders empty array' do
|
8
|
+
source = %q{
|
9
|
+
collection @users
|
10
|
+
attribute :name, :as => 'city'
|
11
|
+
}
|
12
|
+
|
13
|
+
scope = Object.new
|
14
|
+
scope.instance_variable_set :@users, []
|
15
|
+
|
16
|
+
renderer = Rabl::Renderer.new(source, [], { :format => 'json', :root => true, :view_path => '/path/to/views', :scope => scope })
|
17
|
+
renderer.render
|
18
|
+
end.equals "[]"
|
19
|
+
|
7
20
|
asserts 'renders string as source' do
|
8
21
|
source = %q{
|
9
22
|
object @user
|
@@ -51,8 +64,8 @@ context "Rabl::Renderer" do
|
|
51
64
|
user = User.new(:name => 'irvine')
|
52
65
|
|
53
66
|
renderer = Rabl::Renderer.new(source, nil, { :format => 'json', :locals => {:object => user} })
|
54
|
-
renderer.render
|
55
|
-
end.equals "{\"user\":{\"city\":\"irvine\"}}"
|
67
|
+
renderer.render.split("").sort
|
68
|
+
end.equals "{\"user\":{\"city\":\"irvine\"}}".split("").sort
|
56
69
|
|
57
70
|
|
58
71
|
asserts 'loads source from file' do
|
@@ -66,8 +79,8 @@ context "Rabl::Renderer" do
|
|
66
79
|
user = User.new(:name => 'irvine')
|
67
80
|
|
68
81
|
renderer = Rabl::Renderer.new('test', user, :view_path => tmp_path)
|
69
|
-
renderer.render
|
70
|
-
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}"
|
82
|
+
renderer.render.split("").sort
|
83
|
+
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}".split("").sort
|
71
84
|
|
72
85
|
|
73
86
|
asserts 'handles paths for extends' do
|
@@ -88,8 +101,8 @@ context "Rabl::Renderer" do
|
|
88
101
|
user = User.new(:name => 'irvine')
|
89
102
|
|
90
103
|
renderer = Rabl::Renderer.new('user', user, :view_path => tmp_path)
|
91
|
-
renderer.render
|
92
|
-
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}"
|
104
|
+
renderer.render.split("").sort
|
105
|
+
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}".split("").sort
|
93
106
|
|
94
107
|
asserts 'Rabl.render calls Renderer' do
|
95
108
|
File.open(tmp_path + "test.json.rabl", "w") do |f|
|
@@ -101,8 +114,34 @@ context "Rabl::Renderer" do
|
|
101
114
|
|
102
115
|
user = User.new(:name => 'irvine')
|
103
116
|
|
104
|
-
Rabl.render(user, 'test', :view_path => tmp_path)
|
105
|
-
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}"
|
117
|
+
Rabl.render(user, 'test', :view_path => tmp_path).split("").sort
|
118
|
+
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}".split("").sort
|
119
|
+
|
120
|
+
asserts 'it renders collections' do
|
121
|
+
File.open(tmp_path + "test.json.rabl", "w") do |f|
|
122
|
+
f.puts %q{
|
123
|
+
collection @users => :users
|
124
|
+
attributes :age, :name
|
125
|
+
}
|
126
|
+
end
|
127
|
+
|
128
|
+
scope = Object.new
|
129
|
+
scope.instance_variable_set :@users, nil
|
130
|
+
Rabl.render([], 'test', :view_path => tmp_path, :scope => scope).split("").sort
|
131
|
+
end.equals "{\"users\":[]}".split("").sort
|
132
|
+
|
133
|
+
asserts 'it renders an array when given an empty collection' do
|
134
|
+
File.open(tmp_path + "test.json.rabl", "w") do |f|
|
135
|
+
f.puts %q{
|
136
|
+
collection @users
|
137
|
+
attribute :name, :age
|
138
|
+
}
|
139
|
+
end
|
140
|
+
|
141
|
+
scope = Object.new
|
142
|
+
scope.instance_variable_set :@users, nil
|
143
|
+
Rabl.render([], 'test', :view_path => tmp_path, :root => false, :scope => scope)
|
144
|
+
end.equals "[]"
|
106
145
|
end
|
107
146
|
|
108
147
|
context '.json' do
|
@@ -115,8 +154,8 @@ context "Rabl::Renderer" do
|
|
115
154
|
end
|
116
155
|
|
117
156
|
user = User.new(:name => 'ivan')
|
118
|
-
Rabl::Renderer.json(user, 'test', :view_path => tmp_path)
|
119
|
-
end.equals "{\"user\":{\"age\":24,\"name\":\"ivan\"}}"
|
157
|
+
Rabl::Renderer.json(user, 'test', :view_path => tmp_path).split("").sort
|
158
|
+
end.equals "{\"user\":{\"age\":24,\"name\":\"ivan\"}}".split("").sort
|
120
159
|
end
|
121
160
|
|
122
161
|
context '.msgpack' do
|
@@ -129,8 +168,8 @@ context "Rabl::Renderer" do
|
|
129
168
|
end
|
130
169
|
|
131
170
|
user = User.new(:name => 'ivan')
|
132
|
-
Rabl::Renderer.msgpack(user, 'test', :view_path => tmp_path).split
|
133
|
-
end.equals "\x81\xA4user\x82\xA3age\x18\xA4name\xA4ivan".split
|
171
|
+
Rabl::Renderer.msgpack(user, 'test', :view_path => tmp_path).split("").sort
|
172
|
+
end.equals "\x81\xA4user\x82\xA3age\x18\xA4name\xA4ivan".split("").sort
|
134
173
|
end
|
135
174
|
|
136
175
|
context '.plist' do
|
metadata
CHANGED
@@ -1,183 +1,137 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabl
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.9
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.6.10
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Nathan Esquenazi
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2012-04-19 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: activesupport
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 2.3.14
|
22
|
-
type: :runtime
|
23
17
|
prerelease: false
|
24
|
-
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
19
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
29
23
|
version: 2.3.14
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: multi_json
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '1.0'
|
38
24
|
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: multi_json
|
39
28
|
prerelease: false
|
40
|
-
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
30
|
none: false
|
42
|
-
requirements:
|
31
|
+
requirements:
|
43
32
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
-
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "1.0"
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
47
38
|
name: riot
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 0.12.3
|
54
|
-
type: :development
|
55
39
|
prerelease: false
|
56
|
-
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
41
|
none: false
|
58
|
-
requirements:
|
42
|
+
requirements:
|
59
43
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
44
|
+
- !ruby/object:Gem::Version
|
61
45
|
version: 0.12.3
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: rr
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ~>
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 1.0.2
|
70
46
|
type: :development
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rr
|
71
50
|
prerelease: false
|
72
|
-
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
52
|
none: false
|
74
|
-
requirements:
|
53
|
+
requirements:
|
75
54
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
55
|
+
- !ruby/object:Gem::Version
|
77
56
|
version: 1.0.2
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: rake
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
57
|
type: :development
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rake
|
87
61
|
prerelease: false
|
88
|
-
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
89
63
|
none: false
|
90
|
-
requirements:
|
91
|
-
- -
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version:
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: tilt
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ! '>='
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0'
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
102
68
|
type: :development
|
69
|
+
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: tilt
|
103
72
|
prerelease: false
|
104
|
-
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: yajl-ruby
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
113
74
|
none: false
|
114
|
-
requirements:
|
115
|
-
- -
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version:
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
118
79
|
type: :development
|
80
|
+
version_requirements: *id006
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: yajl-ruby
|
119
83
|
prerelease: false
|
120
|
-
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: msgpack
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
129
85
|
none: false
|
130
|
-
requirements:
|
131
|
-
- -
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: 0
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: "0"
|
134
90
|
type: :development
|
91
|
+
version_requirements: *id007
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: msgpack
|
135
94
|
prerelease: false
|
136
|
-
|
95
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
137
96
|
none: false
|
138
|
-
requirements:
|
97
|
+
requirements:
|
139
98
|
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
99
|
+
- !ruby/object:Gem::Version
|
141
100
|
version: 0.4.5
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: bson
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
|
-
requirements:
|
147
|
-
- - ~>
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: 1.5.2
|
150
101
|
type: :development
|
102
|
+
version_requirements: *id008
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: bson
|
151
105
|
prerelease: false
|
152
|
-
|
106
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
153
107
|
none: false
|
154
|
-
requirements:
|
108
|
+
requirements:
|
155
109
|
- - ~>
|
156
|
-
- !ruby/object:Gem::Version
|
110
|
+
- !ruby/object:Gem::Version
|
157
111
|
version: 1.5.2
|
158
|
-
- !ruby/object:Gem::Dependency
|
159
|
-
name: plist
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
|
-
requirements:
|
163
|
-
- - ! '>='
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: '0'
|
166
112
|
type: :development
|
113
|
+
version_requirements: *id009
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: plist
|
167
116
|
prerelease: false
|
168
|
-
|
117
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
169
118
|
none: false
|
170
|
-
requirements:
|
171
|
-
- -
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version:
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: "0"
|
123
|
+
type: :development
|
124
|
+
version_requirements: *id010
|
174
125
|
description: General ruby templating with json, bson, xml and msgpack support
|
175
|
-
email:
|
126
|
+
email:
|
176
127
|
- nesquena@gmail.com
|
177
128
|
executables: []
|
129
|
+
|
178
130
|
extensions: []
|
131
|
+
|
179
132
|
extra_rdoc_files: []
|
180
|
-
|
133
|
+
|
134
|
+
files:
|
181
135
|
- .gitignore
|
182
136
|
- .travis.yml
|
183
137
|
- CHANGELOG.md
|
@@ -418,29 +372,32 @@ files:
|
|
418
372
|
- test/teststrap.rb
|
419
373
|
homepage: https://github.com/nesquena/rabl
|
420
374
|
licenses: []
|
375
|
+
|
421
376
|
post_install_message:
|
422
377
|
rdoc_options: []
|
423
|
-
|
378
|
+
|
379
|
+
require_paths:
|
424
380
|
- lib
|
425
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
381
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
426
382
|
none: false
|
427
|
-
requirements:
|
428
|
-
- -
|
429
|
-
- !ruby/object:Gem::Version
|
430
|
-
version:
|
431
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
383
|
+
requirements:
|
384
|
+
- - ">="
|
385
|
+
- !ruby/object:Gem::Version
|
386
|
+
version: "0"
|
387
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
432
388
|
none: false
|
433
|
-
requirements:
|
434
|
-
- -
|
435
|
-
- !ruby/object:Gem::Version
|
436
|
-
version:
|
389
|
+
requirements:
|
390
|
+
- - ">="
|
391
|
+
- !ruby/object:Gem::Version
|
392
|
+
version: "0"
|
437
393
|
requirements: []
|
394
|
+
|
438
395
|
rubyforge_project: rabl
|
439
|
-
rubygems_version: 1.8.
|
396
|
+
rubygems_version: 1.8.19
|
440
397
|
signing_key:
|
441
398
|
specification_version: 3
|
442
399
|
summary: General ruby templating with json, bson, xml and msgpack support
|
443
|
-
test_files:
|
400
|
+
test_files:
|
444
401
|
- test/bson_engine_test.rb
|
445
402
|
- test/builder_test.rb
|
446
403
|
- test/configuration_test.rb
|