breezy_template 0.2.0 → 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.
@@ -1,4 +1,6 @@
1
- module BreezyTemplate
1
+ require 'breezy_template/breezy_template'
2
+
3
+ class BreezyTemplate
2
4
  module SearchExtension
3
5
  def found!
4
6
  found = @found
@@ -67,7 +69,6 @@ module BreezyTemplate
67
69
  def set!(key, value = BLANK, *args)
68
70
  return if @found
69
71
  options = args.first || {}
70
- options = _normalize_options(options)
71
72
 
72
73
  if @search_path && !@search_path.empty?
73
74
  if key.to_s == @search_path.first
@@ -80,7 +81,6 @@ module BreezyTemplate
80
81
  yield self
81
82
  elsif _partial_options?(options)
82
83
  without_track = args.dup
83
- # without_track.first.delete(:track)
84
84
  super(key, value, *without_track)
85
85
  else
86
86
  ::Kernel.raise 'This should not happen'
@@ -1,66 +1,82 @@
1
1
  # # taken from jbuilder's jbuilder_dependency_tracker_test.rb
2
2
  #
3
- # require 'test_helper'
4
- # require 'breezy_template/dependency_tracker'
5
- # require 'mocha'
6
- #
7
- # class FakeTemplate
8
- # attr_reader :source, :handler
9
- # def initialize(source, handler = :jbuilder)
10
- # @source, @handler = source, handler
11
- # end
12
- # end
13
- #
14
- #
15
- # class BreezyTemplateDependencyTrackerTest < ActiveSupport::TestCase
16
- # def make_tracker(name, source)
17
- # template = FakeTemplate.new(source)
18
- # BreezyTemplate::DependencyTracker.new(name, template)
19
- # end
20
- #
21
- # def track_dependencies(source)
22
- # make_tracker('breezy_template', source).dependencies
23
- # end
24
- #
25
- # test 'jbuilder direct partial! feature are not allowed' do
26
- # dependencies = track_dependencies <<-RUBY
27
- # json.partial! 'path/to/partial', foo: bar
28
- # json.partial! 'path/to/another/partial', :fizz => buzz
29
- # RUBY
30
- #
31
- # assert_equal [], dependencies
32
- # end
33
- #
34
- # test 'detects partial with options (1.9 style)' do
35
- # dependencies = track_dependencies <<-RUBY
36
- # json.content hello: 'world', partial: 'path/to/partial', foo: :bar
37
- # RUBY
38
- #
39
- # assert_equal %w[path/to/partial], dependencies
40
- # end
41
- #
42
- # test 'detects partial with options (1.8 style)' do
43
- # dependencies = track_dependencies <<-RUBY
44
- # json.content :hello => 'world', :partial => 'path/to/partial', :foo => :bar
45
- # RUBY
46
- #
47
- # assert_equal %w[path/to/partial], dependencies
48
- # end
49
- #
50
- # test 'detects partial in indirect collecton calls' do
51
- # dependencies = track_dependencies <<-RUBY
52
- # json.comments @post.comments, partial: 'comments/comment', as: :comment
53
- # RUBY
54
- #
55
- # assert_equal %w[comments/comment], dependencies
56
- # end
57
- #
58
- # test 'detects explicit depedency' do
59
- # dependencies = track_dependencies <<-RUBY
60
- # # Template Dependency: path/to/partial
61
- # json.foo 'bar'
62
- # RUBY
63
- #
64
- # assert_equal %w[path/to/partial], dependencies
65
- # end
66
- # end
3
+ require 'test_helper'
4
+ require 'breezy_template/dependency_tracker'
5
+ require 'mocha'
6
+
7
+ class FakeTemplate
8
+ attr_reader :source, :handler
9
+ def initialize(source, handler = :jbuilder)
10
+ @source, @handler = source, handler
11
+ end
12
+ end
13
+
14
+
15
+ class BreezyTemplateDependencyTrackerTest < ActiveSupport::TestCase
16
+ def make_tracker(name, source)
17
+ template = FakeTemplate.new(source)
18
+ BreezyTemplate::DependencyTracker.new(name, template)
19
+ end
20
+
21
+ def track_dependencies(source)
22
+ make_tracker('breezy_template', source).dependencies
23
+ end
24
+
25
+ test 'jbuilder direct partial! feature are not allowed' do
26
+ dependencies = track_dependencies <<-RUBY
27
+ json.partial! 'path/to/partial', foo: bar
28
+ json.partial! 'path/to/another/partial', :fizz => buzz
29
+ RUBY
30
+
31
+ assert_equal [], dependencies
32
+ end
33
+
34
+ test 'detects partial with no options (1.9 style)' do
35
+ dependencies = track_dependencies <<-RUBY
36
+ json.content hello: 'world', partial: 'path/to/partial'
37
+ RUBY
38
+
39
+ assert_equal %w[path/to/partial], dependencies
40
+ end
41
+
42
+ test 'detects partial with no options (1.8 style)' do
43
+ dependencies = track_dependencies <<-RUBY
44
+ json.content :hello => 'world', :partial => 'path/to/partial'
45
+ RUBY
46
+
47
+ assert_equal %w[path/to/partial], dependencies
48
+ end
49
+
50
+ test 'detects partial with options (1.9 style)' do
51
+ dependencies = track_dependencies <<-RUBY
52
+ json.content hello: 'world', partial: ['path/to/partial', foo: :bar]
53
+ RUBY
54
+
55
+ assert_equal %w[path/to/partial], dependencies
56
+ end
57
+
58
+ test 'detects partial with options (1.8 style)' do
59
+ dependencies = track_dependencies <<-RUBY
60
+ json.content :hello => 'world', :partial => ['path/to/partial', :foo => :bar]
61
+ RUBY
62
+
63
+ assert_equal %w[path/to/partial], dependencies
64
+ end
65
+
66
+ test 'detects partial in indirect collecton calls' do
67
+ dependencies = track_dependencies <<-RUBY
68
+ json.comments @post.comments, partial: ['comments/comment', as: :comment]
69
+ RUBY
70
+
71
+ assert_equal %w[comments/comment], dependencies
72
+ end
73
+
74
+ test 'detects explicit depedency' do
75
+ dependencies = track_dependencies <<-RUBY
76
+ # Template Dependency: path/to/partial
77
+ json.foo 'bar'
78
+ RUBY
79
+
80
+ assert_equal %w[path/to/partial], dependencies
81
+ end
82
+ end
@@ -297,7 +297,7 @@ class BreezyTemplateTest < ActionView::TestCase
297
297
  Rails.cache.clear
