rabl 0.6.8 → 0.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +5 -0
- data/README.md +42 -4
- data/fixtures/rails3_2/Gemfile +1 -1
- data/fixtures/rails3_2/test/functional/posts_controller_test.rb +1 -1
- data/lib/rabl.rb +9 -0
- data/lib/rabl/engine.rb +11 -2
- data/lib/rabl/partials.rb +10 -4
- data/lib/rabl/renderer.rb +86 -0
- data/lib/rabl/version.rb +1 -1
- data/test/integration/rails3_2/posts_controller_test.rb +1 -1
- data/test/renderer_test.rb +150 -0
- metadata +144 -98
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -486,7 +486,7 @@ cache 'lists' # explicit key of 'lists'
|
|
486
486
|
cache 'lists', expires_in: 1.hour
|
487
487
|
```
|
488
488
|
|
489
|
-
The cache keyword
|
489
|
+
The cache keyword can be used from within the base template or any extended template including partials.
|
490
490
|
|
491
491
|
```ruby
|
492
492
|
# app/views/users/index.json.rabl
|
@@ -496,15 +496,32 @@ cache @users # key = rabl/users/[cache_key]/users/[cache_key]/...
|
|
496
496
|
extends "users/show"
|
497
497
|
```
|
498
498
|
|
499
|
-
|
499
|
+
And within the extended template:
|
500
500
|
|
501
501
|
```ruby
|
502
502
|
# app/views/users/show.json.rabl
|
503
503
|
object @user
|
504
|
-
cache @user
|
504
|
+
cache @user # key = rabl/user/[cache_key]/...
|
505
505
|
|
506
506
|
attributes :name, :email
|
507
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
|
+
|
508
525
|
Caching can significantly speed up the rendering of RABL templates in production and is strongly recommended when possible.
|
509
526
|
|
510
527
|
### Content Type Assignment ###
|
@@ -517,6 +534,26 @@ details, and if you have any ideas or patches please let me know.
|
|
517
534
|
In the meantime, be sure to set the proper content-types if needed. This is usually pretty simple in both
|
518
535
|
Rails and Padrino. I recommend a before_filter on that controller or directly specified in an action.
|
519
536
|
|
537
|
+
### Rendering Templates Directly ###
|
538
|
+
|
539
|
+
There are situations where an application requires RABL templates to be rendered outside
|
540
|
+
a traditional view context. For instance, to render RABL within a Rake task or to create
|
541
|
+
message queue payloads. For this case, `Rabl.render` can be used as show below:
|
542
|
+
|
543
|
+
```ruby
|
544
|
+
Rabl.render(object, template, :view_path => 'app/views', :format => :json) #=> "{...json...}"
|
545
|
+
```
|
546
|
+
|
547
|
+
You can use convenience methods on `Rabl::Renderer` to render the objects as well:
|
548
|
+
|
549
|
+
```ruby
|
550
|
+
Rabl::Renderer.new(@post, 'posts/show', :view_path => 'app/views')
|
551
|
+
Rabl::Renderer.json(@post, 'posts/show')
|
552
|
+
Rabl::Renderer.xml(@post, 'posts/show')
|
553
|
+
```
|
554
|
+
|
555
|
+
These methods allow RABL to be used for arbitrary conversions of an object into a desired format.
|
556
|
+
|
520
557
|
## Resources ##
|
521
558
|
|
522
559
|
There are many resources available relating to RABL including the [RABL Wiki](https://github.com/nesquena/rabl/wiki),
|
@@ -585,7 +622,7 @@ Thanks to [Miso](http://gomiso.com) for allowing me to create this for our appli
|
|
585
622
|
|
586
623
|
* [Nathan Esquenazi](https://github.com/nesquena) - Creator of the project
|
587
624
|
* [Arthur Chiu](https://github.com/achiu) - Core Maintainer, Riot Testing Guru
|
588
|
-
* [Tim Lee](https://github.com/timothy1ee) - RABL
|
625
|
+
* [Tim Lee](https://github.com/timothy1ee) - RABL was a great name chosen by the Miso CTO.
|
589
626
|
* [David Sommers](https://github.com/databyte) - Enhanced template resolution and added caching support
|
590
627
|
* [Rick Thomas](https://github.com/rickthomasjr) - Added options for extends and Sinatra testing
|
591
628
|
* [Benjamin Yu](https://github.com/byu) - Added msgpack format support
|
@@ -598,6 +635,7 @@ Thanks to [Miso](http://gomiso.com) for allowing me to create this for our appli
|
|
598
635
|
* [Andrey Voronkov](https://github.com/Antiarchitect) - Added BSON format support
|
599
636
|
* [Alli Witheford](https://github.com/alzeih) - Added Plist format support
|
600
637
|
* [Ryan Bigg](https://github.com/radar) - Improved template resolution code
|
638
|
+
* [Ivan Vanderbyl](https://github.com/ivanvanderbyl) - Added general purpose renderer
|
601
639
|
|
602
640
|
and many more contributors listed in the [CHANGELOG](https://github.com/nesquena/rabl/blob/master/CHANGELOG.md).
|
603
641
|
|
data/fixtures/rails3_2/Gemfile
CHANGED
@@ -14,7 +14,6 @@ context "PostsController" do
|
|
14
14
|
|
15
15
|
setup do
|
16
16
|
create_users!
|
17
|
-
Rails.cache.clear
|
18
17
|
Post.delete_all
|
19
18
|
@post1 = Post.create(:title => "Foo", :body => "Bar", :user_id => @user1.id)
|
20
19
|
@post2 = Post.create(:title => "Baz", :body => "Bah", :user_id => @user2.id)
|
@@ -132,6 +131,7 @@ context "PostsController" do
|
|
132
131
|
|
133
132
|
setup do
|
134
133
|
mock(ActionController::Base).perform_caching.any_number_of_times { true }
|
134
|
+
Rails.cache.clear
|
135
135
|
end
|
136
136
|
|
137
137
|
context "for index action with caching in json" do
|
data/lib/rabl.rb
CHANGED
@@ -10,12 +10,15 @@ require 'rabl/partials'
|
|
10
10
|
require 'rabl/engine'
|
11
11
|
require 'rabl/builder'
|
12
12
|
require 'rabl/configuration'
|
13
|
+
require 'rabl/renderer'
|
13
14
|
require 'rabl/railtie' if defined?(Rails) && Rails.version =~ /^3/
|
14
15
|
|
15
16
|
# Rabl.register!
|
16
17
|
module Rabl
|
17
18
|
class << self
|
18
19
|
|
20
|
+
# Initialize RABL within an application
|
21
|
+
# Rabl.register!
|
19
22
|
def register!
|
20
23
|
require 'rabl/template'
|
21
24
|
end
|
@@ -61,6 +64,12 @@ module Rabl
|
|
61
64
|
@_source_cache = {}
|
62
65
|
end
|
63
66
|
|
67
|
+
# Renders an object using a specified template within an application.
|
68
|
+
# render(@post, 'posts/show', :view_path => "/path/to/app/views")
|
69
|
+
def render(object, source, options = {})
|
70
|
+
Rabl::Renderer.new(source, object, options).render
|
71
|
+
end
|
72
|
+
|
64
73
|
end
|
65
74
|
end
|
66
75
|
|
data/lib/rabl/engine.rb
CHANGED
@@ -2,6 +2,9 @@ module Rabl
|
|
2
2
|
class Engine
|
3
3
|
include Rabl::Partials
|
4
4
|
|
5
|
+
# List of supported rendering formats
|
6
|
+
FORMATS = [:json, :xml, :plist, :bson, :msgpack]
|
7
|
+
|
5
8
|
# Constructs a new ejs engine based on given vars, handler and declarations
|
6
9
|
# Rabl::Engine.new("...source...", { :format => "xml", :root => true, :view_path => "/path/to/views" })
|
7
10
|
def initialize(source, options={})
|
@@ -9,6 +12,10 @@ module Rabl
|
|
9
12
|
@_options = options
|
10
13
|
end
|
11
14
|
|
15
|
+
def source=(string)
|
16
|
+
@_source = string
|
17
|
+
end
|
18
|
+
|
12
19
|
# Renders the representation based on source, object, scope and locals
|
13
20
|
# Rabl::Engine.new("...source...", { :format => "xml" }).render(scope, { :foo => "bar", :object => @user })
|
14
21
|
def render(scope, locals, &block)
|
@@ -118,9 +125,10 @@ module Rabl
|
|
118
125
|
# cache @user # calls @user.cache_key
|
119
126
|
# cache ['rabl', @user] # calls @user.cache_key and prefixes with rabl/
|
120
127
|
# cache 'user' # explicit key of 'user'
|
128
|
+
# cache # uses the current item within a collection
|
121
129
|
# cache 'user', expires_in: 1.hour
|
122
130
|
# options is passed through to the cache store
|
123
|
-
def cache(key, options = nil)
|
131
|
+
def cache(key = nil, options = nil)
|
124
132
|
key ||= @_data # if called but missing, use object
|
125
133
|
@_cache = [key, options]
|
126
134
|
end
|
@@ -161,7 +169,8 @@ module Rabl
|
|
161
169
|
# Extends an existing rabl template with additional attributes in the block
|
162
170
|
# extends("users/show", :object => @user) { attribute :full_name }
|
163
171
|
def extends(file, options={}, &block)
|
164
|
-
|
172
|
+
extend_ops = options.merge(:view_path => options.fetch(:view_path, @_options[:view_path]))
|
173
|
+
@_options[:extends].push({ :file => file, :options => extend_ops, :block => block })
|
165
174
|
end
|
166
175
|
|
167
176
|
# Includes a helper module with a RABL template
|
data/lib/rabl/partials.rb
CHANGED
@@ -31,16 +31,22 @@ module Rabl
|
|
31
31
|
# fetch_source("show", :view_path => "...") => "...contents..."
|
32
32
|
def fetch_source(file, options={})
|
33
33
|
Rabl.source_cache(file, options[:view_path]) do
|
34
|
-
file_path = if defined?
|
34
|
+
file_path = if defined?(Padrino) && context_scope.respond_to?(:settings)
|
35
35
|
fetch_padrino_source(file, options)
|
36
|
-
elsif defined?(Rails) && context_scope
|
36
|
+
elsif defined?(Rails) && context_scope.respond_to?(:view_paths)
|
37
37
|
view_path = Array(options[:view_path] || context_scope.view_paths.to_a)
|
38
38
|
fetch_rails_source(file, options) || fetch_manual_template(view_path, file)
|
39
|
-
elsif defined?
|
39
|
+
elsif defined?(Sinatra) && context_scope.respond_to?(:settings)
|
40
40
|
fetch_sinatra_source(file, options)
|
41
|
+
else # generic template resolution
|
42
|
+
view_path = Array(options[:view_path])
|
43
|
+
fetch_manual_template(view_path, file)
|
44
|
+
end
|
45
|
+
|
46
|
+
unless File.exist?(file_path.to_s)
|
47
|
+
raise "Cannot find rabl template '#{file}' within registered (#{file_path}) view paths!"
|
41
48
|
end
|
42
49
|
|
43
|
-
raise "Cannot find rabl template '#{file}' within registered view paths!" unless File.exist?(file_path.to_s)
|
44
50
|
[File.read(file_path.to_s), file_path.to_s] if file_path
|
45
51
|
end
|
46
52
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Rabl
|
2
|
+
class Renderer
|
3
|
+
# Defines class method rendering in supported formats
|
4
|
+
# Rabl::Renderer.json('posts/show', @post)
|
5
|
+
# Rabl::Renderer.xml('posts/show', @post)
|
6
|
+
Rabl::Engine::FORMATS.each do |fmt|
|
7
|
+
instance_eval <<-CODE
|
8
|
+
def #{fmt}(object, source, options = {})
|
9
|
+
new(source, object, options.merge(:format => :#{fmt})).render
|
10
|
+
end
|
11
|
+
CODE
|
12
|
+
end
|
13
|
+
|
14
|
+
# Public: Instantiate a new renderer
|
15
|
+
# This is a standalone class used for rendering rabl templates
|
16
|
+
# outside of a framework like Rails. You may want to use
|
17
|
+
# this when using Rabl to render the request objects passed to
|
18
|
+
# message queues.
|
19
|
+
#
|
20
|
+
# Example:
|
21
|
+
# renderer = Rabl::Renderer.new('template_name', user, { :format => 'json', :view_path => 'app/views' })
|
22
|
+
# renderer.render # => '{"user":{"name": "ivan" }}'
|
23
|
+
#
|
24
|
+
attr_reader :object, :options
|
25
|
+
def initialize(source, object = nil, options = {})
|
26
|
+
options = {
|
27
|
+
:format => :json,
|
28
|
+
:scope => self,
|
29
|
+
:view_path => []
|
30
|
+
}.update(options)
|
31
|
+
|
32
|
+
@options = options
|
33
|
+
@object = object
|
34
|
+
engine.source = self.process_source(source)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: Actually render the template to the requested output format.
|
38
|
+
#
|
39
|
+
# - context_scope:
|
40
|
+
# Override the render scope to the 'scope' object. Defaults to self.
|
41
|
+
#
|
42
|
+
# Returns: And object representing the tranformed object in the requested format.
|
43
|
+
# e.g. json, xml, bson, plist
|
44
|
+
def render(context_scope = nil)
|
45
|
+
context_scope = context_scope ? context_scope : options.delete(:scope) || self
|
46
|
+
set_instance_variable(object) if context_scope == self
|
47
|
+
engine.render(context_scope, options.fetch(:locals, {}))
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
|
52
|
+
def engine
|
53
|
+
@engine ||= Rabl::Engine.new(nil, options)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Returns the source given a relative template path
|
57
|
+
def process_source(source)
|
58
|
+
return source if source.is_a?(String) && source =~ /\n/
|
59
|
+
source, _ = engine.fetch_source(source, { :view_path => options[:view_path] })
|
60
|
+
source
|
61
|
+
end
|
62
|
+
|
63
|
+
# Internal: Sets an instance variable named after the class of `object`
|
64
|
+
#
|
65
|
+
# Example:
|
66
|
+
# object.class.name # => User
|
67
|
+
# set_instance_variable(object) # => @user
|
68
|
+
#
|
69
|
+
def set_instance_variable(object)
|
70
|
+
name = model_name(object).split('/').last
|
71
|
+
instance_variable_set(:"@#{name}", object)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Internal: Returns the model name for an object
|
75
|
+
#
|
76
|
+
# Example:
|
77
|
+
# model_name(@post) => "@post"
|
78
|
+
#
|
79
|
+
def model_name(object)
|
80
|
+
item = object.is_a?(Array) ? object.first : object
|
81
|
+
name = item.class.name.underscore
|
82
|
+
object.is_a?(Array) ? name.pluralize : name
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
data/lib/rabl/version.rb
CHANGED
@@ -14,7 +14,6 @@ context "PostsController" do
|
|
14
14
|
|
15
15
|
setup do
|
16
16
|
create_users!
|
17
|
-
Rails.cache.clear
|
18
17
|
Post.delete_all
|
19
18
|
@post1 = Post.create(:title => "Foo", :body => "Bar", :user_id => @user1.id)
|
20
19
|
@post2 = Post.create(:title => "Baz", :body => "Bah", :user_id => @user2.id)
|
@@ -132,6 +131,7 @@ context "PostsController" do
|
|
132
131
|
|
133
132
|
setup do
|
134
133
|
mock(ActionController::Base).perform_caching.any_number_of_times { true }
|
134
|
+
Rails.cache.clear
|
135
135
|
end
|
136
136
|
|
137
137
|
context "for index action with caching in json" do
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'tmpdir'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
context "Rabl::Renderer" do
|
5
|
+
helper(:tmp_path) { @tmp_path ||= Pathname.new(Dir.mktmpdir) }
|
6
|
+
context "#render" do
|
7
|
+
asserts 'renders string as source' do
|
8
|
+
source = %q{
|
9
|
+
object @user
|
10
|
+
attribute :name, :as => 'city'
|
11
|
+
}
|
12
|
+
|
13
|
+
user = User.new(:name => 'irvine')
|
14
|
+
|
15
|
+
renderer = Rabl::Renderer.new(source, user, { :format => 'json', :root => true, :view_path => '/path/to/views' })
|
16
|
+
renderer.render
|
17
|
+
end.equals "{\"user\":{\"city\":\"irvine\"}}"
|
18
|
+
|
19
|
+
asserts 'allows redirecting scope to another object' do
|
20
|
+
source = %q{
|
21
|
+
object @user
|
22
|
+
attribute :name, :as => 'city'
|
23
|
+
}
|
24
|
+
|
25
|
+
scope = Object.new
|
26
|
+
scope.instance_variable_set :@user, User.new(:name => 'irvine')
|
27
|
+
|
28
|
+
renderer = Rabl::Renderer.new(source, nil, { :format => 'json', :scope => scope })
|
29
|
+
renderer.render
|
30
|
+
end.equals "{\"user\":{\"city\":\"irvine\"}}"
|
31
|
+
|
32
|
+
asserts 'accepts scope on render' do
|
33
|
+
source = %q{
|
34
|
+
object @user
|
35
|
+
attribute :name, :as => 'city'
|
36
|
+
}
|
37
|
+
|
38
|
+
scope = Object.new
|
39
|
+
scope.instance_variable_set :@user, User.new(:name => 'irvine')
|
40
|
+
|
41
|
+
renderer = Rabl::Renderer.new(source)
|
42
|
+
renderer.render(scope)
|
43
|
+
end.equals "{\"user\":{\"city\":\"irvine\"}}"
|
44
|
+
|
45
|
+
asserts 'passes :locals to render' do
|
46
|
+
source = %q{
|
47
|
+
attribute :name, :as => 'city'
|
48
|
+
}
|
49
|
+
|
50
|
+
scope = Object.new
|
51
|
+
user = User.new(:name => 'irvine')
|
52
|
+
|
53
|
+
renderer = Rabl::Renderer.new(source, nil, { :format => 'json', :locals => {:object => user} })
|
54
|
+
renderer.render
|
55
|
+
end.equals "{\"user\":{\"city\":\"irvine\"}}"
|
56
|
+
|
57
|
+
|
58
|
+
asserts 'loads source from file' do
|
59
|
+
File.open(tmp_path + "test.json.rabl", "w") do |f|
|
60
|
+
f.puts %q{
|
61
|
+
object @user
|
62
|
+
attributes :age, :name
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
user = User.new(:name => 'irvine')
|
67
|
+
|
68
|
+
renderer = Rabl::Renderer.new('test', user, :view_path => tmp_path)
|
69
|
+
renderer.render
|
70
|
+
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}"
|
71
|
+
|
72
|
+
|
73
|
+
asserts 'handles paths for extends' do
|
74
|
+
File.open(tmp_path + "test.json.rabl", "w") do |f|
|
75
|
+
f.puts %q{
|
76
|
+
attributes :age
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
File.open(tmp_path + "user.json.rabl", "w") do |f|
|
81
|
+
f.puts %(
|
82
|
+
object @user
|
83
|
+
attribute :name
|
84
|
+
extends 'test'
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
user = User.new(:name => 'irvine')
|
89
|
+
|
90
|
+
renderer = Rabl::Renderer.new('user', user, :view_path => tmp_path)
|
91
|
+
renderer.render
|
92
|
+
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}"
|
93
|
+
|
94
|
+
asserts 'Rabl.render calls Renderer' do
|
95
|
+
File.open(tmp_path + "test.json.rabl", "w") do |f|
|
96
|
+
f.puts %q{
|
97
|
+
object @user
|
98
|
+
attributes :age, :name
|
99
|
+
}
|
100
|
+
end
|
101
|
+
|
102
|
+
user = User.new(:name => 'irvine')
|
103
|
+
|
104
|
+
Rabl.render(user, 'test', :view_path => tmp_path)
|
105
|
+
end.equals "{\"user\":{\"age\":24,\"name\":\"irvine\"}}"
|
106
|
+
end
|
107
|
+
|
108
|
+
context '.json' do
|
109
|
+
asserts 'it renders json' do
|
110
|
+
File.open(tmp_path + "test.rabl", "w") do |f|
|
111
|
+
f.puts %q{
|
112
|
+
object @user
|
113
|
+
attributes :age, :name
|
114
|
+
}
|
115
|
+
end
|
116
|
+
|
117
|
+
user = User.new(:name => 'ivan')
|
118
|
+
Rabl::Renderer.json(user, 'test', :view_path => tmp_path)
|
119
|
+
end.equals "{\"user\":{\"age\":24,\"name\":\"ivan\"}}"
|
120
|
+
end
|
121
|
+
|
122
|
+
context '.msgpack' do
|
123
|
+
asserts 'it renders msgpack' do
|
124
|
+
File.open(tmp_path + "test.rabl", "w") do |f|
|
125
|
+
f.puts %q{
|
126
|
+
object @user
|
127
|
+
attributes :age, :name
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
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
|
134
|
+
end
|
135
|
+
|
136
|
+
context '.plist' do
|
137
|
+
asserts 'it renders xml' do
|
138
|
+
File.open(tmp_path + "test.rabl", "w") do |f|
|
139
|
+
f.puts %q{
|
140
|
+
object @user
|
141
|
+
attributes :age, :name
|
142
|
+
}
|
143
|
+
end
|
144
|
+
|
145
|
+
user = User.new(:name => 'ivan')
|
146
|
+
Rabl::Renderer.plist(user, 'test', :view_path => tmp_path)
|
147
|
+
end.equals "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>user</key>\n\t<dict>\n\t\t<key>age</key>\n\t\t<integer>24</integer>\n\t\t<key>name</key>\n\t\t<string>ivan</string>\n\t</dict>\n</dict>\n</plist>\n"
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
metadata
CHANGED
@@ -1,137 +1,183 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabl
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.9
|
4
5
|
prerelease:
|
5
|
-
version: 0.6.8
|
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
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: activesupport
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
23
21
|
version: 2.3.14
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: multi_json
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.3.14
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: multi_json
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
30
33
|
none: false
|
31
|
-
requirements:
|
34
|
+
requirements:
|
32
35
|
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.0'
|
35
38
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: riot
|
39
39
|
prerelease: false
|
40
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
|
-
requirements:
|
42
|
+
requirements:
|
43
43
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: riot
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
45
53
|
version: 0.12.3
|
46
54
|
type: :development
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: rr
|
50
55
|
prerelease: false
|
51
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
57
|
none: false
|
53
|
-
requirements:
|
58
|
+
requirements:
|
54
59
|
- - ~>
|
55
|
-
- !ruby/object:Gem::Version
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
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
|
56
69
|
version: 1.0.2
|
57
70
|
type: :development
|
58
|
-
version_requirements: *id004
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: rake
|
61
71
|
prerelease: false
|
62
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
73
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version:
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
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'
|
68
86
|
type: :development
|
69
|
-
version_requirements: *id005
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: tilt
|
72
87
|
prerelease: false
|
73
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
89
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version:
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
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'
|
79
102
|
type: :development
|
80
|
-
version_requirements: *id006
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: yajl-ruby
|
83
103
|
prerelease: false
|
84
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
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
|
85
113
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version:
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
90
118
|
type: :development
|
91
|
-
version_requirements: *id007
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: msgpack
|
94
119
|
prerelease: false
|
95
|
-
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
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
|
96
129
|
none: false
|
97
|
-
requirements:
|
130
|
+
requirements:
|
98
131
|
- - ~>
|
99
|
-
- !ruby/object:Gem::Version
|
132
|
+
- !ruby/object:Gem::Version
|
100
133
|
version: 0.4.5
|
101
134
|
type: :development
|
102
|
-
version_requirements: *id008
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: bson
|
105
135
|
prerelease: false
|
106
|
-
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.4.5
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: bson
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
107
145
|
none: false
|
108
|
-
requirements:
|
146
|
+
requirements:
|
109
147
|
- - ~>
|
110
|
-
- !ruby/object:Gem::Version
|
148
|
+
- !ruby/object:Gem::Version
|
111
149
|
version: 1.5.2
|
112
150
|
type: :development
|
113
|
-
version_requirements: *id009
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
|
-
name: plist
|
116
151
|
prerelease: false
|
117
|
-
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 1.5.2
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: plist
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
118
161
|
none: false
|
119
|
-
requirements:
|
120
|
-
- -
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version:
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
123
166
|
type: :development
|
124
|
-
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
125
174
|
description: General ruby templating with json, bson, xml and msgpack support
|
126
|
-
email:
|
175
|
+
email:
|
127
176
|
- nesquena@gmail.com
|
128
177
|
executables: []
|
129
|
-
|
130
178
|
extensions: []
|
131
|
-
|
132
179
|
extra_rdoc_files: []
|
133
|
-
|
134
|
-
files:
|
180
|
+
files:
|
135
181
|
- .gitignore
|
136
182
|
- .travis.yml
|
137
183
|
- CHANGELOG.md
|
@@ -346,6 +392,7 @@ files:
|
|
346
392
|
- lib/rabl/helpers.rb
|
347
393
|
- lib/rabl/partials.rb
|
348
394
|
- lib/rabl/railtie.rb
|
395
|
+
- lib/rabl/renderer.rb
|
349
396
|
- lib/rabl/template.rb
|
350
397
|
- lib/rabl/version.rb
|
351
398
|
- rabl.gemspec
|
@@ -365,37 +412,35 @@ files:
|
|
365
412
|
- test/msgpack_engine_test.rb
|
366
413
|
- test/partials_test.rb
|
367
414
|
- test/plist_engine_test.rb
|
415
|
+
- test/renderer_test.rb
|
368
416
|
- test/silence.rb
|
369
417
|
- test/template_test.rb
|
370
418
|
- test/teststrap.rb
|
371
419
|
homepage: https://github.com/nesquena/rabl
|
372
420
|
licenses: []
|
373
|
-
|
374
421
|
post_install_message:
|
375
422
|
rdoc_options: []
|
376
|
-
|
377
|
-
require_paths:
|
423
|
+
require_paths:
|
378
424
|
- lib
|
379
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
425
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
380
426
|
none: false
|
381
|
-
requirements:
|
382
|
-
- -
|
383
|
-
- !ruby/object:Gem::Version
|
384
|
-
version:
|
385
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
427
|
+
requirements:
|
428
|
+
- - ! '>='
|
429
|
+
- !ruby/object:Gem::Version
|
430
|
+
version: '0'
|
431
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
386
432
|
none: false
|
387
|
-
requirements:
|
388
|
-
- -
|
389
|
-
- !ruby/object:Gem::Version
|
390
|
-
version:
|
433
|
+
requirements:
|
434
|
+
- - ! '>='
|
435
|
+
- !ruby/object:Gem::Version
|
436
|
+
version: '0'
|
391
437
|
requirements: []
|
392
|
-
|
393
438
|
rubyforge_project: rabl
|
394
|
-
rubygems_version: 1.8.
|
439
|
+
rubygems_version: 1.8.21
|
395
440
|
signing_key:
|
396
441
|
specification_version: 3
|
397
442
|
summary: General ruby templating with json, bson, xml and msgpack support
|
398
|
-
test_files:
|
443
|
+
test_files:
|
399
444
|
- test/bson_engine_test.rb
|
400
445
|
- test/builder_test.rb
|
401
446
|
- test/configuration_test.rb
|
@@ -411,6 +456,7 @@ test_files:
|
|
411
456
|
- test/msgpack_engine_test.rb
|
412
457
|
- test/partials_test.rb
|
413
458
|
- test/plist_engine_test.rb
|
459
|
+
- test/renderer_test.rb
|
414
460
|
- test/silence.rb
|
415
461
|
- test/template_test.rb
|
416
462
|
- test/teststrap.rb
|