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.



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

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



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

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



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

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

#content_diffObject



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

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



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

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



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

def name_diff
  return @action.card.name if @action.card.name.compound?
  # TODO: handle compound names better

  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



93
94
95
# File 'mod/history/lib/card/action/action_renderer.rb', line 93

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

#old_nameObject



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

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

#renderObject



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

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)


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

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

#type_diffObject



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

def type_diff
  return "" unless @action.new_type?

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