samson_hipchat 0.0.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 895c0f23e1e141e45e4f164e7987aa0d9378d86c
4
- data.tar.gz: b00a8dbeeacc86b154882dba946d36648e4071c6
3
+ metadata.gz: b4b61d9b6e5b8d1cbf71e7c8caec7c7100fd7f39
4
+ data.tar.gz: eea4c0d26ac5f3722f9eed70fb37ee7be2aa1e71
5
5
  SHA512:
6
- metadata.gz: 8c5d648a82cdb3c8c8742e0d5bb7df2b7896d1c43356131336705f80ed7feaf633e4c2ed1f8477a5df1bb572657430d31016f1cce271b5d8e5cd87cde4ae3577
7
- data.tar.gz: 2beb0dd16de702b7e98ef759eb9f0a6f8c59b0ec37137a5ba4ce22bb8f53e7788b6430e6e8a8e8fb0a881951c1dd92cd3e6726236a473e4895a1cbea02b496e1
6
+ metadata.gz: 083f463cd20974ffde51d5a912702f0d804edc1157ee933d36f18b1e6056c8712fee995059f72a7f55e3eb4e2b2e1b7723fb630f64f852326cf92dbe45710b95
7
+ data.tar.gz: 03592f994dc71930e4e14fa68fe81311cbeb89e84caf2ea6f45f3d26f7e5ef225c40a4ee55a6e5c9d3f9205ce864551bde54034f1aa1c5ecb81283a139e63425
@@ -20,12 +20,14 @@ Stage.class_eval do
20
20
  end
21
21
 
22
22
  def update_room_id
23
- if room_for(room_name)
24
- # we attempt to save room id
25
- self.hipchat_rooms.first.room_id = room_for(room_name)['id']
26
- else
27
- # if we fail, this maybe a notification token, just set it to 0
28
- self.hipchat_rooms.first.room_id = 0 if room_name
23
+ self.hipchat_rooms.each do |room|
24
+ if room_for(room_name)
25
+ # we attempt to save room id
26
+ room.room_id = room_for(room_name)['id']
27
+ else
28
+ # if we fail, this maybe a notification token, just set it to 0
29
+ room.room_id = 0 if room_name
30
+ end
29
31
  end
30
32
  end
31
33
 
@@ -6,15 +6,30 @@ class HipchatNotification
6
6
  end
7
7
 
8
8
  def deliver
9
- message = Message.new(@deploy)
9
+ return if @stage.hipchat_rooms.empty?
10
+
11
+ @stage.hipchat_rooms.each do |room|
12
+ try_delivery(@deploy, room)
13
+ end
14
+
15
+ end
16
+
17
+ def try_delivery(deploy, room)
18
+ if !room.accept_notify?(deploy)
19
+ Rails.logger.debug("No need to notify #{room.name}")
20
+ return
21
+ end
22
+
23
+ Rails.logger.debug("Begin to notify #{room.name}")
24
+ message = Message.new(deploy, room.multi_message?)
10
25
  begin
11
- hipchat[@stage.hipchat_rooms.first.name].send message.from, message.to_s, **message.style
26
+ hipchat(room.token)[room.name].send message.from, message.to_s, **message.style
12
27
  rescue HipChat::UnknownRoom => e
13
28
  Rails.logger.error("Room did not existed")
14
29
  rescue HipChat::Unauthorized => e
15
30
  Rails.logger.error("Invalid token to post to room")
16
31
  rescue HipChat::UnknownResponseCode => e
17
- Rails.logger.error("Could not deliver hipchat message: #{e.message}")
32
+ Rails.logger.error("Could not deliver hipchat message: #{e.message} to room #{room.name}")
18
33
  end
19
34
  end
20
35
 
@@ -22,12 +37,13 @@ class HipchatNotification
22
37
  delegate :project, :stage, :user, to: :@deploy
23
38
  delegate :project_deploy_url, to: 'AppRoutes.url_helpers'
24
39
 
25
- def initialize(deploy)
40
+ def initialize(deploy, is_multi_message)
26
41
  @deploy = deploy
27
42
  @stage = deploy.stage
28
43
  @project = @stage.project
29
44
  @user = @deploy.user
30
45
  @changeset = @deploy.changeset
46
+ @is_multi_message = is_multi_message
31
47
  end
32
48
 
33
49
  def style