298
298
 
299
299
  result = jbuild(<<-JBUILDER)
300
- json.post @post, partial: "blog_post", as: :blog_post, joint: :header
300
+ json.post @post, partial: ["blog_post", as: :blog_post, joint: :header]
301
301
  JBUILDER
302
302
 
303
303
  expected = strip_format(<<-JS)
@@ -317,6 +317,58 @@ class BreezyTemplateTest < ActionView::TestCase
317
317
  assert_equal expected, result
318
318
  end
319
319
 
320
+ test "renders a partial with implicit joint" do
321
+ result = jbuild(<<-JBUILDER)
322
+ json.footer nil, partial: ["footer", joint: true]
323
+ JBUILDER
324
+
325
+ expected = strip_format(<<-JS)
326
+ (function(){
327
+ var joints={};
328
+ var cache={};
329
+ var defers=[];
330
+ joints['footer'] ||= []; joints['footer'].push('footer');
331
+ return ({"data":{"footer":{"terms":"You agree"}},"joints":joints,"defers":defers});
332
+ })()
333
+ JS
334
+ assert_equal expected, result
335
+ end
336
+
337
+ test "renders a partial with explicit joint" do
338
+ result = jbuild(<<-JBUILDER)
339
+ json.footer nil, partial: ["footer", joint: 'hello']
340
+ JBUILDER
341
+
342
+ expected = strip_format(<<-JS)
343
+ (function(){
344
+ var joints={};
345
+ var cache={};
346
+ var defers=[];
347
+ joints['hello'] ||= []; joints['hello'].push('footer');
348
+ return ({"data":{"footer":{"terms":"You agree"}},"joints":joints,"defers":defers});
349
+ })()
350
+ JS
351
+ assert_equal expected, result
352
+ end
353
+
354
+ test "render array of partials with unique joints" do
355
+ result = jbuild(<<-JBUILDER)
356
+ json.array! [1,2], partial: ["footer", joint: ->(x){"somefoo"+x.to_s}]
357
+ JBUILDER
358
+
359
+ expected = strip_format(<<-JS)
360
+ (function(){
361
+ var joints={};
362
+ var cache={};
363
+ var defers=[];
364
+ joints['somefoo1'] ||= []; joints['somefoo1'].push('0');joints['somefoo2'] ||= []; joints['somefoo2'].push('1');
365
+ return ({"data":[{"terms":"You agree"},{"terms":"You agree"}],"joints":joints,"defers":defers});
366
+ })()
367
+ JS
368
+
369
+ assert_equal expected, result
370
+ end
371
+
320
372
  test "renders a partial with no locals" do
