module Preact::Controllers::Helpers
Public Instance Methods
inject_javascript()
click to toggle source
# File lib/preact/rails/controllers/helpers.rb, line 56 def inject_javascript if body_end = response.body.index("</body") script = build_script response.body = response.body.insert(body_end, script) end end
preact_autolog_controller_action()
click to toggle source
# File lib/preact/rails/controllers/helpers.rb, line 5 def preact_autolog_controller_action # only track logged-in users return true unless current_user # don't autolog if we logged something already on this controller execution # this allows you to add better preact logging in your controller and not get duplicate logging return true if defined?(@preact_logged_event) controller = params[:controller] action = params[:action] return true unless controller && action return true unless Preact.configuration.autolog_should_log?(controller, action) event_name = "#{controller}##{action}" note = self.guess_target_item_name(controller) event = { :name => event_name, :target_id => params[:id], :medium => "autolog-rails-v1.0", :note => note, :extras => { :_ip => request.remote_ip, :_url => request.url, :_ua => request.env['HTTP_USER_AGENT'] } } preact_log(event) true rescue => ex Preact.logger.warn "[Preact] Autolog failed: #{ex.message}" true # always returns strue no matter what... end
preact_log(event, account=nil)
click to toggle source
helper method on the controller to make logging events easy
# File lib/preact/rails/controllers/helpers.rb, line 46 def preact_log(event, account=nil) user = Preact.configuration.get_current_user(self) # handle nil account ||= Preact.configuration.get_current_account(self) # handle nil Preact.log_event(user, event, account) # make a note that we've logged an event on this controller @preact_logged_event = event end
Protected Instance Methods
build_script()
click to toggle source
# File lib/preact/rails/controllers/helpers.rb, line 79 def build_script script = <<-SCRIPT <script> var _preactq = _preactq || []; _preactq.push(['_setCode', '#{Preact.configuration.code.to_s}']); _preactq.push(['_setPersonData', #{Preact.configuration.convert_to_person(Preact.configuration.get_current_user(self)).to_json}]); SCRIPT if Preact.configuration.get_current_account(self) script += <<-SCRIPT _preactq.push(['_setAccount', #{Preact.configuration.convert_to_account(Preact.configuration.get_current_account(self)).to_json}]); SCRIPT end script += <<-SCRIPT _preactq.push(['_logEvent', '___loaded:preact']); (function() { var ln = document.createElement('script'); ln.type = 'text/javascript'; ln.async = true; ln.src = 'https://d2bbvl6dq48fa6.cloudfront.net/js/preact-4.2.min.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ln, s); })(); </script> SCRIPT end
guess_target_item_name(controller)
click to toggle source
# File lib/preact/rails/controllers/helpers.rb, line 105 def guess_target_item_name(controller) # get a little too clever and try to see if we've loaded an item guessed_target_variable = controller.split("/").last.singularize rescue nil if guessed_target_variable if guessed_target_item = self.instance_variable_get("@#{guessed_target_variable}") return guessed_target_item.name if guessed_target_item.respond_to?(:name) return guessed_target_item.title if guessed_target_item.respond_to?(:title) end end nil end