rabl 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/Gemfile +2 -2
- data/README.md +10 -7
- data/lib/rabl/engine.rb +3 -2
- data/lib/rabl/version.rb +1 -1
- data/test/xml_test.rb +13 -3
- metadata +9 -3
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,10 +3,11 @@
|
|
3
3
|
[![Continuous Integration status](https://secure.travis-ci.org/nesquena/rabl.png)](http://travis-ci.org/nesquena/rabl)
|
4
4
|
[![Dependency Status](https://gemnasium.com/nesquena/rabl.png)](https://gemnasium.com/nesquena/rabl)
|
5
5
|
|
6
|
-
RABL (Ruby API Builder Language) is a Rails and [Padrino](http://padrinorb.com) ruby templating system for generating JSON, XML, MessagePack, PList and BSON.
|
7
|
-
|
6
|
+
RABL (Ruby API Builder Language) is a Rails and [Padrino](http://padrinorb.com) ruby templating system for generating JSON, XML, MessagePack, PList and BSON.
|
7
|
+
When using the ActiveRecord 'to_json' method, I find myself wanting a more expressive and powerful solution for generating APIs.
|
8
|
+
This is especially true when the JSON representation is complex or doesn't match the exact schema defined within the database.
|
8
9
|
|
9
|
-
|
10
|
+
In particular, I want to easily:
|
10
11
|
|
11
12
|
* Create arbitrary nodes named based on combining data in an object
|
12
13
|
* Pass arguments to methods and store the result as a child node
|
@@ -16,14 +17,15 @@ I wanted a simple and flexible system for generating my APIs. In particular, I w
|
|
16
17
|
* Include nodes only if a certain condition has been met
|
17
18
|
|
18
19
|
Anyone who has tried the 'to_json' method used in ActiveRecord for generating a JSON response has felt the pain of this restrictive approach.
|
19
|
-
RABL is a general templating system created to solve these problems in an entirely new way.
|
20
|
+
RABL is a general templating system created to solve these problems by approaching API response generation in an entirely new way.
|
20
21
|
|
22
|
+
RABL at the core is all about adhering to MVC principles by deferring API data representations to the **view** layer of your application.
|
21
23
|
For a breakdown of common misconceptions about RABL, please check out our guide to
|
22
|
-
[understanding RABL](https://github.com/nesquena/rabl/wiki/Understanding-RABL) which can help clear up any confusion about this project.
|
24
|
+
[understanding RABL](https://github.com/nesquena/rabl/wiki/Understanding-RABL) which can help clear up any confusion about this project.
|
23
25
|
|
24
26
|
## Breaking Changes ##
|
25
27
|
|
26
|
-
* v0.8.0 (released Feb 14,
|
28
|
+
* v0.8.0 (released Feb 14, 2013) removes multi_json dependency and
|
27
29
|
relies on Oj (or JSON) as the json parser. Simplifies code, removes a dependency
|
28
30
|
but you might want to remove any references to MultiJson.
|
29
31
|
|
@@ -541,7 +543,8 @@ the [RABL Wiki](https://github.com/nesquena/rabl/wiki) for other usages.
|
|
541
543
|
|
542
544
|
Tutorials can always be helpful when first getting started:
|
543
545
|
|
544
|
-
* [Railscasts #322](http://railscasts.com/episodes/322-rabl)
|
546
|
+
* [Railscasts #322](http://railscasts.com/episodes/322-rabl) - Ryan Bates explains RABL
|
547
|
+
* [BackboneRails](http://www.backbonerails.com/) - Great screencasts by Brian Mann
|
545
548
|
* [Creating an API with RABL and Padrino](http://blog.crowdint.com/2012/10/22/rabl-with-padrino.html)
|
546
549
|
* http://blog.joshsoftware.com/2011/12/23/designing-rails-api-using-rabl-and-devise/
|
547
550
|
* http://engineering.gomiso.com/2011/06/27/building-a-platform-api-on-rails/
|
data/lib/rabl/engine.rb
CHANGED
@@ -89,8 +89,9 @@ module Rabl
|
|
89
89
|
include_root = Rabl.configuration.include_xml_root
|
90
90
|
include_child_root = include_root && Rabl.configuration.include_child_root
|
91
91
|
options = options.reverse_merge(:root => include_root, :child_root => include_child_root)
|
92
|
-
xml_options = Rabl.configuration.default_xml_options.merge(:root => @_data_name)
|
93
|
-
to_hash(options)
|
92
|
+
xml_options = Rabl.configuration.default_xml_options.merge(:root => collection_root_name || @_data_name)
|
93
|
+
result = to_hash(options)
|
94
|
+
result.to_xml(xml_options)
|
94
95
|
end
|
95
96
|
|
96
97
|
# Returns a bson representation of the data object
|
data/lib/rabl/version.rb
CHANGED
data/test/xml_test.rb
CHANGED
@@ -50,12 +50,12 @@ context "Rabl::Engine" do
|
|
50
50
|
|
51
51
|
asserts "that it sets root node for objects" do
|
52
52
|
template = rabl %{
|
53
|
-
collection @users => :
|
53
|
+
collection @users => :smors
|
54
54
|
}
|
55
55
|
scope = Object.new
|
56
56
|
scope.instance_variable_set :@users, [User.new, User.new]
|
57
57
|
template.render(scope)
|
58
|
-
end.equals "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<
|
58
|
+
end.equals "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<smors type=\"array\">\n <smor>\n </smor>\n <smor>\n </smor>\n</smors>\n"
|
59
59
|
end
|
60
60
|
|
61
61
|
context "#attribute" do
|
@@ -187,12 +187,22 @@ context "Rabl::Engine" do
|
|
187
187
|
|
188
188
|
asserts "that it sets root node for objects" do
|
189
189
|
template = rabl %{
|
190
|
-
collection @users => :
|
190
|
+
collection @users => :people
|
191
191
|
}
|
192
192
|
scope = Object.new
|
193
193
|
scope.instance_variable_set :@users, [User.new, User.new]
|
194
194
|
template.render(scope)
|
195
195
|
end.equals "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<people type=\"array\">\n <person>\n <person>\n </person>\n </person>\n <person>\n <person>\n </person>\n </person>\n</people>\n"
|
196
|
+
|
197
|
+
asserts "that it sets root node for objects with :root parameter" do
|
198
|
+
template = rabl %{
|
199
|
+
collection @users, :root => :people, :object_root => :person
|
200
|
+
}
|
201
|
+
scope = Object.new
|
202
|
+
scope.instance_variable_set :@users, [User.new, User.new]
|
203
|
+
template.render(scope)
|
204
|
+
end.equals "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<people type=\"array\">\n <person>\n <person>\n </person>\n </person>\n <person>\n <person>\n </person>\n </person>\n</people>\n"
|
205
|
+
|
196
206
|
end
|
197
207
|
|
198
208
|
context "#attribute" do
|
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.8.
|
4
|
+
version: 0.8.1
|
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: 2013-
|
12
|
+
date: 2013-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -422,15 +422,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
422
422
|
- - ! '>='
|
423
423
|
- !ruby/object:Gem::Version
|
424
424
|
version: '0'
|
425
|
+
segments:
|
426
|
+
- 0
|
427
|
+
hash: 2506448699878914083
|
425
428
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
426
429
|
none: false
|
427
430
|
requirements:
|
428
431
|
- - ! '>='
|
429
432
|
- !ruby/object:Gem::Version
|
430
433
|
version: '0'
|
434
|
+
segments:
|
435
|
+
- 0
|
436
|
+
hash: 2506448699878914083
|
431
437
|
requirements: []
|
432
438
|
rubyforge_project: rabl
|
433
|
-
rubygems_version: 1.8.
|
439
|
+
rubygems_version: 1.8.25
|
434
440
|
signing_key:
|
435
441
|
specification_version: 3
|
436
442
|
summary: General ruby templating with json, bson, xml and msgpack support
|