@@ -39,13 +55,17 @@ class HipchatNotification
39
55
  end
40
56
 
41
57
  def subject
42
- subject = "#{@user.name} is about to <a href='#{deploy_url}'>deploy</a> <strong>#{@project.name}</strong> on <strong>#{@stage.name}</strong><br>"
58
+ if @is_multi_message
59
+ subject = "#{@user.name} is about to <a href='#{deploy_url}'>deploy</a> <strong>#{@project.name}</strong> on <strong>#{@stage.name}</strong><br>"
43
60
 
44
- subject = "#{@user.name} successfully deploy <strong>#{@project.name}</strong> @<a href='#{diff_url}'>#{@deploy.commit}...#{@changeset.try(:previous_commit)}</a> on <strong>#{@stage.name}</strong><br>" if @deploy.job.succeeded?
61
+ subject = "#{@user.name} successfully deploy <strong>#{@project.name}</strong> @<a href='#{diff_url}'>#{@deploy.commit}...#{@changeset.try(:previous_commit)}</a> on <strong>#{@stage.name}</strong><br>" if @deploy.job.succeeded?
45
62
 
46
- subject = "#{@user.name} failed to <a href='#{deploy_url}'>deploy</a> <strong>#{@project.name}</strong> on <strong>#{@stage.name}</strong><br>" if @deploy.job.failed? || @deploy.job.errored?
63
+ subject = "#{@user.name} failed to <a href='#{deploy_url}'>deploy</a> <strong>#{@project.name}</strong> on <strong>#{@stage.name}</strong><br>" if @deploy.job.failed? || @deploy.job.errored?
47
64
 
48
- subject
65
+ subject
66
+ else
67
+ subject = "#{@user.name} successfully deploy <strong>#{@project.name}</strong> @<a href='#{diff_url}'>#{@deploy.commit}...#{@changeset.try(:previous_commit)}</a> on <strong>#{@stage.name}</strong><br>" if @deploy.job.succeeded?
68
+ end
49
69
  end
50
70
 
51
71
  def to_s
@@ -53,8 +73,12 @@ class HipchatNotification
53
73
  end
54
74
 
55
75
  def content
56
- return subject if @deploy.job.succeeded? || @deploy.job.failed? || @deploy.job.errored?
57
- @content ||= HipchatNotificationRenderer.render(@deploy, subject)
76
+ if @is_multi_message
77
+ return subject if @deploy.job.succeeded? || @deploy.job.failed? || @deploy.job.errored?
78
+ @content ||= HipchatNotificationRenderer.render(@deploy, subject)
79
+ else
80
+ @content ||= HipchatNotificationRenderer.render(@deploy, subject)
81
+ end
58
82
  end
59
83
 
60
84
  private
@@ -76,7 +100,8 @@ class HipchatNotification
76
100
 
77
101
  private
78
102
 
79
- def hipchat
80
- HipChat::Client.new @stage.hipchat_rooms.first.token, api_version: 'v2'
103
+ def hipchat(token = nil)
104
+ HipChat::Client.new @stage.hipchat_rooms.first.token, api_version: 'v2' if token.nil?
105
+ HipChat::Client.new token, api_version: 'v2'
81
106
  end
82
107
  end
@@ -1,3 +1,32 @@
1
1
  class HipchatRoom < ActiveRecord::Base
2
2
  belongs_to :stage
3
+ enum notify_on: { always: 0, succeeded: 1, failed: 2 }
4
+
5
+ def always_notify?
6
+ return notify_on == "always"
7
+ end
8
+
9
+ def only_notify_suceeded?
10
+ return notify_on == "succeeded"
11
+ end
12
+
13
+ def accept_notify?(deploy)
14
+ if deploy.job.failed? || deploy.job.errored?
15
+ return always_notify?
16
+ end
17
+
18
+ if deploy.job.succeeded?
19
+ return always_notify? || only_notify_suceeded?
20
+ end
21
+
22
+ # Other status, we will only notifiy if we enable always notify
23
+ return always_notify?
24
+ end
25
+
26
+ # Check if we can send multi message to this room
27
+ # Our logic: notify_on = suceeded only has to be single message becase we
28
+ # will only notify on succeeded
29
+ def multi_message?
30
+ return notify_on == "always"
31
+ end
3
32
  end
