jbuilder 2.6.1 → 2.11.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +108 -0
  3. data/.gitignore +2 -0
  4. data/Appraisals +16 -35
  5. data/CONTRIBUTING.md +4 -6
  6. data/Gemfile +0 -1
  7. data/MIT-LICENSE +1 -1
  8. data/README.md +99 -19
  9. data/Rakefile +2 -6
  10. data/gemfiles/rails_5_0.gemfile +3 -6
  11. data/gemfiles/rails_5_1.gemfile +10 -0
  12. data/gemfiles/rails_5_2.gemfile +10 -0
  13. data/gemfiles/rails_6_0.gemfile +10 -0
  14. data/gemfiles/rails_6_1.gemfile +10 -0
  15. data/gemfiles/rails_head.gemfile +10 -0
  16. data/jbuilder.gemspec +20 -6
  17. data/lib/generators/rails/jbuilder_generator.rb +12 -2
  18. data/lib/generators/rails/scaffold_controller_generator.rb +7 -1
  19. data/lib/generators/rails/templates/api_controller.rb +4 -4
  20. data/lib/generators/rails/templates/controller.rb +15 -19
  21. data/lib/generators/rails/templates/index.json.jbuilder +1 -1
  22. data/lib/generators/rails/templates/partial.json.jbuilder +16 -2
  23. data/lib/generators/rails/templates/show.json.jbuilder +1 -1
  24. data/lib/jbuilder/collection_renderer.rb +109 -0
  25. data/lib/jbuilder/errors.rb +7 -0
  26. data/lib/jbuilder/jbuilder_template.rb +65 -16
  27. data/lib/jbuilder/railtie.rb +1 -1
  28. data/lib/jbuilder.rb +70 -28
  29. data/test/jbuilder_dependency_tracker_test.rb +2 -2
  30. data/test/jbuilder_generator_test.rb +25 -5
  31. data/test/jbuilder_template_test.rb +280 -323
  32. data/test/jbuilder_test.rb +256 -4
  33. data/test/scaffold_api_controller_generator_test.rb +18 -3
  34. data/test/scaffold_controller_generator_test.rb +41 -8
  35. data/test/test_helper.rb +30 -8
  36. metadata +25 -31
  37. data/.travis.yml +0 -44
  38. data/CHANGELOG.md +0 -234
  39. data/gemfiles/rails_3_0.gemfile +0 -14
  40. data/gemfiles/rails_3_1.gemfile +0 -14
  41. data/gemfiles/rails_3_2.gemfile +0 -14
  42. data/gemfiles/rails_4_0.gemfile +0 -13
  43. data/gemfiles/rails_4_1.gemfile +0 -13
  44. data/gemfiles/rails_4_2.gemfile +0 -13
@@ -49,7 +49,7 @@ end
49
49
 
50
50
 
51
51
  class JbuilderTest < ActiveSupport::TestCase
52
- setup do
52
+ teardown do
53
53
  Jbuilder.send :class_variable_set, '@@key_formatter', nil
54
54
  end
55
55
 
@@ -75,7 +75,7 @@ class JbuilderTest < ActiveSupport::TestCase
75
75
  end
76
76
 
77
77
  assert result.has_key?('content')
78
- assert_equal nil, result['content']
78
+ assert_nil result['content']
79
79
  end
80
80
 
81
81
  test 'multiple keys' do
@@ -99,7 +99,7 @@ class JbuilderTest < ActiveSupport::TestCase
99
99
  assert_equal 32, result['age']
100
100
  end
101
101
 
102
- test 'extracting from object using call style for 1.9' do
102
+ test 'extracting from object using call style' do
103
103
  person = Struct.new(:name, :age).new('David', 32)
104
104
 
105
105
  result = jbuild do |json|
@@ -159,6 +159,25 @@ class JbuilderTest < ActiveSupport::TestCase
159
159
  assert_equal 32, result['author']['age']
160
160
  end
161
161
 
