diff --git a/README.md b/README.md index 1c633d9..3e10ebe 100644 --- a/README.md +++ b/README.md @@ -240,7 +240,7 @@ Fragment caching is supported, it uses `Rails.cache` and works like caching in HTML templates: ```ruby -json.cache! ['v1', @person], expires_in: 10.minutes do +json.cache! ['v1', @person], expires_in: 10.minutes, force: true do json.extract! @person, :name, :age end ``` diff --git a/gemfiles/.bundle/config b/gemfiles/.bundle/config new file mode 100644 index 0000000..c127f80 --- /dev/null +++ b/gemfiles/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_RETRY: "1" diff --git a/lib/jbuilder/jbuilder_template.rb b/lib/jbuilder/jbuilder_template.rb index 685922e..2cba80f 100644 --- a/lib/jbuilder/jbuilder_template.rb +++ b/lib/jbuilder/jbuilder_template.rb @@ -130,7 +130,8 @@ def _render_partial(options) def _cache_fragment_for(key, options, &block) key = _cache_key(key, options) - _read_fragment_cache(key, options) || _write_fragment_cache(key, options, &block) + force = options[:force].present? + (!force && _read_fragment_cache(key, options)) || _write_fragment_cache(key, options, &block) end def _read_fragment_cache(key, options = nil) diff --git a/test/jbuilder_template_test.rb b/test/jbuilder_template_test.rb index 62c1559..6258876 100644 --- a/test/jbuilder_template_test.rb +++ b/test/jbuilder_template_test.rb @@ -158,6 +158,35 @@ class JbuilderTemplateTest < ActiveSupport::TestCase assert_equal "Miss", result["b"] end + test "fragment caching a JSON object with force option" do + + render(<<-JBUILDER) + json.cache! "cachekey" do + json.test1 "Value" + end + JBUILDER + + result = render(<<-JBUILDER) + json.cache! "cachekey", force: false do + json.test1 "New Value" + end + JBUILDER + assert_equal "Value", result["test1"] + + result = render(<<-JBUILDER) + json.cache! "cachekey", force: true do + json.test1 "New Value" + end + JBUILDER + assert_equal "New Value", result["test1"] + result = render(<<-JBUILDER) + json.cache! "cachekey" do + json.test1 "Cache Miss" + end + JBUILDER + assert_equal "New Value", result["test1"] + end + test "object fragment caching with expiry" do travel_to "2018-05-12 11:29:00 -0400"