diff --git a/lib/widget.rb b/lib/reporting_widget.rb similarity index 90% rename from lib/widget.rb rename to lib/reporting_widget.rb index 8be867f98a..5c2249c391 100644 --- a/lib/widget.rb +++ b/lib/reporting_widget.rb @@ -19,7 +19,7 @@ require_dependency 'reporting_engine/helpers/reporting_helper' -class Widget < ActionView::Base +class ReportingWidget < ActionView::Base include ActionView::Helpers::TagHelper include ActionView::Helpers::AssetTagHelper include ActionView::Helpers::FormTagHelper @@ -63,5 +63,5 @@ class Widget < ActionView::Base end end -ActionView::Base.send(:include, Widget::RenderWidgetInstanceMethods) -ActionController::Base.send(:include, Widget::RenderWidgetInstanceMethods) +ActionView::Base.send(:include, ReportingWidget::RenderWidgetInstanceMethods) +ActionController::Base.send(:include, ReportingWidget::RenderWidgetInstanceMethods) diff --git a/lib/widget/base.rb b/lib/widget/base.rb index 0e16f8d74d..c2f2dfd4f6 100644 --- a/lib/widget/base.rb +++ b/lib/widget/base.rb @@ -19,93 +19,96 @@ require 'digest/sha1' -class Widget::Base < Widget - attr_reader :engine, :output +require_dependency 'reporting_widget' +module ::Widget + class Base < ::ReportingWidget + attr_reader :engine, :output - ## - # Deactivate caching for certain widgets. If called on Widget::Base, - # caching is deactivated globally - def self.dont_cache! - @dont_cache = true - end + ## + # Deactivate caching for certain widgets. If called on Widget::Base, + # caching is deactivated globally + def self.dont_cache! + @dont_cache = true + end - ## - # Query whether this widget class should be cached. - def self.dont_cache? - @dont_cache or self != Widget::Base && Widget::Base.dont_cache? - end + ## + # Query whether this widget class should be cached. + def self.dont_cache? + @dont_cache or self != Widget::Base && Widget::Base.dont_cache? + end - def initialize(query) - @subject = query - @engine = query.class - @options = {} - end + def initialize(query) + @subject = query + @engine = query.class + @options = {} + end - ## - # Write a string to the canvas. The string is marked as html_safe. - # This will write twice, if @cache_output is set. - def write(str) - str ||= '' - @output ||= ''.html_safe - @output = @output + '' if @output.frozen? # Rails 2 freezes tag strings - @output.concat str.html_safe - @cache_output.concat(str.html_safe) if @cache_output - str.html_safe - end + ## + # Write a string to the canvas. The string is marked as html_safe. + # This will write twice, if @cache_output is set. + def write(str) + str ||= '' + @output ||= ''.html_safe + @output = @output + '' if @output.frozen? # Rails 2 freezes tag strings + @output.concat str.html_safe + @cache_output.concat(str.html_safe) if @cache_output + str.html_safe + end - ## - # Render this widget. Abstract method. Needs to call #write at least once - def render - raise NotImplementedError, "#render is missing in my subclass #{self.class}" - end + ## + # Render this widget. Abstract method. Needs to call #write at least once + def render + raise NotImplementedError, "#render is missing in my subclass #{self.class}" + end - ## - # Render this widget, passing options. - # Available options: - # :to => canvas - The canvas (streaming or otherwise) to render to. Has to respond to #write - def render_with_options(options = {}, &block) - set_canvas(options.delete(:to)) if options.has_key? :to - @options = options - render_with_cache(options, &block) - @output - end + ## + # Render this widget, passing options. + # Available options: + # :to => canvas - The canvas (streaming or otherwise) to render to. Has to respond to #write + def render_with_options(options = {}, &block) + set_canvas(options.delete(:to)) if options.has_key? :to + @options = options + render_with_cache(options, &block) + @output + end - def cache_key - @cache_key ||= Digest::SHA1::hexdigest begin - if subject.respond_to? :cache_key - "#{I18n.locale}/#{self.class.name.demodulize}/#{subject.cache_key}/#{@options.sort_by(&:to_s)}" - else - subject.inspect + def cache_key + @cache_key ||= Digest::SHA1::hexdigest begin + if subject.respond_to? :cache_key + "#{I18n.locale}/#{self.class.name.demodulize}/#{subject.cache_key}/#{@options.sort_by(&:to_s)}" + else + subject.inspect + end end end - end - def cached? - cache? && Rails.cache.exist?(cache_key) - end + def cached? + cache? && Rails.cache.exist?(cache_key) + end - private + private - def cache? - !self.class.dont_cache? - end + def cache? + !self.class.dont_cache? + end - ## - # Render this widget or serve it from cache - def render_with_cache(_options = {}, &block) - if cached? - write Rails.cache.fetch(cache_key) - else - render(&block) - Rails.cache.write(cache_key, @cache_output || @output) if cache? + ## + # Render this widget or serve it from cache + def render_with_cache(_options = {}, &block) + if cached? + write Rails.cache.fetch(cache_key) + else + render(&block) + Rails.cache.write(cache_key, @cache_output || @output) if cache? + end end - end - ## - # Set the canvas. If the canvas object isn't a string (e.g. cannot be cached easily), - # a @cache_output String is created, that will mirror what is being written to the canvas. - def set_canvas(canvas) - @cache_output = ''.html_safe - @output = canvas + ## + # Set the canvas. If the canvas object isn't a string (e.g. cannot be cached easily), + # a @cache_output String is created, that will mirror what is being written to the canvas. + def set_canvas(canvas) + @cache_output = ''.html_safe + @output = canvas + end end end diff --git a/lib/widget/filters.rb b/lib/widget/filters.rb index fd96ac5089..94daec1615 100644 --- a/lib/widget/filters.rb +++ b/lib/widget/filters.rb @@ -17,7 +17,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #++ -class Widget::Filters < Widget::Base +require_dependency 'widget/base' +class Widget::Filters < ::Widget::Base def render spacer = content_tag :li, '', class: 'advanced-filters--spacer'