jbuilder 2.11.5 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ce8fbeac8b34ee290535e98a284a1247e2de1b5272c4679c1b89a89ff8149db
4
- data.tar.gz: cdaeb1302c4755ca43f037328698afe29fe658f2094c99e2c6f81f0000b9368c
3
+ metadata.gz: 4178787c12de3a44e4d47e347b7eb81da4cbb75222f9726db40b22124998041e
4
+ data.tar.gz: 967cc31e472ad0e381e9c87f27e29be40aa2c71db6fb9f9131ef53b434bd3e5b
5
5
  SHA512:
6
- metadata.gz: 6903b1aa13786fd5501d8e667eb7a913ebd469d24ce183a24cdf949a62788b1e598c2e0678c5ed5e369d4232c7720e284850f735c5be6f4691e4ecf42256d21a
7
- data.tar.gz: 2a40e415a25a4d8680ac00ba81b9984188ef35440869a357db4fd7184d3f0b36d0ce10545a0d5253e6d12374b2f1d51f5a96f1ded1370ec7eddecaee469afc61
6
+ metadata.gz: ace71a1fc2424b0d9428d66f595f155367763d6d8d28a21e87838418259f8c2d3d370c3a96a7134b5aac729fb5007f053de5a6f0bebcc3d4a4c13f5e9deb0d92
7
+ data.tar.gz: 4b0b4992c64d2bbbfb83a343800555456a7c201d5f5fc19c5e919fd9ed9a1d448f7b902d841c99666c9794c70e15ad8b1cb94d5de4f61caca95901bbead3f046
@@ -6,7 +6,7 @@ jobs:
6
6
  test:
7
7
  name: Ruby ${{ matrix.ruby }} (${{ matrix.gemfile }})
8
8
  runs-on: ubuntu-20.04
9
- continue-on-error: ${{ matrix.experimental }}
9
+ continue-on-error: ${{ matrix.gemfile == 'rails_head' }}
10
10
  env:
11
11
  BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
12
12
  BUNDLE_JOBS: 4
@@ -14,90 +14,74 @@ jobs:
14
14
  strategy:
15
15
  fail-fast: false
16
16
  matrix:
17
- ruby:
18
- - "2.2"
19
- - "2.3"
20
- - "2.4"
21
- - "2.5"
22
- - "2.6"
17
+ ruby:
23
18
  - "2.7"
24
19
  - "3.0"
20
+ - "3.1"
21
+ - "3.2"
22
+ - "3.3"
25
23
 
26
24
  gemfile:
27
- - "rails_5_0"
28
- - "rails_5_1"
29
- - "rails_5_2"
30
- - "rails_6_0"
31
25
  - "rails_6_1"
26
+ - "rails_7_0"
27
+ - "rails_7_1"
32
28
  - "rails_head"
33
-
34
- experimental: [false]
29
+
35
30
  exclude:
36
31
  - ruby: 2.7
37
- gemfile: rails_5_0
32
+ gemfile: rails_head
38
33
  - ruby: '3.0'
34
+ gemfile: rails_head
35
+
36
+ include:
37
+ - ruby: 2.2
39
38
  gemfile: rails_5_0
40
- - ruby: head
41
- gemfile: rails_5_0
42
- - ruby: 2.7
43
- gemfile: rails_5_1
44
- - ruby: '3.0'
39
+ - ruby: 2.2
45
40
  gemfile: rails_5_1
46
- - ruby: head
41
+ - ruby: 2.3
42
+ gemfile: rails_5_0
43
+ - ruby: 2.3
47
44
  gemfile: rails_5_1
48
- - ruby: 2.2
49
- gemfile: rails_5_2
50
- - ruby: 2.7
51
- gemfile: rails_5_2
52
- - ruby: '3.0'
53
- gemfile: rails_5_2
54
- - ruby: head
55
- gemfile: rails_5_2
56
- - ruby: 2.2
57
- gemfile: rails_6_0
58
45
  - ruby: 2.3
