rabl 0.2.8 → 0.3.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/README.md +12 -1
- data/TODO +1 -3
- data/lib/rabl/configuration.rb +2 -0
- data/lib/rabl/engine.rb +7 -1
- data/lib/rabl/template.rb +1 -1
- data/lib/rabl/version.rb +1 -1
- data/rabl.gemspec +3 -0
- data/test/configuration_test.rb +9 -0
- data/test/engine_test.rb +38 -10
- metadata +35 -15
data/README.md
CHANGED
@@ -30,7 +30,7 @@ gem 'rabl'
|
|
30
30
|
|
31
31
|
and run `bundle install` to install the dependency.
|
32
32
|
|
33
|
-
If you are using **Rails 2.X, Rails 3 or Padrino**, RABL works without configuration.
|
33
|
+
If you are using **Rails 2.X, Rails 3, Rails 3.X or Padrino**, RABL works without configuration.
|
34
34
|
|
35
35
|
With Sinatra, or any other tilt-based framework, simply register:
|
36
36
|
|
@@ -86,6 +86,7 @@ RABL is intended to require little to no configuration to get working. This is t
|
|
86
86
|
# config/initializers/rabl_init.rb
|
87
87
|
Rabl.configure do |config|
|
88
88
|
# Commented as these are the defaults
|
89
|
+
# config.json_engine = nil # Any multi\_json engines
|
89
90
|
# config.include_json_root = true
|
90
91
|
# config.include_xml_root = false
|
91
92
|
# config.enable_json_callbacks = false
|
@@ -95,6 +96,15 @@ end
|
|
95
96
|
|
96
97
|
Each option specifies behavior related to RABL's output. If `include_json_root` is disabled that removes the root node for each child in the output, and `enable_json_callbacks` enables support for 'jsonp' style callback output if the incoming request has a 'callback' parameter.
|
97
98
|
|
99
|
+
Note that the `json_engine` option uses the [multi_json](http://intridea.com/2010/6/14/multi-json-the-swappable-json-handler) intelligent engine defaults so in most cases you **don't need to configure this** directly. If you wish to use yajl as the primary JSON encoding engine simply add that to your Gemfile:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
# Gemfile
|
103
|
+
gem 'yajl-ruby', :require => "yajl"
|
104
|
+
```
|
105
|
+
|
106
|
+
and RABL will automatically start using that engine for encoding your JSON responses!
|
107
|
+
|
98
108
|
## Usage ##
|
99
109
|
|
100
110
|
### Object Assignment ###
|
@@ -327,6 +337,7 @@ Thanks to [Miso](http://gomiso.com) for allowing me to create this for our appli
|
|
327
337
|
* [Rick Thomas](https://github.com/rickthomasjr) - Added options passing for extends and Sinatra testing
|
328
338
|
* [Marjun](https://github.com/mpagalan) - Added xml option configurations
|
329
339
|
* [Chris Kimpton](https://github.com/kimptoc) - Helping with documentation and wiki
|
340
|
+
* [Sasha Koss](https://github.com/kossnocorp) - Added multi_json support
|
330
341
|
|
331
342
|
More to come hopefully! Please fork and contribute, any help is appreciated!
|
332
343
|
|
data/TODO
CHANGED
data/lib/rabl/configuration.rb
CHANGED
@@ -4,6 +4,7 @@ module Rabl
|
|
4
4
|
attr_accessor :include_json_root
|
5
5
|
attr_accessor :include_xml_root
|
6
6
|
attr_accessor :enable_json_callbacks
|
7
|
+
attr_accessor :json_engine
|
7
8
|
attr_writer :xml_options
|
8
9
|
|
9
10
|
DEFAULT_XML_OPTIONS = { :dasherize => true, :skip_types => false }
|
@@ -12,6 +13,7 @@ module Rabl
|
|
12
13
|
@include_json_root = true
|
13
14
|
@include_xml_root = false
|
14
15
|
@enable_json_callbacks = false
|
16
|
+
@json_engine = nil
|
15
17
|
@xml_options = {}
|
16
18
|
end
|
17
19
|
|
data/lib/rabl/engine.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
|
1
3
|
module Rabl
|
2
4
|
class Engine
|
3
5
|
include Rabl::Helpers
|
@@ -7,6 +9,10 @@ module Rabl
|
|
7
9
|
def initialize(source, options={})
|
8
10
|
@_source = source
|
9
11
|
@_options = options
|
12
|
+
|
13
|
+
if Rabl.configuration.json_engine
|
14
|
+
MultiJson.engine = Rabl.configuration.json_engine
|
15
|
+
end
|
10
16
|
end
|
11
17
|
|
12
18
|
# Renders the representation based on source, object, scope and locals
|
@@ -41,7 +47,7 @@ module Rabl
|
|
41
47
|
include_root = Rabl.configuration.include_json_root
|
42
48
|
options = options.reverse_merge(:root => include_root, :child_root => include_root)
|
43
49
|
result = @_collection_name ? { @_collection_name => to_hash(options) } : to_hash(options)
|
44
|
-
format_json(result
|
50
|
+
format_json MultiJson.encode(result)
|
45
51
|
end
|
46
52
|
|
47
53
|
# Returns an xml representation of the data object
|
data/lib/rabl/template.rb
CHANGED
data/lib/rabl/version.rb
CHANGED
data/rabl.gemspec
CHANGED
@@ -19,9 +19,12 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
+
s.add_dependency 'multi_json', '~> 1.0.3'
|
23
|
+
|
22
24
|
s.add_development_dependency 'riot', '~>0.12.3'
|
23
25
|
s.add_development_dependency 'rr', '~>1.0.2'
|
24
26
|
s.add_development_dependency 'mongoid'
|
25
27
|
s.add_development_dependency 'tilt'
|
26
28
|
s.add_development_dependency 'bson_ext'
|
29
|
+
s.add_development_dependency 'yajl-ruby'
|
27
30
|
end
|
data/test/configuration_test.rb
CHANGED
@@ -9,6 +9,7 @@ context "Rabl::Configuration" do
|
|
9
9
|
asserts(:include_json_root).equals true
|
10
10
|
asserts(:include_xml_root).equals false
|
11
11
|
asserts(:enable_json_callbacks).equals false
|
12
|
+
asserts(:json_engine).equals nil
|
12
13
|
end
|
13
14
|
|
14
15
|
context "with configuration" do
|
@@ -17,6 +18,7 @@ context "Rabl::Configuration" do
|
|
17
18
|
config.include_json_root = false
|
18
19
|
config.include_xml_root = true
|
19
20
|
config.enable_json_callbacks = true
|
21
|
+
config.json_engine = :yajl
|
20
22
|
end
|
21
23
|
Rabl.configuration
|
22
24
|
end
|
@@ -24,6 +26,13 @@ context "Rabl::Configuration" do
|
|
24
26
|
asserts(:include_json_root).equals false
|
25
27
|
asserts(:include_xml_root).equals true
|
26
28
|
asserts(:enable_json_callbacks).equals true
|
29
|
+
asserts(:json_engine).equals :yajl
|
30
|
+
|
31
|
+
teardown do
|
32
|
+
Rabl.configure do |config|
|
33
|
+
config.json_engine = MultiJson.default_engine
|
34
|
+
end
|
35
|
+
end
|
27
36
|
end
|
28
37
|
|
29
38
|
end
|
data/test/engine_test.rb
CHANGED
@@ -131,8 +131,8 @@ context "Rabl::Engine" do
|
|
131
131
|
}
|
132
132
|
scope = Object.new
|
133
133
|
scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
|
134
|
-
template.render(scope)
|
135
|
-
end.equals "{\"user\":{\"name\":\"leo\",\"user\":{\"city\":\"LA\"}}}"
|
134
|
+
template.render(scope).split('').sort
|
135
|
+
end.equals "{\"user\":{\"name\":\"leo\",\"user\":{\"city\":\"LA\"}}}".split('').sort
|
136
136
|
|
137
137
|
asserts "that it can create a child node with different key" do
|
138
138
|
template = rabl %{
|
@@ -142,9 +142,9 @@ context "Rabl::Engine" do
|
|
142
142
|
}
|
143
143
|
scope = Object.new
|
144
144
|
scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
|
145
|
-
template.render(scope)
|
145
|
+
template.render(scope).split('').sort
|
146
146
|
|
147
|
-
end.equals "{\"user\":{\"name\":\"leo\",\"person\":{\"city\":\"LA\"}}}"
|
147
|
+
end.equals "{\"user\":{\"name\":\"leo\",\"person\":{\"city\":\"LA\"}}}".split('').sort
|
148
148
|
end
|
149
149
|
|
150
150
|
context "#glue" do
|
@@ -158,11 +158,39 @@ context "Rabl::Engine" do
|
|
158
158
|
}
|
159
159
|
scope = Object.new
|
160
160
|
scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :age => 12)
|
161
|
-
template.render(scope)
|
162
|
-
end.equals "{\"user\":{\"name\":\"leo\",\"city\":\"LA\",\"age\":12}}"
|
161
|
+
template.render(scope).split('').sort
|
162
|
+
end.equals "{\"user\":{\"name\":\"leo\",\"city\":\"LA\",\"age\":12}}".split('').sort
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
|
+
context "with json_engine" do
|
167
|
+
setup do
|
168
|
+
class CustomEncodeEngine
|
169
|
+
def self.encode string, options = {}
|
170
|
+
42
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
Rabl.configure do |config|
|
175
|
+
config.json_engine = CustomEncodeEngine
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
asserts 'that it returns process by custom to_json' do
|
180
|
+
template = rabl %q{
|
181
|
+
object @user
|
182
|
+
}
|
183
|
+
scope = Object.new
|
184
|
+
scope.instance_variable_set :@user, User.new
|
185
|
+
template.render(scope)
|
186
|
+
end.equals 42
|
187
|
+
|
188
|
+
teardown do
|
189
|
+
Rabl.configure do |config|
|
190
|
+
config.json_engine = MultiJson.default_engine
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
166
194
|
|
167
195
|
context "without json root" do
|
168
196
|
setup do
|
@@ -289,9 +317,9 @@ context "Rabl::Engine" do
|
|
289
317
|
}
|
290
318
|
scope = Object.new
|
291
319
|
scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA')
|
292
|
-
template.render(scope)
|
320
|
+
template.render(scope).split('').sort
|
293
321
|
|
294
|
-
end.equals "{\"name\":\"leo\",\"person\":{\"city\":\"LA\"}}"
|
322
|
+
end.equals "{\"name\":\"leo\",\"person\":{\"city\":\"LA\"}}".split('').sort
|
295
323
|
end
|
296
324
|
|
297
325
|
context "#glue" do
|
@@ -305,8 +333,8 @@ context "Rabl::Engine" do
|
|
305
333
|
}
|
306
334
|
scope = Object.new
|
307
335
|
scope.instance_variable_set :@user, User.new(:name => 'leo', :city => 'LA', :age => 12)
|
308
|
-
template.render(scope)
|
309
|
-
end.equals "{\"name\":\"leo\",\"city\":\"LA\",\"age\":12}"
|
336
|
+
template.render(scope).split('').sort
|
337
|
+
end.equals "{\"name\":\"leo\",\"city\":\"LA\",\"age\":12}".split('').sort
|
310
338
|
end
|
311
339
|
end
|
312
340
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rabl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Nathan Esquenazi
|
@@ -10,44 +10,43 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-07-01 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
16
|
+
name: multi_json
|
18
17
|
prerelease: false
|
19
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
20
19
|
none: false
|
21
20
|
requirements:
|
22
21
|
- - ~>
|
23
22
|
- !ruby/object:Gem::Version
|
24
|
-
version: 0.
|
25
|
-
type: :
|
23
|
+
version: 1.0.3
|
24
|
+
type: :runtime
|
26
25
|
version_requirements: *id001
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
27
|
+
name: riot
|
29
28
|
prerelease: false
|
30
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
31
30
|
none: false
|
32
31
|
requirements:
|
33
32
|
- - ~>
|
34
33
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
34
|
+
version: 0.12.3
|
36
35
|
type: :development
|
37
36
|
version_requirements: *id002
|
38
37
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
38
|
+
name: rr
|
40
39
|
prerelease: false
|
41
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
42
41
|
none: false
|
43
42
|
requirements:
|
44
|
-
- -
|
43
|
+
- - ~>
|
45
44
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
45
|
+
version: 1.0.2
|
47
46
|
type: :development
|
48
47
|
version_requirements: *id003
|
49
48
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
49
|
+
name: mongoid
|
51
50
|
prerelease: false
|
52
51
|
requirement: &id004 !ruby/object:Gem::Requirement
|
53
52
|
none: false
|
@@ -58,7 +57,7 @@ dependencies:
|
|
58
57
|
type: :development
|
59
58
|
version_requirements: *id004
|
60
59
|
- !ruby/object:Gem::Dependency
|
61
|
-
name:
|
60
|
+
name: tilt
|
62
61
|
prerelease: false
|
63
62
|
requirement: &id005 !ruby/object:Gem::Requirement
|
64
63
|
none: false
|
@@ -68,6 +67,28 @@ dependencies:
|
|
68
67
|
version: "0"
|
69
68
|
type: :development
|
70
69
|
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: bson_ext
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
79
|
+
type: :development
|
80
|
+
version_requirements: *id006
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: yajl-ruby
|
83
|
+
prerelease: false
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: "0"
|
90
|
+
type: :development
|
91
|
+
version_requirements: *id007
|
71
92
|
description: General ruby templating for json or xml
|
72
93
|
email:
|
73
94
|
- nesquena@gmail.com
|
@@ -103,7 +124,6 @@ files:
|
|
103
124
|
- test/models/user.rb
|
104
125
|
- test/template_test.rb
|
105
126
|
- test/teststrap.rb
|
106
|
-
has_rdoc: true
|
107
127
|
homepage: https://github.com/nesquena/rabl
|
108
128
|
licenses: []
|
109
129
|
|
@@ -127,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
147
|
requirements: []
|
128
148
|
|
129
149
|
rubyforge_project: rabl
|
130
|
-
rubygems_version: 1.
|
150
|
+
rubygems_version: 1.7.2
|
131
151
|
signing_key:
|
132
152
|
specification_version: 3
|
133
153
|
summary: General ruby templating for json or xml
|