321
373
  result = jbuild(<<-JBUILDER)
322
374
  json.footer nil, partial: "footer"
@@ -335,7 +387,7 @@ class BreezyTemplateTest < ActionView::TestCase
335
387
 
336
388
  test "renders a partial with locals" do
337
389
  result = jbuild(<<-JBUILDER)
338
- json.profile nil, partial: "profile", locals: {email: "test@test.com"}
390
+ json.profile nil, partial: ["profile", locals: {email: "test@test.com"}]
339
391
  JBUILDER
340
392
 
341
393
  expected = strip_format(<<-JS)
@@ -351,8 +403,11 @@ class BreezyTemplateTest < ActionView::TestCase
351
403
 
352
404
  test "renders a partial with locals and caches" do
353
405
  result = jbuild(<<-JBUILDER)
354
- json.wrap! :cache, 'cachekey'
355
- json.profile 32, partial: "profile", locals: {email: "test@test.com"}
406
+ opts = {
407
+ cache: 'cachekey',
408
+ partial: ["profile", locals: {email: "test@test.com"}]
409
+ }
410
+ json.profile 32, opts
356
411
  JBUILDER
357
412
 
358
413
  expected = strip_format(<<-JS)
@@ -370,7 +425,7 @@ class BreezyTemplateTest < ActionView::TestCase
370
425
 
371
426
  test "renders a partial even without a :as to the value, this usage is rare" do
372
427
  result = jbuild(<<-JBUILDER)
373
- json.profile 32, partial: "profile", locals: {email: "test@test.com"}
428
+ json.profile 32, partial: ["profile", locals: {email: "test@test.com"}]
374
429
  JBUILDER
375
430
 
376
431
  expected = strip_format(<<-JS)
@@ -404,8 +459,7 @@ class BreezyTemplateTest < ActionView::TestCase
404
459
 
405
460
  test "render array of partials without an :as to a member and cache" do
406
461
  result = jbuild(<<-JBUILDER)
407
- json.wrap! :cache, ->(i){ ['a', i] }
408
- json.array! [1,2], partial: "footer"
462
+ json.array! [1,2], partial: "footer", cache: ->(i){ ['a', i] }
409
463
  JBUILDER
410
464
 
411
465
  expected = strip_format(<<-JS)
@@ -424,7 +478,7 @@ class BreezyTemplateTest < ActionView::TestCase
424
478
 
425
479
  test "render array of partials" do
426
480
  result = jbuild(<<-JBUILDER)
427
- json.array! BLOG_POST_COLLECTION, partial: "blog_post", as: :blog_post
481
+ json.array! BLOG_POST_COLLECTION, partial: ["blog_post", as: :blog_post]
428
482
  JBUILDER
429
483
 
430
484
  expected = strip_format(<<-JS)
@@ -452,7 +506,7 @@ class BreezyTemplateTest < ActionView::TestCase
452
506
 
453
507
  test "renders array of partials as empty array with nil-collection" do
454
508
  result = jbuild(<<-JBUILDER)
455
- json.array! nil, partial: "blog_post", as: :blog_post
509
+ json.array! nil, partial: ["blog_post", as: :blog_post]
456
510
  JBUILDER
457
511
 
458
512
  expected = strip_format(<<-JS)
@@ -487,8 +541,10 @@ class BreezyTemplateTest < ActionView::TestCase
487
541
  undef_context_methods :fragment_name_with_digest, :cache_fragment_name
488
542
 
489
543
  result = jbuild(<<-JBUILDER)
490
- json.wrap! :cache, ['b', 'c']
491
- json.hello 32
544
+ opts = {
545
+ cache: [['b', 'c']]
546
+ }
547
+ json.hello 32, opts
492
548
  JBUILDER
