diff options
author | Rémy Coutable <remy@rymai.me> | 2016-08-11 14:23:53 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-08-11 14:23:53 +0300 |
commit | 624f35beedde6916dfd331718d0f2ecf6c4ca733 (patch) | |
tree | 2a152dc420fb0f72c7ee030ff65b9396b9994674 /app | |
parent | 3a46eac1ef903c027c244d31369329f45c636914 (diff) | |
parent | fb748daf538e43efcf8884f017391bcbfccf2ea2 (diff) |
Merge branch '13333-consider-updating-http-parser-rb-to-0-6-0' into 'master'
Replace the tinder gem by bare HTTP requests
## What does this MR do?
It removes the `tinder` gem (used to talk to the Campfire API) and replaces its use by bare HTTP requests.
## Are there points in the code the reviewer needs to double check?
N/A.
## Why was this MR needed?
To simplify the potential dependency hell discussed in #13333.
The initial issue was about updating `http_parser.rb` which was required by `twitter-stream` which was required by `tinder`.
Those 3 gems are not needed anymore.
## What are the relevant issue numbers?
#13333
## Screenshots (if relevant)
N/A.
## Does this MR meet the acceptance criteria?
- [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- [x] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)
- Tests
- [x] Added for this feature/bug
- [x] All builds are passing
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [x] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
Closes #13333
See merge request !5758
Diffstat (limited to 'app')
-rw-r--r-- | app/models/project_services/campfire_service.rb | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/app/models/project_services/campfire_service.rb b/app/models/project_services/campfire_service.rb index 511b2eac792..5af93860d09 100644 --- a/app/models/project_services/campfire_service.rb +++ b/app/models/project_services/campfire_service.rb @@ -1,4 +1,6 @@ class CampfireService < Service + include HTTParty + prop_accessor :token, :subdomain, :room validates :token, presence: true, if: :activated? @@ -29,18 +31,53 @@ class CampfireService < Service def execute(data) return unless supported_events.include?(data[:object_kind]) - room = gate.find_room_by_name(self.room) - return true unless room - + self.class.base_uri base_uri message = build_message(data) - - room.speak(message) + speak(self.room, message, auth) end private - def gate - @gate ||= Tinder::Campfire.new(subdomain, token: token) + def base_uri + @base_uri ||= "https://#{subdomain}.campfirenow.com" + end + + def auth + # use a dummy password, as explained in the Campfire API doc: + # https://github.com/basecamp/campfire-api#authentication + @auth ||= { + basic_auth: { + username: token, + password: 'X' + } + } + end + + # Post a message into a room, returns the message Hash in case of success. + # Returns nil otherwise. + # https://github.com/basecamp/campfire-api/blob/master/sections/messages.md#create-message + def speak(room_name, message, auth) + room = rooms(auth).find { |r| r["name"] == room_name } + return nil unless room + + path = "/room/#{room["id"]}/speak.json" + body = { + body: { + message: { + type: 'TextMessage', + body: message + } + } + } + res = self.class.post(path, auth.merge(body)) + res.code == 201 ? res : nil + end + + # Returns a list of rooms, or []. + # https://github.com/basecamp/campfire-api/blob/master/sections/rooms.md#get-rooms + def rooms(auth) + res = self.class.get("/rooms.json", auth) + res.code == 200 ? res["rooms"] : [] end def build_message(push) |