162
+ test 'nested blocks are additive' do
163
+ result = jbuild do |json|
164
+ json.author do
165
+ json.name do
166
+ json.first 'David'
167
+ end
168
+ end
169
+
170
+ json.author do
171
+ json.name do
172
+ json.last 'Heinemeier Hansson'
173
+ end
174
+ end
175
+ end
176
+
177
+ assert_equal 'David', result['author']['name']['first']
178
+ assert_equal 'Heinemeier Hansson', result['author']['name']['last']
179
+ end
180
+
162
181
  test 'support merge! method' do
163
182
  result = jbuild do |json|
164
183
  json.merge! 'foo' => 'bar'
@@ -177,6 +196,18 @@ class JbuilderTest < ActiveSupport::TestCase
177
196
  assert_equal 'Pavel', result['author']['name']
178
197
  end
179
198
 
199
+ test 'support merge! method with Jbuilder instance' do
200
+ obj = jbuild do |json|
201
+ json.foo 'bar'
202
+ end
203
+
204
+ result = jbuild do |json|
205
+ json.merge! obj
206
+ end
207
+
208
+ assert_equal 'bar', result['foo']
209
+ end
210
+
180
211
  test 'blocks are additive via extract syntax' do
181
212
  person = Person.new('Pavel', 27)
182
213
 
@@ -281,7 +312,7 @@ class JbuilderTest < ActiveSupport::TestCase
281
312
  assert_equal 'world', result['comments'].second['content']
282
313
  end
283
314
 
284
- test 'nesting multiple chilren from a non-Enumerable that responds to #map with inline loop' do
315
+ test 'nesting multiple children from a non-Enumerable that responds to #map with inline loop' do
285
316
  comments = NonEnumerable.new([ Comment.new('hello', 1), Comment.new('world', 2) ])
286
317
 
287
318
  result = jbuild do |json|
@@ -535,6 +566,36 @@ class JbuilderTest < ActiveSupport::TestCase
535
566
  assert_equal 'one', result['level1']
536
567
  end
537
568
 
569
+ test 'key_format! can be changed in child elements' do
570
+ result = jbuild do |json|
571
+ json.key_format! camelize: :lower
572
+
573
+ json.level_one do
574
+ json.key_format! :upcase
575
+ json.value 'two'
576
+ end
577
+ end
578
+
579
+ assert_equal ['levelOne'], result.keys
580
+ assert_equal ['VALUE'], result['levelOne'].keys
581
+ end
582
+
583
+ test 'key_format! can be changed in array!' do
584
+ result = jbuild do |json|
585
+ json.key_format! camelize: :lower
586
+
587
+ json.level_one do
588
+ json.array! [{value: 'two'}] do |object|
589
+ json.key_format! :upcase
590
+ json.value object[:value]
591
+ end
592
+ end
593
+ end
594
+
595
+ assert_equal ['levelOne'], result.keys
596
+ assert_equal ['VALUE'], result['levelOne'][0].keys
597
+ end
598
+
538
599
  test 'key_format! with no parameter' do
539
600
  result = jbuild do |json|
540
601
  json.key_format! :upcase
@@ -562,6 +623,161 @@ class JbuilderTest < ActiveSupport::TestCase
562
623
  assert_equal ['oats and friends'], result.keys
563
624
  end
