Class: BitPlayer::Navigator

Inherits:
Object
  • Object
show all
Defined in:
app/models/bit_player/navigator.rb

Overview

Business rules for proceeding statefully through an application.

Defined Under Namespace

Classes: RenderOptions

Instance Method Summary collapse

Constructor Details

#initialize(participant) ⇒ Navigator

Returns a new instance of Navigator.



10
11
12
13
# File 'app/models/bit_player/navigator.rb', line 10

def initialize(participant)
  @participant = participant
  @status = participant.navigation_status
end

Instance Method Details

#content_positionObject



27
28
29
# File 'app/models/bit_player/navigator.rb', line 27

def content_position
  @status.content_position
end

#contextObject



15
16
17
# File 'app/models/bit_player/navigator.rb', line 15

def context
  @status.context
end

#current_content_providerObject



43
44
45
# File 'app/models/bit_player/navigator.rb', line 43

def current_content_provider
  current_module.provider(provider_position)
end

#current_moduleObject



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'app/models/bit_player/navigator.rb', line 87

def current_module
  @current_module ||= nil
  arm = @participant.active_group.arm

  module_attrs = {
    bit_core_tool_id: arm.bit_core_tools.find_by_title(context).try(:id),
    position: module_position
  }

  if current_module_stale?
    @current_module = BitCore::ContentModule.where(module_attrs).first
  end

  @current_module ||= BitCore::ContentModule.new(module_attrs)
end

#fetch_next_contentObject



47
48
49
50
51
52
53
54
55
56
57
# File 'app/models/bit_player/navigator.rb', line 47

def fetch_next_content
  if content_position &&
     current_content_provider.exists?(content_position + 1)
    @status.increment_content_position
  elsif provider_position &&
        current_module.provider_exists?(provider_position + 1)
    @status.increment_provider_position
  else
    initialize_context(context)
  end
end

#fetch_previous_contentObject



59
60
61
62
63
# File 'app/models/bit_player/navigator.rb', line 59

def fetch_previous_content
  return unless previous_content?

  @status.decrement_content_position
end

#initialize_context(context) ⇒ Object



69
70
71
# File 'app/models/bit_player/navigator.rb', line 69

def initialize_context(context)
  @status.initialize_context(context)
end

#initialize_location(options) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'app/models/bit_player/navigator.rb', line 73

def initialize_location(options)
  content_module = BitCore::ContentModule.find(options[:module_id])
  @status.context = content_module.tool.title
  @status.module_position = content_module.position
  @status.provider_position = 1
  if options[:provider_id]
    @status.provider_position = content_module.content_providers
                                              .find(options[:provider_id])
                                              .position
  end
  @status.content_position = [options[:content_position].to_i, 1].max
  @status.save
end

#module_positionObject



19
20
21
# File 'app/models/bit_player/navigator.rb', line 19

def module_position
  @status.module_position
end

#previous_content?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'app/models/bit_player/navigator.rb', line 65

def previous_content?
  current_content_provider.exists?(content_position - 1)
end

#provider_positionObject



23
24
25
# File 'app/models/bit_player/navigator.rb', line 23

def provider_position
  @status.provider_position
end

#render_current_content(view_context) ⇒ Object



31
32
33
34
35
36
37
# File 'app/models/bit_player/navigator.rb', line 31

def render_current_content(view_context)
  options = RenderOptions.new(
    view_context, context, content_position, @participant
  )

  current_content_provider.render_current(options)
end

#show_nav_link?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'app/models/bit_player/navigator.rb', line 39

def show_nav_link?
  current_content_provider.show_nav_link?
end