diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index e9101db..960cc4f 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -6,7 +6,7 @@ def index if (list_name = params[:list_name]) @list = List.find_by_name list_name - messages = Message.with_recursive(parent_and_children: [Message.where(list_id: @list.id, parent_id: nil).order(:id).limit(100), Message.joins('inner join parent_and_children on messages.parent_id = parent_and_children.id')]) + messages = Message.with_recursive(parent_and_children: [Message.where(list_id: @list, parent_id: nil).order(:id).limit(100), Message.joins('inner join parent_and_children on messages.parent_id = parent_and_children.id')]) .joins('inner join parent_and_children on parent_and_children.id = messages.id') @messages = compose_tree(messages) elsif (query = params[:q]) @@ -22,8 +22,8 @@ def index # GET /messages/ruby-dev/1 def show - list = List.find_by_name(params[:list_name]) - @message = Message.find_by(list_id: list.id, list_seq: params[:list_seq]) + @list = List.find_by_name(params[:list_name]) + @message = Message.find_by(list_id: @list, list_seq: params[:list_seq]) end private diff --git a/app/models/list.rb b/app/models/list.rb index 4867eb0..31cbcc8 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -1,8 +1,11 @@ class List + include ActiveModel::Model + def initialize(name, id) @name = name @id = id end + attr_reader :name, :id # Ordered by the established dates. ruby-list was started in 1995. @@ -24,4 +27,12 @@ def find_by_id(id) alias find find_by_id end + + def to_param + name + end + + def persisted? + true + end end diff --git a/app/models/message.rb b/app/models/message.rb index 2896db4..b110911 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -48,13 +48,13 @@ def from_mail(mail, list, list_seq) # mail.in_reply_to returns strange Array object in some cases (?), so let's use the raw value parent_message_id_header = extract_message_id_from_in_reply_to(mail.header[:in_reply_to]&.value) - self.parent_id = Message.where(list_id: list.id, message_id_header: parent_message_id_header).pick(:id) if parent_message_id_header + self.parent_id = Message.where(list_id: list, message_id_header: parent_message_id_header).pick(:id) if parent_message_id_header if !self.parent_id && (String === mail.references) - self.parent_id = Message.where(list_id: list.id, message_id_header: mail.references).pick(:id) + self.parent_id = Message.where(list_id: list, message_id_header: mail.references).pick(:id) end if !self.parent_id && (Array === mail.references) mail.references.compact.each do |ref| - break if (self.parent_id = Message.where(list_id: list.id, message_id_header: ref).pick(:id)) + break if (self.parent_id = Message.where(list_id: list, message_id_header: ref).pick(:id)) end end @@ -130,6 +130,11 @@ def list @list ||= List.find(list_id) end + def to_param + #NOTE: This value isn't unique system-wide. Ideally, this should return a combination of list_name and list_seq + list_seq + end + def count_recursively(count = 0) count + 1 + (children&.sum(&:count_recursively) || 0) end diff --git a/app/views/messages/_thread.html.erb b/app/views/messages/_thread.html.erb index 64c8f5e..c9dfea2 100644 --- a/app/views/messages/_thread.html.erb +++ b/app/views/messages/_thread.html.erb @@ -1,6 +1,6 @@