493
549
 
494
550
  expected = strip_format(<<-JS)
@@ -509,8 +565,10 @@ class BreezyTemplateTest < ActionView::TestCase
509
565
 
510
566
  result = jbuild(<<-JBUILDER)
511
567
  json.hello do
512
- json.wrap! :cache, ->(i){ ['a', i] }
513
- json.array! [4,5] do |x|
568
+ opts = {
569
+ cache: ->(i){ ['a', i] }
570
+ }
571
+ json.array! [4,5], opts do |x|
514
572
  json.top "hello" + x.to_s
515
573
  end
516
574
  end
@@ -534,14 +592,11 @@ class BreezyTemplateTest < ActionView::TestCase
534
592
  undef_context_methods :fragment_name_with_digest, :cache_fragment_name
535
593
 
536
594
  result = jbuild(<<-JBUILDER)
537
- json.wrap! :cache, ['a', 'b']
538
- json.hello do
539
- json.wrap! :cache, ['d', 'z']
540
- json.content do
595
+ json.hello cache: [['a', 'b']] do
596
+ json.content cache: [['d', 'z']] do
541
597
  json.subcontent 'inner'
542
598
  end
543
- json.wrap! :cache, ['e', 'z']
544
- json.other do
599
+ json.other cache: [['e', 'z']] do
545
600
  json.subcontent 'other'
546
601
  end
547
602
  end
@@ -612,15 +667,15 @@ class BreezyTemplateTest < ActionView::TestCase
612
667
  undef_context_methods :fragment_name_with_digest, :cache_fragment_name
613
668
 
614
669
  jbuild(<<-JBUILDER)
615
- json.wrap! :cache, ['cachekey']
616
- json.post do
670
+ opts = {cache: ['cachekey']}
671
+ json.post opts do
617
672
  json.name "Cache"
618
673
  end
619
674
  JBUILDER
620
675
 
621
676
  result = jbuild(<<-JBUILDER)
622
- json.wrap! :cache, ['cachekey']
623
- json.post do
677
+ opts = {cache: ['cachekey']}
678
+ json.post opts do
624
679
  json.name "Miss"
625
680
  end
626
681
  JBUILDER
@@ -642,8 +697,7 @@ class BreezyTemplateTest < ActionView::TestCase
642
697
  undef_context_methods :fragment_name_with_digest, :cache_fragment_name
643
698
 
644
699
  result = jbuild <<-JBUILDER
645
- json.wrap! :cache, "cachekey"
646
- json.content do
700
+ json.content cache: "cachekey" do
647
701
  json.array! %w[a b c]
648
702
  end
649
703
  JBUILDER
@@ -674,8 +728,7 @@ class BreezyTemplateTest < ActionView::TestCase
674
728
  @context.expects :fragment_name_with_digest
675
729
 
676
730
  jbuild <<-JBUILDER
677
- json.wrap! :cache, 'cachekey'
678
- json.content do
731
+ json.content cache: 'cachekey' do
679
732
  json.name "Cache"
680
733
  end
681
734
  JBUILDER
@@ -688,36 +741,34 @@ class BreezyTemplateTest < ActionView::TestCase
688
741
  ActiveSupport::Cache.expects :expand_cache_key
689
742
 
690
743
  jbuild <<-JBUILDER
691
- json.wrap! :cache, 'cachekey'
692
- json.content do
744
+ json.content cache: 'cachekey' do
693
745
  json.name "Cache"
694
746
  end
695
747
  JBUILDER
696
748
  end
697
749
 
698
- test "current cache digest option accepts options through the last element hash" do
699
- undef_context_methods :fragment_name_with_digest
700
-
701
- @context.expects(:cache_fragment_name)
702
- .with("cachekey", skip_digest: true)
703
- .returns("cachekey")
704
-
705
- ActiveSupport::Cache.expects :expand_cache_key
706
-
707
- jbuild <<-JBUILDER
708
- json.wrap! :cache, 'cachekey', skip_digest: true
709
- json.content do
710
- json.name "Cache"
711
- end
712
- JBUILDER
713
- end
750
+ # test "current cache digest option accepts options through the last element hash" do
751
+ # undef_context_methods :fragment_name_with_digest
752
+ #
753
+ # @context.expects(:cache_fragment_name)
754
+ # .with("cachekey", skip_digest: true)
755
+ # .returns("cachekey")
756
+ #
757
+ # ActiveSupport::Cache.expects :expand_cache_key
758
+ #
759
+ # jbuild <<-JBUILDER
760
+ # json.wrap! :cache, 'cachekey', skip_digest: true
761
+ # json.content do
762
+ # json.name "Cache"
763
+ # end
764
+ # JBUILDER
765
+ # end
714
766
 