59
- gemfile: rails_6_0
46
+ gemfile: rails_5_2
60
47
  - ruby: 2.4
61
- gemfile: rails_6_0
62
- - ruby: '3.0'
63
- gemfile: rails_6_0
64
- - ruby: head
65
- gemfile: rails_6_0
66
- - ruby: 2.2
67
- gemfile: rails_6_1
68
- - ruby: 2.3
69
- gemfile: rails_6_1
48
+ gemfile: rails_5_0
70
49
  - ruby: 2.4
71
- gemfile: rails_6_1
72
- - ruby: 2.2
73
- gemfile: rails_head
74
- - ruby: 2.3
75
- gemfile: rails_head
50
+ gemfile: rails_5_1
76
51
  - ruby: 2.4
77
- gemfile: rails_head
52
+ gemfile: rails_5_2
78
53
  - ruby: 2.5
79
- gemfile: rails_head
54
+ gemfile: rails_5_0
55
+ - ruby: 2.5
56
+ gemfile: rails_5_1
57
+ - ruby: 2.5
58
+ gemfile: rails_5_2
59
+ - ruby: 2.5
60
+ gemfile: rails_6_0
61
+ - ruby: 2.5
62
+ gemfile: rails_6_1
80
63
  - ruby: 2.6
81
- gemfile: rails_head
82
- - ruby: 2.7
83
- gemfile: rails_head
84
- experimental: false
85
- - ruby: '3.0'
86
- gemfile: rails_head
87
- experimental: false
88
- include:
64
+ gemfile: rails_5_0
65
+ - ruby: 2.6
66
+ gemfile: rails_5_1
67
+ - ruby: 2.6
68
+ gemfile: rails_5_2
69
+ - ruby: 2.6
70
+ gemfile: rails_6_0
71
+ - ruby: 2.6
72
+ gemfile: rails_6_1
89
73
  - ruby: 2.7
74
+ gemfile: rails_6_0
75
+
76
+ - ruby: '3.1'
90
77
  gemfile: rails_head
91
- experimental: true
92
- - ruby: '3.0'
78
+ - ruby: '3.2'
93
79
  gemfile: rails_head
94
- experimental: true
95
80
  - ruby: head
96
81
  gemfile: rails_head
97
- experimental: true
98
82
 
99
83
  steps:
100
- - uses: actions/checkout@v2
84
+ - uses: actions/checkout@v4
101
85
 
102
86
  - uses: ruby/setup-ruby@v1
103
87
  with:
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  tmp
2
+ /log
2
3
  gemfiles/.bundle
