Class: RenderTurboStream::ControllerLibs

Inherits:
Object
  • Object
show all
Defined in:
lib/render_turbo_stream/controller_libs.rb

Instance Method Summary collapse

Constructor Details

#initialize(save_action) ⇒ ControllerLibs

Returns a new instance of ControllerLibs.



4
5
6
# File 'lib/render_turbo_stream/controller_libs.rb', line 4

def initialize(save_action)
  @save_action = save_action
end

Instance Method Details

#action_errors(actions) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/render_turbo_stream/controller_libs.rb', line 91

def action_errors(actions)
  r = []
  actions.each do |a|
    if a.is_a?(Hash)
      unless a[:target].present?
        r.push("Missing attribute :target for => «#{a}»")
      end
      unless a[:partial].present?
        r.push("Missing attribute :partial for => «#{a}»")
      end
      unless a[:action].present?
        r.push("Missing attribute :action for => «#{a}»")
      end
    elsif a.is_a?(Array)
      unless a.first.is_a?(String) || a.first.is_a?(Symbol)
        r.push("Assuming a command, but the first attribute must be a string or symbol => «#{a}»")
      end
    end
  end
  r
end

#additional_actions(if_success_add, if_error_add, add) ⇒ Object



73
74
75
76
77
# File 'lib/render_turbo_stream/controller_libs.rb', line 73

def additional_actions(if_success_add, if_error_add, add)

  (@save_action ? make_actions(if_success_add) : make_actions(if_error_add)) + make_actions(add)

end

#generate_action(controller_path, target_id, action, partial, template, locals) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
# File 'lib/render_turbo_stream/controller_libs.rb', line 79

def generate_action(controller_path, target_id, action, partial, template, locals)
  libs = RenderTurboStream::Libs
  target = libs.target_id_to_target(target_id)
  if partial
  _partial = libs.partial_path(controller_path, partial)
  [target: target, partial: _partial, locals: locals, action: action]
  else
    _template = libs.template_path(controller_path, template)
    [target: target, template: _template, locals: locals, action: action]
  end
end

#generate_flash(model_name, controller_action, if_success_notices, if_error_alerts, add_notices, add_alerts) ⇒ Object



8
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
36
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
64
65
66
67
68
69
70
71
# File 'lib/render_turbo_stream/controller_libs.rb', line 8

def generate_flash(model_name, controller_action, if_success_notices, if_error_alerts, add_notices, add_alerts)

  target_id = (Rails.configuration.x.render_turbo_stream.flash_target_id rescue nil)
  raise "Missing configuration: config.x.render_turbo_stream.flash_target_id" unless target_id
  partial = Rails.configuration.x.render_turbo_stream.flash_partial
  raise "Missing configuration: configuration.x.render_turbo_stream.flash_partial" unless partial
  turbo_action = Rails.configuration.x.render_turbo_stream.flash_turbo_action
  raise "Missing configuration: configuration.x.render_turbo_stream.flash_turbo_action" unless turbo_action

  if @save_action
    notices = if if_success_notices
                if if_success_notices.is_a?(String)
                  [if_success_notices]
                else
                  if_success_notices
                end
              else
                str = I18n.t(
                  "activerecord.render_turbo_stream_success.#{controller_action}"
                )
                [format(str, model_name: model_name)]
              end
    alerts = []
  else
    alerts = if if_error_alerts
               if if_error_alerts.is_a?(String)
                 [if_error_alerts]
               else
                 if_error_alerts
               end
             else
               str = I18n.t(
                 "activerecord.render_turbo_stream_errors.#{controller_action}"
               )
               [format(str, model_name: model_name)]
             end
    notices = []
  end

  turbo_actions = []
  notices += add_notices.to_a
  alerts += add_alerts.to_a
  notices.each do |notice|
    next unless notice.present?
    flash_stream = {
      target: RenderTurboStream::Libs.target_id_to_target(target_id),
      partial: partial,
      action: turbo_action,
      locals: { success: true, message: notice }
    }
    turbo_actions.push(flash_stream)
  end
  alerts.each do |alert|
    next unless alert.present?
    flash_stream = {
      target: RenderTurboStream::Libs.target_id_to_target(target_id),
      partial: partial,
      action: turbo_action,
      locals: { success: false, message: alert }
    }
    turbo_actions.push(flash_stream)
  end
  { turbo_actions: turbo_actions, alerts: alerts, notices: notices }
end