rabl 0.6.14 → 0.7.0
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 +8 -1
- data/README.md +18 -0
- data/fixtures/ashared/views_rails_3/posts/show.rabl_test_v1.rabl +7 -0
- data/fixtures/ashared/views_rails_3/users/phone_number.xml.rabl +6 -0
- data/fixtures/ashared/views_rails_3/users/show.rabl_test_v1.rabl +3 -0
- data/fixtures/rails3_2/app/controllers/posts_controller.rb +1 -1
- data/fixtures/rails3_2/config/initializers/mime_types.rb +2 -0
- data/fixtures/rails3_2/test/functional/posts_controller_test.rb +9 -0
- data/lib/rabl.rb +1 -0
- data/lib/rabl/cache_engine.rb +25 -0
- data/lib/rabl/configuration.rb +2 -0
- data/lib/rabl/helpers.rb +1 -1
- data/lib/rabl/partials.rb +4 -1
- data/lib/rabl/version.rb +1 -1
- data/test/configuration_test.rb +1 -0
- data/test/integration/rails3_2/posts_controller_test.rb +9 -0
- data/test/partials_test.rb +4 -1
- metadata +6 -2
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
-
## 0.
|
3
|
+
## 0.7.1 (Unreleased)
|
4
|
+
|
5
|
+
## 0.7.0
|
6
|
+
|
7
|
+
* Use source_format when looking up partials (Thanks @databyte)
|
8
|
+
* Add README note about render_views (Thanks @databyte)
|
9
|
+
* Add support for Rails 3.2+ sending custom mime types (Thanks @databyte)
|
10
|
+
* Add option to define his own cache_engine (Thanks @shingara)
|
4
11
|
|
5
12
|
## 0.6.14
|
6
13
|
|
data/README.md
CHANGED
@@ -15,6 +15,12 @@ I wanted a simple and flexible system for generating my APIs. In particular, I w
|
|
15
15
|
Anyone who has tried the 'to_json' method used in ActiveRecord for generating a JSON response has felt the pain of this restrictive approach.
|
16
16
|
RABL is a general templating system created to solve these problems in an entirely new way.
|
17
17
|
|
18
|
+
## Breaking Changes ##
|
19
|
+
|
20
|
+
* v0.6.14 (released June 28, 2012) requires the use of render_views
|
21
|
+
with RSpec to test templates. Otherwise, the controller will simply
|
22
|
+
pass through the render command as it does with ERB templates.
|
23
|
+
|
18
24
|
## Installation ##
|
19
25
|
|
20
26
|
Install RABL as a gem:
|
@@ -101,6 +107,7 @@ Rabl.configure do |config|
|
|
101
107
|
# Commented as these are defaults
|
102
108
|
# config.cache_all_output = false
|
103
109
|
# config.cache_sources = Rails.env != 'development' # Defaults to false
|
110
|
+
# config.cache_engine = Rabl::CacheEngine.new # Defaults to Rails cache
|
104
111
|
# config.escape_all_output = false
|
105
112
|
# config.json_engine = nil # Any multi\_json engines
|
106
113
|
# config.msgpack_engine = nil # Defaults to ::MessagePack
|
@@ -125,6 +132,8 @@ output if the incoming request has a 'callback' parameter.
|
|
125
132
|
If `include_child_root` is set to false then child objects in the response will not include
|
126
133
|
a root node by default. This allows you to further fine-tune your desired response structure.
|
127
134
|
|
135
|
+
If `cache_engine` is set, you should assign it to a class with a `fetch` method. See the [default engine](https://github.com/nesquena/rabl/blob/master/lib/rabl/cache_engine.rb) for an example.
|
136
|
+
|
128
137
|
If `cache_sources` is set to `true`, template lookups will be cached for improved performance.
|
129
138
|
The cache can be reset manually by running `Rabl.reset_source_cache!` within your application.
|
130
139
|
|
@@ -234,6 +243,12 @@ attributes :bar => :baz, :dog => :animal
|
|
234
243
|
# => # { baz : <bar value>, animal : <dog value> }
|
235
244
|
```
|
236
245
|
|
246
|
+
This currently does not work:
|
247
|
+
|
248
|
+
```ruby
|
249
|
+
attributes :foo, :bar => :baz # throws exception
|
250
|
+
```
|
251
|
+
|
237
252
|
### Child Nodes ###
|
238
253
|
|
239
254
|
Often a response requires including nested information from data associated with the parent model:
|
@@ -353,6 +368,8 @@ end
|
|
353
368
|
|
354
369
|
Using partials and inheritance can significantly reduce code duplication in your templates.
|
355
370
|
|
371
|
+
You can see more examples on the [Reusing Templates wiki page](https://github.com/nesquena/rabl/wiki/Reusing-templates).
|
372
|
+
|
356
373
|
### Template Scope ###
|
357
374
|
|
358
375
|
In RABL, you have access to everything you need to build an API response. Each RABL template has full access to the controllers
|
@@ -515,6 +532,7 @@ Thanks to [Miso](http://gomiso.com) for allowing me to create this for our appli
|
|
515
532
|
* [Alli Witheford](https://github.com/alzeih) - Added Plist format support
|
516
533
|
* [Ryan Bigg](https://github.com/radar) - Improved template resolution code
|
517
534
|
* [Ivan Vanderbyl](https://github.com/ivanvanderbyl) - Added general purpose renderer
|
535
|
+
* [Cyril Mougel](https://github.com/shingara) - Added cache_engine pluggable support
|
518
536
|
|
519
537
|
and many more contributors listed in the [CHANGELOG](https://github.com/nesquena/rabl/blob/master/CHANGELOG.md).
|
520
538
|
|
@@ -154,6 +154,15 @@ context "PostsController" do
|
|
154
154
|
asserts(:body).includes { "<html>" }
|
155
155
|
end # show action, html
|
156
156
|
|
157
|
+
context "mime_type" do
|
158
|
+
setup do
|
159
|
+
get "/posts/#{@post1.id}", format: :rabl_test_v1
|
160
|
+
end
|
161
|
+
|
162
|
+
asserts("contains post title") { json_output['post']['title_v1'] }.equals { @post1.title }
|
163
|
+
asserts("contains username") { json_output['post']['user']['username_v1'] }.equals { @post1.user.username }
|
164
|
+
end
|
165
|
+
|
157
166
|
context "caching" do
|
158
167
|
helper(:cache_hit) do |key|
|
159
168
|
Rails.cache.read(ActiveSupport::Cache.expand_cache_key(key, :rabl))
|
data/lib/rabl.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Defines the default cache engine for RABL when caching is invoked for a template.
|
2
|
+
# You can define your own caching engines by creating an object that responds to fetch and
|
3
|
+
# setting the configuration option:
|
4
|
+
#
|
5
|
+
# config.cache_engine = AdvancedCacheEngine.new
|
6
|
+
#
|
7
|
+
|
8
|
+
module Rabl
|
9
|
+
class CacheEngine
|
10
|
+
|
11
|
+
# Fetch given a key and options and a fallback block attempts to find the key in the cache
|
12
|
+
# and stores the block result in there if no key is found.
|
13
|
+
#
|
14
|
+
# cache = Rabl::CacheEngine.new; cache.fetch("some_key") { "fallback data" }
|
15
|
+
#
|
16
|
+
def fetch(key, cache_options, &block)
|
17
|
+
if defined?(Rails)
|
18
|
+
Rails.cache.fetch(key, cache_options, &block)
|
19
|
+
else
|
20
|
+
yield
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/lib/rabl/configuration.rb
CHANGED
@@ -39,6 +39,7 @@ module Rabl
|
|
39
39
|
attr_accessor :cache_all_output
|
40
40
|
attr_accessor :escape_all_output
|
41
41
|
attr_accessor :view_paths
|
42
|
+
attr_accessor :cache_engine
|
42
43
|
|
43
44
|
DEFAULT_XML_OPTIONS = { :dasherize => true, :skip_types => false }
|
44
45
|
|
@@ -61,6 +62,7 @@ module Rabl
|
|
61
62
|
@cache_all_output = false
|
62
63
|
@escape_all_output = false
|
63
64
|
@view_paths = []
|
65
|
+
@cache_engine = Rabl::CacheEngine.new
|
64
66
|
end
|
65
67
|
|
66
68
|
# @param [Symbol, String, #encode] engine_name The name of a JSON engine,
|
data/lib/rabl/helpers.rb
CHANGED
@@ -87,7 +87,7 @@ module Rabl
|
|
87
87
|
# fetch_from_cache('some_key') { ...rabl template result... }
|
88
88
|
def fetch_result_from_cache(cache_key, cache_options=nil, &block)
|
89
89
|
expanded_cache_key = ActiveSupport::Cache.expand_cache_key(cache_key, :rabl)
|
90
|
-
|
90
|
+
Rabl.configuration.cache_engine.fetch(expanded_cache_key, cache_options, &block)
|
91
91
|
end
|
92
92
|
|
93
93
|
# Returns true if the cache has been enabled for the application
|
data/lib/rabl/partials.rb
CHANGED
@@ -71,7 +71,10 @@ module Rabl
|
|
71
71
|
if ActionPack::VERSION::MAJOR == 3 && ActionPack::VERSION::MINOR < 2
|
72
72
|
context_scope.lookup_context.find(file, [], partial)
|
73
73
|
else # Rails 3.2 and higher
|
74
|
-
|
74
|
+
# pull format directly from rails unless it is html
|
75
|
+
rendered_format = context_scope.lookup_context.rendered_format
|
76
|
+
source_format = rendered_format unless rendered_format == :html
|
77
|
+
context_scope.lookup_context.find(file, [], partial, [], {:formats => [source_format]})
|
75
78
|
end }
|
76
79
|
template = lookup_proc.call(false) rescue lookup_proc.call(true)
|
77
80
|
template.identifier if template
|
data/lib/rabl/version.rb
CHANGED
data/test/configuration_test.rb
CHANGED
@@ -154,6 +154,15 @@ context "PostsController" do
|
|
154
154
|
asserts(:body).includes { "<html>" }
|
155
155
|
end # show action, html
|
156
156
|
|
157
|
+
context "mime_type" do
|
158
|
+
setup do
|
159
|
+
get "/posts/#{@post1.id}", format: :rabl_test_v1
|
160
|
+
end
|
161
|
+
|
162
|
+
asserts("contains post title") { json_output['post']['title_v1'] }.equals { @post1.title }
|
163
|
+
asserts("contains username") { json_output['post']['user']['username_v1'] }.equals { @post1.user.username }
|
164
|
+
end
|
165
|
+
|
157
166
|
context "caching" do
|
158
167
|
helper(:cache_hit) do |key|
|
159
168
|
Rails.cache.read(ActiveSupport::Cache.expand_cache_key(key, :rabl))
|
data/test/partials_test.rb
CHANGED
@@ -84,6 +84,9 @@ context "Rabl::Partials" do
|
|
84
84
|
asserts('detects file.json.rabl first') { topic }.equals do
|
85
85
|
["content2\n", (tmp_path + 'test.json.rabl').to_s]
|
86
86
|
end
|
87
|
-
teardown
|
87
|
+
teardown do
|
88
|
+
Object.send(:remove_const, :Sinatra)
|
89
|
+
Rabl.configuration.view_paths = []
|
90
|
+
end
|
88
91
|
end
|
89
92
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -213,9 +213,12 @@ files:
|
|
213
213
|
- fixtures/ashared/views_rails_3/posts/index.rabl
|
214
214
|
- fixtures/ashared/views_rails_3/posts/show.html.erb
|
215
215
|
- fixtures/ashared/views_rails_3/posts/show.rabl
|
216
|
+
- fixtures/ashared/views_rails_3/posts/show.rabl_test_v1.rabl
|
216
217
|
- fixtures/ashared/views_rails_3/users/index.json.rabl
|
217
218
|
- fixtures/ashared/views_rails_3/users/phone_number.json.rabl
|
219
|
+
- fixtures/ashared/views_rails_3/users/phone_number.xml.rabl
|
218
220
|
- fixtures/ashared/views_rails_3/users/show.json.rabl
|
221
|
+
- fixtures/ashared/views_rails_3/users/show.rabl_test_v1.rabl
|
219
222
|
- fixtures/padrino_test/.components
|
220
223
|
- fixtures/padrino_test/.gitignore
|
221
224
|
- fixtures/padrino_test/Gemfile
|
@@ -391,6 +394,7 @@ files:
|
|
391
394
|
- fixtures/sinatra_test/test/test_helper.rb
|
392
395
|
- lib/rabl.rb
|
393
396
|
- lib/rabl/builder.rb
|
397
|
+
- lib/rabl/cache_engine.rb
|
394
398
|
- lib/rabl/configuration.rb
|
395
399
|
- lib/rabl/engine.rb
|
396
400
|
- lib/rabl/helpers.rb
|