564
625
 
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
681
+ hash = { camel_style: 'for JS' }
682
+ result = jbuild do |json|
683
+ json.key_format! camelize: :lower
684
+ json.deep_format_keys!
685
+ json.merge! hash
686
+ end
687
+
688
+ assert_equal ['camelStyle'], result.keys
689
+ end
690
+
691
+ test 'deep key_format! with merge! deep' do
692
+ hash = { camel_style: { sub_attr: 'for JS' } }
693
+ result = jbuild do |json|
694
+ json.key_format! camelize: :lower
695
+ json.deep_format_keys!
696
+ json.merge! hash
697
+ end
698
+
699
+ assert_equal ['subAttr'], result['camelStyle'].keys
700
+ end
701
+
702
+ test 'deep key_format! with set! array of hashes' do
703
+ names = [{ first_name: 'camel', last_name: 'case' }]
704
+ result = jbuild do |json|
705
+ json.key_format! camelize: :lower
706
+ json.deep_format_keys!
707
+ json.set! :names, names
708
+ end
709
+
710
+ assert_equal %w[firstName lastName], result['names'][0].keys
711
+ end
712
+
713
+ test 'deep key_format! with set! extracting hash from object' do
714
+ comment = Struct.new(:author).new({ first_name: 'camel', last_name: 'case' })
715
+ result = jbuild do |json|
716
+ json.key_format! camelize: :lower
717
+ json.deep_format_keys!
718
+ json.set! :comment, comment, :author
719
+ end
720
+
721
+ assert_equal %w[firstName lastName], result['comment']['author'].keys
722
+ end
723
+
724
+ test 'deep key_format! with array! of hashes' do
725
+ names = [{ first_name: 'camel', last_name: 'case' }]
726
+ result = jbuild do |json|
727
+ json.key_format! camelize: :lower
728
+ json.deep_format_keys!
729
+ json.array! names
730
+ end
731
+
732
+ assert_equal %w[firstName lastName], result[0].keys
733
+ end
734
+
735
+ test 'deep key_format! with merge! array of hashes' do
736
+ names = [{ first_name: 'camel', last_name: 'case' }]
737
+ new_names = [{ first_name: 'snake', last_name: 'case' }]
738
+ result = jbuild do |json|
739
+ json.key_format! camelize: :lower
740
+ json.deep_format_keys!
741
+ json.array! names
742
+ json.merge! new_names
743
+ end
744
+
745
+ assert_equal %w[firstName lastName], result[1].keys
746
+ end
747
+
748
+ test 'deep key_format! is applied to hash extracted from object' do
749
+ comment = Struct.new(:author).new({ first_name: 'camel', last_name: 'case' })
750
+ result = jbuild do |json|
751
+ json.key_format! camelize: :lower
752
+ json.deep_format_keys!
753
+ json.extract! comment, :author
754
+ end
755
+
756
+ assert_equal %w[firstName lastName], result['author'].keys
757
+ end
758
+
759
+ test 'deep key_format! is applied to hash extracted from hash' do
760
+ comment = {author: { first_name: 'camel', last_name: 'case' }}
761
+ result = jbuild do |json|
762
+ json.key_format! camelize: :lower
763
+ json.deep_format_keys!
764
+ json.extract! comment, :author
765
+ end
766
+
767
+ assert_equal %w[firstName lastName], result['author'].keys
768
+ end
769
+
770
+ test 'deep key_format! is applied to hash extracted directly from array' do
771
+ comments = [Struct.new(:author).new({ first_name: 'camel', last_name: 'case' })]
772
+ result = jbuild do |json|
773
+ json.key_format! camelize: :lower
774
+ json.deep_format_keys!
775
+ json.array! comments, :author
776
+ end
777
+
778
+ assert_equal %w[firstName lastName], result[0]['author'].keys
779
+ end
780
+
565
781
  test 'default key_format!' do
566
782
  Jbuilder.key_format camelize: :lower
567
783
  result = jbuild{ |json| json.camel_style 'for JS' }
@@ -686,4 +902,40 @@ class JbuilderTest < ActiveSupport::TestCase
686
902
  end
687
903
  end
688
904
  end
