logan icon indicating copy to clipboard operation
logan copied to clipboard

Add comment to message

Open edporras opened this issue 9 years ago • 4 comments

Hi, I'm in need of a way to post comments on existing messages and, unless I'm mistaken, it looks like this is not supported yet, right? Any chance you'd be able to add it soon?

If not, I'll try something similar to what was done for issue 6 but I wanted to check first.

Thank you

edporras avatar Aug 04 '15 03:08 edporras

Assuming the API is the same as it was for 6 this should be pretty straight forward - I could put this up in a branch pretty quick if you wouldn't mind testing it from there? Unfortunately I don't use basecamp for work anymore so I don't have easy access to API.

birarda avatar Aug 04 '15 05:08 birarda

I pushed the changes to a separate branch - message-comments.

The pre-release is here if you can test it out: https://github.com/birarda/logan/releases/tag/0.2.3

birarda avatar Aug 04 '15 05:08 birarda

Wow, thanks so much. I'll give it a go and let you know.

edporras avatar Aug 04 '15 13:08 edporras

Hi, sorry about the delay.

I tried your branch but I ended up modifying things a little bit because of my needs and I wanted to get your thoughts.

I imagine the "proper" way to go about this would be to load the project via the projects(proj_id) method, and then to load the message in a similar way. However, I don't think this is available either but I also think it's not necessary to make the call since I just need to post a comment to a message we already know the id for.

So, what I have temporarily done is, essentially, replicated your method within project like so:

module Logan
  class Project

….

   # post a comment to a message if the msg id is known                                                                                                                                                                   
    def create_message_comment(msg_id, content, subscribers = nil)
      body = { :content => content }
      body[:subscribers] = subscribers if subscribers != nil

      comment_params = {
        :body => body.to_json,
        :headers => Logan::Client.headers.merge({'Content-Type' => 'application/json'})
      }

      response = Logan::Client.post "/projects/#{@id}/messages/#{msg_id}/comments.json", comment_params
      Logan::Comment.new response
    end

To be more correct, I should create an instance of Message on which I could make your call. I just want to avoid making a query to Basecamp to retrieve the message since it might not be necessary (unless the caller wants to query the list of recipients to update it).

I'm somewhat new to ruby so I'm not 100% certain but I think if I create an instance of Message, it's going to expect data as received from Basecamp whereas I'd like to have just a representation of the Message with the id. Does that make sense? Do you have some suggestions as to how I should rework this?

Alternatively, I could create a class method within Message that performs the action you wrote and that I replicated and then we could have both methods call it, if you feel this is valid usage.

I'm working on this in the evenings but I can reply if you have any questions or comments. Thank you.

edporras avatar Aug 06 '15 18:08 edporras