Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package rubygem-jbuilder for
openSUSE:Factory checked in at 2021-12-25 20:16:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-jbuilder (Old)
and /work/SRC/openSUSE:Factory/.rubygem-jbuilder.new.2520 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-jbuilder"
Sat Dec 25 20:16:46 2021 rev:25 rq:942441 version:2.11.5
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-jbuilder/rubygem-jbuilder.changes
2021-02-20 22:12:12.687034050 +0100
+++
/work/SRC/openSUSE:Factory/.rubygem-jbuilder.new.2520/rubygem-jbuilder.changes
2021-12-25 20:17:13.585277965 +0100
@@ -1,0 +2,9 @@
+Sat Dec 25 09:41:14 UTC 2021 - Manuel Schnitzer <[email protected]>
+
+- updated to version 2.11.5
+
+ # What's Changed
+
+ * Make sure action_view is loaded before using it.
+
+-------------------------------------------------------------------
Old:
----
jbuilder-2.11.2.gem
New:
----
jbuilder-2.11.5.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-jbuilder.spec ++++++
--- /var/tmp/diff_new_pack.KzFXbz/_old 2021-12-25 20:17:14.061278353 +0100
+++ /var/tmp/diff_new_pack.KzFXbz/_new 2021-12-25 20:17:14.065278356 +0100
@@ -24,7 +24,7 @@
#
Name: rubygem-jbuilder
-Version: 2.11.2
+Version: 2.11.5
Release: 0
%define mod_name jbuilder
%define mod_full_name %{mod_name}-%{version}
@@ -48,7 +48,7 @@
%install
%gem_install \
- --doc-files="CHANGELOG.md MIT-LICENSE README.md" \
+ --doc-files="MIT-LICENSE README.md" \
-f
%gem_packages
++++++ jbuilder-2.11.2.gem -> jbuilder-2.11.5.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.github/workflows/ruby.yml
new/.github/workflows/ruby.yml
--- old/.github/workflows/ruby.yml 1970-01-01 01:00:00.000000000 +0100
+++ new/.github/workflows/ruby.yml 2021-12-21 05:03:55.000000000 +0100
@@ -0,0 +1,108 @@
+name: Ruby test
+
+on: [push, pull_request]
+
+jobs:
+ test:
+ name: Ruby ${{ matrix.ruby }} (${{ matrix.gemfile }})
+ runs-on: ubuntu-20.04
+ continue-on-error: ${{ matrix.experimental }}
+ env:
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile
}}.gemfile
+ BUNDLE_JOBS: 4
+ BUNDLE_RETRY: 3
+ strategy:
+ fail-fast: false
+ matrix:
+ ruby:
+ - "2.2"
+ - "2.3"
+ - "2.4"
+ - "2.5"
+ - "2.6"
+ - "2.7"
+ - "3.0"
+
+ gemfile:
+ - "rails_5_0"
+ - "rails_5_1"
+ - "rails_5_2"
+ - "rails_6_0"
+ - "rails_6_1"
+ - "rails_head"
+
+ experimental: [false]
+ exclude:
+ - ruby: 2.7
+ gemfile: rails_5_0
+ - ruby: '3.0'
+ gemfile: rails_5_0
+ - ruby: head
+ gemfile: rails_5_0
+ - ruby: 2.7
+ gemfile: rails_5_1
+ - ruby: '3.0'
+ gemfile: rails_5_1
+ - ruby: head
+ gemfile: rails_5_1
+ - ruby: 2.2
+ gemfile: rails_5_2
+ - ruby: 2.7
+ gemfile: rails_5_2
+ - ruby: '3.0'
+ gemfile: rails_5_2
+ - ruby: head
+ gemfile: rails_5_2
+ - ruby: 2.2
+ gemfile: rails_6_0
+ - ruby: 2.3
+ gemfile: rails_6_0
+ - ruby: 2.4
+ gemfile: rails_6_0
+ - ruby: '3.0'
+ gemfile: rails_6_0
+ - ruby: head
+ gemfile: rails_6_0
+ - ruby: 2.2
+ gemfile: rails_6_1
+ - ruby: 2.3
+ gemfile: rails_6_1
+ - ruby: 2.4
+ gemfile: rails_6_1
+ - ruby: 2.2
+ gemfile: rails_head
+ - ruby: 2.3
+ gemfile: rails_head
+ - ruby: 2.4
+ gemfile: rails_head
+ - ruby: 2.5
+ gemfile: rails_head
+ - ruby: 2.6
+ gemfile: rails_head
+ - ruby: 2.7
+ gemfile: rails_head
+ experimental: false
+ - ruby: '3.0'
+ gemfile: rails_head
+ experimental: false
+ include:
+ - ruby: 2.7
+ gemfile: rails_head
+ experimental: true
+ - ruby: '3.0'
+ gemfile: rails_head
+ experimental: true
+ - ruby: head
+ gemfile: rails_head
+ experimental: true
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: ${{ matrix.ruby }}
+ bundler-cache: true
+
+ - name: Ruby test
+ run: bundle exec rake
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.travis.yml new/.travis.yml
--- old/.travis.yml 2021-01-27 13:37:14.000000000 +0100
+++ new/.travis.yml 1970-01-01 01:00:00.000000000 +0100
@@ -1,52 +0,0 @@
-language: ruby
-
-cache: bundler
-
-before_install:
- - "gem install bundler -v '<2'"
-
-rvm:
- - 2.2.10
- - 2.3.8
- - 2.4.10
- - 2.5.8
- - 2.6.6
- - 2.7.1
- - ruby-head
-
-gemfile:
- - gemfiles/rails_5_0.gemfile
- - gemfiles/rails_5_1.gemfile
- - gemfiles/rails_5_2.gemfile
- - gemfiles/rails_6_0.gemfile
- - gemfiles/rails_head.gemfile
-
-matrix:
- exclude:
- - rvm: 2.7.1
- gemfile: gemfiles/rails_5_0.gemfile
- - rvm: 2.7.1
- gemfile: gemfiles/rails_5_1.gemfile
- - rvm: 2.2.10
- gemfile: gemfiles/rails_5_2.gemfile
- - rvm: 2.7.1
- gemfile: gemfiles/rails_5_2.gemfile
- - rvm: 2.2.10
- gemfile: gemfiles/rails_6_0.gemfile
- - rvm: 2.3.8
- gemfile: gemfiles/rails_6_0.gemfile
- - rvm: 2.4.10
- gemfile: gemfiles/rails_6_0.gemfile
- - rvm: 2.2.10
- gemfile: gemfiles/rails_head.gemfile
- - rvm: 2.3.8
- gemfile: gemfiles/rails_head.gemfile
- - rvm: 2.4.10
- gemfile: gemfiles/rails_head.gemfile
- allow_failures:
- - rvm: ruby-head
- - gemfile: gemfiles/rails_head.gemfile
- fast_finish: true
-
-notifications:
- email: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Appraisals new/Appraisals
--- old/Appraisals 2021-01-27 13:37:14.000000000 +0100
+++ new/Appraisals 2021-12-21 05:03:55.000000000 +0100
@@ -15,7 +15,11 @@
gem "rails", "~> 6.0.0"
end
+ appraise "rails-6-1" do
+ gem "rails", "~> 6.1.0"
+ end
+
appraise "rails-head" do
- gem "rails", github: "rails/rails"
+ gem "rails", github: "rails/rails", branch: "main"
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md 2021-01-27 13:37:14.000000000 +0100
+++ new/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100
@@ -1,311 +0,0 @@
-# Changelog
-
-2.11.2
-------
-
-* [Improve key formatting for nested hashes and disable by
default](https://github.com/rails/jbuilder/pull/497)
-
-2.11.1
-------
-
-* Use symbols instead of strings for before_action filters [DHH]
-* Slim down comments in generated scaffold code [DHH]
-
-2.11.0
-------
-
-* [Allow jbuilder instance to be passed to
#merge!](https://github.com/rails/jbuilder/pull/485)
-* [Fix for key_format! when using nested
hashes](https://github.com/rails/jbuilder/pull/486)
-* [Include rich_text, attachment, and attachments fields in json
partial](https://github.com/rails/jbuilder/pull/459)
-
-2.10.2
-------
-
-* Update scaffold generator to use double quotes, 422 form error responds, and
modern string-of-arrays syntax [DHH]
-
-2.10.1
-------
-
-* Fix keyword arguments warning on Ruby 2.7
-
-2.10.0
-------
-
-* Requires Rails 5+ and Ruby 2.2+
-* Nested hashes are deep-merged
-
-2.9.1
------
-
-* [Respect JSON encoding
customizations](https://github.com/rails/jbuilder/commit/e2e8623b08078ad6a2323ce8ecaf642b7afe1166)
-
-2.9.0
------
-
-* [Fix passing object with partial without
locals](https://github.com/rails/jbuilder/pull/435)
-* [Fix deprecation warning in Rails
6.0](https://github.com/rails/jbuilder/pull/453)
-* [Use quotes consistently in generated
templates](https://github.com/rails/jbuilder/pull/455)
-* [Allow omitting timestamps from generated
partials](https://github.com/rails/jbuilder/pull/448)
-* [Respect changing scaffold
generator](https://github.com/rails/jbuilder/pull/458)
-* [Use a symbolic default format for Rails 6.0 forward
compatibility](https://github.com/rails/jbuilder/commit/3895a7243f3db292b0bf15513fc05494e6e50576)
-* [Drop MultiJSON in favor of Ruby standard library
JSON](https://github.com/rails/jbuilder/commit/b952ae096eb1828b0fcfde06e6ba62311494ec49)
-
-2.8.0
------
-
-* [Replace deprecated fragment_cache_key for Rails 5.2
support](https://github.com/rails/jbuilder/pull/430)
-
-2.7.0
------
-
-* [Requires Rails
4+](https://github.com/rails/jbuilder/commit/5207ff394533177fffdd768bfaa6413a0cd16dc8)
-* [Fix implicitly rendering a JSON partial with the same name as an
- HTML partial](https://github.com/rails/jbuilder/pull/400)
-
-2.6.4
------
-
-* Drop the pessimistic upper-bound restriction on Active Support and MultiJSON
to prevent future gemfile resolution deadlocks *DHH*
-
-2.6.3
------
-
-* Support Rails 5.1
-
-2.6.2
------
-
-* Fix thor warnings
-
-2.6.1
------
-
-* [Optimize root caches with
cache_root!](https://github.com/rails/jbuilder/pull/370)
-
-2.6.0
------
-
-* [Rails 5 cache! with expire
support](https://github.com/rails/jbuilder/commit/d61e3354563863731bc1f358f495b1dbb7ae9d32)
-* [Generated view DRYed by using model
partial](https://github.com/rails/jbuilder/commit/83256f4d7e9211c9dc47972feaed7fd31e4f7cac)
-
-2.5.0
------
-
-* [Rails 5
compatibility](https://github.com/rails/jbuilder/commit/64c510ec69d9e63b73ffd5942e802d21a7d14701)
-
-2.4.1
------
-
-* [Fix controller generators to be Rails 5
compatible](https://github.com/rails/jbuilder/commit/2dc6203c5c4a98701d5b64c2a5200835a48bb533)
-
-2.4.0
------
-
-* [Rails 5
compatibility](https://github.com/rails/jbuilder/commit/4aa2cfcc19a4634d65a28ffc75f0ac0cb8304115)
-
-2.3.2
------
-
-* [Remove Mime Types deprecation
message](https://github.com/rails/jbuilder/commit/5ba4e4ac654cc8388619538f576fe234659b84ec)
-
-2.3.1
------
-
-* [Explicitly require ostruct to prevent
NameError](https://github.com/rails/jbuilder/pull/281)
-
-2.3.0
------
-
-* [Add new in-place partial invocation
support](https://github.com/rails/jbuilder/commit/1feda7ee605c136e59fb4de970f4674de518e6de)
-* [Add implicit partial rendering for
AM::Models](https://github.com/rails/jbuilder/commit/4d5bf7d0ea92765adb7be36834e84f9855a061df)
-* [Generate API controller if Rails API option is
enabled](https://github.com/rails/jbuilder/commit/db68f6bd327cf42b47ef22d455fb5721a8c2cf5f)
-* [JBuilder's templates have less priority than app
templates](https://github.com/rails/jbuilder/commit/7c1a5f25603ec1f4e51fba3dbba9db23726a5d69)
-* [Add AC::Helpers module to jbuilder for api only
apps](https://github.com/rails/jbuilder/commit/7cf1d1eb7d125caf38309b5427952030011c1aa0)
-
-2.2.16
-------
-
-* [Fix NoMethodError around `api_only` in
railtie](https://github.com/rails/jbuilder/commit/b08d1da10b14720b46d383b2917e336060fd9ffa)
-
-2.2.14
-------
-
-* [Make Jbuilder compatible with Rails
API](https://github.com/rails/jbuilder/commit/29c0014a9c954c990075d42c45c66075260e924b)
-
-2.2.13
-------
-
-* Several performance optimizations:
[#260](https://github.com/rails/jbuilder/pull/260) &
[#261](https://github.com/rails/jbuilder/pull/261)
-
-2.2.12
-------
-
-* [Replace explicit block calls with yield for
performance](https://github.com/rails/jbuilder/commit/3184f941276ad03a071cf977133d1a32302afa47)
-
-2.2.11
-------
-
-* Generate the templates for Rails 5+
[#258](https://github.com/rails/jbuilder/pull/258)
[@amatsuda](https://github.com/amatsuda)
-
-2.2.10
-------
-
-* Add Jbuilder::Blank#empty? to tell if attributes are empty
[#257](https://github.com/rails/jbuilder/pull/257)
[@a2ikm](https://github.com/a2ikm)
-
-2.2.9
------
-
-* Support `partial!` call with `locals` option in `JbuilderTemplate`
[#251](https://github.com/rails/jbuilder/pull/251)
-
-2.2.8
------
-* [Raise ArrayError when trying to add key to an
array](https://github.com/rails/jbuilder/commit/869e4be1ad165ce986d8fca78311bdd3ed166087)
-
-2.2.7
------
-* [Make Blank object serializable with
Marshal](https://github.com/rails/jbuilder/commit/7083f28d8b665aa60d0d1b1927ae88bb5c6290ba)
-
-2.2.6
------
-* [Make sure dependency tracker loads after template
handler](https://github.com/rails/jbuilder/commit/3ba404b1207b557e14771c90b8832bc01ae67a42)
-
-2.2.5
------
-* [Refactor merge block behavior to raise error for unexpected
values](https://github.com/rails/jbuilder/commit/4503162fb26f53f613fc83ac081fd244748b6fe9)
-
-2.2.4
------
-* [Typecast locals hash key during collection
render](https://github.com/rails/jbuilder/commit/a6b0c8651a08e01cb53eee38e211c65423f275f7)
-
-2.2.3
------
-* [Move template handler registration into
railtie](https://github.com/rails/jbuilder/commit/c8acc5cea6da2a79b7b345adc301cb5ff2517647)
-* [Do not capture the block where it is
possible](https://github.com/rails/jbuilder/commit/973b382c3924cb59fc0e4e25266b18e74d41d646)
-
-2.2.2
------
-* [Fix `Jbuilder#merge!` inside
block](https://github.com/rails/jbuilder/commit/a7b328552eb0d36315f75bff813bea7eecf8c1d7)
-
-2.2.1
------
-* [Fix empty block
handling](https://github.com/rails/jbuilder/commit/972a11141403269e9b17b45b0c95f8a9788245ee)
-
-2.2.0
------
-* [Allow to skip `array!` iterations by calling
`next`](https://github.com/rails/jbuilder/commit/81a63308fb9d5002519dd871f829ccc58067251a)
-
-2.1.2
------
-* [Cast array-like objects to array before
merging](https://github.com/rails/jbuilder/commit/7b8c8a1cb09b7f3dd26e5643ebbd6b2ec67185db)
-
-2.1.1
------
-* [Remove unused
file](https://github.com/rails/jbuilder/commit/e49e1047976fac93b8242ab212c7b1a463b70809)
-
-2.1.0
------
-* [Blocks and their extract! shortcuts are additive by
default](https://github.com/rails/jbuilder/commit/a49390736c5f6e2d7a31111df6531bc28dba9fb1)
-
-2.0.8
------
-* [Eliminate circular
dependencies](https://github.com/rails/jbuilder/commit/0879484dc74e7be93b695f66e3708ba48cdb1be3)
-* [Support cache key generation for complex
objects](https://github.com/rails/jbuilder/commit/ca9622cca30c1112dd4408fcb2e658849abe1dd5)
-* [Remove JbuilderProxy
class](https://github.com/rails/jbuilder/commit/5877482fc7da3224e42d4f72a1386f7a3a08173b)
-* [Move KeyFormatter into a separate
file](https://github.com/rails/jbuilder/commit/13fee8464ff53ce853030114283c03c135c052b6)
-* [Move NullError into a separate
file](https://github.com/rails/jbuilder/commit/13fee8464ff53ce853030114283c03c135c052b6)
-
-2.0.7
------
-* [Add destroy notice to scaffold
generator](https://github.com/rails/jbuilder/commit/8448e86f8cdfa0f517bd59576947875775a1d43c)
-
-2.0.6
------
-* [Use render short form in controller
generator](https://github.com/rails/jbuilder/commit/acf37320a7cea7fcc70c791bc94bd5f46b8349ff)
-
-2.0.5
------
-* [Fix edgecase when json is defined as a
method](https://github.com/rails/jbuilder/commit/ca711a0c0a5760e26258ce2d93c14bef8fff0ead)
-
-2.0.4
------
-* [Add cache_if! to conditionally cache JSON
fragments](https://github.com/rails/jbuilder/commit/14a5afd8a2c939a6fd710d355a194c114db96eb2)
-
-2.0.3
------
-* [Pass options when calling
cache_fragment_name](https://github.com/rails/jbuilder/commit/07c2cc7486fe9ef423d7bc821b83f6d485f330e0)
-
-2.0.2
------
-* [Fix Dependency Tracking fail to detect single-quoted partial
correctly](https://github.com/rails/jbuilder/commit/448679a6d3098eb34d137f782a05f1767711991a)
-* [Prevent Dependency Tracker constants leaking into global
namespace](https://github.com/rails/jbuilder/commit/3544b288b63f504f46fa8aafd1d17ee198d77536)
-
-2.0.1
------
-* [Dependency tracking support for Rails 3 with cache_digest
gem](https://github.com/rails/jbuilder/commit/6b471d7a38118e8f7645abec21955ef793401daf)
-
-2.0.0
------
-* [Respond to PUT/PATCH API request with
:ok](https://github.com/rails/jbuilder/commit/9dbce9c12181e89f8f472ac23c764ffe8438040a)
-* [Remove Ruby 1.8
support](https://github.com/rails/jbuilder/commit/d53fff42d91f33d662eafc2561c4236687ecf6c9)
-* [Remove deprecated two argument block
call](https://github.com/rails/jbuilder/commit/07a35ee7e79ae4b06dba9dbff5c4e07c1e627218)
-* [Make Jbuilder object initialize with single
hash](https://github.com/rails/jbuilder/commit/38bf551db0189327aaa90b9be010c0d1b792c007)
-* [Track template
dependencies](https://github.com/rails/jbuilder/commit/8e73cea39f60da1384afd687cc8e5e399630d8cc)
-* [Expose merge!
method](https://github.com/rails/jbuilder/commit/0e2eb47f6f3c01add06a1a59b37cdda8baf24f29)
-
-1.5.3
------
-* [Generators add `:id` column by
default](https://github.com/rails/jbuilder/commit/0b52b86773e48ac2ce35d4155c7b70ad8b3e8937)
-
-1.5.2
------
-* [Nil-collection should be treated as empty
array](https://github.com/rails/jbuilder/commit/2f700bb00ab663c6b7fcb28d2967aeb989bd43c7)
-
-1.5.1
------
-* [Expose template lookup
options](https://github.com/rails/jbuilder/commit/404c18dee1af96ac6d8052a04062629ef1db2945)
-
-1.5.0
------
-* [Do not perform any caching when `controller.perform_caching` is
false](https://github.com/rails/jbuilder/commit/94633facde1ac43580f8cd5e13ae9cc83e1da8f4)
-* [Add partial collection
rendering](https://github.com/rails/jbuilder/commit/e8c10fc885e41b18178aaf4dcbc176961c928d76)
-* [Deprecate extract! calling private
methods](https://github.com/rails/jbuilder/commit/b9e19536c2105d7f2e813006bbcb8ca5730d28a3)
-* [Add array of partials
rendering](https://github.com/rails/jbuilder/commit/7d7311071720548047f98f14ad013c560b8d9c3a)
-
-1.4.2
------
-* [Require MIME dependency
explicitly](https://github.com/rails/jbuilder/commit/b1ed5ac4f08b056f8839b4b19b43562e81e02a59)
-
-1.4.1
------
-* [Removed deprecated positioned arguments initializer
support](https://github.com/rails/jbuilder/commit/6e03e0452073eeda77e6dfe66aa31e5ec67a3531)
-* [Deprecate two-arguments block
calling](https://github.com/rails/jbuilder/commit/2b10bb058bb12bc782cbcc16f6ec67b489e5ed43)
-
-1.4.0
------
-* [Add quick collection attribute
extraction](https://github.com/rails/jbuilder/commit/c2b966cf653ea4264fbb008b8cc6ce5359ebe40a)
-* [Block has priority over attributes
extraction](https://github.com/rails/jbuilder/commit/77c24766362c02769d81dac000b1879a9e4d4a00)
-* [Meaningful error messages when adding properties to
null](https://github.com/rails/jbuilder/commit/e26764602e34b3772e57e730763d512e59489e3b)
-* [Do not enforce template format, enforce handlers
instead](https://github.com/rails/jbuilder/commit/72576755224b15da45e50cbea877679800ab1398)
-
-1.3.0
------
-* [Add nil! method for nil
JSON](https://github.com/rails/jbuilder/commit/822a906f68664f61a1209336bb681077692c8475)
-
-1.2.1
------
-* [Added explicit dependency for
MultiJson](https://github.com/rails/jbuilder/commit/4d58eacb6cd613679fb243484ff73a79bbbff2d2)
-
-1.2.0
------
-* Multiple documentation improvements and internal refactoring
-* [Fixes fragment caching to work with latest
digests](https://github.com/rails/jbuilder/commit/da937d6b8732124074c612abb7ff38868d1d96c0)
-
-1.0.2
------
-* [Support non-Enumerable
collections](https://github.com/rails/jbuilder/commit/4c20c59bf8131a1e419bb4ebf84f2b6bdcb6b0cf)
-* [Ensure that the default URL is in json
format](https://github.com/rails/jbuilder/commit/0b46782fb7b8c34a3c96afa801fe27a5a97118a4)
-
-1.0.0
------
-* Adopt Semantic Versioning
-* Add rails generators
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CONTRIBUTING.md new/CONTRIBUTING.md
--- old/CONTRIBUTING.md 2021-01-27 13:37:14.000000000 +0100
+++ new/CONTRIBUTING.md 2021-12-21 05:03:55.000000000 +0100
@@ -1,11 +1,11 @@
Contributing to Jbuilder
=====================
-[][travis]
+[][test]
[][gem]
[][codeclimate]
-[travis]: https://travis-ci.org/rails/jbuilder
+[test]: https://github.com/rails/jbuilder/actions?query=branch%3Amaster
[gem]: https://rubygems.org/gems/jbuilder
[codeclimate]: https://codeclimate.com/github/rails/jbuilder
@@ -95,7 +95,7 @@
#### Check on Your Pull Request
-Go back to your pull request after a few minutes and see whether it passed
muster with Travis-CI. Everything should look green, otherwise fix issues and
amend your commit as described above.
+Go back to your pull request after a few minutes and see whether it passed
muster with GitHub Actions. Everything should look green, otherwise fix issues
and amend your commit as described above.
#### Be Patient
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2021-01-27 13:37:14.000000000 +0100
+++ new/README.md 2021-12-21 05:03:55.000000000 +0100
@@ -108,6 +108,33 @@
# => [ { "id": 1, "name": "David" }, { "id": 2, "name": "Jamie" } ]
```
+To make a plain array without keys, construct and pass in a standard Ruby
array.
+
+```ruby
+my_array = %w(David Jamie)
+
+json.people my_array
+
+# => "people": [ "David", "Jamie" ]
+```
+
+You don't always have or need a collection when building an array.
+
+```ruby
+json.people do
+ json.child! do
+ json.id 1
+ json.name 'David'
+ end
+ json.child! do
+ json.id 2
+ json.name 'Jamie'
+ end
+end
+
+# => { "people": [ { "id": 1, "name": "David" }, { "id": 2, "name": "Jamie" }
] }
+```
+
Jbuilder objects can be directly nested inside each other. Useful for
composing objects.
``` ruby
@@ -137,7 +164,7 @@
```
You can either use Jbuilder stand-alone or directly as an ActionView template
-language. When required in Rails, you can create views a la show.json.jbuilder
+language. When required in Rails, you can create views ?? la show.json.jbuilder
(the json is already yielded):
``` ruby
@@ -171,19 +198,19 @@
json.array! @posts, partial: 'posts/post', as: :post
# or
-
json.partial! 'posts/post', collection: @posts, as: :post
# or
-
json.partial! partial: 'posts/post', collection: @posts, as: :post
# or
-
json.comments @post.comments, partial: 'comments/comment', as: :comment
```
-The `as: :some_symbol` is used with partials. It will take care of mapping the
passed in object to a variable for the partial. If the value is a collection
(either implicitly or explicitly by using the `collection:` option, then each
value of the collection is passed to the partial as the variable `some_symbol`.
If the value is a singular object, then the object is passed to the partial as
the variable `some_symbol`.
+The `as: :some_symbol` is used with partials. It will take care of mapping the
passed in object to a variable for the
+partial. If the value is a collection either implicitly or explicitly by using
the `collection:` option, then each
+value of the collection is passed to the partial as the variable
`some_symbol`. If the value is a singular object,
+then the object is passed to the partial as the variable `some_symbol`.
Be sure not to confuse the `as:` option to mean nesting of the partial. For
example:
@@ -193,7 +220,7 @@
json.partial! @comment, as: :comment
```
-is quite different than:
+is quite different from:
```ruby
# comment attributes are nested under a "comment" property
@@ -236,6 +263,8 @@
# => { "bar": "bar" }
```
+## Caching
+
Fragment caching is supported, it uses `Rails.cache` and works like caching in
HTML templates:
@@ -253,9 +282,25 @@
end
```
-If you are rendering fragments for a collection of objects, have a look at
-`jbuilder_cache_multi` gem. It uses fetch_multi (>= Rails 4.1) to fetch
-multiple keys at once.
+Aside from that, the `:cached` options on collection rendering is available on
Rails >= 6.0. This will cache the
+rendered results effectively using the multi fetch feature.
+
+```ruby
+json.array! @posts, partial: "posts/post", as: :post, cached: true
+
+# or:
+json.comments @post.comments, partial: "comments/comment", as: :comment,
cached: true
+```
+
+If your collection cache depends on multiple sources (try to avoid this to
keep things simple), you can name all these dependencies as part of a block
that returns an array:
+
+```ruby
+json.array! @posts, partial: "posts/post", as: :post, cached: -> post { [post,
current_user] }
+```
+
+This will include both records as part of the cache key and updating either of
them will expire the cache.
+
+## Formatting Keys
Keys can be auto formatted using `key_format!`, this can be used to convert
keynames from the standard ruby_format to camelCase:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Rakefile new/Rakefile
--- old/Rakefile 2021-01-27 13:37:14.000000000 +0100
+++ new/Rakefile 2021-12-21 05:03:55.000000000 +0100
@@ -2,7 +2,7 @@
require "bundler/gem_tasks"
require "rake/testtask"
-if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
+if !ENV["APPRAISAL_INITIALIZED"] && !ENV["CI"]
require "appraisal/task"
Appraisal::Task.new
task default: :appraisal
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gemfiles/rails_6_1.gemfile
new/gemfiles/rails_6_1.gemfile
--- old/gemfiles/rails_6_1.gemfile 1970-01-01 01:00:00.000000000 +0100
+++ new/gemfiles/rails_6_1.gemfile 2021-12-21 05:03:55.000000000 +0100
@@ -0,0 +1,10 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "rake"
+gem "mocha", require: false
+gem "appraisal"
+gem "rails", "~> 6.1.0"
+
+gemspec path: "../"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gemfiles/rails_head.gemfile
new/gemfiles/rails_head.gemfile
--- old/gemfiles/rails_head.gemfile 2021-01-27 13:37:14.000000000 +0100
+++ new/gemfiles/rails_head.gemfile 2021-12-21 05:03:55.000000000 +0100
@@ -5,6 +5,6 @@
gem "rake"
gem "mocha", require: false
gem "appraisal"
-gem "rails", github: "rails/rails"
+gem "rails", github: "rails/rails", branch: "main"
gemspec path: "../"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jbuilder.gemspec new/jbuilder.gemspec
--- old/jbuilder.gemspec 2021-01-27 13:37:14.000000000 +0100
+++ new/jbuilder.gemspec 2021-12-21 05:03:55.000000000 +0100
@@ -1,6 +1,6 @@
Gem::Specification.new do |s|
s.name = 'jbuilder'
- s.version = '2.11.2'
+ s.version = '2.11.5'
s.authors = 'David Heinemeier Hansson'
s.email = '[email protected]'
s.summary = 'Create JSON structures via a Builder-style DSL'
@@ -10,6 +10,7 @@
s.required_ruby_version = '>= 2.2.2'
s.add_dependency 'activesupport', '>= 5.0.0'
+ s.add_dependency 'actionview', '>= 5.0.0'
if RUBY_ENGINE == 'rbx'
s.add_development_dependency('racc')
@@ -19,4 +20,12 @@
s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- test/*`.split("\n")
+
+ s.metadata = {
+ "bug_tracker_uri" => "https://github.com/rails/jbuilder/issues",
+ "changelog_uri" =>
"https://github.com/rails/jbuilder/releases/tag/v#{s.version}",
+ "mailing_list_uri" =>
"https://discuss.rubyonrails.org/c/rubyonrails-talk",
+ "source_code_uri" =>
"https://github.com/rails/jbuilder/tree/v#{s.version}",
+ "rubygems_mfa_required" => "true",
+ }
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/generators/rails/templates/controller.rb
new/lib/generators/rails/templates/controller.rb
--- old/lib/generators/rails/templates/controller.rb 2021-01-27
13:37:14.000000000 +0100
+++ new/lib/generators/rails/templates/controller.rb 2021-12-21
05:03:55.000000000 +0100
@@ -30,7 +30,7 @@
respond_to do |format|
if @<%= orm_instance.save %>
- format.html { redirect_to @<%= singular_table_name %>, notice: <%=
%("#{human_name} was successfully created.") %> }
+ format.html { redirect_to <%= show_helper %>, notice: <%=
%("#{human_name} was successfully created.") %> }
format.json { render :show, status: :created, location: <%=
"@#{singular_table_name}" %> }
else
format.html { render :new, status: :unprocessable_entity }
@@ -43,7 +43,7 @@
def update
respond_to do |format|
if @<%= orm_instance.update("#{singular_table_name}_params") %>
- format.html { redirect_to @<%= singular_table_name %>, notice: <%=
%("#{human_name} was successfully updated.") %> }
+ format.html { redirect_to <%= show_helper %>, notice: <%=
%("#{human_name} was successfully updated.") %> }
format.json { render :show, status: :ok, location: <%=
"@#{singular_table_name}" %> }
else
format.html { render :edit, status: :unprocessable_entity }
@@ -55,6 +55,7 @@
# DELETE <%= route_url %>/1 or <%= route_url %>/1.json
def destroy
@<%= orm_instance.destroy %>
+
respond_to do |format|
format.html { redirect_to <%= index_helper %>_url, notice: <%=
%("#{human_name} was successfully destroyed.") %> }
format.json { head :no_content }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/jbuilder/collection_renderer.rb
new/lib/jbuilder/collection_renderer.rb
--- old/lib/jbuilder/collection_renderer.rb 1970-01-01 01:00:00.000000000
+0100
+++ new/lib/jbuilder/collection_renderer.rb 2021-12-21 05:03:55.000000000
+0100
@@ -0,0 +1,109 @@
+require 'delegate'
+require 'active_support/concern'
+require 'action_view'
+
+begin
+ require 'action_view/renderer/collection_renderer'
+rescue LoadError
+ require 'action_view/renderer/partial_renderer'
+end
+
+class Jbuilder
+ module CollectionRenderable # :nodoc:
+ extend ActiveSupport::Concern
+
+ class_methods do
+ def supported?
+ superclass.private_method_defined?(:build_rendered_template) &&
self.superclass.private_method_defined?(:build_rendered_collection)
+ end
+ end
+
+ private
+
+ def build_rendered_template(content, template, layout = nil)
+ super(content || json.attributes!, template)
+ end
+
+ def build_rendered_collection(templates, _spacer)
+ json.merge!(templates.map(&:body))
+ end
+
+ def json
+ @options[:locals].fetch(:json)
+ end
+
+ class ScopedIterator < ::SimpleDelegator # :nodoc:
+ include Enumerable
+
+ def initialize(obj, scope)
+ super(obj)
+ @scope = scope
+ end
+
+ # Rails 6.0 support:
+ def each
+ return enum_for(:each) unless block_given?
+
+ __getobj__.each do |object|
+ @scope.call { yield(object) }
+ end
+ end
+
+ # Rails 6.1 support:
+ def each_with_info
+ return enum_for(:each_with_info) unless block_given?
+
+ __getobj__.each_with_info do |object, info|
+ @scope.call { yield(object, info) }
+ end
+ end
+ end
+
+ private_constant :ScopedIterator
+ end
+
+ if defined?(::ActionView::CollectionRenderer)
+ # Rails 6.1 support:
+ class CollectionRenderer < ::ActionView::CollectionRenderer # :nodoc:
+ include CollectionRenderable
+
+ def initialize(lookup_context, options, &scope)
+ super(lookup_context, options)
+ @scope = scope
+ end
+
+ private
+ def collection_with_template(view, template, layout, collection)
+ super(view, template, layout, ScopedIterator.new(collection, @scope))
+ end
+ end
+ else
+ # Rails 6.0 support:
+ class CollectionRenderer < ::ActionView::PartialRenderer # :nodoc:
+ include CollectionRenderable
+
+ def initialize(lookup_context, options, &scope)
+ super(lookup_context)
+ @options = options
+ @scope = scope
+ end
+
+ def render_collection_with_partial(collection, partial, context, block)
+ render(context, @options.merge(collection: collection, partial:
partial), block)
+ end
+
+ private
+ def collection_without_template(view)
+ @collection = ScopedIterator.new(@collection, @scope)
+
+ super(view)
+ end
+
+ def collection_with_template(view, template)
+ @collection = ScopedIterator.new(@collection, @scope)
+
+ super(view, template)
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/jbuilder/jbuilder_template.rb
new/lib/jbuilder/jbuilder_template.rb
--- old/lib/jbuilder/jbuilder_template.rb 2021-01-27 13:37:14.000000000
+0100
+++ new/lib/jbuilder/jbuilder_template.rb 2021-12-21 05:03:55.000000000
+0100
@@ -1,4 +1,5 @@
require 'jbuilder/jbuilder'
+require 'jbuilder/collection_renderer'
require 'action_dispatch/http/mime_type'
require 'active_support/cache'
@@ -15,6 +16,38 @@
super(*args)
end
+ # Generates JSON using the template specified with the `:partial` option.
For example, the code below will render
+ # the file `views/comments/_comments.json.jbuilder`, and set a local
variable comments with all this message's
+ # comments, which can be used inside the partial.
+ #
+ # Example:
+ #
+ # json.partial! 'comments/comments', comments: @message.comments
+ #
+ # There are multiple ways to generate a collection of elements as JSON, as
ilustrated below:
+ #
+ # Example:
+ #
+ # json.array! @posts, partial: 'posts/post', as: :post
+ #
+ # # or:
+ # json.partial! 'posts/post', collection: @posts, as: :post
+ #
+ # # or:
+ # json.partial! partial: 'posts/post', collection: @posts, as: :post
+ #
+ # # or:
+ # json.comments @post.comments, partial: 'comments/comment', as: :comment
+ #
+ # Aside from that, the `:cached` options is available on Rails >= 6.0. This
will cache the rendered results
+ # effectively using the multi fetch feature.
+ #
+ # Example:
+ #
+ # json.array! @posts, partial: "posts/post", as: :post, cached: true
+ #
+ # json.comments @post.comments, partial: "comments/comment", as: :comment,
cached: true
+ #
def partial!(*args)
if args.one? && _is_active_model?(args.first)
_render_active_model_partial args.first
@@ -104,11 +137,30 @@
private
def _render_partial_with_options(options)
- options.reverse_merge! locals: options.except(:partial, :as, :collection)
+ options.reverse_merge! locals: options.except(:partial, :as, :collection,
:cached)
options.reverse_merge! ::JbuilderTemplate.template_lookup_options
as = options[:as]
- if as && options.key?(:collection)
+ if as && options.key?(:collection) && CollectionRenderer.supported?
+ collection = options.delete(:collection) || []
+ partial = options.delete(:partial)
+ options[:locals].merge!(json: self)
+
+ if options.has_key?(:layout)
+ raise ::NotImplementedError, "The `:layout' option is not supported in
collection rendering."
+ end
+
+ if options.has_key?(:spacer_template)
+ raise ::NotImplementedError, "The `:spacer_template' option is not
supported in collection rendering."
+ end
+
+ results = CollectionRenderer
+ .new(@context.lookup_context, options) { |&block| _scope(&block) }
+ .render_collection_with_partial(collection, partial, @context, nil)
+
+ array! if results.respond_to?(:body) && results.body.nil?
+ elsif as && options.key?(:collection) && !CollectionRenderer.supported?
+ # For Rails <= 5.2:
as = as.to_sym
collection = options.delete(:collection)
locals = options.delete(:locals)
@@ -162,12 +214,7 @@
def _fragment_name_with_digest(key, options)
if @context.respond_to?(:cache_fragment_name)
- # Current compatibility, fragment_name_with_digest is private again and
cache_fragment_name
- # should be used instead.
@context.cache_fragment_name(key, **options)
- elsif @context.respond_to?(:fragment_name_with_digest)
- # Backwards compatibility for period of time when
fragment_name_with_digest was made public.
- @context.fragment_name_with_digest(key)
else
key
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/jbuilder/railtie.rb new/lib/jbuilder/railtie.rb
--- old/lib/jbuilder/railtie.rb 2021-01-27 13:37:14.000000000 +0100
+++ new/lib/jbuilder/railtie.rb 2021-12-21 05:03:55.000000000 +0100
@@ -1,4 +1,4 @@
-require 'rails/railtie'
+require 'rails'
require 'jbuilder/jbuilder_template'
class Jbuilder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/jbuilder.rb new/lib/jbuilder.rb
--- old/lib/jbuilder.rb 2021-01-27 13:37:14.000000000 +0100
+++ new/lib/jbuilder.rb 2021-12-21 05:03:55.000000000 +0100
@@ -1,3 +1,4 @@
+require 'active_support'
require 'jbuilder/jbuilder'
require 'jbuilder/blank'
require 'jbuilder/key_formatter'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2021-01-27 13:37:14.000000000 +0100
+++ new/metadata 2021-12-21 05:03:55.000000000 +0100
@@ -1,14 +1,14 @@
--- !ruby/object:Gem::Specification
name: jbuilder
version: !ruby/object:Gem::Version
- version: 2.11.2
+ version: 2.11.5
platform: ruby
authors:
- David Heinemeier Hansson
autorequire:
bindir: bin
cert_chain: []
-date: 2021-01-27 00:00:00.000000000 Z
+date: 2021-12-21 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: activesupport
@@ -24,16 +24,29 @@
- - ">="
- !ruby/object:Gem::Version
version: 5.0.0
+- !ruby/object:Gem::Dependency
+ name: actionview
+ requirement: !ruby/object:Gem::Requirement
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ version: 5.0.0
+ type: :runtime
+ prerelease: false
+ version_requirements: !ruby/object:Gem::Requirement
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ version: 5.0.0
description:
email: [email protected]
executables: []
extensions: []
extra_rdoc_files: []
files:
+- ".github/workflows/ruby.yml"
- ".gitignore"
-- ".travis.yml"
- Appraisals
-- CHANGELOG.md
- CONTRIBUTING.md
- Gemfile
- MIT-LICENSE
@@ -43,6 +56,7 @@
- gemfiles/rails_5_1.gemfile
- gemfiles/rails_5_2.gemfile
- gemfiles/rails_6_0.gemfile
+- gemfiles/rails_6_1.gemfile
- gemfiles/rails_head.gemfile
- jbuilder.gemspec
- lib/generators/rails/jbuilder_generator.rb
@@ -54,6 +68,7 @@
- lib/generators/rails/templates/show.json.jbuilder
- lib/jbuilder.rb
- lib/jbuilder/blank.rb
+- lib/jbuilder/collection_renderer.rb
- lib/jbuilder/dependency_tracker.rb
- lib/jbuilder/errors.rb
- lib/jbuilder/jbuilder.rb
@@ -70,7 +85,12 @@
homepage: https://github.com/rails/jbuilder
licenses:
- MIT
-metadata: {}
+metadata:
+ bug_tracker_uri: https://github.com/rails/jbuilder/issues
+ changelog_uri: https://github.com/rails/jbuilder/releases/tag/v2.11.5
+ mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
+ source_code_uri: https://github.com/rails/jbuilder/tree/v2.11.5
+ rubygems_mfa_required: 'true'
post_install_message:
rdoc_options: []
require_paths:
@@ -86,7 +106,7 @@
- !ruby/object:Gem::Version
version: '0'
requirements: []
-rubygems_version: 3.1.2
+rubygems_version: 3.2.32
signing_key:
specification_version: 4
summary: Create JSON structures via a Builder-style DSL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/jbuilder_dependency_tracker_test.rb
new/test/jbuilder_dependency_tracker_test.rb
--- old/test/jbuilder_dependency_tracker_test.rb 2021-01-27
13:37:14.000000000 +0100
+++ new/test/jbuilder_dependency_tracker_test.rb 2021-12-21
05:03:55.000000000 +0100
@@ -61,7 +61,7 @@
assert_equal %w[comments/comment], dependencies
end
- test 'detects explicit depedency' do
+ test 'detects explicit dependency' do
dependencies = track_dependencies <<-RUBY
# Template Dependency: path/to/partial
json.foo 'bar'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/jbuilder_template_test.rb
new/test/jbuilder_template_test.rb
--- old/test/jbuilder_template_test.rb 2021-01-27 13:37:14.000000000 +0100
+++ new/test/jbuilder_template_test.rb 2021-12-21 05:03:55.000000000 +0100
@@ -159,7 +159,7 @@
end
test "object fragment caching with expiry" do
- travel_to "2018-05-12 11:29:00 -0400"
+ travel_to Time.iso8601("2018-05-12T11:29:00-04:00")
render <<-JBUILDER
json.cache! "cache-key", expires_in: 1.minute do
@@ -283,6 +283,101 @@
assert_equal "David", result["firstName"]
end
+ if JbuilderTemplate::CollectionRenderer.supported?
+ test "returns an empty array for an empty collection" do
+ result = render('json.array! @posts, partial: "post", as: :post, cached:
true', posts: [])
+
+ # Do not use #assert_empty as it is important to ensure that the type of
the JSON result is an array.
+ assert_equal [], result
+ end
+
+ test "works with an enumerable object" do
+ enumerable_class = Class.new do
+ include Enumerable
+ alias length count # Rails 6.1 requires this.
+
+ def each(&block)
+ [].each(&block)
+ end
+ end
+
+ result = render('json.array! @posts, partial: "post", as: :post, cached:
true', posts: enumerable_class.new)
+
+ # Do not use #assert_empty as it is important to ensure that the type of
the JSON result is an array.
+ assert_equal [], result
+ end
+
+ test "supports the cached: true option" do
+ result = render('json.array! @posts, partial: "post", as: :post, cached:
true', posts: POSTS)
+
+ assert_equal 10, result.count
+ assert_equal "Post #5", result[4]["body"]
+ assert_equal "Heinemeier Hansson", result[2]["author"]["last_name"]
+ assert_equal "Pavel", result[5]["author"]["first_name"]
+
+ expected = {
+ "id" => 1,
+ "body" => "Post #1",
+ "author" => {
+ "first_name" => "David",
+ "last_name" => "Heinemeier Hansson"
+ }
+ }
+
+ assert_equal expected, Rails.cache.read("post-1")
+
+ result = render('json.array! @posts, partial: "post", as: :post, cached:
true', posts: POSTS)
+
+ assert_equal 10, result.count
+ assert_equal "Post #5", result[4]["body"]
+ assert_equal "Heinemeier Hansson", result[2]["author"]["last_name"]
+ assert_equal "Pavel", result[5]["author"]["first_name"]
+ end
+
+ test "supports the cached: ->() {} option" do
+ result = render('json.array! @posts, partial: "post", as: :post, cached:
->(post) { [post, "foo"] }', posts: POSTS)
+
+ assert_equal 10, result.count
+ assert_equal "Post #5", result[4]["body"]
+ assert_equal "Heinemeier Hansson", result[2]["author"]["last_name"]
+ assert_equal "Pavel", result[5]["author"]["first_name"]
+
+ expected = {
+ "id" => 1,
+ "body" => "Post #1",
+ "author" => {
+ "first_name" => "David",
+ "last_name" => "Heinemeier Hansson"
+ }
+ }
+
+ assert_equal expected, Rails.cache.read("post-1/foo")
+
+ result = render('json.array! @posts, partial: "post", as: :post, cached:
->(post) { [post, "foo"] }', posts: POSTS)
+
+ assert_equal 10, result.count
+ assert_equal "Post #5", result[4]["body"]
+ assert_equal "Heinemeier Hansson", result[2]["author"]["last_name"]
+ assert_equal "Pavel", result[5]["author"]["first_name"]
+ end
+
+ test "raises an error on a render call with the :layout option" do
+ error = assert_raises NotImplementedError do
+ render('json.array! @posts, partial: "post", as: :post, layout:
"layout"', posts: POSTS)
+ end
+
+ assert_equal "The `:layout' option is not supported in collection
rendering.", error.message
+ end
+
+ test "raises an error on a render call with the :spacer_template option" do
+ error = assert_raises NotImplementedError do
+ render('json.array! @posts, partial: "post", as: :post,
spacer_template: "template"', posts: POSTS)
+ end
+
+ assert_equal "The `:spacer_template' option is not supported in
collection rendering.", error.message
+ end
+ end
+
private
def render(*args)
JSON.load render_without_parsing(*args)
@@ -290,7 +385,7 @@
def render_without_parsing(source, assigns = {})
view = build_view(fixtures: PARTIALS.merge("source.json.jbuilder" =>
source), assigns: assigns)
- view.render(template: "source.json.jbuilder")
+ view.render(template: "source")
end
def build_view(options = {})
@@ -306,6 +401,9 @@
end
def view.view_cache_dependencies; []; end
+ def view.combined_fragment_cache_key(key) [ key ] end
+ def view.cache_fragment_name(key, *) key end
+ def view.fragment_name_with_digest(key) key end
view
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/jbuilder_test.rb new/test/jbuilder_test.rb
--- old/test/jbuilder_test.rb 2021-01-27 13:37:14.000000000 +0100
+++ new/test/jbuilder_test.rb 2021-12-21 05:03:55.000000000 +0100
@@ -312,7 +312,7 @@
assert_equal 'world', result['comments'].second['content']
end
- test 'nesting multiple chilren from a non-Enumerable that responds to #map
with inline loop' do
+ test 'nesting multiple children from a non-Enumerable that responds to #map
with inline loop' do
comments = NonEnumerable.new([ Comment.new('hello', 1),
Comment.new('world', 2) ])
result = jbuild do |json|
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/scaffold_api_controller_generator_test.rb
new/test/scaffold_api_controller_generator_test.rb
--- old/test/scaffold_api_controller_generator_test.rb 2021-01-27
13:37:14.000000000 +0100
+++ new/test/scaffold_api_controller_generator_test.rb 2021-12-21
05:03:55.000000000 +0100
@@ -47,7 +47,7 @@
end
end
- test 'dont use require and permit if there are no attributes' do
+ test "don't use require and permit if there are no attributes" do
run_generator %w(Post --api)
assert_file 'app/controllers/posts_controller.rb' do |content|
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/scaffold_controller_generator_test.rb
new/test/scaffold_controller_generator_test.rb
--- old/test/scaffold_controller_generator_test.rb 2021-01-27
13:37:14.000000000 +0100
+++ new/test/scaffold_controller_generator_test.rb 2021-12-21
05:03:55.000000000 +0100
@@ -31,14 +31,14 @@
assert_instance_method :create, content do |m|
assert_match %r{@post = Post\.new\(post_params\)}, m
assert_match %r{@post\.save}, m
- assert_match %r{format\.html \{ redirect_to @post, notice: "Post was
successfully created\." \}}, m
+ assert_match %r{format\.html \{ redirect_to post_url\(@post\), notice:
"Post was successfully created\." \}}, m
assert_match %r{format\.json \{ render :show, status: :created,
location: @post \}}, m
assert_match %r{format\.html \{ render :new, status:
:unprocessable_entity \}}, m
assert_match %r{format\.json \{ render json: @post\.errors, status:
:unprocessable_entity \}}, m
end
assert_instance_method :update, content do |m|
- assert_match %r{format\.html \{ redirect_to @post, notice: "Post was
successfully updated\." \}}, m
+ assert_match %r{format\.html \{ redirect_to post_url\(@post\), notice:
"Post was successfully updated\." \}}, m
assert_match %r{format\.json \{ render :show, status: :ok, location:
@post \}}, m
assert_match %r{format\.html \{ render :edit, status:
:unprocessable_entity \}}, m
assert_match %r{format\.json \{ render json: @post.errors, status:
:unprocessable_entity \}}, m
@@ -59,7 +59,26 @@
end
end
- test 'dont use require and permit if there are no attributes' do
+ if Rails::VERSION::MAJOR >= 6
+ test 'controller with namespace' do
+ run_generator %w(Admin::Post --model-name=Post)
+ assert_file 'app/controllers/admin/posts_controller.rb' do |content|
+ assert_instance_method :create, content do |m|
+ assert_match %r{format\.html \{ redirect_to admin_post_url\(@post\),
notice: "Post was successfully created\." \}}, m
+ end
+
+ assert_instance_method :update, content do |m|
+ assert_match %r{format\.html \{ redirect_to admin_post_url\(@post\),
notice: "Post was successfully updated\." \}}, m
+ end
+
+ assert_instance_method :destroy, content do |m|
+ assert_match %r{format\.html \{ redirect_to admin_posts_url, notice:
"Post was successfully destroyed\." \}}, m
+ end
+ end
+ end
+ end
+
+ test "don't use require and permit if there are no attributes" do
run_generator %w(Post)
assert_file 'app/controllers/posts_controller.rb' do |content|
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/test_helper.rb new/test/test_helper.rb
--- old/test/test_helper.rb 2021-01-27 13:37:14.000000000 +0100
+++ new/test/test_helper.rb 2021-12-21 05:03:55.000000000 +0100
@@ -1,14 +1,13 @@
require "bundler/setup"
-require "active_support"
+require "rails"
+
+require "jbuilder"
+
require "active_support/core_ext/array/access"
require "active_support/cache/memory_store"
require "active_support/json"
require "active_model"
-require "action_view"
-require "rails/version"
-
-require "jbuilder"
require "active_support/testing/autorun"
require "mocha/minitest"
@@ -21,7 +20,13 @@
end
end
-class Post < Struct.new(:id, :body, :author_name); end
+Jbuilder::CollectionRenderer.collection_cache = Rails.cache
+
+class Post < Struct.new(:id, :body, :author_name)
+ def cache_key
+ "post-#{id}"
+ end
+end
class Racer < Struct.new(:id, :name)
extend ActiveModel::Naming
@@ -29,6 +34,3 @@
end
ActionView::Template.register_template_handler :jbuilder, JbuilderHandler
-
-ActionView::Base.remove_possible_method :fragment_name_with_digest
-ActionView::Base.remove_possible_method :cache_fragment_name