3
4
  gemfiles/*.lock
4
5
  Gemfile.lock
data/Appraisals CHANGED
@@ -1,13 +1,18 @@
1
- appraise "rails-5-0" do
2
- gem "rails", "~> 5.0.0"
3
- end
1
+ if RUBY_VERSION < "2.7.0"
2
+ appraise "rails-5-0" do
3
+ gem "rails", "~> 5.0.0"
4
+ gem "loofah", "< 2.21.0"
5
+ end
4
6
 
5
- appraise "rails-5-1" do
6
- gem "rails", "~> 5.1.0"
7
- end
7
+ appraise "rails-5-1" do
8
+ gem "rails", "~> 5.1.0"
9
+ gem "loofah", "< 2.21.0"
10
+ end
8
11
 
9
- appraise "rails-5-2" do
10
- gem "rails", "~> 5.2.0"
12
+ appraise "rails-5-2" do
13
+ gem "rails", "~> 5.2.0"
14
+ gem "loofah", "< 2.21.0"
15
+ end
11
16
  end
12
17
 
13
18
  if RUBY_VERSION >= "2.5.0"
@@ -18,6 +23,16 @@ if RUBY_VERSION >= "2.5.0"
18
23
  appraise "rails-6-1" do
19
24
  gem "rails", "~> 6.1.0"
20
25
  end
26
+ end
27
+
28
+ if RUBY_VERSION >= "2.7.0"
29
+ appraise "rails-7-0" do
30
+ gem "rails", "~> 7.0.0"
31
+ end
32
+
33
+ appraise "rails-7-1" do
34
+ gem "rails", "~> 7.1.0"
35
+ end
21
36
 
22
37
  appraise "rails-head" do
23
38
  gem "rails", github: "rails/rails", branch: "main"
data/README.md CHANGED
@@ -338,6 +338,10 @@ environment.rb for example):
338
338
  Jbuilder.deep_format_keys true
339
339
  ```
340
340
 
341
+ ## Testing JBuilder Response body with RSpec
342
+
343
+ To test the response body of your controller spec, enable `render_views` in your RSpec context. This [configuration](https://rspec.info/features/6-0/rspec-rails/controller-specs/render-views) renders the views in a controller test.
344
+
341
345
  ## Contributing to Jbuilder
342
346
 
343
347
  Jbuilder is the work of many contributors. You're encouraged to submit pull requests, propose
@@ -6,5 +6,6 @@ gem "rake"
6
6
  gem "mocha", require: false
7
7
  gem "appraisal"
8
8
  gem "rails", "~> 5.0.0"
9
+ gem "loofah", "< 2.21.0"
9
10
 
10
11
  gemspec path: "../"
@@ -6,5 +6,6 @@ gem "rake"
6
6
  gem "mocha", require: false
7
7
  gem "appraisal"
8
8
  gem "rails", "~> 5.1.0"
9
+ gem "loofah", "< 2.21.0"
9
10
 
10
11
  gemspec path: "../"
@@ -6,5 +6,6 @@ gem "rake"
6
6
  gem "mocha", require: false
7
7
  gem "appraisal"
8
8
  gem "rails", "~> 5.2.0"
9
+ gem "loofah", "< 2.21.0"
9
10
 
10
11
  gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "mocha", require: false
7
+ gem "appraisal"
8
+ gem "rails", "~> 7.0.0"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "mocha", require: false
7
+ gem "appraisal"
8
+ gem "rails", "~> 7.1.0"
9
+
10
+ gemspec path: "../"
data/jbuilder.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jbuilder'
3
- s.version = '2.11.5'
3
+ s.version = '2.12.0'
4
4
  s.authors = 'David Heinemeier Hansson'
5
5
  s.email = 'david@basecamp.com'
6
6
  s.summary = 'Create JSON structures via a Builder-style DSL'
@@ -54,6 +54,10 @@ module Rails
54
54
  def virtual_attributes
55
55
  attributes.select {|name| name.respond_to?(:virtual?) && name.virtual? }
56
56
  end
57
+
58
+ def partial_path_name
59
+ [controller_file_path, singular_table_name].join("/")
60
+ end
57
61
  end
58
62
  end
59
63
  end
@@ -1 +1 @@
1
- json.array! @<%= plural_table_name %>, partial: "<%= plural_table_name %>/<%= singular_table_name %>", as: :<%= singular_table_name %>
1
+ json.array! @<%= plural_table_name %>, partial: "<%= partial_path_name %>", as: :<%= singular_table_name %>
@@ -1 +1 @@
1
- json.partial! "<%= plural_table_name %>/<%= singular_table_name %>", <%= singular_table_name %>: @<%= singular_table_name %>
1
+ json.partial! "<%= partial_path_name %>", <%= singular_table_name %>: @<%= singular_table_name %>
@@ -106,4 +106,11 @@ class Jbuilder
106
106
  end
107
107
  end
108
108
  end
109
+
110
+ class EnumerableCompat < ::SimpleDelegator
111
+ # Rails 6.1 requires this.
112
+ def size(*args, &block)
113
+ __getobj__.count(*args, &block)
114
+ end
115
+ end
109
116
  end
@@ -1,7 +1 @@
1
- Jbuilder = Class.new(begin
2
- require 'active_support/proxy_object'
3
- ActiveSupport::ProxyObject
4
- rescue LoadError
5
- require 'active_support/basic_object'
6
- ActiveSupport::BasicObject
7
- end)
1
+ Jbuilder = Class.new(BasicObject)
@@ -0,0 +1,73 @@
1
+ class Jbuilder::DependencyTracker
2
+ EXPLICIT_DEPENDENCY = /# Template Dependency: (\S+)/
3
+
4
+ # Matches:
5
+ # json.partial! "messages/message"
6
+ # json.partial!('messages/message')
7
+ #
8
+ DIRECT_RENDERS = /
9
+ \w+\.partial! # json.partial!
10
+ \(?\s* # optional parenthesis
11
+ (['"])([^'"]+)\1 # quoted value
12
+ /x
13
+
14
+ # Matches:
15
+ # json.partial! partial: "comments/comment"
16
+ # json.comments @post.comments, partial: "comments/comment", as: :comment
17
+ # json.array! @posts, partial: "posts/post", as: :post
18
+ # = render partial: "account"
19
+ #
20
+ INDIRECT_RENDERS = /
21
+ (?::partial\s*=>|partial:) # partial: or :partial =>
22
+ \s* # optional whitespace
23
+ (['"])([^'"]+)\1 # quoted value
24
+ /x
25
+
26
+ def self.call(name, template, view_paths = nil)
27
+ new(name, template, view_paths).dependencies
28
+ end
29
+
30
+ def initialize(name, template, view_paths = nil)
31
+ @name, @template, @view_paths = name, template, view_paths
32
+ end
33
+
34
+ def dependencies
35
+ direct_dependencies + indirect_dependencies + explicit_dependencies
36
+ end
37
+
38
+ private
39
+
40
+ attr_reader :name, :template
41
+
42
+ def direct_dependencies
43
+ source.scan(DIRECT_RENDERS).map(&:second)
44
+ end
45
+
46
+ def indirect_dependencies
47
+ source.scan(INDIRECT_RENDERS).map(&:second)
48
+ end
49
+
50
+ def explicit_dependencies
51
+ dependencies = source.scan(EXPLICIT_DEPENDENCY).flatten.uniq
52
+
53
+ wildcards, explicits = dependencies.partition { |dependency| dependency.end_with?("/*") }
54
+
55
+ (explicits + resolve_directories(wildcards)).uniq
56
+ end
57
+
58
+ def resolve_directories(wildcard_dependencies)
59
+ return [] unless @view_paths
60
+ return [] if wildcard_dependencies.empty?
61
+
62
+ # Remove trailing "/*"
63
+ prefixes = wildcard_dependencies.map { |query| query[0..-3] }
64
+
65
+ @view_paths.flat_map(&:all_template_paths).uniq.filter_map { |path|
66
+ path.to_s if prefixes.include?(path.prefix)
67
+ }.sort
68
+ end
69
+
70
+ def source
71
+ template.source
72
+ end
73
+ end
@@ -89,7 +89,7 @@ class JbuilderTemplate < Jbuilder
89
89
  # # json.extra 'This will not work either, the root must be exclusive'
90
90
  def cache_root!(key=nil, options={})
91
91
  if @context.controller.perform_caching
92
- raise "cache_root! can't be used after JSON structures have been defined" if @attributes.present?
92
+ ::Kernel.raise "cache_root! can't be used after JSON structures have been defined" if @attributes.present?
93
93
 
94
94
  @cached_root = _cache_fragment_for([ :root, key ], options) { yield; target! }
95
95
  else
@@ -145,13 +145,14 @@ class JbuilderTemplate < Jbuilder
145
145
  collection = options.delete(:collection) || []
146
146
  partial = options.delete(:partial)
147
147
  options[:locals].merge!(json: self)
148
+ collection = EnumerableCompat.new(collection) if collection.respond_to?(:count) && !collection.respond_to?(:size)
148
149
 
149
150
  if options.has_key?(:layout)
150
- raise ::NotImplementedError, "The `:layout' option is not supported in collection rendering."
151
+ ::Kernel.raise ::NotImplementedError, "The `:layout' option is not supported in collection rendering."
151
152
  end
152
153
 
153
154
  if options.has_key?(:spacer_template)
154
- raise ::NotImplementedError, "The `:spacer_template' option is not supported in collection rendering."
155
+ ::Kernel.raise ::NotImplementedError, "The `:spacer_template' option is not supported in collection rendering."
155
156
  end
156
157
 
157
158
  results = CollectionRenderer
@@ -6,7 +6,7 @@ class Jbuilder
6
6
  initializer :jbuilder do
7
7
  ActiveSupport.on_load :action_view do
8
8
  ActionView::Template.register_template_handler :jbuilder, JbuilderHandler
9
- require 'jbuilder/dependency_tracker'
9
+ require 'jbuilder/jbuilder_dependency_tracker'
10
10
  end
11
11
 
12
12
  if Rails::VERSION::MAJOR >= 5
@@ -17,7 +17,7 @@ class Jbuilder
17
17
  end
18
18
 
19
19
  ActiveSupport.on_load :action_controller do
20
- if self == ActionController::API
20
+ if name == 'ActionController::API'
21
21
  include ActionController::Helpers
22
22
  include ActionController::ImplicitRender
23
23
  end
data/lib/jbuilder.rb CHANGED
@@ -4,8 +4,11 @@ require 'jbuilder/blank'
4
4
  require 'jbuilder/key_formatter'
5
5
  require 'jbuilder/errors'
6
6
  require 'json'
7
- require 'ostruct'
8
7
  require 'active_support/core_ext/hash/deep_merge'
8
+ begin
9
+ require 'ostruct'
10
+ rescue LoadError
11
+ end
9
12
 
10
13
  class Jbuilder
11
14
  @@key_formatter = nil
@@ -28,7 +31,7 @@ class Jbuilder
28
31
  end
29
32
 
30
33
  BLANK = Blank.new
31
- NON_ENUMERABLES = [ ::Struct, ::OpenStruct ].to_set
34
+ NON_ENUMERABLES = defined?(::OpenStruct) ? [::Struct, ::OpenStruct].to_set : [::Struct].to_set
32
35
 
33
36
  def set!(key, value = BLANK, *args, &block)
34
37
  result = if ::Kernel.block_given?
@@ -292,7 +295,7 @@ class Jbuilder
292
295
 
293
296
  def _merge_block(key)
294
297
  current_value = _blank? ? BLANK : @attributes.fetch(_key(key), BLANK)
295
- raise NullError.build(key) if current_value.nil?
298
+ ::Kernel.raise NullError.build(key) if current_value.nil?
296
299
  new_value = _scope{ yield self }
297
300
  _merge_values(current_value, new_value)
298
301
  end
@@ -307,7 +310,7 @@ class Jbuilder
307
310
  elsif ::Hash === current_value && ::Hash === updates
308
311
  current_value.deep_merge(updates)
309
312
  else
310
- raise MergeError.build(current_value, updates)
313
+ ::Kernel.raise MergeError.build(current_value, updates)
311
314
  end
312
315
  end
313
316
 
@@ -328,8 +331,8 @@ class Jbuilder
328
331
  end
329
332
 
330
333
  def _set_value(key, value)
331
- raise NullError.build(key) if @attributes.nil?
332
- raise ArrayError.build(key) if ::Array === @attributes
334
+ ::Kernel.raise NullError.build(key) if @attributes.nil?
335
+ ::Kernel.raise ArrayError.build(key) if ::Array === @attributes
333
336
  return if @ignore_nil && value.nil? or _blank?(value)
334
337
  @attributes = {} if _blank?
335
338
  @attributes[_key(key)] = value
@@ -1,6 +1,5 @@
1
1
  require 'test_helper'
2
- require 'jbuilder/dependency_tracker'
3
-
2
+ require 'jbuilder/jbuilder_dependency_tracker'
4
3
 
5
4
  class FakeTemplate
6
5
  attr_reader :source, :handler
@@ -44,6 +44,18 @@ class JbuilderGeneratorTest < Rails::Generators::TestCase
44
44
  end
45
45
  end
46
46
 
47
+ test 'namespaced views are generated correctly for index' do
48
+ run_generator %w(Admin::Post --model-name=Post)
49
+
50
+ assert_file 'app/views/admin/posts/index.json.jbuilder' do |content|
51
+ assert_match %r{json\.array! @posts, partial: "admin/posts/post", as: :post}, content
52
+ end
53
+
54
+ assert_file 'app/views/admin/posts/show.json.jbuilder' do |content|
55
+ assert_match %r{json\.partial! "admin/posts/post", post: @post}, content
56
+ end
57
+ end
58
+
47
59
  if Rails::VERSION::MAJOR >= 6
48
60
  test 'handles virtual attributes' do
49
61
  run_generator %w(Message content:rich_text video:attachment photos:attachments)
@@ -73,6 +73,14 @@ class JbuilderTemplateTest < ActiveSupport::TestCase
73
73
  assert_equal "Pavel", result[5]["author"]["first_name"]
74
74
  end
75
75
 
76
+ test "partial collection by name with caching" do
77
+ result = render('json.partial! "post", collection: @posts, cached: true, as: :post', posts: POSTS)
78
+ assert_equal 10, result.count
79
+ assert_equal "Post #5", result[4]["body"]
80
+ assert_equal "Heinemeier Hansson", result[2]["author"]["last_name"]
81
+ assert_equal "Pavel", result[5]["author"]["first_name"]
82
+ end
83
+
76
84
  test "partial collection by name with string local" do
77
85
  result = render('json.partial! "post", collection: @posts, as: "post"', posts: POSTS)
78
86
  assert_equal 10, result.count
@@ -294,7 +302,6 @@ class JbuilderTemplateTest < ActiveSupport::TestCase
294
302
  test "works with an enumerable object" do
295
303
  enumerable_class = Class.new do
296
304
  include Enumerable
297
- alias length count # Rails 6.1 requires this.
298
305
 
299
306
  def each(&block)
300
307
  [].each(&block)
data/test/test_helper.rb CHANGED
@@ -8,12 +8,16 @@ require "active_support/core_ext/array/access"
8
8
  require "active_support/cache/memory_store"
9
9
  require "active_support/json"
10
10
  require "active_model"
11
+ require 'action_controller/railtie'
12
+ require 'action_view/railtie'
11
13
 
12
14
  require "active_support/testing/autorun"
13
15
  require "mocha/minitest"
14
16
 
15
17
  ActiveSupport.test_order = :random
16
18
 
19
+ ENV["RAILS_ENV"] ||= "test"
20
+
17
21
  class << Rails
18
22
  def cache
19
23
  @cache ||= ActiveSupport::Cache::MemoryStore.new
@@ -33,4 +37,11 @@ class Racer < Struct.new(:id, :name)
33
37
  include ActiveModel::Conversion
34
38
  end
35
39
 
36
- ActionView::Template.register_template_handler :jbuilder, JbuilderHandler
40
+ # Instantiate an Application in order to trigger the initializers
41
+ Class.new(Rails::Application) do
42
+ config.secret_key_base = 'secret'
43
+ config.eager_load = false
44
+ end.initialize!
45
+
46
+ # Touch AV::Base in order to trigger :action_view on_load hook before running the tests
47
+ ActionView::Base.inspect
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jbuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.11.5
4
+ version: 2.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-21 00:00:00.000000000 Z
11
+ date: 2024-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.0.0
41
- description:
41
+ description:
42
42
  email: david@basecamp.com
43
43
  executables: []
44
44
  extensions: []
@@ -57,6 +57,8 @@ files:
57
57
  - gemfiles/rails_5_2.gemfile
58
58
  - gemfiles/rails_6_0.gemfile
59
59
  - gemfiles/rails_6_1.gemfile
60
+ - gemfiles/rails_7_0.gemfile
61
+ - gemfiles/rails_7_1.gemfile
60
62
  - gemfiles/rails_head.gemfile
61
63
  - jbuilder.gemspec
62
64
  - lib/generators/rails/jbuilder_generator.rb
@@ -69,9 +71,9 @@ files:
69
71
  - lib/jbuilder.rb
70
72
  - lib/jbuilder/blank.rb
71
73
  - lib/jbuilder/collection_renderer.rb
72
- - lib/jbuilder/dependency_tracker.rb
73
74
  - lib/jbuilder/errors.rb
74
75
  - lib/jbuilder/jbuilder.rb
76
+ - lib/jbuilder/jbuilder_dependency_tracker.rb
75
77
  - lib/jbuilder/jbuilder_template.rb
76
78
  - lib/jbuilder/key_formatter.rb
77
79
  - lib/jbuilder/railtie.rb
@@ -87,11 +89,11 @@ licenses:
87
89
  - MIT
88
90
  metadata:
89
91
  bug_tracker_uri: https://github.com/rails/jbuilder/issues
90
- changelog_uri: https://github.com/rails/jbuilder/releases/tag/v2.11.5
92
+ changelog_uri: https://github.com/rails/jbuilder/releases/tag/v2.12.0
91
93
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
92
- source_code_uri: https://github.com/rails/jbuilder/tree/v2.11.5
94
+ source_code_uri: https://github.com/rails/jbuilder/tree/v2.12.0
93
95
  rubygems_mfa_required: 'true'
94
- post_install_message:
96
+ post_install_message:
95
97
  rdoc_options: []
96
98
  require_paths:
97
99
  - lib
@@ -106,8 +108,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
108
  - !ruby/object:Gem::Version
107
109
  version: '0'
108
110
  requirements: []
109
- rubygems_version: 3.2.32
110
- signing_key:
111
+ rubygems_version: 3.5.9
112
+ signing_key:
111
113
  specification_version: 4
112
114
  summary: Create JSON structures via a Builder-style DSL
113
115
  test_files:
@@ -1,61 +0,0 @@
1
- require 'jbuilder/jbuilder'
2
-
3
- dependency_tracker = false
4
-
5
- begin
6
- require 'action_view'
7
- require 'action_view/dependency_tracker'
8
- dependency_tracker = ::ActionView::DependencyTracker
9
- rescue LoadError
10
- begin
11
- require 'cache_digests'
12
- dependency_tracker = ::CacheDigests::DependencyTracker
13
- rescue LoadError
14
- end
15
- end
16
-
17
- if dependency_tracker
18
- class Jbuilder
19
- module DependencyTrackerMethods
20
- # Matches:
21
- # json.partial! "messages/message"
22
- # json.partial!('messages/message')
23
- #
24
- DIRECT_RENDERS = /
25
- \w+\.partial! # json.partial!
26
- \(?\s* # optional parenthesis
27
- (['"])([^'"]+)\1 # quoted value
28
- /x
29
-
30
- # Matches:
31
- # json.partial! partial: "comments/comment"
32
- # json.comments @post.comments, partial: "comments/comment", as: :comment
33
- # json.array! @posts, partial: "posts/post", as: :post
34
- # = render partial: "account"
35
- #
36
- INDIRECT_RENDERS = /
37
- (?::partial\s*=>|partial:) # partial: or :partial =>
38
- \s* # optional whitespace
39
- (['"])([^'"]+)\1 # quoted value
40
- /x
41
-
42
- def dependencies
43
- direct_dependencies + indirect_dependencies + explicit_dependencies
44
- end
45
-
46
- private
47
-
48
- def direct_dependencies
49
- source.scan(DIRECT_RENDERS).map(&:second)
50
- end
51
-
52
- def indirect_dependencies
53
- source.scan(INDIRECT_RENDERS).map(&:second)
54
- end
55
- end
56
- end
57
-
58
- ::Jbuilder::DependencyTracker = Class.new(dependency_tracker::ERBTracker)
59
- ::Jbuilder::DependencyTracker.send :include, ::Jbuilder::DependencyTrackerMethods
60
- dependency_tracker.register_tracker :jbuilder, ::Jbuilder::DependencyTracker
61
- end