Class: Card::Action::ActionRenderer

Inherits:
Object
  • Object
show all
Includes:
Bootstrapper
Defined in:
mod/history/lib/card/action/action_renderer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Bootstrapper

#bootstrap, #bs

Methods included from Bootstrap::ComponentLoader

#components, #include_component, #load_components, #to_const

Constructor Details

#initialize(format, action, header = true, action_view = :summary, hide_diff = false) ⇒ ActionRenderer

Returns a new instance of ActionRenderer.



5
6
7
8
9
10
11
# File 'mod/history/lib/card/action/action_renderer.rb', line 5

def initialize format, action, header=true, action_view=:summary, hide_diff=false
  @format = format
  @action = action
  @header = header
  @action_view = action_view
  @hide_diff = hide_diff
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object



14
15
16
17
18
19
20
# File 'mod/history/lib/card/action/action_renderer.rb', line 14

def method_missing method_name, *args, &block
  if block_given?
    @format.send(method_name, *args, &block)
  else
    @format.send(method_name, *args)
  end
end

Instance Attribute Details

#actionObject (readonly)

Returns the value of attribute action.



4
5
6
# File 'mod/history/lib/card/action/action_renderer.rb', line 4

def action
  @action
end

#headerObject (readonly)

Returns the value of attribute header.



4
5
6
# File 'mod/history/lib/card/action/action_renderer.rb', line 4

def header
  @header
end

Instance Method Details

#action_panelObject



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'mod/history/lib/card/action/action_renderer.rb', line 41

def action_panel
  bs_panel do
    if header
      heading do
        div type_diff, class: "float-right"
        div name_diff
      end
    end
    body do
      content_diff
    end
  end
end

#content_diffObject



67
68
69
70
71
# File 'mod/history/lib/card/action/action_renderer.rb', line 67

def content_diff
  return @action.raw_view if @action.action_type == :delete

  @format.subformat(@action.card).render_action_summary action_id: @action.id
end

#name_changesObject



79
80
81
82
83
# File 'mod/history/lib/card/action/action_renderer.rb', line 79

def name_changes
  return old_name unless @action.new_name?

  @hide_diff ? new_name : Card::Content::Diff.complete(old_name, new_name)
end

#name_diffObject



55
56
57
58
59
60
61
62
63
64
65
# File 'mod/history/lib/card/action/action_renderer.rb', line 55

def name_diff
  if @action.card == @format.card
    name_changes
  else
    link_to_view(
      :related, name_changes,
      path: { slot: { items: { view: "history", nest_name: @action.card.name } } },
      # "data-slot-selector" => ".card-slot.history-view"
    )
  end
end

#new_nameObject



89
90
91
# File 'mod/history/lib/card/action/action_renderer.rb', line 89

def new_name
  title_in_context @action.value(:name)
end

#old_nameObject



85
86
87
# File 'mod/history/lib/card/action/action_renderer.rb', line 85

def old_name
  (name = @action.previous_value :name) && title_in_context(name)
end

#renderObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'mod/history/lib/card/action/action_renderer.rb', line 26

def render
  classes = @format.classy("action-list")
  bs_layout container: true, fluid: true do
    row do
      html <<-HTML
        <ul class="#{classes} w-100">
          <li class="#{action.action_type}">
            #{action_panel}
          </li>
        </ul>
      HTML
    end
  end
end

#respond_to_missing?(method_name, _include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# File 'mod/history/lib/card/action/action_renderer.rb', line 22

def respond_to_missing? method_name, _include_private=false
  @format.respond_to? method_name
end

#type_diffObject



73
74
75
76
77
# File 'mod/history/lib/card/action/action_renderer.rb', line 73

def type_diff
  return "" unless @action.new_type?

  @hide_diff ? @action.value(:cardtype) : @action.cardtype_diff
end