905
+
906
+ test "throws MergeError when trying to merge array with non-empty hash" do
907
+ assert_raise Jbuilder::MergeError do
908
+ jbuild do |json|
909
+ json.name "Daniel"
910
+ json.merge! []
911
+ end
912
+ end
913
+ end
914
+
915
+ test "throws MergeError when trying to merge hash with array" do
916
+ assert_raise Jbuilder::MergeError do
917
+ jbuild do |json|
918
+ json.array!
919
+ json.merge!({})
920
+ end
921
+ end
922
+ end
923
+
924
+ test "throws MergeError when trying to merge invalid objects" do
925
+ assert_raise Jbuilder::MergeError do
926
+ jbuild do |json|
927
+ json.name "Daniel"
928
+ json.merge! "Nope"
929
+ end
930
+ end
931
+ end
932
+
933
+ if RUBY_VERSION >= "2.2.10"
934
+ test "respects JSON encoding customizations" do
935
+ # Active Support overrides Time#as_json for custom formatting.
936
+ # Ensure we call #to_json on the final attributes instead of JSON.dump.
937
+ result = JSON.load(Jbuilder.encode { |json| json.time Time.parse("2018-05-13 11:51:00.485 -0400") })
938
+ assert_equal "2018-05-13T11:51:00.485-04:00", result["time"]
939
+ end
940
+ end
689
941
  end
@@ -6,7 +6,7 @@ if Rails::VERSION::MAJOR > 4
6
6
 
7
7
  class ScaffoldApiControllerGeneratorTest < Rails::Generators::TestCase
8
8
  tests Rails::Generators::ScaffoldControllerGenerator
9
- arguments %w(Post title body:text --api)
9
+ arguments %w(Post title body:text images:attachments --api)
10
10
  destination File.expand_path('../tmp', __FILE__)
11
11
  setup :prepare_destination
12
12
 
@@ -39,11 +39,15 @@ if Rails::VERSION::MAJOR > 4
39
39
  end
40
40
 
41
41
  assert_match %r{def post_params}, content
42
- assert_match %r{params\.require\(:post\)\.permit\(:title, :body\)}, content
42
+ if Rails::VERSION::MAJOR >= 6
43
+ assert_match %r{params\.require\(:post\)\.permit\(:title, :body, images: \[\]\)}, content
44
+ else
45
+ assert_match %r{params\.require\(:post\)\.permit\(:title, :body, :images\)}, content
46
+ end
43
47
  end
44
48
  end
45
49
 
46
- test 'dont use require and permit if there are no attributes' do
50
+ test "don't use require and permit if there are no attributes" do
47
51
  run_generator %w(Post --api)
48
52
 
49
53
  assert_file 'app/controllers/posts_controller.rb' do |content|
@@ -51,5 +55,16 @@ if Rails::VERSION::MAJOR > 4
51
55
  assert_match %r{params\.fetch\(:post, \{\}\)}, content
52
56
  end
53
57
  end
58
+
59
+
60
+ if Rails::VERSION::MAJOR >= 6
61
+ test 'handles virtual attributes' do
62
+ run_generator ["Message", "content:rich_text", "video:attachment", "photos:attachments"]
63
+
64
+ assert_file 'app/controllers/messages_controller.rb' do |content|
65
+ assert_match %r{params\.require\(:message\)\.permit\(:content, :video, photos: \[\]\)}, content
66
+ end
67
+ end
68
+ end
54
69
  end
55
70
  end
@@ -4,7 +4,7 @@ require 'generators/rails/scaffold_controller_generator'
4
4
 
5
5
  class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
6
6
  tests Rails::Generators::ScaffoldControllerGenerator
7
- arguments %w(Post title body:text)
7
+ arguments %w(Post title body:text images:attachments)
8
8
  destination File.expand_path('../tmp', __FILE__)
9
9
  setup :prepare_destination
10
10
 
@@ -31,31 +31,54 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
31
31
  assert_instance_method :create, content do |m|
32
32
  assert_match %r{@post = Post\.new\(post_params\)}, m
33
33
  assert_match %r{@post\.save}, m
34
- assert_match %r{format\.html \{ redirect_to @post, notice: 'Post was successfully created\.' \}}, m
34
+ assert_match %r{format\.html \{ redirect_to post_url\(@post\), notice: "Post was successfully created\." \}}, m
35
35
  assert_match %r{format\.json \{ render :show, status: :created, location: @post \}}, m