715
767
  test "does not perform caching when controller.perform_caching is false" do
716
768
  controller.perform_caching = false
717
769
 
718
770
  result = jbuild <<-JBUILDER
719
- json.wrap! :cache, 'cachekey'
720
- json.content do
771
+ json.content cache: 'cachekey' do
721
772
  json.name "Cache"
722
773
  end
723
774
  JBUILDER
@@ -738,8 +789,7 @@ class BreezyTemplateTest < ActionView::TestCase
738
789
  @post = BLOG_POST_COLLECTION.first
739
790
 
740
791
  result = jbuild(<<-JBUILDER)
741
- json.wrap! :cache, ['a', 'b']
742
- json.post @post, partial: "blog_post", as: :blog_post
792
+ json.post @post, partial: ["blog_post", as: :blog_post], cache: [['a', 'b']]
743
793
  JBUILDER
744
794
 
745
795
  expected = strip_format(<<-JS)
@@ -762,13 +812,21 @@ class BreezyTemplateTest < ActionView::TestCase
762
812
  @miss = BlogPost.new(2, "miss", "John Smith")
763
813
 
764
814
  cat = jbuild(<<-JBUILDER)
765
- json.wrap! :cache, ['a', 'b']
766
- json.post @hit, partial: "blog_post", as: :blog_post
815
+ opts = {
816
+ cache: [['a', 'b']],
817
+ partial: ["blog_post", as: :blog_post]
818
+ }
819
+
820
+ json.post @hit, opts
767
821
  JBUILDER
768
822
 
769
823
  result = jbuild(<<-JBUILDER)
770
- json.wrap! :cache, ['a', 'b']
771
- json.post @miss, partial: "blog_post", as: :blog_post
824
+ opts = {
825
+ cache: [['a', 'b']],
826
+ partial: ["blog_post", as: :blog_post]
827
+ }
828
+
829
+ json.post @miss, opts
772
830
  JBUILDER
773
831
 
774
832
  expected = strip_format(<<-JS)
@@ -787,8 +845,11 @@ class BreezyTemplateTest < ActionView::TestCase
787
845
 
788
846
  test "render array of partials and caches" do
789
847
  result = jbuild(<<-JBUILDER)
790
- json.wrap! :cache, ->(d){ ['a', d.id] }
791
- json.array! BLOG_POST_COLLECTION, partial: "blog_post", as: :blog_post
848
+ opts = {
849
+ cache: (->(d){ ['a', d.id] }),
850
+ partial: ["blog_post", as: :blog_post]
851
+ }
852
+ json.array! BLOG_POST_COLLECTION, opts
792
853
  JBUILDER
793
854
  Rails.cache.clear
794
855
 
@@ -929,8 +990,7 @@ class BreezyTemplateTest < ActionView::TestCase
929
990
  undef_context_methods :fragment_name_with_digest, :cache_fragment_name
930
991
  result = jbuild(<<-JBUILDER, breezy_filter: 'hit.hit2')
931
992
  json.hit do
932
- json.wrap! :cache, ['a']
933
- json.hit2 do
993
+ json.hit2 cache: 'a' do
934
994
  json.greeting 'hello world'
935
995
  end
936
996
  end
@@ -955,14 +1015,14 @@ class BreezyTemplateTest < ActionView::TestCase
955
1015
  test "filtering for a node of a AR relation in a tree by id via an appended where clause" do
956
1016
  result = jbuild(<<-JBUILDER, breezy_filter: 'hit.hit2.id=1')
957
1017
  post = Post.create
958
- post.comments.create title: 'first'
959
- post.comments.create title: 'second'
1018
+ post.notes.create title: 'first'
1019
+ post.notes.create title: 'second'
960
1020
 
961
- post.comments.expects(:where).once().with('id'=>1).returns([{id: 1, title: 'first'}])
1021
+ post.notes.expects(:where).once().with('id'=>1).returns([{id: 1, title: 'first'}])
962
1022
 
