Module: NitroRails::DefaultBroadcasts

Included in:
BroadcastableRecord
Defined in:
app/models/nitro_rails/default_broadcasts.rb

Instance Method Summary collapse

Instance Method Details

#append_to_affiliated_listsObject



28
29
30
31
32
33
34
35
36
37
# File 'app/models/nitro_rails/default_broadcasts.rb', line 28

def append_to_affiliated_lists
  affiliations.each do |affiliation|
    broadcast_to_user_or_public_later(:append) do |broadcast|
      broadcast_attribute_tag = affiliation.nitro_data_id(collection_tag)
      broadcast.targets broadcast_attribute_tag
      broadcast.template(**partial_path)
      broadcast.attributes(focus: true)
    end
  end
end

#broadcast_attribute(attribute) ⇒ Object



66
67
68
69
70
71
72
73
# File 'app/models/nitro_rails/default_broadcasts.rb', line 66

def broadcast_attribute(attribute)
  new_value = send(attribute)
  replace_attribute_content(attribute, new_value)

  self.class.attribute_broadcasts[attribute.to_sym].to_a.each do |attribute_broadcast| 
    send(*[attribute_broadcast, attribute, new_value][0..method(attribute_broadcast).arity])
  end
end

#broadcast_to_user_later(action, &block) ⇒ Object

——- # Helpers # ——- #



122
123
124
# File 'app/models/nitro_rails/default_broadcasts.rb', line 122

def broadcast_to_user_later(action, &block)
  Broadcast.build(self, action, &block).perform_later
end

#broadcast_to_user_or_public_later(action, &block) ⇒ Object



126
127
128
129
130
131
132
133
134
135
136
# File 'app/models/nitro_rails/default_broadcasts.rb', line 126

def broadcast_to_user_or_public_later(action, &block)
  if defined?(User) && self.is_a?(User)
    user = self
  elsif self.respond_to?(:user)
    user = self.user
  else
    user = :public
  end

  Broadcast.build(user, action, &block).perform_later
end

#focus_on_new_resourceObject



49
50
51
52
53
# File 'app/models/nitro_rails/default_broadcasts.rb', line 49

def focus_on_new_resource
  broadcast_to_user_or_public_later(:focus) do |broadcast|
    broadcast.target nitro_data_id
  end
end

#insert_into_affiliated_listsObject



39
40
41
42
43
44
45
46
47
# File 'app/models/nitro_rails/default_broadcasts.rb', line 39

def insert_into_affiliated_lists
  affiliations.each do |affiliation|
    broadcast_to_user_or_public_later(:insert) do |broadcast|
      broadcast.targets affiliation.nitro_data_id(collection_tag)
      broadcast.template(**partial_path)
      broadcast.attributes(position: 0)
    end
  end
end

#nitro_data_id(*attributes) ⇒ Object



138
139
140
# File 'app/models/nitro_rails/default_broadcasts.rb', line 138

def nitro_data_id(*attributes)
  "[data-nitro-id='#{nitro_id(*attributes)}']"
end

#partial_pathObject



142
143
144
145
146
147
# File 'app/models/nitro_rails/default_broadcasts.rb', line 142

def partial_path 
  { 
    partial: "#{collection_tag}/#{type}", 
    locals: { "#{type}": self, tag: :li, focus: true }
  }
end

#redirect_to_indexObject

Should we just redirect back?



112
113
114
115
116
# File 'app/models/nitro_rails/default_broadcasts.rb', line 112

def redirect_to_index 
  broadcast_to_user_or_public_later(:redirect) do |broadcast| 
    broadcast.attributes(on: path_for_record, to: "/")
  end
end

#refresh_affiliatied_listsObject

——————- # Creation Broadcasts # ——————- #



16
17
18
19
20
21
22
23
24
25
26
# File 'app/models/nitro_rails/default_broadcasts.rb', line 16

def refresh_affiliatied_lists 
  affiliations.each do |affiliation|
    # broadcast_to_user_or_public_later(:refresh) do |broadcast|
    #   broadcast.targets affiliation.nitro_data_id(collection_tag)
    # end

    broadcast_to_user_or_public_later(:refresh_frame) do |broadcast|
      broadcast.targets affiliation.nitro_data_id(collection_tag)
    end
  end
end

#refresh_pageObject

—————— # Generic Broadcasts # —————— #



8
9
10
# File 'app/models/nitro_rails/default_broadcasts.rb', line 8

def refresh_page
  broadcast_to_user_or_public_later(:refresh) {}
end

#remove_everywhereObject

——————- # Deletion Broadcasts # ——————- #



105
106
107
108
109
# File 'app/models/nitro_rails/default_broadcasts.rb', line 105

def remove_everywhere
  broadcast_to_user_or_public_later(:remove) do |broadcast|
    broadcast.targets nitro_data_id
  end
end

#replace_attribute_content(attribute, value) ⇒ Object



75
76
77
78
79
80
# File 'app/models/nitro_rails/default_broadcasts.rb', line 75

def replace_attribute_content(attribute, value)
  broadcast_to_user_or_public_later(:update) do |broadcast|
    broadcast.targets nitro_data_id(attribute)
    broadcast.template(inline: value.to_s)
  end
end

#toggle_checkbox(attribute, value) ⇒ Object



82
83
84
85
86
87
# File 'app/models/nitro_rails/default_broadcasts.rb', line 82

def toggle_checkbox(attribute, value)
  broadcast_to_user_or_public_later(:toggle_checkbox) do |broadcast|
    broadcast.targets nitro_data_id(attribute)
    broadcast.attributes(status: value.to_s)
  end
end

#toggle_resource_attribute_class(attribute, value) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
# File 'app/models/nitro_rails/default_broadcasts.rb', line 89

def toggle_resource_attribute_class(attribute, value)
  broadcast_to_user_or_public_later(:toggle_class) do |broadcast|
    broadcast.targets nitro_data_id
    broadcast.attributes(class: attribute, status: value)
  end

  broadcast_to_user_or_public_later(:toggle_class) do |broadcast|
    broadcast.targets nitro_data_id
    broadcast.attributes(class: "not-#{attribute}", status: !value)
  end
end

#update_associated_attributesObject

——————– # Attribute Broadcasts # ——————– #



59
60
61
62
63
64
# File 'app/models/nitro_rails/default_broadcasts.rb', line 59

def update_associated_attributes
  saved_changes.each do |attribute, (old_value, new_value)|
    next if skipped_attributes.include?(attribute.to_sym)
    broadcast_attribute(attribute)
  end
end