36
- assert_match %r{format\.html \{ render :new \}}, m
36
+ assert_match %r{format\.html \{ render :new, status: :unprocessable_entity \}}, m
37
37
  assert_match %r{format\.json \{ render json: @post\.errors, status: :unprocessable_entity \}}, m
38
38
  end
39
39
 
40
40
  assert_instance_method :update, content do |m|
41
- assert_match %r{format\.html \{ redirect_to @post, notice: 'Post was successfully updated\.' \}}, m
41
+ assert_match %r{format\.html \{ redirect_to post_url\(@post\), notice: "Post was successfully updated\." \}}, m
42
42
  assert_match %r{format\.json \{ render :show, status: :ok, location: @post \}}, m
43
- assert_match %r{format\.html \{ render :edit \}}, m
43
+ assert_match %r{format\.html \{ render :edit, status: :unprocessable_entity \}}, m
44
44
  assert_match %r{format\.json \{ render json: @post.errors, status: :unprocessable_entity \}}, m
45
45
  end
46
46
 
47
47
  assert_instance_method :destroy, content do |m|
48
48
  assert_match %r{@post\.destroy}, m
49
- assert_match %r{format\.html \{ redirect_to posts_url, notice: 'Post was successfully destroyed\.' \}}, m
49
+ assert_match %r{format\.html \{ redirect_to posts_url, notice: "Post was successfully destroyed\." \}}, m
50
50
  assert_match %r{format\.json \{ head :no_content \}}, m
51
51
  end
52
52
 
53
53
  assert_match %r{def post_params}, content
54
- assert_match %r{params\.require\(:post\)\.permit\(:title, :body\)}, content
54
+ if Rails::VERSION::MAJOR >= 6
55
+ assert_match %r{params\.require\(:post\)\.permit\(:title, :body, images: \[\]\)}, content
56
+ else
57
+ assert_match %r{params\.require\(:post\)\.permit\(:title, :body, :images\)}, content
58
+ end
59
+ end
60
+ end
61
+
62
+ if Rails::VERSION::MAJOR >= 6
63
+ test 'controller with namespace' do
64
+ run_generator %w(Admin::Post --model-name=Post)
65
+ assert_file 'app/controllers/admin/posts_controller.rb' do |content|
66
+ assert_instance_method :create, content do |m|
67
+ assert_match %r{format\.html \{ redirect_to admin_post_url\(@post\), notice: "Post was successfully created\." \}}, m
68
+ end
69
+
70
+ assert_instance_method :update, content do |m|
71
+ assert_match %r{format\.html \{ redirect_to admin_post_url\(@post\), notice: "Post was successfully updated\." \}}, m
72
+ end
73
+
74
+ assert_instance_method :destroy, content do |m|
75
+ assert_match %r{format\.html \{ redirect_to admin_posts_url, notice: "Post was successfully destroyed\." \}}, m
76
+ end
77
+ end
55
78
  end
56
79
  end
57
80
 
58
- test 'dont use require and permit if there are no attributes' do
81
+ test "don't use require and permit if there are no attributes" do
59
82
  run_generator %w(Post)
60
83
 
61
84
  assert_file 'app/controllers/posts_controller.rb' do |content|
@@ -63,4 +86,14 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
63
86
  assert_match %r{params\.fetch\(:post, \{\}\)}, content
64
87
  end
65
88
  end
89
+
90
+ if Rails::VERSION::MAJOR >= 6
91
+ test 'handles virtual attributes' do
92
+ run_generator %w(Message content:rich_text video:attachment photos:attachments)
93
+
94
+ assert_file 'app/controllers/messages_controller.rb' do |content|
95
+ assert_match %r{params\.require\(:message\)\.permit\(:content, :video, photos: \[\]\)}, content
96
+ end
97
+ end
98
+ end
66
99
  end
