tracks/lib/tracks/source_view.rb

59 lines
1.6 KiB
Ruby
Raw Normal View History

# Inspiration from Bruce Williams [http://codefluency.com/articles/2006/07/01/rails-views-getting-in-context/]
module Tracks
module SourceViewSwitching
class Responder
def initialize(source_view)
2020-10-27 19:35:01 +02:00
@source_view = source_view.underscore.gsub(/\s+/, '_').to_sym rescue nil
end
2020-10-10 13:58:13 +03:00
def nil?
yield if @source_view.nil? && block_given?
end
2011-02-28 23:56:18 -08:00
def context
yield if :context == @source_view && block_given?
end
2020-10-10 13:58:13 +03:00
def method_missing(check_source_view, *args)
yield if check_source_view == @source_view && block_given?
end
end
2020-10-10 13:58:13 +03:00
module Controller
def self.included(base)
base.send(:helper, Tracks::SourceViewSwitching::Helper)
base.send(:helper_method, :source_view)
end
2020-10-10 13:58:13 +03:00
def source_view_is(s)
s == (params[:_source_view] || @source_view).to_sym
end
2020-10-10 13:58:13 +03:00
def source_view_is_one_of(*s)
s.include?(params[:_source_view].to_sym)
end
2020-10-10 13:58:13 +03:00
def source_view
responder = Tracks::SourceViewSwitching::Responder.new(params[:_source_view] || @source_view)
block_given? ? yield(responder) : responder
end
end
2020-10-10 13:58:13 +03:00
module Helper
def source_view_tag(name)
2020-10-27 19:35:01 +02:00
hidden_field_tag :_source_view, name.underscore.gsub(/\s+/, '_')
end
2020-10-10 13:58:13 +03:00
def source_view_is(s)
s == (params[:_source_view] || @source_view).to_sym
end
2020-10-10 13:58:13 +03:00
def source_view_is_one_of(*s)
s.include?((params[:_source_view] || @source_view).to_sym)
end
end
end
end
2011-02-28 23:56:18 -08:00
ActionController::Base.send(:include, Tracks::SourceViewSwitching::Controller)