@@ -623,92 +623,155 @@ class JbuilderTest < ActiveSupport::TestCase
623
623
assert_equal [ 'oats and friends' ] , result . keys
624
624
end
625
625
626
- test 'key_format! with merge!' do
626
+ test 'key_format! is not applied deeply by default' do
627
+ names = { first_name : 'camel' , last_name : 'case' }
628
+ result = jbuild do |json |
629
+ json . key_format! camelize : :lower
630
+ json . set! :all_names , names
631
+ end
632
+
633
+ assert_equal %i[ first_name last_name ] , result [ 'allNames' ] . keys
634
+ end
635
+
636
+ test 'applying key_format! deeply can be enabled per scope' do
637
+ names = { first_name : 'camel' , last_name : 'case' }
638
+ result = jbuild do |json |
639
+ json . key_format! camelize : :lower
640
+ json . scope do
641
+ json . deep_format_keys!
642
+ json . set! :all_names , names
643
+ end
644
+ json . set! :all_names , names
645
+ end
646
+
647
+ assert_equal %w[ firstName lastName ] , result [ 'scope' ] [ 'allNames' ] . keys
648
+ assert_equal %i[ first_name last_name ] , result [ 'allNames' ] . keys
649
+ end
650
+
651
+ test 'applying key_format! deeply can be disabled per scope' do
652
+ names = { first_name : 'camel' , last_name : 'case' }
653
+ result = jbuild do |json |
654
+ json . key_format! camelize : :lower
655
+ json . deep_format_keys!
656
+ json . set! :all_names , names
657
+ json . scope do
658
+ json . deep_format_keys! false
659
+ json . set! :all_names , names
660
+ end
661
+ end
662
+
663
+ assert_equal %w[ firstName lastName ] , result [ 'allNames' ] . keys
664
+ assert_equal %i[ first_name last_name ] , result [ 'scope' ] [ 'allNames' ] . keys
665
+ end
666
+
667
+ test 'applying key_format! deeply can be enabled globally' do
668
+ names = { first_name : 'camel' , last_name : 'case' }
669
+
670
+ Jbuilder . deep_format_keys true
671
+ result = jbuild do |json |
672
+ json . key_format! camelize : :lower
673
+ json . set! :all_names , names
674
+ end
675
+
676
+ assert_equal %w[ firstName lastName ] , result [ 'allNames' ] . keys
677
+ Jbuilder . send ( :class_variable_set , '@@deep_format_keys' , false )
678
+ end
679
+
680
+ test 'deep key_format! with merge!' do
627
681
hash = { camel_style : 'for JS' }
628
682
result = jbuild do |json |
629
683
json . key_format! camelize : :lower
684
+ json . deep_format_keys!
630
685
json . merge! hash
631
686
end
632
687
633
688
assert_equal [ 'camelStyle' ] , result . keys
634
689
end
635
690
636
- test 'key_format! with merge! deep' do
691
+ test 'deep key_format! with merge! deep' do
637
692
hash = { camel_style : { sub_attr : 'for JS' } }
638
693
result = jbuild do |json |
639
694
json . key_format! camelize : :lower
695
+ json . deep_format_keys!
640
696
json . merge! hash
641
697
end
642
698
643
699
assert_equal [ 'subAttr' ] , result [ 'camelStyle' ] . keys
644
700
end
645
701
646
- test 'key_format! with set! array of hashes' do
702
+ test 'deep key_format! with set! array of hashes' do
647
703
names = [ { first_name : 'camel' , last_name : 'case' } ]
648
704
result = jbuild do |json |
649
705
json . key_format! camelize : :lower
706
+ json . deep_format_keys!
650
707
json . set! :names , names
651
708
end
652
709
653
710
assert_equal %w[ firstName lastName ] , result [ 'names' ] [ 0 ] . keys
654
711
end
655
712
656
- test 'key_format! with set! extracting hash from object' do
713
+ test 'deep key_format! with set! extracting hash from object' do
657
714
comment = Struct . new ( :author ) . new ( { first_name : 'camel' , last_name : 'case' } )
658
715
result = jbuild do |json |
659
716
json . key_format! camelize : :lower
717
+ json . deep_format_keys!
660
718
json . set! :comment , comment , :author
661
719
end
662
720
663
721
assert_equal %w[ firstName lastName ] , result [ 'comment' ] [ 'author' ] . keys
664
722
end
665
723
666
- test 'key_format! with array! of hashes' do
724
+ test 'deep key_format! with array! of hashes' do
667
725
names = [ { first_name : 'camel' , last_name : 'case' } ]
668
726
result = jbuild do |json |
669
727
json . key_format! camelize : :lower
728
+ json . deep_format_keys!
670
729
json . array! names
671
730
end
672
731
673
732
assert_equal %w[ firstName lastName ] , result [ 0 ] . keys
674
733
end
675
734
676
- test 'key_format! with merge! array of hashes' do
735
+ test 'deep key_format! with merge! array of hashes' do
677
736
names = [ { first_name : 'camel' , last_name : 'case' } ]
678
737
new_names = [ { first_name : 'snake' , last_name : 'case' } ]
679
738
result = jbuild do |json |
680
739
json . key_format! camelize : :lower
740
+ json . deep_format_keys!
681
741
json . array! names
682
742
json . merge! new_names
683
743
end
684
744
685
745
assert_equal %w[ firstName lastName ] , result [ 1 ] . keys
686
746
end
687
747
688
- test 'key_format! is applied to hash extracted from object' do
748
+ test 'deep key_format! is applied to hash extracted from object' do
689
749
comment = Struct . new ( :author ) . new ( { first_name : 'camel' , last_name : 'case' } )
690
750
result = jbuild do |json |
691
751
json . key_format! camelize : :lower
752
+ json . deep_format_keys!
692
753
json . extract! comment , :author
693
754
end
694
755
695
756
assert_equal %w[ firstName lastName ] , result [ 'author' ] . keys
696
757
end
697
758
698
- test 'key_format! is applied to hash extracted from hash' do
759
+ test 'deep key_format! is applied to hash extracted from hash' do
699
760
comment = { author : { first_name : 'camel' , last_name : 'case' } }
700
761
result = jbuild do |json |
701
762
json . key_format! camelize : :lower
763
+ json . deep_format_keys!
702
764
json . extract! comment , :author
703
765
end
704
766
705
767
assert_equal %w[ firstName lastName ] , result [ 'author' ] . keys
706
768
end
707
769
708
- test 'key_format! is applied to hash extracted directly from array' do
770
+ test 'deep key_format! is applied to hash extracted directly from array' do
709
771
comments = [ Struct . new ( :author ) . new ( { first_name : 'camel' , last_name : 'case' } ) ]
710
772
result = jbuild do |json |
711
773
json . key_format! camelize : :lower
774
+ json . deep_format_keys!
712
775
json . array! comments , :author
713
776
end
714
777
0 commit comments