data/test/test_helper.rb CHANGED
@@ -1,14 +1,36 @@
1
1
  require "bundler/setup"
2
- require "active_support"
3
- require "rails/version"
4
2
 
5
- if Rails::VERSION::STRING > "4.0"
6
- require "active_support/testing/autorun"
7
- else
8
- require "test/unit"
3
+ require "rails"
4
+
5
+ require "jbuilder"
6
+
7
+ require "active_support/core_ext/array/access"
8
+ require "active_support/cache/memory_store"
9
+ require "active_support/json"
10
+ require "active_model"
11
+
12
+ require "active_support/testing/autorun"
13
+ require "mocha/minitest"
14
+
15
+ ActiveSupport.test_order = :random
16
+
17
+ class << Rails
18
+ def cache
19
+ @cache ||= ActiveSupport::Cache::MemoryStore.new
20
+ end
9
21
  end
10
22
 
23
+ Jbuilder::CollectionRenderer.collection_cache = Rails.cache
24
+
25
+ class Post < Struct.new(:id, :body, :author_name)
26
+ def cache_key
27
+ "post-#{id}"
28
+ end
29
+ end
11
30
 
12
- if ActiveSupport.respond_to?(:test_order=)
13
- ActiveSupport.test_order = :random
31
+ class Racer < Struct.new(:id, :name)
32
+ extend ActiveModel::Naming
33
+ include ActiveModel::Conversion
14
34
  end
35
+
36
+ ActionView::Template.register_template_handler :jbuilder, JbuilderHandler
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jbuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: 2.11.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
- - Pavel Pravosud
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2016-11-28 00:00:00.000000000 Z
11
+ date: 2021-12-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
@@ -17,58 +16,48 @@ dependencies:
17
16
  requirements:
18
17
  - - ">="
19
18
  - !ruby/object:Gem::Version
20
- version: 3.0.0
21
- - - "<"
22
- - !ruby/object:Gem::Version
23
- version: '5.1'
19
+ version: 5.0.0
24
20
  type: :runtime
25
21
  prerelease: false
26
22
  version_requirements: !ruby/object:Gem::Requirement
27
23
  requirements:
28
24
  - - ">="
29
25
  - !ruby/object:Gem::Version
30
- version: 3.0.0
31
- - - "<"
32
- - !ruby/object:Gem::Version
33
- version: '5.1'
26
+ version: 5.0.0
34
27
  - !ruby/object:Gem::Dependency
35
- name: multi_json
28
+ name: actionview
36
29
  requirement: !ruby/object:Gem::Requirement
37
30
  requirements:
38
- - - "~>"
31
+ - - ">="
39
32
  - !ruby/object:Gem::Version
40
- version: '1.2'
33
+ version: 5.0.0
41
34
  type: :runtime
42
35
  prerelease: false
43
36
  version_requirements: !ruby/object:Gem::Requirement
44
37
  requirements:
45
- - - "~>"
38
+ - - ">="
46
39
  - !ruby/object:Gem::Version
47
- version: '1.2'
40
+ version: 5.0.0
48
41
  description:
49
- email:
50
- - david@37signals.com
51
- - pavel@pravosud.com
42
+ email: david@basecamp.com
52
43
  executables: []
53
44
  extensions: []
54
45
  extra_rdoc_files: []
55
46
  files:
47
+ - ".github/workflows/ruby.yml"
56
48
  - ".gitignore"
57
- - ".travis.yml"
58
49
  - Appraisals
59
- - CHANGELOG.md
60
50
  - CONTRIBUTING.md
61
51
  - Gemfile
62
52
  - MIT-LICENSE
63
53
  - README.md
64
54
  - Rakefile
65
- - gemfiles/rails_3_0.gemfile
66
- - gemfiles/rails_3_1.gemfile
67
- - gemfiles/rails_3_2.gemfile
68
- - gemfiles/rails_4_0.gemfile
69
- - gemfiles/rails_4_1.gemfile
70
- - gemfiles/rails_4_2.gemfile
71
55
  - gemfiles/rails_5_0.gemfile
