Hello community,
here is the log from the commit of package rubygem-jbuilder for
openSUSE:Factory checked in at 2019-05-17 23:44:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-jbuilder (Old)
and /work/SRC/openSUSE:Factory/.rubygem-jbuilder.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-jbuilder"
Fri May 17 23:44:31 2019 rev:21 rq:703703 version:2.9.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-jbuilder/rubygem-jbuilder.changes
2018-11-10 17:02:17.183540376 +0100
+++
/work/SRC/openSUSE:Factory/.rubygem-jbuilder.new.5148/rubygem-jbuilder.changes
2019-05-17 23:44:38.673863996 +0200
@@ -1,0 +2,20 @@
+Fri May 17 11:25:31 UTC 2019 - Lukas Krause <[email protected]>
+
+- update to version 2.9.1
+ see installed CHANGELOG.md
+
+ 2.9.1
+ -----
+ * Respect JSON encoding customizations
+
+ 2.9.0
+ -----
+ * Fix passing object with partial without locals
+ * Fix deprecation warning in Rails 6.0
+ * Use quotes consistently in generated templates
+ * Allow omitting timestamps from generated partials
+ * Respect changing scaffold generator
+ * Use a symbolic default format for Rails 6.0 forward compatibility
+ * Drop MultiJSON in favor of Ruby standard library JSON
+
+-------------------------------------------------------------------
Old:
----
jbuilder-2.8.0.gem
New:
----
jbuilder-2.9.1.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-jbuilder.spec ++++++
--- /var/tmp/diff_new_pack.bF9qNZ/_old 2019-05-17 23:44:39.097863763 +0200
+++ /var/tmp/diff_new_pack.bF9qNZ/_new 2019-05-17 23:44:39.101863761 +0200
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-jbuilder
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
#
Name: rubygem-jbuilder
-Version: 2.8.0
+Version: 2.9.1
Release: 0
%define mod_name jbuilder
%define mod_full_name %{mod_name}-%{version}
++++++ jbuilder-2.8.0.gem -> jbuilder-2.9.1.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 2018-11-05 16:49:16.000000000 +0100
+++ new/.gitignore 2019-05-14 19:38:31.000000000 +0200
@@ -3,3 +3,4 @@
Gemfile.lock
.ruby-version
pkg
+*.gem
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.travis.yml new/.travis.yml
--- old/.travis.yml 2018-11-05 16:49:16.000000000 +0100
+++ new/.travis.yml 2019-05-14 19:38:31.000000000 +0200
@@ -1,56 +1,67 @@
language: ruby
-sudo: false
cache: bundler
before_install:
- - gem update --system
- - gem install bundler
+ - "gem update --system 2.7.9"
+ - "gem install bundler -v '<2'"
rvm:
- - 1.9
- - 2.0
- - 2.1
- 2.2.10
- - 2.3.7
- - 2.4.4
- - 2.5.1
+ - 2.3.8
+ - 2.4.6
+ - 2.5.5
+ - 2.6.2
- ruby-head
- - jruby-19mode
- - rbx
+ - rbx-3.107
gemfile:
- gemfiles/rails_4_2.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:
- allow_failures:
- - rvm: jruby-19mode
- - rvm: rbx
- - rvm: ruby-head
- fast_finish: true
- exclude:
- - rvm: 1.9
- gemfile: gemfiles/rails_5_0.gemfile
+ include:
- rvm: 1.9
- gemfile: gemfiles/rails_5_1.gemfile
+ gemfile: gemfiles/rails_4_2.gemfile
- rvm: 2.0
- gemfile: gemfiles/rails_5_0.gemfile
- - rvm: 2.0
- gemfile: gemfiles/rails_5_1.gemfile
- - rvm: 2.1
- gemfile: gemfiles/rails_5_0.gemfile
+ gemfile: gemfiles/rails_4_2.gemfile
- rvm: 2.1
- gemfile: gemfiles/rails_5_1.gemfile
+ gemfile: gemfiles/rails_4_2.gemfile
+ - rvm: 2.3
+ gemfile: gemfiles/rails_4_2.gemfile
- rvm: jruby-19mode
- gemfile: gemfiles/rails_5_0.gemfile
+ gemfile: gemfiles/rails_4_2.gemfile
+ - rvm: rbx-3.107
+ gemfile: gemfiles/rails_4_2.gemfile
+ exclude:
+ - rvm: 2.4.6
+ gemfile: gemfiles/rails_4_2.gemfile
+ - rvm: 2.5.5
+ gemfile: gemfiles/rails_4_2.gemfile
+ - rvm: 2.6.2
+ gemfile: gemfiles/rails_4_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.6
+ 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.6
+ gemfile: gemfiles/rails_head.gemfile
+ allow_failures:
- rvm: jruby-19mode
- gemfile: gemfiles/rails_5_1.gemfile
- - rvm: rbx
- gemfile: gemfiles/rails_5_0.gemfile
- - rvm: rbx
- gemfile: gemfiles/rails_5_1.gemfile
+ - rvm: rbx-3.107
+ - 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 2018-11-05 16:49:16.000000000 +0100
+++ new/Appraisals 2019-05-14 19:38:31.000000000 +0200
@@ -1,13 +1,27 @@
appraise "rails-4-2" do
- gem "rails", "~> 4.2.0"
+ gem "rails", "~> 4.2.0"
end
if RUBY_VERSION >= "2.2.2"
appraise "rails-5-0" do
- gem "rails", ">= 5.0.0", "< 5.1"
+ gem "rails", "~> 5.0.0"
end
appraise "rails-5-1" do
- gem "rails", ">= 5.1.0", "< 5.2"
+ gem "rails", "~> 5.1.0"
+ end
+
+ appraise "rails-5-2" do
+ gem "rails", "~> 5.2.0"
+ end
+end
+
+if RUBY_VERSION >= "2.5.0"
+ appraise "rails-6-0" do
+ gem "rails", "~> 6.0.0.rc1"
+ end
+
+ appraise "rails-head" do
+ gem "rails", github: "rails/rails"
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md 2018-11-05 16:49:16.000000000 +0100
+++ new/CHANGELOG.md 2019-05-14 19:38:31.000000000 +0200
@@ -1,5 +1,21 @@
# Changelog
+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
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Gemfile new/Gemfile
--- old/Gemfile 2018-11-05 16:49:16.000000000 +0100
+++ new/Gemfile 2019-05-14 19:38:31.000000000 +0200
@@ -5,4 +5,3 @@
gem "rake"
gem "mocha", require: false
gem "appraisal"
-gem "pry"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2018-11-05 16:49:16.000000000 +0100
+++ new/README.md 2019-05-14 19:38:31.000000000 +0200
@@ -156,7 +156,6 @@
end
```
-
You can use partials as well. The following will render the file
`views/comments/_comments.json.jbuilder`, and set a local variable
`comments` with all this message's comments, which you can use inside
@@ -184,6 +183,25 @@
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`.
+
+Be sure not to confuse the `as:` option to mean nesting of the partial. For
example:
+
+```ruby
+ # Use the default `views/comments/_comment.json.jbuilder`, putting @comment
as the comment local variable.
+ # Note, `comment` attributes are "inlined".
+ json.partial! @comment, as: :comment
+```
+
+is quite different than:
+
+```ruby
+ # comment attributes are nested under a "comment" property
+json.comment do
+ json.partial! "/comments/comment.json.jbuilder", comment: @comment
+end
+```
+
You can pass any objects into partial templates with or without `:locals`
option.
```ruby
@@ -256,21 +274,6 @@
Jbuilder.key_format camelize: :lower
```
-Faster JSON backends
---------------------
-
-Jbuilder uses MultiJson, which by default will use the JSON gem. That gem is
-currently tangled with ActiveSupport's all-Ruby `#to_json` implementation,
-which is slow (fixed in Rails >= 4.1). For faster Jbuilder rendering, you can
-specify something like the Yajl JSON generator instead. You'll need to include
-the `yajl-ruby` gem in your Gemfile and then set the following configuration
-for MultiJson:
-
-``` ruby
-require 'multi_json'
-MultiJson.use :yajl
- ```
-
## Contributing to Jbuilder
Jbuilder is the work of many contributors. You're encouraged to submit pull
requests, propose
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_4_2.gemfile
new/gemfiles/rails_4_2.gemfile
--- old/gemfiles/rails_4_2.gemfile 2018-11-05 16:49:16.000000000 +0100
+++ new/gemfiles/rails_4_2.gemfile 2019-05-14 19:38:31.000000000 +0200
@@ -5,7 +5,6 @@
gem "rake"
gem "mocha", require: false
gem "appraisal"
-gem "pry"
gem "rails", "~> 4.2.0"
gemspec path: "../"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gemfiles/rails_5_0.gemfile
new/gemfiles/rails_5_0.gemfile
--- old/gemfiles/rails_5_0.gemfile 2018-11-05 16:49:16.000000000 +0100
+++ new/gemfiles/rails_5_0.gemfile 2019-05-14 19:38:31.000000000 +0200
@@ -5,7 +5,6 @@
gem "rake"
gem "mocha", require: false
gem "appraisal"
-gem "pry"
-gem "rails", ">= 5.0.0", "< 5.1"
+gem "rails", "~> 5.0.0"
gemspec path: "../"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gemfiles/rails_5_1.gemfile
new/gemfiles/rails_5_1.gemfile
--- old/gemfiles/rails_5_1.gemfile 2018-11-05 16:49:16.000000000 +0100
+++ new/gemfiles/rails_5_1.gemfile 2019-05-14 19:38:31.000000000 +0200
@@ -5,7 +5,6 @@
gem "rake"
gem "mocha", require: false
gem "appraisal"
-gem "pry"
-gem "rails", ">= 5.1.0", "< 5.2"
+gem "rails", "~> 5.1.0"
gemspec path: "../"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gemfiles/rails_5_2.gemfile
new/gemfiles/rails_5_2.gemfile
--- old/gemfiles/rails_5_2.gemfile 1970-01-01 01:00:00.000000000 +0100
+++ new/gemfiles/rails_5_2.gemfile 2019-05-14 19:38:31.000000000 +0200
@@ -0,0 +1,10 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "rake"
+gem "mocha", require: false
+gem "appraisal"
+gem "rails", "~> 5.2.0"
+
+gemspec path: "../"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gemfiles/rails_6_0.gemfile
new/gemfiles/rails_6_0.gemfile
--- old/gemfiles/rails_6_0.gemfile 1970-01-01 01:00:00.000000000 +0100
+++ new/gemfiles/rails_6_0.gemfile 2019-05-14 19:38:31.000000000 +0200
@@ -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.0.0.rc1"
+
+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 1970-01-01 01:00:00.000000000 +0100
+++ new/gemfiles/rails_head.gemfile 2019-05-14 19:38:31.000000000 +0200
@@ -0,0 +1,10 @@
+# This file was generated by Appraisal
+
+source "https://rubygems.org"
+
+gem "rake"
+gem "mocha", require: false
+gem "appraisal"
+gem "rails", github: "rails/rails"
+
+gemspec path: "../"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jbuilder.gemspec new/jbuilder.gemspec
--- old/jbuilder.gemspec 2018-11-05 16:49:16.000000000 +0100
+++ new/jbuilder.gemspec 2019-05-14 19:38:31.000000000 +0200
@@ -1,6 +1,6 @@
Gem::Specification.new do |s|
s.name = 'jbuilder'
- s.version = '2.8.0'
+ s.version = '2.9.1'
s.authors = 'David Heinemeier Hansson'
s.email = '[email protected]'
s.summary = 'Create JSON structures via a Builder-style DSL'
@@ -10,7 +10,6 @@
s.required_ruby_version = '>= 1.9.3'
s.add_dependency 'activesupport', '>= 4.2.0'
- s.add_dependency 'multi_json', '>= 1.2'
s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- test/*`.split("\n")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/generators/rails/jbuilder_generator.rb
new/lib/generators/rails/jbuilder_generator.rb
--- old/lib/generators/rails/jbuilder_generator.rb 2018-11-05
16:49:16.000000000 +0100
+++ new/lib/generators/rails/jbuilder_generator.rb 2019-05-14
19:38:31.000000000 +0200
@@ -10,6 +10,8 @@
argument :attributes, type: :array, default: [], banner: 'field:type
field:type'
+ class_option :timestamps, type: :boolean, default: true
+
def create_root_folder
path = File.join('app/views', controller_file_path)
empty_directory path unless File.directory?(path)
@@ -33,8 +35,12 @@
[name, :json, :jbuilder] * '.'
end
- def attributes_list_with_timestamps
- attributes_list(attributes_names + %w(created_at updated_at))
+ def full_attributes_list
+ if options[:timestamps]
+ attributes_list(attributes_names + %w(created_at updated_at))
+ else
+ attributes_list(attributes_names)
+ end
end
def attributes_list(attributes = attributes_names)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/lib/generators/rails/scaffold_controller_generator.rb
new/lib/generators/rails/scaffold_controller_generator.rb
--- old/lib/generators/rails/scaffold_controller_generator.rb 2018-11-05
16:49:16.000000000 +0100
+++ new/lib/generators/rails/scaffold_controller_generator.rb 2019-05-14
19:38:31.000000000 +0200
@@ -7,6 +7,12 @@
source_paths << File.expand_path('../templates', __FILE__)
hook_for :jbuilder, type: :boolean, default: true
+
+ private
+
+ def permitted_params
+ attributes_names.map { |name| ":#{name}" }.join(', ')
+ end unless private_method_defined? :permitted_params
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/generators/rails/templates/api_controller.rb
new/lib/generators/rails/templates/api_controller.rb
--- old/lib/generators/rails/templates/api_controller.rb 2018-11-05
16:49:16.000000000 +0100
+++ new/lib/generators/rails/templates/api_controller.rb 2019-05-14
19:38:31.000000000 +0200
@@ -56,7 +56,7 @@
<%- if attributes_names.empty? -%>
params.fetch(<%= ":#{singular_table_name}" %>, {})
<%- else -%>
- params.require(<%= ":#{singular_table_name}" %>).permit(<%=
attributes_names.map { |name| ":#{name}" }.join(', ') %>)
+ params.require(<%= ":#{singular_table_name}" %>).permit(<%=
permitted_params %>)
<%- end -%>
end
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 2018-11-05
16:49:16.000000000 +0100
+++ new/lib/generators/rails/templates/controller.rb 2019-05-14
19:38:31.000000000 +0200
@@ -77,7 +77,7 @@
<%- if attributes_names.empty? -%>
params.fetch(<%= ":#{singular_table_name}" %>, {})
<%- else -%>
- params.require(<%= ":#{singular_table_name}" %>).permit(<%=
attributes_names.map { |name| ":#{name}" }.join(', ') %>)
+ params.require(<%= ":#{singular_table_name}" %>).permit(<%=
permitted_params %>)
<%- end -%>
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/generators/rails/templates/index.json.jbuilder
new/lib/generators/rails/templates/index.json.jbuilder
--- old/lib/generators/rails/templates/index.json.jbuilder 2018-11-05
16:49:16.000000000 +0100
+++ new/lib/generators/rails/templates/index.json.jbuilder 2019-05-14
19:38:31.000000000 +0200
@@ -1 +1 @@
-json.array! @<%= plural_table_name %>, partial: '<%= plural_table_name %>/<%=
singular_table_name %>', as: :<%= singular_table_name %>
+json.array! @<%= plural_table_name %>, partial: "<%= plural_table_name %>/<%=
singular_table_name %>", as: :<%= singular_table_name %>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/generators/rails/templates/partial.json.jbuilder
new/lib/generators/rails/templates/partial.json.jbuilder
--- old/lib/generators/rails/templates/partial.json.jbuilder 2018-11-05
16:49:16.000000000 +0100
+++ new/lib/generators/rails/templates/partial.json.jbuilder 2019-05-14
19:38:31.000000000 +0200
@@ -1,2 +1,2 @@
-json.extract! <%= singular_table_name %>, <%= attributes_list_with_timestamps
%>
+json.extract! <%= singular_table_name %>, <%= full_attributes_list %>
json.url <%= singular_table_name %>_url(<%= singular_table_name %>, format:
:json)
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 2018-11-05 16:49:16.000000000
+0100
+++ new/lib/jbuilder/jbuilder_template.rb 2019-05-14 19:38:31.000000000
+0200
@@ -104,7 +104,7 @@
private
def _render_partial_with_options(options)
- options.reverse_merge! locals: {}
+ options.reverse_merge! locals: options.except(:partial, :as, :collection)
options.reverse_merge! ::JbuilderTemplate.template_lookup_options
as = options[:as]
@@ -222,11 +222,12 @@
class JbuilderHandler
cattr_accessor :default_format
- self.default_format = Mime[:json]
+ self.default_format = :json
- def self.call(template)
+ def self.call(template, source = nil)
+ source ||= template.source
# this juggling is required to keep line numbers right in the error
- %{__already_defined = defined?(json); json||=JbuilderTemplate.new(self);
#{template.source}
+ %{__already_defined = defined?(json); json||=JbuilderTemplate.new(self);
#{source}
json.target! unless (__already_defined && __already_defined != "method")}
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/jbuilder.rb new/lib/jbuilder.rb
--- old/lib/jbuilder.rb 2018-11-05 16:49:16.000000000 +0100
+++ new/lib/jbuilder.rb 2019-05-14 19:38:31.000000000 +0200
@@ -2,7 +2,7 @@
require 'jbuilder/blank'
require 'jbuilder/key_formatter'
require 'jbuilder/errors'
-require 'multi_json'
+require 'json'
require 'ostruct'
class Jbuilder
@@ -247,7 +247,7 @@
# Encodes the current builder as JSON.
def target!
- ::MultiJson.dump(@attributes)
+ @attributes.to_json
end
private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2018-11-05 16:49:16.000000000 +0100
+++ new/metadata 2019-05-14 19:38:31.000000000 +0200
@@ -1,14 +1,14 @@
--- !ruby/object:Gem::Specification
name: jbuilder
version: !ruby/object:Gem::Version
- version: 2.8.0
+ version: 2.9.1
platform: ruby
authors:
- David Heinemeier Hansson
autorequire:
bindir: bin
cert_chain: []
-date: 2018-11-05 00:00:00.000000000 Z
+date: 2019-05-14 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: activesupport
@@ -24,20 +24,6 @@
- - ">="
- !ruby/object:Gem::Version
version: 4.2.0
-- !ruby/object:Gem::Dependency
- name: multi_json
- requirement: !ruby/object:Gem::Requirement
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- version: '1.2'
- type: :runtime
- prerelease: false
- version_requirements: !ruby/object:Gem::Requirement
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- version: '1.2'
description:
email: [email protected]
executables: []
@@ -56,6 +42,9 @@
- gemfiles/rails_4_2.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
- jbuilder.gemspec
- lib/generators/rails/jbuilder_generator.rb
- lib/generators/rails/scaffold_controller_generator.rb
@@ -98,8 +87,7 @@
- !ruby/object:Gem::Version
version: '0'
requirements: []
-rubyforge_project:
-rubygems_version: 2.7.6
+rubygems_version: 3.0.3
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_generator_test.rb
new/test/jbuilder_generator_test.rb
--- old/test/jbuilder_generator_test.rb 2018-11-05 16:49:16.000000000 +0100
+++ new/test/jbuilder_generator_test.rb 2019-05-14 19:38:31.000000000 +0200
@@ -21,18 +21,26 @@
run_generator
assert_file 'app/views/posts/index.json.jbuilder' do |content|
- assert_match %r{json.array! @posts, partial: 'posts/post', as: :post},
content
+ assert_match %r{json\.array! @posts, partial: "posts/post", as: :post},
content
end
assert_file 'app/views/posts/show.json.jbuilder' do |content|
- assert_match %r{json.partial! \"posts/post\", post: @post}, content
+ assert_match %r{json\.partial! "posts/post", post: @post}, content
end
-
- assert_file 'app/views/posts/_post.json.jbuilder' do |content|
+
+ assert_file 'app/views/posts/_post.json.jbuilder' do |content|
assert_match %r{json\.extract! post, :id, :title, :body}, content
+ assert_match %r{:created_at, :updated_at}, content
assert_match %r{json\.url post_url\(post, format: :json\)}, content
end
-
+ end
+ test 'timestamps are not generated in partial with --no-timestamps' do
+ run_generator %w(Post title body:text --no-timestamps)
+
+ assert_file 'app/views/posts/_post.json.jbuilder' do |content|
+ assert_match %r{json\.extract! post, :id, :title, :body$}, content
+ assert_no_match %r{:created_at, :updated_at}, content
+ end
end
end
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 2018-11-05 16:49:16.000000000 +0100
+++ new/test/jbuilder_template_test.rb 2019-05-14 19:38:31.000000000 +0200
@@ -1,457 +1,312 @@
require "test_helper"
-require "mocha/setup"
-require "active_model"
-require "action_view"
require "action_view/testing/resolvers"
-require "active_support/cache"
-require "jbuilder/jbuilder_template"
-BLOG_POST_PARTIAL = <<-JBUILDER
- json.extract! blog_post, :id, :body
- json.author do
- first_name, last_name = blog_post.author_name.split(nil, 2)
- json.first_name first_name
- json.last_name last_name
- end
-JBUILDER
-
-COLLECTION_PARTIAL = <<-JBUILDER
- json.extract! collection, :id, :name
-JBUILDER
-
-RACER_PARTIAL = <<-JBUILDER
- json.extract! racer, :id, :name
-JBUILDER
-
-class Racer
- extend ActiveModel::Naming
- include ActiveModel::Conversion
-
- def initialize(id, name)
- @id, @name = id, name
- end
-
- attr_reader :id, :name
-end
+class JbuilderTemplateTest < ActiveSupport::TestCase
+ POST_PARTIAL = <<-JBUILDER
+ json.extract! post, :id, :body
+ json.author do
+ first_name, last_name = post.author_name.split(nil, 2)
+ json.first_name first_name
+ json.last_name last_name
+ end
+ JBUILDER
+ COLLECTION_PARTIAL = <<-JBUILDER
+ json.extract! collection, :id, :name
+ JBUILDER
-BlogPost = Struct.new(:id, :body, :author_name)
-Collection = Struct.new(:id, :name)
-blog_authors = [ "David Heinemeier Hansson", "Pavel Pravosud" ].cycle
-BLOG_POST_COLLECTION = Array.new(10){ |i| BlogPost.new(i+1, "post body
#{i+1}", blog_authors.next) }
-COLLECTION_COLLECTION = Array.new(5){ |i| Collection.new(i+1, "collection
#{i+1}") }
-
-ActionView::Template.register_template_handler :jbuilder, JbuilderHandler
-
-PARTIALS = {
- "_partial.json.jbuilder" => "foo ||= 'hello'; json.content foo",
- "_blog_post.json.jbuilder" => BLOG_POST_PARTIAL,
- "racers/_racer.json.jbuilder" => RACER_PARTIAL,
- "_collection.json.jbuilder" => COLLECTION_PARTIAL
-}
-
-module Rails
- def self.cache
- @cache ||= ActiveSupport::Cache::MemoryStore.new
- end
-end
+ RACER_PARTIAL = <<-JBUILDER
+ json.extract! racer, :id, :name
+ JBUILDER
-class JbuilderTemplateTest < ActionView::TestCase
- setup do
- @context = self
- Rails.cache.clear
- end
-
- def jbuild(source, options = {})
- @rendered = []
- partials = options.fetch(:partials, PARTIALS).clone
- partials["test.json.jbuilder"] = source
- resolver = ActionView::FixtureResolver.new(partials)
- lookup_context.view_paths = [resolver]
- template = ActionView::Template.new(source, "test", JbuilderHandler,
virtual_path: "test")
- json = template.render(self, {}).strip
- MultiJson.load(json)
- end
-
- def undef_context_methods(*names)
- self.class_eval do
- names.each do |name|
- undef_method name.to_sym if method_defined?(name.to_sym)
- end
- end
- end
+ PARTIALS = {
+ "_partial.json.jbuilder" => "json.content content",
+ "_post.json.jbuilder" => POST_PARTIAL,
+ "racers/_racer.json.jbuilder" => RACER_PARTIAL,
+ "_collection.json.jbuilder" => COLLECTION_PARTIAL,
- def assert_collection_rendered(result, context = nil)
- result = result.fetch(context) if context
+ # Ensure we find only Jbuilder partials from within Jbuilder templates.
+ "_post.html.erb" => "Hello world!"
+ }
- assert_equal 10, result.length
- assert_equal Array, result.class
- assert_equal "post body 5", result[4]["body"]
- assert_equal "Heinemeier Hansson", result[2]["author"]["last_name"]
- assert_equal "Pavel", result[5]["author"]["first_name"]
- end
+ AUTHORS = [ "David Heinemeier Hansson", "Pavel Pravosud" ].cycle
+ POSTS = (1..10).collect { |i| Post.new(i, "Post ##{i}", AUTHORS.next) }
- test "rendering" do
- result = jbuild(<<-JBUILDER)
- json.content "hello"
- JBUILDER
+ setup { Rails.cache.clear }
+ test "basic template" do
+ result = render('json.content "hello"')
assert_equal "hello", result["content"]
end
- test "key_format! with parameter" do
- result = jbuild(<<-JBUILDER)
- json.key_format! camelize: [:lower]
- json.camel_style "for JS"
- JBUILDER
-
- assert_equal ["camelStyle"], result.keys
- end
-
- test "key_format! propagates to child elements" do
- result = jbuild(<<-JBUILDER)
- json.key_format! :upcase
- json.level1 "one"
- json.level2 do
- json.value "two"
- end
- JBUILDER
-
- assert_equal "one", result["LEVEL1"]
- assert_equal "two", result["LEVEL2"]["VALUE"]
+ test "partial by name with top-level locals" do
+ result = render('json.partial! "partial", content: "hello"')
+ assert_equal "hello", result["content"]
end
- test "partial! renders partial" do
- result = jbuild(<<-JBUILDER)
- json.partial! "partial"
- JBUILDER
-
+ test "partial by name with nested locals" do
+ result = render('json.partial! "partial", locals: { content: "hello" }')
assert_equal "hello", result["content"]
end
- test "partial! + locals via :locals option" do
- result = jbuild(<<-JBUILDER)
- json.partial! "partial", locals: { foo: "howdy" }
- JBUILDER
-
- assert_equal "howdy", result["content"]
+ test "partial by options containing nested locals" do
+ result = render('json.partial! partial: "partial", locals: { content:
"hello" }')
+ assert_equal "hello", result["content"]
end
- test "partial! + locals without :locals key" do
- result = jbuild(<<-JBUILDER)
- json.partial! "partial", foo: "goodbye"
- JBUILDER
-
- assert_equal "goodbye", result["content"]
+ test "partial by options containing top-level locals" do
+ result = render('json.partial! partial: "partial", content: "hello"')
+ assert_equal "hello", result["content"]
end
- test "partial! renders collections" do
- result = jbuild(<<-JBUILDER)
- json.partial! "blog_post", collection: BLOG_POST_COLLECTION, as:
:blog_post
- JBUILDER
-
- assert_collection_rendered result
+ test "partial for Active Model" do
+ result = render('json.partial! @racer', racer: Racer.new(123, "Chris
Harris"))
+ assert_equal 123, result["id"]
+ assert_equal "Chris Harris", result["name"]
end
- test "partial! renders collections when as argument is a string" do
- result = jbuild(<<-JBUILDER)
- json.partial! "blog_post", collection: BLOG_POST_COLLECTION, as:
"blog_post"
- JBUILDER
-
- assert_collection_rendered result
+ test "partial collection by name with symbol local" do
+ result = render('json.partial! "post", collection: @posts, as: :post',
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 "partial! renders collections as collections" do
- result = jbuild(<<-JBUILDER)
- json.partial! "collection", collection: COLLECTION_COLLECTION, as:
:collection
- JBUILDER
-
- assert_equal 5, result.length
+ test "partial collection by name with string local" do
+ result = render('json.partial! "post", collection: @posts, as: "post"',
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 "partial! renders as empty array for nil-collection" do
- result = jbuild(<<-JBUILDER)
- json.partial! "blog_post", collection: nil, as: :blog_post
- JBUILDER
-
- assert_equal [], result
+ test "partial collection by options" do
+ result = render('json.partial! partial: "post", collection: @posts, as:
:post', 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 "partial! renders collection (alt. syntax)" do
- result = jbuild(<<-JBUILDER)
- json.partial! partial: "blog_post", collection: BLOG_POST_COLLECTION,
as: :blog_post
- JBUILDER
-
- assert_collection_rendered result
+ test "nil partial collection by name" do
+ assert_equal [], render('json.partial! "post", collection: @posts, as:
:post', posts: nil)
end
- test "partial! renders as empty array for nil-collection (alt. syntax)" do
- result = jbuild(<<-JBUILDER)
- json.partial! partial: "blog_post", collection: nil, as: :blog_post
- JBUILDER
-
- assert_equal [], result
+ test "nil partial collection by options" do
+ assert_equal [], render('json.partial! partial: "post", collection:
@posts, as: :post', posts: nil)
end
- test "render array of partials" do
- result = jbuild(<<-JBUILDER)
- json.array! BLOG_POST_COLLECTION, partial: "blog_post", as: :blog_post
- JBUILDER
-
- assert_collection_rendered result
+ test "array of partials" do
+ result = render('json.array! @posts, partial: "post", as: :post', 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 "render array of partials as empty array with nil-collection" do
- result = jbuild(<<-JBUILDER)
- json.array! nil, partial: "blog_post", as: :blog_post
- JBUILDER
-
- assert_equal [], result
+ test "empty array of partials from nil collection" do
+ assert_equal [], render('json.array! @posts, partial: "post", as: :post',
posts: nil)
end
- test "render array of partials as a value" do
- result = jbuild(<<-JBUILDER)
- json.posts BLOG_POST_COLLECTION, partial: "blog_post", as: :blog_post
- JBUILDER
-
- assert_collection_rendered result, "posts"
+ test "array of partials under key" do
+ result = render('json.posts @posts, partial: "post", as: :post', posts:
POSTS)
+ assert_equal 10, result["posts"].count
+ assert_equal "Post #5", result["posts"][4]["body"]
+ assert_equal "Heinemeier Hansson",
result["posts"][2]["author"]["last_name"]
+ assert_equal "Pavel", result["posts"][5]["author"]["first_name"]
end
- test "render as empty array if partials as a nil value" do
- result = jbuild <<-JBUILDER
- json.posts nil, partial: "blog_post", as: :blog_post
- JBUILDER
-
+ test "empty array of partials under key from nil collection" do
+ result = render('json.posts @posts, partial: "post", as: :post', posts:
nil)
assert_equal [], result["posts"]
end
- test "cache an empty block" do
- undef_context_methods :fragment_name_with_digest, :cache_fragment_name
-
- jbuild <<-JBUILDER
- json.cache! "nothing" do
+ test "object fragment caching" do
+ render(<<-JBUILDER)
+ json.cache! "cache-key" do
+ json.name "Hit"
end
JBUILDER
- result = nil
-
- assert_nothing_raised do
- result = jbuild(<<-JBUILDER)
- json.foo "bar"
- json.cache! "nothing" do
- end
- JBUILDER
- end
-
- assert_equal "bar", result["foo"]
+ hit = render('json.cache! "cache-key" do; end')
+ assert_equal "Hit", hit["name"]
end
- test "fragment caching a JSON object" do
- undef_context_methods :fragment_name_with_digest, :cache_fragment_name
-
- jbuild <<-JBUILDER
- json.cache! "cachekey" do
- json.name "Cache"
+ test "conditional object fragment caching" do
+ render(<<-JBUILDER)
+ json.cache_if! true, "cache-key" do
+ json.a "Hit"
end
- JBUILDER
- result = jbuild(<<-JBUILDER)
- json.cache! "cachekey" do
- json.name "Miss"
+ json.cache_if! false, "cache-key" do
+ json.b "Hit"
end
JBUILDER
- assert_equal "Cache", result["name"]
- end
-
- test "conditionally fragment caching a JSON object" do
- undef_context_methods :fragment_name_with_digest, :cache_fragment_name
-
- jbuild <<-JBUILDER
- json.cache_if! true, "cachekey" do
- json.test1 "Cache"
+ result = render(<<-JBUILDER)
+ json.cache_if! true, "cache-key" do
+ json.a "Miss"
end
- json.cache_if! false, "cachekey" do
- json.test2 "Cache"
- end
- JBUILDER
- result = jbuild(<<-JBUILDER)
- json.cache_if! true, "cachekey" do
- json.test1 "Miss"
- end
- json.cache_if! false, "cachekey" do
- json.test2 "Miss"
+ json.cache_if! false, "cache-key" do
+ json.b "Miss"
end
JBUILDER
- assert_equal "Cache", result["test1"]
- assert_equal "Miss", result["test2"]
+ assert_equal "Hit", result["a"]
+ assert_equal "Miss", result["b"]
end
- test "fragment caching deserializes an array" do
- undef_context_methods :fragment_name_with_digest, :cache_fragment_name
+ test "object fragment caching with expiry" do
+ travel_to "2018-05-12 11:29:00 -0400"
- jbuild <<-JBUILDER
- json.cache! "cachekey" do
- json.array! %w[a b c]
+ render <<-JBUILDER
+ json.cache! "cache-key", expires_in: 1.minute do
+ json.name "Hit"
end
JBUILDER
- result = jbuild(<<-JBUILDER)
- json.cache! "cachekey" do
- json.array! %w[1 2 3]
+ travel 30.seconds
+
+ result = render(<<-JBUILDER)
+ json.cache! "cache-key", expires_in: 1.minute do
+ json.name "Miss"
end
JBUILDER
- assert_equal %w[a b c], result
- end
-
- test "fragment caching works with current cache digests" do
- undef_context_methods :fragment_name_with_digest
+ assert_equal "Hit", result["name"]
- @context.expects :cache_fragment_name
- ActiveSupport::Cache.expects :expand_cache_key
+ travel 31.seconds
- jbuild <<-JBUILDER
- json.cache! "cachekey" do
- json.name "Cache"
+ result = render(<<-JBUILDER)
+ json.cache! "cache-key", expires_in: 1.minute do
+ json.name "Miss"
end
JBUILDER
- end
-
- test "fragment caching uses combined_fragment_cache_key" do
- undef_context_methods :fragment_name_with_digest, :cache_fragment_name
- @context.expects(:combined_fragment_cache_key).with("cachekey")
+ assert_equal "Miss", result["name"]
+ end
- jbuild <<-JBUILDER
- json.cache! "cachekey" do
- json.name "Cache"
+ test "object root caching" do
+ render <<-JBUILDER
+ json.cache_root! "cache-key" do
+ json.name "Hit"
end
JBUILDER
- end
- test "fragment caching instrumentation" do
- undef_context_methods :fragment_name_with_digest, :cache_fragment_name
-
- payloads = {}
- ActiveSupport::Notifications.subscribe("read_fragment.action_controller")
{ |*args| payloads[:read_fragment] = args.last }
- ActiveSupport::Notifications.subscribe("write_fragment.action_controller")
{ |*args| payloads[:write_fragment] = args.last }
+ assert_equal JSON.dump(name: "Hit"),
Rails.cache.read("jbuilder/root/cache-key")
- jbuild <<-JBUILDER
- json.cache! "cachekey" do
- json.name "Cache"
+ result = render(<<-JBUILDER)
+ json.cache_root! "cache-key" do
+ json.name "Miss"
end
JBUILDER
- assert_equal "jbuilder/cachekey", payloads[:read_fragment][:key]
- assert_equal "jbuilder/cachekey", payloads[:write_fragment][:key]
+ assert_equal "Hit", result["name"]
end
- test "current cache digest option accepts options" do
- undef_context_methods :fragment_name_with_digest
-
- @context.expects(:cache_fragment_name).with("cachekey", skip_digest: true)
- ActiveSupport::Cache.expects :expand_cache_key
-
- jbuild <<-JBUILDER
- json.cache! "cachekey", skip_digest: true do
- json.name "Cache"
+ test "array fragment caching" do
+ render <<-JBUILDER
+ json.cache! "cache-key" do
+ json.array! %w[ a b c ]
end
JBUILDER
- end
-
- test "fragment caching accepts expires_in option" do
- undef_context_methods :fragment_name_with_digest
-
- @context.expects(:cache_fragment_name).with("cachekey", {})
- jbuild <<-JBUILDER
- json.cache! "cachekey", expires_in: 1.minute do
- json.name "Cache"
- end
- JBUILDER
+ assert_equal %w[ a b c ], render('json.cache! "cache-key" do; end')
end
- test "caching root structure" do
- undef_context_methods :fragment_name_with_digest, :cache_fragment_name
-
- cache_miss_result = jbuild <<-JBUILDER
- json.cache_root! "cachekey" do
- json.name "Miss"
+ test "array root caching" do
+ render <<-JBUILDER
+ json.cache_root! "cache-key" do
+ json.array! %w[ a b c ]
end
JBUILDER
- cache_hit_result = jbuild <<-JBUILDER
- json.cache_root! "cachekey" do
- json.name "Hit"
+ assert_equal JSON.dump(%w[ a b c ]),
Rails.cache.read("jbuilder/root/cache-key")
+
+ assert_equal %w[ a b c ], render(<<-JBUILDER)
+ json.cache_root! "cache-key" do
+ json.array! %w[ d e f ]
end
JBUILDER
-
- assert_equal cache_miss_result, cache_hit_result
end
- test "failing to cache root after attributes have been defined" do
+ test "failing to cache root after JSON structures have been defined" do
assert_raises ActionView::Template::Error, "cache_root! can't be used
after JSON structures have been defined" do
- jbuild <<-JBUILDER
+ render <<-JBUILDER
json.name "Kaboom"
- json.cache_root! "cachekey" do
+ json.cache_root! "cache-key" do
json.name "Miss"
end
JBUILDER
end
end
- test "does not perform caching when controller.perform_caching is false" do
- controller.perform_caching = false
+ test "empty fragment caching" do
+ render 'json.cache! "nothing" do; end'
- jbuild <<-JBUILDER
- json.cache! "cachekey" do
- json.name "Cache"
- end
- JBUILDER
+ result = nil
+
+ assert_nothing_raised do
+ result = render(<<-JBUILDER)
+ json.foo "bar"
+ json.cache! "nothing" do; end
+ JBUILDER
+ end
- assert_equal Rails.cache.inspect[/entries=(\d+)/, 1], "0"
+ assert_equal "bar", result["foo"]
end
- test "invokes templates via params via set!" do
- @post = BLOG_POST_COLLECTION.first
+ test "cache instrumentation" do
+ payloads = {}
+
+ ActiveSupport::Notifications.subscribe("read_fragment.action_controller")
{ |*args| payloads[:read] = args.last }
+ ActiveSupport::Notifications.subscribe("write_fragment.action_controller")
{ |*args| payloads[:write] = args.last }
- result = jbuild(<<-JBUILDER)
- json.post @post, partial: "blog_post", as: :blog_post
+ render <<-JBUILDER
+ json.cache! "cache-key" do
+ json.name "Cache"
+ end
JBUILDER
- assert_equal 1, result["post"]["id"]
- assert_equal "post body 1", result["post"]["body"]
- assert_equal "David", result["post"]["author"]["first_name"]
+ assert_equal "jbuilder/cache-key", payloads[:read][:key]
+ assert_equal "jbuilder/cache-key", payloads[:write][:key]
end
- test "invokes templates implicitly for ActiveModel objects" do
- @racer = Racer.new(123, "Chris Harris")
-
- result = jbuild(<<-JBUILDER)
- json.partial! @racer
+ test "camelized keys" do
+ result = render(<<-JBUILDER)
+ json.key_format! camelize: [:lower]
+ json.first_name "David"
JBUILDER
- assert_equal %w[id name], result.keys
- assert_equal 123, result["id"]
- assert_equal "Chris Harris", result["name"]
+ assert_equal "David", result["firstName"]
end
- test "renders partial via set! with same name as HTML partial" do
- partials = {
- "_blog_post.html.erb" => "Hello!",
- "_blog_post.json.jbuilder" => BLOG_POST_PARTIAL
- }
+ private
+ def render(*args)
+ JSON.load render_without_parsing(*args)
+ end
- @post = BLOG_POST_COLLECTION.first
+ def render_without_parsing(source, assigns = {})
+ view = build_view(fixtures: PARTIALS.merge("source.json.jbuilder" =>
source), assigns: assigns)
+ view.render(template: "source.json.jbuilder")
+ end
- result = jbuild(<<-JBUILDER, partials: partials)
- json.post @post, partial: "blog_post", as: :blog_post
- JBUILDER
+ def build_view(options = {})
+ resolver = ActionView::FixtureResolver.new(options.fetch(:fixtures))
+ lookup_context = ActionView::LookupContext.new([ resolver ], {}, [""])
+ controller = ActionView::TestCase::TestController.new
- assert_not_nil result["post"]
- assert_equal 1, result["post"]["id"]
- end
+ # TODO: Use with_empty_template_cache unconditionally after dropping
support for Rails <6.0.
+ view = if ActionView::Base.respond_to?(:with_empty_template_cache)
+ ActionView::Base.with_empty_template_cache.new(lookup_context,
options.fetch(:assigns, {}), controller)
+ else
+ ActionView::Base.new(lookup_context, options.fetch(:assigns, {}),
controller)
+ end
+
+ def view.view_cache_dependencies; []; end
+
+ view
+ end
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 2018-11-05 16:49:16.000000000 +0100
+++ new/test/jbuilder_test.rb 2019-05-14 19:38:31.000000000 +0200
@@ -75,7 +75,7 @@
end
assert result.has_key?('content')
- assert_equal nil, result['content']
+ assert_nil result['content']
end
test 'multiple keys' do
@@ -713,4 +713,13 @@
end
end
end
+
+ if RUBY_VERSION >= "2.2.10"
+ test "respects JSON encoding customizations" do
+ # Active Support overrides Time#as_json for custom formatting.
+ # Ensure we call #to_json on the final attributes instead of JSON.dump.
+ result = JSON.load(Jbuilder.encode { |json| json.time
Time.parse("2018-05-13 11:51:00.485 -0400") })
+ assert_equal "2018-05-13T11:51:00.485-04:00", result["time"]
+ end
+ end
end
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 2018-11-05
16:49:16.000000000 +0100
+++ new/test/scaffold_api_controller_generator_test.rb 2019-05-14
19:38:31.000000000 +0200
@@ -6,7 +6,7 @@
class ScaffoldApiControllerGeneratorTest < Rails::Generators::TestCase
tests Rails::Generators::ScaffoldControllerGenerator
- arguments %w(Post title body:text --api)
+ arguments %w(Post title body:text images:attachments --api)
destination File.expand_path('../tmp', __FILE__)
setup :prepare_destination
@@ -39,7 +39,11 @@
end
assert_match %r{def post_params}, content
- assert_match %r{params\.require\(:post\)\.permit\(:title, :body\)},
content
+ if Rails::VERSION::MAJOR >= 6
+ assert_match %r{params\.require\(:post\)\.permit\(:title, :body,
images: \[\]\)}, content
+ else
+ assert_match %r{params\.require\(:post\)\.permit\(:title, :body,
:images\)}, content
+ end
end
end
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 2018-11-05
16:49:16.000000000 +0100
+++ new/test/scaffold_controller_generator_test.rb 2019-05-14
19:38:31.000000000 +0200
@@ -4,7 +4,7 @@
class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
tests Rails::Generators::ScaffoldControllerGenerator
- arguments %w(Post title body:text)
+ arguments %w(Post title body:text images:attachments)
destination File.expand_path('../tmp', __FILE__)
setup :prepare_destination
@@ -51,7 +51,11 @@
end
assert_match %r{def post_params}, content
- assert_match %r{params\.require\(:post\)\.permit\(:title, :body\)},
content
+ if Rails::VERSION::MAJOR >= 6
+ assert_match %r{params\.require\(:post\)\.permit\(:title, :body,
images: \[\]\)}, content
+ else
+ assert_match %r{params\.require\(:post\)\.permit\(:title, :body,
:images\)}, content
+ end
end
end
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 2018-11-05 16:49:16.000000000 +0100
+++ new/test/test_helper.rb 2019-05-14 19:38:31.000000000 +0200
@@ -1,16 +1,34 @@
require "bundler/setup"
+
require "active_support"
-require 'active_support/core_ext/array/access'
+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"
-if Rails::VERSION::STRING > "4.0"
- require "active_support/testing/autorun"
-else
- require "test/unit"
+require "active_support/testing/autorun"
+require "mocha/setup"
+
+ActiveSupport.test_order = :random
+
+class << Rails
+ def cache
+ @cache ||= ActiveSupport::Cache::MemoryStore.new
+ end
end
+class Post < Struct.new(:id, :body, :author_name); end
-if ActiveSupport.respond_to?(:test_order=)
- ActiveSupport.test_order = :random
+class Racer < Struct.new(:id, :name)
+ extend ActiveModel::Naming
+ include ActiveModel::Conversion
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