Class: TrailGuide::Adapters::Participants::Unity

Inherits:
Multi
  • Object
show all
Defined in:
lib/trail_guide/adapters/participants/unity.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

configure, new

Constructor Details

#initialize(&block) ⇒ Unity

Returns a new instance of Unity.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



7
8
9
# File 'lib/trail_guide/adapters/participants/unity.rb', line 7

def context
  @context
end

#unityObject (readonly)

Returns the value of attribute unity.



7
8
9
# File 'lib/trail_guide/adapters/participants/unity.rb', line 7

def unity
  @unity
end

Instance Method Details

#new(context) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 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