@@ -1,4 +1,4 @@
1
- <fieldset>
1
+ <fieldset id="hipchat-room-containers">
2
2
  <legend>Hipchat</legend>
3
3
  <p class="col-lg-offset-2">Hipchat room and token.</p>
4
4
 
@@ -7,6 +7,7 @@
7
7
 
8
8
  <%= form.fields_for :hipchat_rooms do |hipchat_fields| %>
9
9
  <div class="form-group">
10
+
10
11
  <div class="col-lg-2 col-lg-offset-2">
11
12
  <%= hipchat_fields.text_field :name, class: "form-control", placeholder: "Room name" %>
12
13
  </div>
@@ -14,6 +15,11 @@
14
15
  <%= hipchat_fields.text_field :token, class: "form-control", placeholder: "Token" %>
15
16
  </div>
16
17
 
18
+ <div class="col-lg-2 col-lg-offset-2">
19
+ <%= hipchat_fields.select :notify_on, [['Always', :always], ['Succeeed', :succeeded]] %>
20
+ <%= hipchat_fields.label :notify_on, "Notify?" %>
21
+ </div>
22
+
17
23
  <% if hipchat_fields.object.persisted? %>
18
24
  <div class="col-lg-1 checkbox">
19
25
  <%= hipchat_fields.check_box :_destroy if hipchat_fields.object.persisted? %>
@@ -22,4 +28,32 @@
22
28
  <% end %>
23
29
  </div>
24
30
  <% end %>
31
+ <button class="btn btn-default" id="hipchat-room-create">Create room</button>
25
32
  </fieldset>
33
+
34
+ <script>
35
+ //@TODO put them into asset
36
+ $(document).ready(function () {
37
+ function addHipChatForm(e) {
38
+ var formCount =$('#hipchat-room-containers')
39
+ .find(".form-group")
40
+ .length
41
+
42
+ e.preventDefault()
43
+ var form = $('#hipchat-room-containers')
44
+ .find(".form-group").last().clone()
45
+ .insertBefore('#hipchat-room-containers #hipchat-room-create')
46
+ form.find('input').each(function () {
47
+ var element = $(this)
48
+ if (element.prop('name') != undefined) {
49
+ element.prop('name', element.prop('name').replace(/\[[0-9]+\]/g, '[' + formCount + ']'));
50
+ }
51
+ if (element.attr('id') != undefined) {
52
+ element.attr('id', element.attr('id').replace(/_[0-9]+_/g, '_' + formCount + '_'));
53
+ }
54
+ })
55
+ }
56
+
57
+ $('#hipchat-room-create').click(addHipChatForm)
58
+ })
59
+ </script>
@@ -1,5 +1,5 @@
1
1
  <%= subject %>
2
- <p>&nbsp;&nbsp;<%= deploy.message %> </p>
2
+ <p>&nbsp;&nbsp;<%= deploy.try(:message) %> </p>
3
3
  <% if changeset.commits.count == 0 %>
4
4
  There are no new commits since last time.
5
5
  <% else %>
@@ -0,0 +1,8 @@
1
+ class AddNotifyOnToHipchatRoom < ActiveRecord::Migration
2
+ def change
3
+ change_table :hipchat_rooms do |t|
4
+ # Always send notification
5
+ t.integer :notify_on, default: 0
6
+ end
7
+ end
8
+ end
@@ -9,7 +9,7 @@ Samson::Hooks.callback :stage_clone do |old_stage, new_stage|
9
9
  end
10
10
 
11
11
  Samson::Hooks.callback :stage_permitted_params do
12
- { hipchat_rooms_attributes: [:id, :name, :token, :_destroy] }
12
+ { hipchat_rooms_attributes: [:id, :name, :token, :notify_on, :_destroy] }
13
13
  end
14
14
 
15
15
  notify = -> (deploy, _buddy) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samson_hipchat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vinh Nguyen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-02 00:00:00.000000000 Z
11
+ date: 2015-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hipchat
@@ -38,6 +38,7 @@ files:
38
38
  - app/views/samson_hipchat/notification.text.erb
39
39
  - config/initializers/hipchat.rb
40
40
  - db/migrate/20150519105221_create_hipchat_rooms.rb
41
+ - db/migrate/20150706182832_add_notify_on_to_hipchat_room.rb
41
42
  - lib/samson_hipchat/samson_plugin.rb
42
43
  homepage:
43
44
  licenses: []