Class: Presenters::BatchSubmenuPresenter

Inherits:
Object
  • Object
show all
Includes:
ActionView::Helpers::TextHelper
Defined in:
app/models/presenters/batch_submenu_presenter.rb

Overview

The Batch show page in the BatchesController has a side menu which displays a variety of options depending on properties of the batch. The BatchSubmenuPresenter encapsulates the logic which was previously in the view itself.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(current_user, batch) ⇒ BatchSubmenuPresenter

Returns a new instance of BatchSubmenuPresenter.


20
21
22
23
24
25
26
27
# File 'app/models/presenters/batch_submenu_presenter.rb', line 20

def initialize(current_user, batch)
  @current_user = current_user
  @ability = Ability.new(current_user)
  @batch = batch
  @pipeline = @batch.pipeline

  @defaults = { controller: :batches, id: @batch.id, only_path: true }
end

Instance Attribute Details

#abilityObject (readonly)

Returns the value of attribute ability


8
9
10
# File 'app/models/presenters/batch_submenu_presenter.rb', line 8

def ability
  @ability
end

#batchObject (readonly)

Returns the value of attribute batch


8
9
10
# File 'app/models/presenters/batch_submenu_presenter.rb', line 8

def batch
  @batch
end

#optionsObject (readonly)

Returns the value of attribute options


8
9
10
# File 'app/models/presenters/batch_submenu_presenter.rb', line 8

def options
  @options
end

#pipelineObject (readonly)

Returns the value of attribute pipeline


8
9
10
# File 'app/models/presenters/batch_submenu_presenter.rb', line 8

def pipeline
  @pipeline
end

Instance Method Details

#add_submenu_option(text, action_params) ⇒ Object


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/models/presenters/batch_submenu_presenter.rb', line 29

def add_submenu_option(text, action_params)
  @options ||= []

  # If it is a string, it will be an url
  unless action_params.is_a?(String)
    # If it is a symbol, it will be the action
    # If not, it will be a Hash with the new content (controller, action, ...)
    action_params = { action: action_params } if action_params.is_a?(Symbol)
    action_config = @defaults.dup
    action_params.each_pair do |key, value|
      action_config[key] = value
    end
    action_params = url_for(action_config)
  end
  @options += [{ label: text, url: action_params }]
end

#each_option(&block) ⇒ Object


46
47
48
49
# File 'app/models/presenters/batch_submenu_presenter.rb', line 46

def each_option(&block)
  build_submenu if @options.nil?
  @options.each(&block)
end