rabl-rails 0.4.3 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +16 -9
- data/CHANGELOG.md +8 -0
- data/Gemfile +4 -12
- data/README.md +5 -19
- data/lib/rabl-rails.rb +10 -6
- data/lib/rabl-rails/compiler.rb +27 -18
- data/lib/rabl-rails/configuration.rb +0 -10
- data/lib/rabl-rails/exceptions.rb +3 -0
- data/lib/rabl-rails/library.rb +6 -13
- data/lib/rabl-rails/nodes.rb +1 -1
- data/lib/rabl-rails/nodes/attribute.rb +8 -6
- data/lib/rabl-rails/nodes/code.rb +1 -3
- data/lib/rabl-rails/nodes/condition.rb +1 -3
- data/lib/rabl-rails/nodes/extend.rb +12 -0
- data/lib/rabl-rails/nodes/glue.rb +6 -14
- data/lib/rabl-rails/railtie.rb +14 -3
- data/lib/rabl-rails/renderers/hash.rb +1 -2
- data/lib/rabl-rails/template.rb +4 -3
- data/lib/rabl-rails/version.rb +1 -1
- data/lib/rabl-rails/visitors/to_hash.rb +21 -17
- data/lib/rabl-rails/visitors/visitor.rb +6 -2
- data/rabl-rails.gemspec +9 -6
- data/test/helper.rb +1 -8
- data/test/renderers/test_hash_renderer.rb +4 -10
- data/test/renderers/test_json_renderer.rb +1 -1
- data/test/renderers/test_plist_renderer.rb +1 -1
- data/test/renderers/test_xml_renderer.rb +1 -1
- data/test/test_compiler.rb +34 -17
- data/test/test_configuration.rb +2 -2
- data/test/test_hash_visitor.rb +19 -4
- data/test/test_helpers.rb +1 -1
- data/test/test_library.rb +3 -3
- metadata +31 -20
- data/lib/rabl-rails/nodes/node.rb +0 -9
- data/lib/rabl-rails/renderer.rb +0 -97
- data/lib/rabl-rails/responder.rb +0 -47
- data/test/test_render.rb +0 -86
data/lib/rabl-rails/railtie.rb
CHANGED
@@ -4,10 +4,21 @@ module RablRails
|
|
4
4
|
ActiveSupport.on_load(:action_view) do
|
5
5
|
ActionView::Template.register_template_handler :rabl, RablRails::Handlers::Rabl
|
6
6
|
end
|
7
|
-
end
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
if Rails::VERSION::MAJOR >= 5
|
9
|
+
module ::ActionController
|
10
|
+
module ApiRendering
|
11
|
+
include ActionView::Rendering
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
ActiveSupport.on_load :action_controller do
|
16
|
+
if self == ActionController::API
|
17
|
+
include ActionController::Helpers
|
18
|
+
include ActionController::ImplicitRender
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
11
22
|
end
|
12
23
|
end
|
13
24
|
end
|
@@ -20,7 +20,6 @@ module RablRails
|
|
20
20
|
visitor.instance_variable_get(template.data)
|
21
21
|
end
|
22
22
|
end
|
23
|
-
collection_or_resource ||= locals[:resource] if locals
|
24
23
|
|
25
24
|
render_with_cache(template.cache_key, collection_or_resource) do
|
26
25
|
output_hash = if collection?(collection_or_resource)
|
@@ -82,4 +81,4 @@ module RablRails
|
|
82
81
|
end
|
83
82
|
end
|
84
83
|
end
|
85
|
-
end
|
84
|
+
end
|
data/lib/rabl-rails/template.rb
CHANGED
@@ -3,8 +3,9 @@ module RablRails
|
|
3
3
|
attr_accessor :nodes, :data, :root_name, :cache_key
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
@nodes
|
7
|
-
@
|
6
|
+
@nodes = []
|
7
|
+
@data = nil
|
8
|
+
@cache_key = false
|
8
9
|
end
|
9
10
|
|
10
11
|
def initialize_dup(other)
|
@@ -20,4 +21,4 @@ module RablRails
|
|
20
21
|
@nodes.concat template.nodes
|
21
22
|
end
|
22
23
|
end
|
23
|
-
end
|
24
|
+
end
|
data/lib/rabl-rails/version.rb
CHANGED
@@ -18,10 +18,6 @@ module Visitors
|
|
18
18
|
@_result = {}
|
19
19
|
end
|
20
20
|
|
21
|
-
def visit_Array n
|
22
|
-
n.each { |i| visit i }
|
23
|
-
end
|
24
|
-
|
25
21
|
def visit_Attribute n
|
26
22
|
if !n.condition || instance_exec(_resource, &(n.condition))
|
27
23
|
n.each { |k, v| @_result[k] = _resource.send(v) }
|
@@ -29,7 +25,7 @@ module Visitors
|
|
29
25
|
end
|
30
26
|
|
31
27
|
def visit_Child n
|
32
|
-
object = object_from_data(_resource, n
|
28
|
+
object = object_from_data(_resource, n)
|
33
29
|
|
34
30
|
@_result[n.name] = if object
|
35
31
|
collection?(object) ? object.map { |o| sub_visit(o, n.nodes) } : sub_visit(object, n.nodes)
|
@@ -38,12 +34,17 @@ module Visitors
|
|
38
34
|
end
|
39
35
|
end
|
40
36
|
|
37
|
+
def visit_Glue n
|
38
|
+
object = object_from_data(_resource, n)
|
39
|
+
@_result.merge!(sub_visit(object, n.nodes)) if object
|
40
|
+
end
|
41
|
+
|
41
42
|
def visit_Code n
|
42
43
|
if !n.condition || instance_exec(_resource, &(n.condition))
|
43
44
|
result = instance_exec _resource, &(n.block)
|
44
45
|
|
45
46
|
if n.merge?
|
46
|
-
raise RablRails::
|
47
|
+
raise RablRails::PartialError, '`merge` block should return a hash' unless result.is_a?(Hash)
|
47
48
|
@_result.merge!(result)
|
48
49
|
else
|
49
50
|
@_result[n.name] = result
|
@@ -55,9 +56,11 @@ module Visitors
|
|
55
56
|
@_result.merge!(sub_visit(_resource, n.nodes)) if instance_exec _resource, &(n.condition)
|
56
57
|
end
|
57
58
|
|
58
|
-
def
|
59
|
-
|
60
|
-
@_result.merge!
|
59
|
+
def visit_Extend n
|
60
|
+
@_locals = n.locals
|
61
|
+
@_result.merge!(sub_visit(_resource, n.nodes))
|
62
|
+
ensure
|
63
|
+
@_locals = {}
|
61
64
|
end
|
62
65
|
|
63
66
|
def result
|
@@ -65,13 +68,13 @@ module Visitors
|
|
65
68
|
when 0
|
66
69
|
@_result
|
67
70
|
when 1
|
68
|
-
@_result.each { |k, v| @_result[k] = '' if v == nil }
|
71
|
+
@_result.each { |k, v| @_result[k] = ''.freeze if v == nil }
|
69
72
|
when 2, 3
|
70
|
-
@_result.each { |k, v| @_result[k] = nil if v == '' }
|
73
|
+
@_result.each { |k, v| @_result[k] = nil if v == ''.freeze }
|
71
74
|
when 4, 5
|
72
75
|
@_result.delete_if { |_, v| v == nil }
|
73
76
|
when 6
|
74
|
-
@_result.delete_if { |_, v| v == nil || v == '' }
|
77
|
+
@_result.delete_if { |_, v| v == nil || v == ''.freeze }
|
75
78
|
end
|
76
79
|
end
|
77
80
|
|
@@ -95,7 +98,7 @@ module Visitors
|
|
95
98
|
# rendering time).
|
96
99
|
#
|
97
100
|
def partial(template_path, options = {})
|
98
|
-
raise RablRails::
|
101
|
+
raise RablRails::PartialError.new("No object was given to partial #{template_path}") unless options[:object]
|
99
102
|
object = options[:object]
|
100
103
|
@_locals = options[:locals].freeze
|
101
104
|
|
@@ -115,7 +118,7 @@ module Visitors
|
|
115
118
|
|
116
119
|
def copy_instance_variables_from_context
|
117
120
|
@_context.instance_variable_get(:@_assigns).each_pair { |k, v|
|
118
|
-
instance_variable_set("@#{k}", v) unless k.to_s.start_with?('_')
|
121
|
+
instance_variable_set("@#{k}", v) unless k.to_s.start_with?('_'.freeze)
|
119
122
|
}
|
120
123
|
end
|
121
124
|
|
@@ -128,10 +131,11 @@ module Visitors
|
|
128
131
|
@_result, @_resource = old_result, old_resource
|
129
132
|
end
|
130
133
|
|
131
|
-
def object_from_data(resource,
|
132
|
-
return resource if
|
134
|
+
def object_from_data(resource, node)
|
135
|
+
return resource if node.data == nil
|
133
136
|
|
134
|
-
|
137
|
+
symbol = node.data
|
138
|
+
if node.instance_variable_data?
|
135
139
|
instance_variable_get(symbol)
|
136
140
|
else
|
137
141
|
resource.respond_to?(symbol) ? resource.send(symbol) : @_context.send(symbol)
|
@@ -1,7 +1,11 @@
|
|
1
1
|
module Visitors
|
2
2
|
class Visitor
|
3
3
|
def visit(node)
|
4
|
-
dispatch
|
4
|
+
dispatch(node)
|
5
|
+
end
|
6
|
+
|
7
|
+
def visit_Array a
|
8
|
+
a.each { |n| dispatch(n) }
|
5
9
|
end
|
6
10
|
|
7
11
|
private
|
@@ -14,4 +18,4 @@ module Visitors
|
|
14
18
|
send DISPATCH[node.class], node
|
15
19
|
end
|
16
20
|
end
|
17
|
-
end
|
21
|
+
end
|
data/rabl-rails.gemspec
CHANGED
@@ -8,17 +8,20 @@ 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
|
12
|
-
s.description = "Fast Rails
|
11
|
+
s.summary = "Fast Rails 4+ templating system with JSON, XML and PList support"
|
12
|
+
s.description = "Fast Rails 4+ templating system with JSON, XML and PList support"
|
13
13
|
s.license = 'MIT'
|
14
14
|
|
15
|
+
s.required_ruby_version = '>= 2.2.0'
|
16
|
+
|
15
17
|
s.files = `git ls-files`.split("\n")
|
16
18
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
17
19
|
s.require_paths = ["lib"]
|
18
20
|
|
19
|
-
s.add_dependency 'activesupport', '>=
|
20
|
-
s.add_dependency 'railties', '>=
|
21
|
-
s.add_dependency '
|
21
|
+
s.add_dependency 'activesupport', '>= 4.2'
|
22
|
+
s.add_dependency 'railties', '>= 4.2'
|
23
|
+
s.add_dependency 'concurrent-ruby', '~> 1.0.0'
|
22
24
|
|
23
|
-
s.add_development_dependency 'actionpack', '>=
|
25
|
+
s.add_development_dependency 'actionpack', '>= 4.2'
|
26
|
+
s.add_development_dependency 'actionview', '>= 4.2'
|
24
27
|
end
|
data/test/helper.rb
CHANGED
@@ -9,7 +9,6 @@ require 'rabl-rails'
|
|
9
9
|
require 'plist'
|
10
10
|
require 'action_dispatch/http/mime_type'
|
11
11
|
require 'action_view'
|
12
|
-
require 'active_support/core_ext/string/starts_ends_with'
|
13
12
|
|
14
13
|
if RUBY_ENGINE == 'jruby'
|
15
14
|
require 'nokogiri'
|
@@ -17,12 +16,6 @@ elsif RUBY_ENGINE == 'ruby'
|
|
17
16
|
require 'libxml'
|
18
17
|
end
|
19
18
|
|
20
|
-
MINITEST_TEST_CLASS = if defined?(Minitest::Test)
|
21
|
-
Minitest::Test
|
22
|
-
else
|
23
|
-
Minitest::Unit::TestCase
|
24
|
-
end
|
25
|
-
|
26
19
|
ActionView::Template.register_template_handler :rabl, RablRails::Handlers::Rabl
|
27
20
|
|
28
21
|
module Configurable
|
@@ -35,7 +28,7 @@ module Configurable
|
|
35
28
|
RablRails.configuration.send(accessor, old_value)
|
36
29
|
end
|
37
30
|
end
|
38
|
-
|
31
|
+
Minitest::Test.send(:include, Configurable)
|
39
32
|
|
40
33
|
module Rails
|
41
34
|
def self.cache
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestHashRenderer <
|
3
|
+
class TestHashRenderer < Minitest::Test
|
4
4
|
describe 'hash renderer' do
|
5
|
-
def render
|
6
|
-
RablRails::Renderers::Hash.render(@template, @context,
|
5
|
+
def render
|
6
|
+
RablRails::Renderers::Hash.render(@template, @context, {})
|
7
7
|
end
|
8
8
|
|
9
9
|
def with_cache
|
@@ -71,12 +71,6 @@ class TestHashRenderer < MINITEST_TEST_CLASS
|
|
71
71
|
assert_equal({ name: 'Marty' }, render)
|
72
72
|
end
|
73
73
|
|
74
|
-
it "uses resource passed in locals if template don't have data" do
|
75
|
-
@template.data = nil
|
76
|
-
resource = User.new(2, 'Biff')
|
77
|
-
assert_equal({ name: 'Biff' }, render(resource: resource))
|
78
|
-
end
|
79
|
-
|
80
74
|
it 'uses template root_name option' do
|
81
75
|
@template.root_name = :user
|
82
76
|
assert_equal({ user: { name: 'Marty' } }, render)
|
@@ -87,4 +81,4 @@ class TestHashRenderer < MINITEST_TEST_CLASS
|
|
87
81
|
assert_equal([{ name: 'Marty' }], render)
|
88
82
|
end
|
89
83
|
end
|
90
|
-
end
|
84
|
+
end
|
data/test/test_compiler.rb
CHANGED
@@ -2,9 +2,15 @@ require 'helper'
|
|
2
2
|
require 'pathname'
|
3
3
|
require 'tmpdir'
|
4
4
|
|
5
|
-
class TestCompiler <
|
5
|
+
class TestCompiler < Minitest::Test
|
6
6
|
@@tmp_path = Pathname.new(Dir.mktmpdir)
|
7
7
|
|
8
|
+
File.open(@@tmp_path + 'user.rabl', 'w') do |f|
|
9
|
+
f.puts %q{
|
10
|
+
attributes :id
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
8
14
|
describe 'compiler' do
|
9
15
|
def extract_attributes(nodes)
|
10
16
|
nodes.map(&:hash)
|
@@ -159,11 +165,7 @@ class TestCompiler < MINITEST_TEST_CLASS
|
|
159
165
|
end
|
160
166
|
|
161
167
|
it "compiles child with inline partial notation" do
|
162
|
-
|
163
|
-
f.puts %q{
|
164
|
-
attributes :id
|
165
|
-
}
|
166
|
-
end
|
168
|
+
|
167
169
|
|
168
170
|
t = @compiler.compile_source(%{child(:user, :partial => 'user') })
|
169
171
|
child_node = t.nodes.first
|
@@ -205,12 +207,17 @@ class TestCompiler < MINITEST_TEST_CLASS
|
|
205
207
|
assert_equal(:foo, code_node.name)
|
206
208
|
end
|
207
209
|
|
210
|
+
it "compiles glue with a partial" do
|
211
|
+
t = @compiler.compile_source(%{
|
212
|
+
glue(:@user, partial: 'user')
|
213
|
+
})
|
214
|
+
|
215
|
+
glue_node = t.nodes.first
|
216
|
+
assert_equal(1, glue_node.nodes.size)
|
217
|
+
assert_equal([{ :id => :id }], extract_attributes(glue_node.nodes))
|
218
|
+
end
|
219
|
+
|
208
220
|
it "extends other template" do
|
209
|
-
File.open(@@tmp_path + 'user.rabl', 'w') do |f|
|
210
|
-
f.puts %q{
|
211
|
-
attributes :id
|
212
|
-
}
|
213
|
-
end
|
214
221
|
t = @compiler.compile_source(%{ extends 'user' })
|
215
222
|
assert_equal([{ :id => :id }], extract_attributes(t.nodes))
|
216
223
|
end
|
@@ -229,17 +236,21 @@ class TestCompiler < MINITEST_TEST_CLASS
|
|
229
236
|
end
|
230
237
|
|
231
238
|
it "extends template that has been compiled previously by ActionView" do
|
232
|
-
File.open(@@tmp_path + 'user.rabl', 'w') do |f|
|
233
|
-
f.puts %q{
|
234
|
-
attributes :id
|
235
|
-
}
|
236
|
-
end
|
237
239
|
t = @view.lookup_context.find_template('user')
|
238
240
|
t.send(:compile!, @view)
|
239
241
|
t = @compiler.compile_source(%{ extends 'user' })
|
240
242
|
assert_equal([{ :id => :id }], extract_attributes(t.nodes))
|
241
243
|
end
|
242
244
|
|
245
|
+
it "compiles extends with locals" do
|
246
|
+
t = @compiler.compile_source(%{ extends 'user', locals: { display_credit_card: false } })
|
247
|
+
node = t.nodes.first
|
248
|
+
|
249
|
+
assert_instance_of RablRails::Nodes::Extend, node
|
250
|
+
assert_equal([{ :id => :id }], extract_attributes(node.nodes))
|
251
|
+
assert_equal({ display_credit_card: false }, node.locals)
|
252
|
+
end
|
253
|
+
|
243
254
|
it "compiles node" do
|
244
255
|
t = @compiler.compile_source(%{ node(:foo) { bar } })
|
245
256
|
|
@@ -262,13 +273,19 @@ class TestCompiler < MINITEST_TEST_CLASS
|
|
262
273
|
assert_nil node.name
|
263
274
|
end
|
264
275
|
|
265
|
-
it "compiles merge like a node
|
276
|
+
it "compiles merge like a node" do
|
266
277
|
t = @compiler.compile_source(%{ merge do |m| m.foo end })
|
267
278
|
node = t.nodes.first
|
268
279
|
assert_instance_of RablRails::Nodes::Code, node
|
269
280
|
assert_nil node.name
|
270
281
|
end
|
271
282
|
|
283
|
+
it "compiles merge with options" do
|
284
|
+
t = @compiler.compile_source(%{ merge(->(m) { true }) do |m| m.foo end })
|
285
|
+
node = t.nodes.first
|
286
|
+
refute_nil node.condition
|
287
|
+
end
|
288
|
+
|
272
289
|
it "compiles condition" do
|
273
290
|
t = @compiler.compile_source(%{ condition(->(u) {}) do attributes :secret end })
|
274
291
|
|
data/test/test_configuration.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestConfiguration <
|
3
|
+
class TestConfiguration < Minitest::Test
|
4
4
|
describe 'Configuration' do
|
5
5
|
it 'has a zero score by default' do
|
6
6
|
config = RablRails::Configuration.new
|
@@ -28,4 +28,4 @@ class TestConfiguration < MINITEST_TEST_CLASS
|
|
28
28
|
assert_equal 3, config.result_flags
|
29
29
|
end
|
30
30
|
end
|
31
|
-
end
|
31
|
+
end
|
data/test/test_hash_visitor.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestHashVisitor <
|
3
|
+
class TestHashVisitor < Minitest::Test
|
4
4
|
describe 'hash visitor' do
|
5
5
|
def visitor_result
|
6
6
|
visitor = Visitors::ToHash.new(@context)
|
@@ -45,12 +45,12 @@ class TestHashVisitor < MINITEST_TEST_CLASS
|
|
45
45
|
before do
|
46
46
|
@template = RablRails::CompiledTemplate.new
|
47
47
|
@template.add_node(RablRails::Nodes::Attribute.new(city: :city))
|
48
|
-
@nodes << RablRails::Nodes::Child.new(:address, @template)
|
49
48
|
@address = Address.new('Paris')
|
50
49
|
end
|
51
50
|
|
52
51
|
it 'renders with resource association as data source' do
|
53
52
|
@template.data = :address
|
53
|
+
@nodes << RablRails::Nodes::Child.new(:address, @template)
|
54
54
|
def @resource.address; end
|
55
55
|
@resource.stub :address, @address do
|
56
56
|
assert_equal({ address: { city: 'Paris' } }, visitor_result)
|
@@ -59,12 +59,14 @@ class TestHashVisitor < MINITEST_TEST_CLASS
|
|
59
59
|
|
60
60
|
it 'renders with arbitrary data source' do
|
61
61
|
@template.data = :@address
|
62
|
+
@nodes = [RablRails::Nodes::Child.new(:address, @template)]
|
62
63
|
@context.assigns['address'] = @address
|
63
64
|
assert_equal({ address: { city: 'Paris' } }, visitor_result)
|
64
65
|
end
|
65
66
|
|
66
67
|
it 'renders with local method as data source' do
|
67
68
|
@template.data = :address
|
69
|
+
@nodes << RablRails::Nodes::Child.new(:address, @template)
|
68
70
|
def @context.address; end
|
69
71
|
@context.stub :address, @address do
|
70
72
|
assert_equal({ address: { city: 'Paris' } }, visitor_result)
|
@@ -73,6 +75,7 @@ class TestHashVisitor < MINITEST_TEST_CLASS
|
|
73
75
|
|
74
76
|
it 'renders with a collection as data source' do
|
75
77
|
@template.data = :address
|
78
|
+
@nodes << RablRails::Nodes::Child.new(:address, @template)
|
76
79
|
def @context.address; end
|
77
80
|
@context.stub :address, [@address, @address] do
|
78
81
|
assert_equal({ address: [
|
@@ -84,6 +87,7 @@ class TestHashVisitor < MINITEST_TEST_CLASS
|
|
84
87
|
|
85
88
|
it 'renders if the source is nil' do
|
86
89
|
@template.data = :address
|
90
|
+
@nodes << RablRails::Nodes::Child.new(:address, @template)
|
87
91
|
def @resource.address; end
|
88
92
|
@resource.stub :address, nil do
|
89
93
|
assert_equal({ address: nil }, visitor_result)
|
@@ -157,7 +161,7 @@ class TestHashVisitor < MINITEST_TEST_CLASS
|
|
157
161
|
it 'raises an exception when trying to merge a non hash object' do
|
158
162
|
proc = ->(c) { c.name }
|
159
163
|
@nodes << RablRails::Nodes::Code.new(nil, proc)
|
160
|
-
assert_raises(RablRails::
|
164
|
+
assert_raises(RablRails::PartialError) { visitor_result }
|
161
165
|
end
|
162
166
|
|
163
167
|
it 'renders partial defined in node' do
|
@@ -192,6 +196,17 @@ class TestHashVisitor < MINITEST_TEST_CLASS
|
|
192
196
|
library.verify
|
193
197
|
end
|
194
198
|
|
199
|
+
it 'renders extend with locals' do
|
200
|
+
n = RablRails::Nodes::Attribute.new(id: :id)
|
201
|
+
n.condition = lambda { |_| locals[:display_id] }
|
202
|
+
|
203
|
+
@nodes << RablRails::Nodes::Extend.new(n, display_id: true)
|
204
|
+
assert_equal({ id: 1 }, visitor_result)
|
205
|
+
|
206
|
+
@nodes.first.locals[:display_id] = false
|
207
|
+
assert_equal({}, visitor_result)
|
208
|
+
end
|
209
|
+
|
195
210
|
it 'renders partial with empty target' do
|
196
211
|
proc = ->(u) { partial('users/base', object: []) }
|
197
212
|
@nodes << RablRails::Nodes::Code.new(:users, proc)
|
@@ -201,7 +216,7 @@ class TestHashVisitor < MINITEST_TEST_CLASS
|
|
201
216
|
it 'raises an exception when calling a partial without a target' do
|
202
217
|
proc = ->(u) { partial('users/base') }
|
203
218
|
@nodes << RablRails::Nodes::Code.new(:user, proc)
|
204
|
-
assert_raises(RablRails::
|
219
|
+
assert_raises(RablRails::PartialError) { visitor_result }
|
205
220
|
end
|
206
221
|
|
207
222
|
describe 'when hash options are set' do
|