mirror of
https://github.com/kaminari/kaminari.git
synced 2022-11-09 13:44:37 -05:00
Better LogSubscriber monkey-patch using Thread.current
This commit is contained in:
parent
a032fc8c55
commit
d0fb081741
2 changed files with 12 additions and 36 deletions
|
@ -6,46 +6,19 @@ require 'action_view/context'
|
||||||
module Kaminari
|
module Kaminari
|
||||||
# = Helpers
|
# = Helpers
|
||||||
module ActionViewExtension
|
module ActionViewExtension
|
||||||
module PaginatorExtension
|
# Monkey-patching AV::LogSubscriber not to log each render_partial
|
||||||
extend ActiveSupport::Concern
|
module LogSubscriberSilencer
|
||||||
|
def render_partial(*)
|
||||||
|
super unless Thread.current[:kaminari_rendering]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module PaginatorExtension
|
||||||
# so that this instance can actually "render"
|
# so that this instance can actually "render"
|
||||||
include ::ActionView::Context
|
include ::ActionView::Context
|
||||||
|
|
||||||
included do
|
|
||||||
undef :to_s
|
|
||||||
# Redefining to_s not to log each render_partial
|
|
||||||
def to_s #:nodoc:
|
|
||||||
subscriber = ::ActionView::LogSubscriber.log_subscribers.detect {|ls| ls.is_a? ::ActionView::LogSubscriber}
|
|
||||||
|
|
||||||
# There is a logging subscriber
|
|
||||||
# and we don't want it to log render_partial
|
|
||||||
# It is threadsafe, but might not repress logging
|
|
||||||
# consistently in a high-load environment
|
|
||||||
if subscriber
|
|
||||||
unless defined? subscriber.render_partial_with_logging
|
|
||||||
class << subscriber
|
|
||||||
alias_method :render_partial_with_logging, :render_partial
|
|
||||||
attr_accessor :render_without_logging
|
|
||||||
# ugly hack to make a renderer where
|
|
||||||
# we can turn logging on or off
|
|
||||||
def render_partial(event)
|
|
||||||
render_partial_with_logging(event) unless render_without_logging
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
subscriber.render_without_logging = true
|
|
||||||
ret = super @window_options.merge paginator: self
|
|
||||||
subscriber.render_without_logging = false
|
|
||||||
|
|
||||||
ret
|
|
||||||
else
|
|
||||||
super @window_options.merge paginator: self
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
::Kaminari::Helpers::Paginator.send :include, PaginatorExtension
|
::Kaminari::Helpers::Paginator.send :include, PaginatorExtension
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
ActionView::LogSubscriber.send :prepend, Kaminari::ActionViewExtension::LogSubscriberSilencer
|
||||||
|
|
|
@ -76,7 +76,10 @@ module Kaminari
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s #:nodoc:
|
def to_s #:nodoc:
|
||||||
|
Thread.current[:kaminari_rendering] = true
|
||||||
super @window_options.merge paginator: self
|
super @window_options.merge paginator: self
|
||||||
|
ensure
|
||||||
|
Thread.current[:kaminari_rendering] = false
|
||||||
end
|
end
|
||||||
|
|
||||||
# delegates view helper methods to @template
|
# delegates view helper methods to @template
|
||||||
|
|
Loading…
Add table
Reference in a new issue