963
1023
  json.hit do
964
1024
  json.hit2 do
965
- json.array! post.comments do |x|
1025
+ json.array! post.notes do |x|
966
1026
  raise 'this should be be called' if x[:title] == 'second'
967
1027
  json.title x[:title]
968
1028
  end
@@ -989,15 +1049,15 @@ class BreezyTemplateTest < ActionView::TestCase
989
1049
  test "filtering for a node of a AR relation in a tree by index via an appended where clause" do
990
1050
  result = jbuild(<<-JBUILDER, breezy_filter: 'hit.hit2.0')
991
1051
  post = Post.create
992
- post.comments.create title: 'first'
993
- post.comments.create title: 'second'
1052
+ post.notes.create title: 'first'
1053
+ post.notes.create title: 'second'
994
1054
 
995
- offset = post.comments.offset(0)
996
- post.comments.expects(:offset).once().with(0).returns(offset)
1055
+ offset = post.notes.offset(0)
1056
+ post.notes.expects(:offset).once().with(0).returns(offset)
997
1057
 
998
1058
  json.hit do
999
1059
  json.hit2 do
1000
- json.array! post.comments do |x|
1060
+ json.array! post.notes do |x|
1001
1061
  raise 'this should be be called' if x[:title] == 'second'
1002
1062
  json.title x[:title]
1003
1063
  end
@@ -1080,8 +1140,7 @@ class BreezyTemplateTest < ActionView::TestCase
1080
1140
 
1081
1141
  result = jbuild(<<-JBUILDER, request: req)
1082
1142
  json.hit do
1083
- json.wrap! :defer, :auto
1084
- json.hit2 do
1143
+ json.hit2(defer: :auto)do
1085
1144
  json.hit3 do
1086
1145
  json.greeting 'hello world'
1087
1146
  end
@@ -1111,8 +1170,7 @@ class BreezyTemplateTest < ActionView::TestCase
1111
1170
 
1112
1171
  result = jbuild(<<-JBUILDER, request: req)
1113
1172
  json.hit do
1114
- json.wrap! :defer, :manual
1115
- json.hit2 do
1173
+ json.hit2 defer: :manual do
1116
1174
  json.hit3 do
1117
1175
  json.greeting 'hello world'
1118
1176
  end
@@ -1144,8 +1202,7 @@ class BreezyTemplateTest < ActionView::TestCase
1144
1202
  json.hit2 do
1145
1203
  data = [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]
1146
1204
  json.array! data, key: :id do
1147
- json.wrap! :defer, :auto
1148
- json.greeting do
1205
+ json.greeting defer: :auto do
1149
1206
  json.gree 'hi'
1150
1207
  end
1151
1208
  end
@@ -1174,7 +1231,6 @@ class BreezyTemplateTest < ActionView::TestCase
1174
1231
  undef_context_methods :fragment_name_with_digest, :cache_fragment_name
1175
1232
 
1176
1233
  result = jbuild(<<-JBUILDER)
1177
- json.wrap! :defer, :auto
1178
1234
  json.hello(32, defer: :auto)
1179
1235
  JBUILDER
1180
1236
 
@@ -1193,7 +1249,6 @@ class BreezyTemplateTest < ActionView::TestCase
1193
1249
  test 'deferment is disabled when filtering by keypath' do
1194
1250
  undef_context_methods :fragment_name_with_digest, :cache_fragment_name
1195
1251
  result = jbuild(<<-JBUILDER, breezy_filter: 'hello.world')
1196
- json.wrap! :defer, :auto
1197
1252
  json.hello defer: :auto do
1198
1253
  json.world 32
1199
1254
  end
@@ -1215,10 +1270,8 @@ class BreezyTemplateTest < ActionView::TestCase
1215
1270
  test 'deferment is enabled at the end of a keypath when filtering' do
1216
1271
  undef_context_methods :fragment_name_with_digest, :cache_fragment_name
1217
1272
  result = jbuild(<<-JBUILDER, breezy_filter: 'hello')
1218
- json.wrap! :defer, :auto
1219
1273
  json.hello do
1220
- json.wrap! :defer, :auto
1221
- json.content do
1274
+ json.content defer: :auto do
1222
1275
  json.world 32
1223
1276
  end
1224
1277
  end