56
+ - gemfiles/rails_5_1.gemfile
57
+ - gemfiles/rails_5_2.gemfile
58
+ - gemfiles/rails_6_0.gemfile
59
+ - gemfiles/rails_6_1.gemfile
60
+ - gemfiles/rails_head.gemfile
72
61
  - jbuilder.gemspec
73
62
  - lib/generators/rails/jbuilder_generator.rb
74
63
  - lib/generators/rails/scaffold_controller_generator.rb
@@ -79,6 +68,7 @@ files:
79
68
  - lib/generators/rails/templates/show.json.jbuilder
80
69
  - lib/jbuilder.rb
81
70
  - lib/jbuilder/blank.rb
71
+ - lib/jbuilder/collection_renderer.rb
82
72
  - lib/jbuilder/dependency_tracker.rb
83
73
  - lib/jbuilder/errors.rb
84
74
  - lib/jbuilder/jbuilder.rb
@@ -95,7 +85,12 @@ files:
95
85
  homepage: https://github.com/rails/jbuilder
96
86
  licenses:
97
87
  - MIT
98
- metadata: {}
88
+ metadata:
89
+ bug_tracker_uri: https://github.com/rails/jbuilder/issues
90
+ changelog_uri: https://github.com/rails/jbuilder/releases/tag/v2.11.5
91
+ mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
92
+ source_code_uri: https://github.com/rails/jbuilder/tree/v2.11.5
93
+ rubygems_mfa_required: 'true'
99
94
  post_install_message:
100
95
  rdoc_options: []
101
96
  require_paths:
@@ -104,15 +99,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
99
  requirements:
105
100
  - - ">="
106
101
  - !ruby/object:Gem::Version
107
- version: 1.9.3
102
+ version: 2.2.2
108
103
  required_rubygems_version: !ruby/object:Gem::Requirement
109
104
  requirements:
110
105
  - - ">="
111
106
  - !ruby/object:Gem::Version
112
107
  version: '0'
113
108
  requirements: []
114
- rubyforge_project:
115
- rubygems_version: 2.6.8
109
+ rubygems_version: 3.2.32
116
110
  signing_key:
117
111
  specification_version: 4
118
112
  summary: Create JSON structures via a Builder-style DSL
data/.travis.yml DELETED
@@ -1,44 +0,0 @@
1
- language: ruby
2
-
3
- sudo: false
4
- cache: bundler
5
-
6
- rvm:
7
- - 1.9
8
- - 2.0
9
- - 2.1
10
- - 2.2.5
11
- - 2.3.1
12
- - ruby-head
13
- - jruby-19mode
14
- - rbx
15
-
16
- gemfile:
17
- - gemfiles/rails_3_0.gemfile
18
- - gemfiles/rails_3_1.gemfile
19
- - gemfiles/rails_3_2.gemfile
20
- - gemfiles/rails_4_0.gemfile
21
- - gemfiles/rails_4_1.gemfile
22
- - gemfiles/rails_4_2.gemfile
23
- - gemfiles/rails_5_0.gemfile
24
-
25
- matrix:
26
- allow_failures:
27
- - rvm: jruby-19mode
28
- - rvm: rbx
29
- - rvm: ruby-head
30
- fast_finish: true
31
- exclude:
32
- - rvm: 1.9
33
- gemfile: gemfiles/rails_5_0.gemfile
34
- - rvm: 2.0
35
- gemfile: gemfiles/rails_5_0.gemfile
36
- - rvm: 2.1
37
- gemfile: gemfiles/rails_5_0.gemfile
38
- - rvm: jruby-19mode
39
- gemfile: gemfiles/rails_5_0.gemfile
40
- - rvm: rbx
41
- gemfile: gemfiles/rails_5_0.gemfile
42
-
43
- notifications:
44
- email: false