From ac9d32bf90ce3d2205be02b58743676868286123 Mon Sep 17 00:00:00 2001
From: Aaron Patterson <aaron.patterson@gmail.com>
Date: Fri, 12 Feb 2016 14:30:13 -0800
Subject: push kwargs up to the user facing API

this lets us leverage Ruby's kwarg handling (exceptions for missing
params, etc) ASAP which allows us to skip active support method calls
and make sure the exception stack is closer to where the user called the
methods.
---
 actionview/lib/action_view/digestor.rb             | 18 +++++++++---------
 actionview/lib/action_view/tasks/dependencies.rake |  4 ++--
 actionview/test/template/digestor_test.rb          |  4 ++--
 3 files changed, 13 insertions(+), 13 deletions(-)

(limited to 'actionview')

diff --git a/actionview/lib/action_view/digestor.rb b/actionview/lib/action_view/digestor.rb
index 359b2f810c..657026fa14 100644
--- a/actionview/lib/action_view/digestor.rb
+++ b/actionview/lib/action_view/digestor.rb
@@ -22,23 +22,23 @@ module ActionView
       # * <tt>finder</tt>  - An instance of <tt>ActionView::LookupContext</tt>
       # * <tt>dependencies</tt>  - An array of dependent views
       # * <tt>partial</tt>  - Specifies whether the template is a partial
-      def digest(options)
-        options.assert_valid_keys(:name, :finder, :dependencies, :partial)
+      def digest(name:, finder:, **options)
+        options.assert_valid_keys(:dependencies, :partial)
 
-        cache_key = ([ options[:name], options[:finder].details_key.hash ].compact + Array.wrap(options[:dependencies])).join('.')
+        cache_key = ([ name, finder.details_key.hash ].compact + Array.wrap(options[:dependencies])).join('.')
 
         # this is a correctly done double-checked locking idiom
         # (Concurrent::Map's lookups have volatile semantics)
         @@cache[cache_key] || @@digest_monitor.synchronize do
           @@cache.fetch(cache_key) do # re-check under lock
-            compute_and_store_digest(cache_key, options)
+            compute_and_store_digest(cache_key, name, finder, options)
           end
         end
       end
 
       private
-        def compute_and_store_digest(cache_key, options) # called under @@digest_monitor lock
-          klass = if options[:partial] || options[:name].include?("/_")
+        def compute_and_store_digest(cache_key, name, finder, options) # called under @@digest_monitor lock
+          klass = if options[:partial] || name.include?("/_")
             # Prevent re-entry or else recursive templates will blow the stack.
             # There is no need to worry about other threads seeing the +false+ value,
             # as they will then have to wait for this thread to let go of the @@digest_monitor lock.
@@ -48,7 +48,7 @@ module ActionView
             Digestor
           end
 
-          @@cache[cache_key] = stored_digest = klass.new(options).digest
+          @@cache[cache_key] = stored_digest = klass.new(name, finder, options).digest
         ensure
           # something went wrong or ActionView::Resolver.caching? is false, make sure not to corrupt the @@cache
           @@cache.delete_pair(cache_key, false) if pre_stored && !stored_digest
@@ -57,7 +57,7 @@ module ActionView
 
     attr_reader :name, :finder, :options
 
-    def initialize(name:, finder:, **options)
+    def initialize(name, finder, options = {})
       @name, @finder = name, finder
       @options = options
     end
@@ -80,7 +80,7 @@ module ActionView
 
     def nested_dependencies
       dependencies.collect do |dependency|
-        dependencies = PartialDigestor.new(name: dependency, finder: finder).nested_dependencies
+        dependencies = PartialDigestor.new(dependency, finder).nested_dependencies
         dependencies.any? ? { dependency => dependencies } : dependency
       end
     end
diff --git a/actionview/lib/action_view/tasks/dependencies.rake b/actionview/lib/action_view/tasks/dependencies.rake
index f394c319c1..9932ff8b6d 100644
--- a/actionview/lib/action_view/tasks/dependencies.rake
+++ b/actionview/lib/action_view/tasks/dependencies.rake
@@ -2,13 +2,13 @@ namespace :cache_digests do
   desc 'Lookup nested dependencies for TEMPLATE (like messages/show or comments/_comment.html)'
   task :nested_dependencies => :environment do
     abort 'You must provide TEMPLATE for the task to run' unless ENV['TEMPLATE'].present?
-    puts JSON.pretty_generate ActionView::Digestor.new(name: CacheDigests.template_name, finder: CacheDigests.finder).nested_dependencies
+    puts JSON.pretty_generate ActionView::Digestor.new(CacheDigests.template_name, CacheDigests.finder).nested_dependencies
   end
 
   desc 'Lookup first-level dependencies for TEMPLATE (like messages/show or comments/_comment.html)'
   task :dependencies => :environment do
     abort 'You must provide TEMPLATE for the task to run' unless ENV['TEMPLATE'].present?
-    puts JSON.pretty_generate ActionView::Digestor.new(name: CacheDigests.template_name, finder: CacheDigests.finder).dependencies
+    puts JSON.pretty_generate ActionView::Digestor.new(CacheDigests.template_name, CacheDigests.finder).dependencies
   end
 
   class CacheDigests
diff --git a/actionview/test/template/digestor_test.rb b/actionview/test/template/digestor_test.rb
index ea86535b2a..bfab97cf1e 100644
--- a/actionview/test/template/digestor_test.rb
+++ b/actionview/test/template/digestor_test.rb
@@ -308,11 +308,11 @@ class TemplateDigestorTest < ActionView::TestCase
     end
 
     def dependencies(template_name)
-      ActionView::Digestor.new({ name: template_name, finder: finder }).dependencies
+      ActionView::Digestor.new(template_name, finder).dependencies
     end
 
     def nested_dependencies(template_name)
-      ActionView::Digestor.new({ name: template_name, finder: finder }).nested_dependencies
+      ActionView::Digestor.new(template_name, finder).nested_dependencies
     end
 
     def finder
-- 
cgit v1.2.3