rabl-rails 0.3.1 → 0.3.2
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 -1
- data/README.md +2 -1
- data/lib/rabl-rails/library.rb +2 -3
- data/lib/rabl-rails/renderers/base.rb +12 -4
- data/lib/rabl-rails/renderers/json.rb +3 -1
- data/lib/rabl-rails/version.rb +1 -1
- data/lib/rabl-rails.rb +3 -0
- data/rabl-rails.gemspec +3 -2
- data/test/base_renderer_test.rb +35 -0
- data/test/keyword_test.rb +1 -1
- data/test/renderers/json_renderer_test.rb +8 -1
- data/test/test_helper.rb +3 -1
- metadata +23 -5
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
-
## 0.3.2
|
3
|
+
## 0.3.2
|
4
|
+
* Using child with a nil value will be correctly formatted as nil
|
5
|
+
* Allow controller's assigns to have symbol keys
|
6
|
+
* Does not modify in place format extracted from context
|
7
|
+
* Add JSONP support
|
4
8
|
|
5
9
|
## 0.3.1
|
6
10
|
* Add `merge` keywork
|
data/README.md
CHANGED
@@ -95,6 +95,7 @@ RablRails.configure do |config|
|
|
95
95
|
# config.xml_engine = 'LibXML'
|
96
96
|
# config.use_custom_responder = false
|
97
97
|
# config.default_responder_template = 'show'
|
98
|
+
# config.enable_jsonp_callbacks = false
|
98
99
|
end
|
99
100
|
```
|
100
101
|
|
@@ -207,7 +208,7 @@ node(:full_name) { |u| u.first_name + " " + u.last_name }
|
|
207
208
|
You can add condition on your custom nodes (if the condition is evaluated to false, the node will not be included).
|
208
209
|
|
209
210
|
```ruby
|
210
|
-
node(:email, if: -> {
|
211
|
+
node(:email, if: ->(u) { u.valid_email? }) do |u|
|
211
212
|
u.email
|
212
213
|
end
|
213
214
|
```
|
data/lib/rabl-rails/library.rb
CHANGED
@@ -14,8 +14,7 @@ module RablRails
|
|
14
14
|
|
15
15
|
compiled_template = compile_template_from_source(source, path)
|
16
16
|
|
17
|
-
format = context.params[:format] ? context.params[:format].to_s :
|
18
|
-
format.upcase!
|
17
|
+
format = context.params[:format] ? context.params[:format].to_s.upcase : :JSON
|
19
18
|
Renderers.const_get(format).new(context, locals).render(compiled_template)
|
20
19
|
end
|
21
20
|
|
@@ -30,7 +29,7 @@ module RablRails
|
|
30
29
|
|
31
30
|
def compile_template_from_path(path)
|
32
31
|
return @cached_templates[path].dup if @cached_templates.has_key?(path)
|
33
|
-
|
32
|
+
|
34
33
|
t = @lookup_context.find_template(path, [], false)
|
35
34
|
compile_template_from_source(t.source, path)
|
36
35
|
end
|
@@ -57,11 +57,11 @@ module RablRails
|
|
57
57
|
result = instance_exec data, &value
|
58
58
|
|
59
59
|
if key.to_s.start_with?('_') # merge
|
60
|
-
raise PartialError, '`merge` block should return a hash' unless result.is_a?(Hash)
|
60
|
+
raise PartialError, '`merge` block should return a hash' unless result.is_a?(Hash)
|
61
61
|
output.merge!(result)
|
62
62
|
next output
|
63
63
|
else # node
|
64
|
-
|
64
|
+
result
|
65
65
|
end
|
66
66
|
when Array # node with condition
|
67
67
|
next output if !instance_exec data, &(value.first)
|
@@ -81,7 +81,11 @@ module RablRails
|
|
81
81
|
output.merge!(render_resource(object, current_value))
|
82
82
|
next output
|
83
83
|
else # child
|
84
|
-
|
84
|
+
if object
|
85
|
+
object.respond_to?(:each) ? render_collection(object, current_value) : render_resource(object, current_value)
|
86
|
+
else
|
87
|
+
nil
|
88
|
+
end
|
85
89
|
end
|
86
90
|
when Condition
|
87
91
|
if instance_exec data, &(value.proc)
|
@@ -94,6 +98,10 @@ module RablRails
|
|
94
98
|
}
|
95
99
|
end
|
96
100
|
|
101
|
+
def params
|
102
|
+
@_context.params
|
103
|
+
end
|
104
|
+
|
97
105
|
#
|
98
106
|
# Call the render_resource mtehod on each object of the collection
|
99
107
|
# and return an array of the returned values.
|
@@ -132,7 +140,7 @@ module RablRails
|
|
132
140
|
#
|
133
141
|
def setup_render_context
|
134
142
|
@_context.instance_variable_get(:@_assigns).each_pair { |k, v|
|
135
|
-
instance_variable_set("@#{k}", v) unless k.start_with?('_')
|
143
|
+
instance_variable_set("@#{k}", v) unless k.to_s.start_with?('_')
|
136
144
|
}
|
137
145
|
end
|
138
146
|
end
|
@@ -3,7 +3,9 @@ module RablRails
|
|
3
3
|
class JSON < Base
|
4
4
|
def format_output(hash)
|
5
5
|
hash = { _options[:root_name] => hash } if _options[:root_name] && RablRails.include_json_root
|
6
|
-
MultiJson.encode(hash)
|
6
|
+
json = MultiJson.encode(hash)
|
7
|
+
|
8
|
+
RablRails.enable_jsonp_callbacks && params.has_key?(:callback) ? "#{params[:callback]}(#{json})" : json
|
7
9
|
end
|
8
10
|
end
|
9
11
|
end
|
data/lib/rabl-rails/version.rb
CHANGED
data/lib/rabl-rails.rb
CHANGED
data/rabl-rails.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ["Christopher Cocchi-Perrier"]
|
9
9
|
s.email = ["cocchi.c@gmail.com"]
|
10
10
|
s.homepage = "https://github.com/ccocchi/rabl-rails"
|
11
|
-
s.summary = "Fast Rails 3+ templating system with JSON and
|
12
|
-
s.description = "Fast Rails 3+ templating system with JSON and
|
11
|
+
s.summary = "Fast Rails 3+ templating system with JSON, XML and PList support"
|
12
|
+
s.description = "Fast Rails 3+ templating system with JSON, XML and PList support"
|
13
13
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
15
15
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
@@ -19,4 +19,5 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_dependency "railties", "~> 3.0"
|
20
20
|
|
21
21
|
s.add_development_dependency "actionpack", "~> 3.0"
|
22
|
+
s.add_development_dependency "rspec-mocks"
|
22
23
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestBaseRenderer < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
RablRails::Renderers::Base.class_eval do
|
6
|
+
def format_output(hash)
|
7
|
+
hash
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
setup do
|
12
|
+
@data = User.new(1, 'foobar', 'male')
|
13
|
+
|
14
|
+
@context = Context.new
|
15
|
+
@context.assigns['data'] = @data
|
16
|
+
|
17
|
+
@template = RablRails::CompiledTemplate.new
|
18
|
+
@template.data = :@data
|
19
|
+
end
|
20
|
+
|
21
|
+
def render_hash
|
22
|
+
RablRails::Renderers::Base.new(@context).render(@template)
|
23
|
+
end
|
24
|
+
|
25
|
+
test "child with nil data should render nil" do
|
26
|
+
@template.source = { :author => { :_data => :@nil, :name => :name } }
|
27
|
+
assert_equal({ :author => nil }, render_hash)
|
28
|
+
end
|
29
|
+
|
30
|
+
test "properly handle assigns with symbol keys" do
|
31
|
+
@context.assigns[:foo] = 'bar'
|
32
|
+
@template.source = {}
|
33
|
+
assert_nothing_raised { render_hash }
|
34
|
+
end
|
35
|
+
end
|
data/test/keyword_test.rb
CHANGED
@@ -25,7 +25,7 @@ class KeywordTest < ActiveSupport::TestCase
|
|
25
25
|
@context.stub(lookup_context: nil)
|
26
26
|
end
|
27
27
|
|
28
|
-
test "collections model should
|
28
|
+
test "collections model should not collide with rabl-rails reserved keyword" do
|
29
29
|
source = %{
|
30
30
|
object :@user
|
31
31
|
child(:@collections => :collections) do
|
@@ -13,7 +13,7 @@ class TestJsonRenderer < ActiveSupport::TestCase
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def render_json_output
|
16
|
-
RablRails::Renderers::JSON.new(@context).render(@template)
|
16
|
+
RablRails::Renderers::JSON.new(@context).render(@template)
|
17
17
|
end
|
18
18
|
|
19
19
|
test "render object wth empty template" do
|
@@ -167,4 +167,11 @@ class TestJsonRenderer < ActiveSupport::TestCase
|
|
167
167
|
@template.source = { :_merge0 => ->(c) { { :custom => c.name } } }
|
168
168
|
assert_equal %q({"custom":"foobar"}), render_json_output
|
169
169
|
end
|
170
|
+
|
171
|
+
test "render with jsonp callback" do
|
172
|
+
RablRails.enable_jsonp_callbacks = true
|
173
|
+
@context.stub(:params).and_return({ callback: 'some_callback' })
|
174
|
+
@template.source = { :name => :name }
|
175
|
+
assert_equal %q[some_callback({"name":"foobar"})], render_json_output
|
176
|
+
end
|
170
177
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabl-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
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-05-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -59,7 +59,23 @@ dependencies:
|
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '3.0'
|
62
|
-
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec-mocks
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Fast Rails 3+ templating system with JSON, XML and PList support
|
63
79
|
email:
|
64
80
|
- cocchi.c@gmail.com
|
65
81
|
executables: []
|
@@ -89,6 +105,7 @@ files:
|
|
89
105
|
- lib/rabl-rails/version.rb
|
90
106
|
- lib/tasks/rabl-rails.rake
|
91
107
|
- rabl-rails.gemspec
|
108
|
+
- test/base_renderer_test.rb
|
92
109
|
- test/cache_templates_test.rb
|
93
110
|
- test/compiler_test.rb
|
94
111
|
- test/deep_nesting_test.rb
|
@@ -119,11 +136,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
136
|
version: '0'
|
120
137
|
requirements: []
|
121
138
|
rubyforge_project:
|
122
|
-
rubygems_version: 1.8.
|
139
|
+
rubygems_version: 1.8.21
|
123
140
|
signing_key:
|
124
141
|
specification_version: 3
|
125
|
-
summary: Fast Rails 3+ templating system with JSON and
|
142
|
+
summary: Fast Rails 3+ templating system with JSON, XML and PList support
|
126
143
|
test_files:
|
144
|
+
- test/base_renderer_test.rb
|
127
145
|
- test/cache_templates_test.rb
|
128
146
|
- test/compiler_test.rb
|
129
147
|
- test/deep_nesting_test.rb
|