class TrailGuide::Adapters::Participants::Unity
Attributes
context[R]
unity[R]
Public Class Methods
new() { |config| ... }
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 9 def initialize(&block) configure do |config| # TODO make visitor/user configuration more flexible, allow stuff like: # # config.visitor = -> (context) { context.cookies['visitor_id'] } # config.user = -> (context) { context.current_user.try(:id) } config.visitor_cookie = nil config.user_id_key = :id config.user_adapter = TrailGuide::Adapters::Participants::Redis.configure do |config| config.namespace = 'unity:users' config.lookup = -> (user_id) { user_id } config.expiration = 1.year.seconds end # TODO use cookie or session adapter by default instead? config.visitor_adapter = TrailGuide::Adapters::Participants::Redis.configure do |config| config.namespace = 'unity:visitors' config.lookup = -> (visitor_id) { visitor_id } config.expiration = 1.year.seconds end config.anonymous_adapter = TrailGuide::Adapters::Participants::Anonymous yield(config) if block_given? end end
Public Instance Methods
new(context)
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 37 def new(context) @context = context @unity = TrailGuide::Unity.new if trailguide_context? unity.user_id ||= context.send(:try, :trailguide_user).try(configuration.user_id_key) unity.visitor_id ||= context.send(:try, :trailguide_visitor) end if logged_in_context? unity.user_id ||= context.send(:current_user).send(configuration.user_id_key) end if logged_out_context? unity.visitor_id ||= context.send(:cookies)[configuration.visitor_cookie] end unity.sync! merge! if unity.synced? adapter = configuration.send("#{context_type}_adapter".to_sym) if anonymous_context? adapter.new(context) else adapter.new(unity.send("#{context_type}_id".to_sym)) end end
Protected Instance Methods
anonymous_context?()
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 115 def anonymous_context? !visitor_context? && !user_context? end
context_type()
click to toggle source
TODO introduce Unity::Adapter class, which wraps BOTH/ALL of the configured adapters (either anonymous, visitor, user, or visitor+user) to keep everything in sync between them
# File lib/trail_guide/adapters/participants/unity.rb, line 69 def context_type # TODO allow a configuration.preference when both visitor and user context are available? if visitor_context? return :visitor end if user_context? return :user end return :anonymous end
logged_in_context?()
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 96 def logged_in_context? context.send(:try, :current_user).present? end
logged_out_context?()
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 100 def logged_out_context? return false unless configuration.visitor_cookie.present? context.send(:cookies)[configuration.visitor_cookie].present? rescue => e return false end
merge!()
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 82 def merge! user_adapter = configuration.user_adapter.new(unity.user_id) visitor_adapter = configuration.visitor_adapter.new(unity.visitor_id) user_adapter.keys.each do |key| visitor_adapter[key] = user_adapter[key] unless visitor_adapter[key].present? end user_adapter.destroy! end
trailguide_context?()
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 91 def trailguide_context? context.send(:try, :trailguide_user).present? || context.send(:try, :trailguide_visitor).present? end
user_context?()
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 107 def user_context? unity.user_id.present? end
visitor_context?()
click to toggle source
# File lib/trail_guide/adapters/participants/unity.rb, line 111 def visitor_context? unity.visitor_id.present? end