From b2a7a6ab60f5fd37fdbec40886866969dfb226a9 Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Tue, 24 Nov 2015 13:45:17 +0900 Subject: [PATCH 1/6] add web hook for Backlog issue --- lib/hooks/backlog/help.html.haml | 9 + lib/hooks/backlog/helper.rb | 51 ++++++ lib/hooks/backlog/hook.rb | 23 +++ lib/hooks/backlog/images/icon.png | Bin 0 -> 2033 bytes lib/hooks/backlog/templates/issue.html.haml | 13 ++ spec/backlog_spec.rb | 173 ++++++++++++++++++ .../payload/backlog/issue_comment.json | 32 ++++ .../payload/backlog/issue_create.json | 28 +++ .../payload/backlog/issue_delete.json | 26 +++ .../backlog/issue_multipul_update.json | 44 +++++ .../payload/backlog/issue_notice.json | 32 ++++ .../payload/backlog/issue_update.json | 38 ++++ 12 files changed, 469 insertions(+) create mode 100644 lib/hooks/backlog/help.html.haml create mode 100644 lib/hooks/backlog/helper.rb create mode 100644 lib/hooks/backlog/hook.rb create mode 100644 lib/hooks/backlog/images/icon.png create mode 100644 lib/hooks/backlog/templates/issue.html.haml create mode 100644 spec/backlog_spec.rb create mode 100644 spec/fixtures/payload/backlog/issue_comment.json create mode 100644 spec/fixtures/payload/backlog/issue_create.json create mode 100644 spec/fixtures/payload/backlog/issue_delete.json create mode 100644 spec/fixtures/payload/backlog/issue_multipul_update.json create mode 100644 spec/fixtures/payload/backlog/issue_notice.json create mode 100644 spec/fixtures/payload/backlog/issue_update.json diff --git a/lib/hooks/backlog/help.html.haml b/lib/hooks/backlog/help.html.haml new file mode 100644 index 0000000..a75c4ae --- /dev/null +++ b/lib/hooks/backlog/help.html.haml @@ -0,0 +1,9 @@ +%dl + %dt Usage + %dd + %p + You can add webhook URL to your team in backlog. + %br + See Webhook | Backlog for more details. + %p Please append space_id parameter as below. + %pre {{endpoint}}?space_id=hogehoge diff --git a/lib/hooks/backlog/helper.rb b/lib/hooks/backlog/helper.rb new file mode 100644 index 0000000..81cb006 --- /dev/null +++ b/lib/hooks/backlog/helper.rb @@ -0,0 +1,51 @@ +module Idobata::Hook + class Backlog < Base + module Helper + def type_label + case payload.type + when 1 + label = 'created' + when 2 + label = 'updated' + when 3 + label = 'commented' + when 4 + label = 'issue deleted' + when 17 + label = 'noticed' + when 14 + label = 'multiple issues updated' + end + label + end + + def backlog_url_base + "https://#{space_id}.backlog.jp/view/#{payload.project.projectKey}" if space_id + end + + def backlog_urls + urls = [] + if backlog_url_base + if payload.content.key_id + url = "#{backlog_url_base}-#{payload.content.key_id}" + url += "#comment-#{payload.content.comment.id}" if payload.content.comment && payload.content.comment.id + urls << url + else + payload.content.link.each do |link| + urls << "#{backlog_url_base}-#{link.key_id}" if link.key_id + end + end + end + urls + end + + def md(source) + HTML::Pipeline::MarkdownFilter.new(source, gfm: true).call.to_s.html_safe + end + + def hbr(source) + html_escape(source).gsub(/\r\n|\r|\n/, "
").html_safe + end + end + end +end diff --git a/lib/hooks/backlog/hook.rb b/lib/hooks/backlog/hook.rb new file mode 100644 index 0000000..f548514 --- /dev/null +++ b/lib/hooks/backlog/hook.rb @@ -0,0 +1,23 @@ +module Idobata::Hook + class Backlog < Base + screen_name 'backlog' + icon_url hook_image_url('icon.png') + template_name { "#{type}.html.haml" } + + helper Helper + + private + + def type + case payload.type + when 1, 2, 3, 4, 14, 17 + 'issue' + end + end + + def space_id + params[:space_id] || nil + end + + end +end diff --git a/lib/hooks/backlog/images/icon.png b/lib/hooks/backlog/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..26815ecbed1386a03e4048b5c8036e5b71035163 GIT binary patch literal 2033 zcmXw32{=@38$L6b>}!@8gNd@0EQ8FT=0p50VPeQfmeNm=Xi~C|FhetALY4_dDkM7% zk?HKLn+M18EqrDo4d|`$3WWNzG_YBpuu) zRxyb?`Oh}FGUz5;4K%D0gR2wt(IC;j117Kq}4I0MVfT%;fF-L$KVh7?hB@@slc2-XzsVPO6thKSVAxhQ)B2o7{^VkcY znkU|=-?yAt`5N;kW#Ahdh*WedA$EQpxZC<5qwDF3EJvTp@Uf+dg7;NIamUUUUK#v0 zqL*n05JiBSl2MI}um)PmaP70fN;u6(j%LIfYdR3Ck=I|kw6U_VzU*HUZIS0bvpV-= zpuC)2ZpL0b+H98q*#=lRka@JH+ zEjZi1TwervmECHc?54NpaCUzA)kH6Dd_SIUbL&+?X4f+meE8AB19iDeV;X@J?c04O!8=IHh@sEf|;`Ka??r-1;0@ zRl04ptCThE6$KOMRv!4du^BQOApXOVZ|qe)$3k2Z0C+8}E&d|h_DEwp1tG1(VG|NA zYU$qp>hT9qmyBL|(m;IGrteIT*<@9-awbeEzGrAkfc; zv3{{IaB8Tq84{DK%3-`Qj?mkVzGw#fEH>17Ap`x%l59bOnJYc(B3)>;hRX9k&}%jWgqoh{N9 z&slyJ=4k8`k2ULP5*$$IEU*zJAp{+8_$f-r`x`ywKMPU-)a zy*A0%^KJ7kD6S&vDm#3ktnuA{Gcw-vno!yuJRJ+&xya1OJ#=YXXvwN>l&tBdYZw~- zg0nMicx}RUTwAY;^f*Os-b(ad#ENZcNy(5q^s<>aOt_V3-J3)_zG9ij+v+5TQ$?j2 z1SM})y5o-MoHojRwMaZ(T}^;qBv%T^m?6rMQx@1XI7zQ2hmF+Q*qPx~s(ntr!s}OC2l4r7q@xvtdZfG&QL%}@UO!-UGzTZ* z0B!fy@YjGLJ(YQkjs>_d>l>WWC}|tIyza#1o(RX;sd*lke?7cle%X@Z6!Z&a^!eea z<+;ZX0x{Uh4w&C_$sh&w+!p6f>lS<8=ABcNPg+%*W1B0im z%73P`O@1)rzfBx@bm+u{B-|@XrHC-9NlG~9aq01s#k0aj5&aJ?oF5#GNlSNC5wD=} zkz{9ukU9F!+MF3-tAKb>lq7tWM_Y)sH1lntU?XVWOcgJtBLf+K_mWt_%E7hi8p<_f zUJdmmCZlZ^NOCEyF6xDndYd6XMpLd(KQ^9+~-y_T#4Fcip%CZ&> zp5%79m$=UKs%cjqPGhlLLWi3RLt@^x`zq@cQT5Z*m>ElG(F`w5$VrCwky(OX&SFIi7jJ%wPVezw3z*cR`G zH*_F(QWVcr=;d`-hS*1S{xFa9A-&^2E4A6v>~?Lqx_<&Sywn^wC)NYCm(V?fQlA-* zaU_e_h}tka@q^v>%fD*u#tM@uN^@C;Y6g*)?1lEAeX(Ql`qQbt;NJ_dK5b`FYUXw4 Ef2Y!o00000 literal 0 HcmV?d00001 diff --git a/lib/hooks/backlog/templates/issue.html.haml b/lib/hooks/backlog/templates/issue.html.haml new file mode 100644 index 0000000..5385163 --- /dev/null +++ b/lib/hooks/backlog/templates/issue.html.haml @@ -0,0 +1,13 @@ +%p + %b= payload.content.summary + #{type_label} by #{payload.createdUser.name}. + + - backlog_urls.each do |url| + %p + %a{href: url}= url + + - if payload.type == 1 + %p=hbr payload.content.description + + - if payload.content.comment + %p=hbr payload.content.comment.content diff --git a/spec/backlog_spec.rb b/spec/backlog_spec.rb new file mode 100644 index 0000000..8377f95 --- /dev/null +++ b/spec/backlog_spec.rb @@ -0,0 +1,173 @@ +describe Idobata::Hook::Backlog, type: :hook do + let(:payload) { fixture_payload("backlog/#{payload_type}.json") } + + describe '#process_payload' do + subject { hook.process_payload } + + context 'on issue create without space_id' do + let(:payload_type) { 'issue_create' } + + before do + post payload, {'Content-Type' => 'application/json'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } +

+ test issue + created by ozamasa. +

test description

+

+ HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue create' do + let(:payload_type) { 'issue_create' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } +

+ test issue + created by ozamasa. +

+ https://test.backlog.jp/view/TEST-100 +

+

test description

+

+ HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue update' do + let(:payload_type) { 'issue_update' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } +

+ test issue + updated by ozamasa. +

+ https://test.backlog.jp/view/TEST-100#comment-200 +

+

+

+ HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue comment' do + let(:payload_type) { 'issue_comment' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } +

+ test issue + commented by ozamasa. +

+ https://test.backlog.jp/view/TEST-100#comment-200 +

+

test comment

+

+ HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue comment' do + let(:payload_type) { 'issue_comment' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } +

+ test issue + commented by ozamasa. +

+ https://test.backlog.jp/view/TEST-100#comment-200 +

+

test comment

+

+ HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue delete' do + let(:payload_type) { 'issue_delete' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } +

+ + issue deleted by ozamasa. +

+ https://test.backlog.jp/view/TEST-100 +

+

+ HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue multipul update' do + let(:payload_type) { 'issue_multipul_update' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } +

+ + multiple issues updated by ozamasa. +

+ https://test.backlog.jp/view/TEST-100 +

+

+ https://test.backlog.jp/view/TEST-101 +

+

+ HTML + + its([:format]) { should eq(:html) } + end + + context 'on issue notice' do + let(:payload_type) { 'issue_notice' } + + before do + post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} + end + + its([:source]) { should eq(<<-HTML.strip_heredoc) } +

+ test issue + noticed by ozamasa. +

+ https://test.backlog.jp/view/TEST-100#comment-200 +

+

test comment

+

+ HTML + + its([:format]) { should eq(:html) } + end + end +end diff --git a/spec/fixtures/payload/backlog/issue_comment.json b/spec/fixtures/payload/backlog/issue_comment.json new file mode 100644 index 0000000..5f1ef3a --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_comment.json @@ -0,0 +1,32 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":3, + "content":{ + "summary":"test issue", + "key_id":100, + "description":"test description", + "comment":{ + "id":200, + "content":"test comment" + }, + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_create.json b/spec/fixtures/payload/backlog/issue_create.json new file mode 100644 index 0000000..163a1ec --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_create.json @@ -0,0 +1,28 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":1, + "content":{ + "summary":"test issue", + "key_id":100, + "description":"test description", + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_delete.json b/spec/fixtures/payload/backlog/issue_delete.json new file mode 100644 index 0000000..a951e6a --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_delete.json @@ -0,0 +1,26 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":4, + "content":{ + "key_id":100, + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_multipul_update.json b/spec/fixtures/payload/backlog/issue_multipul_update.json new file mode 100644 index 0000000..d3a6fbe --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_multipul_update.json @@ -0,0 +1,44 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":14, + "content":{ + "link":[ + { + "key_id":"100", + "id":"100", + "title":"test issue1" + }, + { + "key_id":"101", + "id":"101", + "title":"test issue2" + } + ], + "changes":[ + { + "field":"priority", + "type":"standard", + "new_value":"高" + } + ], + "tx_id":"200" + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_notice.json b/spec/fixtures/payload/backlog/issue_notice.json new file mode 100644 index 0000000..19f0491 --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_notice.json @@ -0,0 +1,32 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":17, + "content":{ + "summary":"test issue", + "key_id":100, + "description":"test description", + "comment":{ + "id":200, + "content":"test comment" + }, + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} diff --git a/spec/fixtures/payload/backlog/issue_update.json b/spec/fixtures/payload/backlog/issue_update.json new file mode 100644 index 0000000..5d63aa4 --- /dev/null +++ b/spec/fixtures/payload/backlog/issue_update.json @@ -0,0 +1,38 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":2, + "content":{ + "summary":"test issue", + "key_id":100, + "changes":[{ + "field":"priority", + "old_value":"3", + "type":"standard", + "new_value":"2" + }], + "description":"test description", + "comment":{ + "id":200, + "content":"" + }, + "id":100 + }, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} From 1d16d17bcbbc72b2f39ff261e9cfcaa85145213a Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Wed, 25 Nov 2015 12:14:37 +0900 Subject: [PATCH 2/6] change backlog icon --- lib/hooks/backlog/images/icon.png | Bin 2033 -> 9263 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/hooks/backlog/images/icon.png b/lib/hooks/backlog/images/icon.png index 26815ecbed1386a03e4048b5c8036e5b71035163..785eb922771bbc4467c810ace08ca57eebce1931 100644 GIT binary patch literal 9263 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 RRLTGV002ovPDHLkV1i58z$5?w literal 2033 zcmXw32{=@38$L6b>}!@8gNd@0EQ8FT=0p50VPeQfmeNm=Xi~C|FhetALY4_dDkM7% zk?HKLn+M18EqrDo4d|`$3WWNzG_YBpuu) zRxyb?`Oh}FGUz5;4K%D0gR2wt(IC;j117Kq}4I0MVfT%;fF-L$KVh7?hB@@slc2-XzsVPO6thKSVAxhQ)B2o7{^VkcY znkU|=-?yAt`5N;kW#Ahdh*WedA$EQpxZC<5qwDF3EJvTp@Uf+dg7;NIamUUUUK#v0 zqL*n05JiBSl2MI}um)PmaP70fN;u6(j%LIfYdR3Ck=I|kw6U_VzU*HUZIS0bvpV-= zpuC)2ZpL0b+H98q*#=lRka@JH+ zEjZi1TwervmECHc?54NpaCUzA)kH6Dd_SIUbL&+?X4f+meE8AB19iDeV;X@J?c04O!8=IHh@sEf|;`Ka??r-1;0@ zRl04ptCThE6$KOMRv!4du^BQOApXOVZ|qe)$3k2Z0C+8}E&d|h_DEwp1tG1(VG|NA zYU$qp>hT9qmyBL|(m;IGrteIT*<@9-awbeEzGrAkfc; zv3{{IaB8Tq84{DK%3-`Qj?mkVzGw#fEH>17Ap`x%l59bOnJYc(B3)>;hRX9k&}%jWgqoh{N9 z&slyJ=4k8`k2ULP5*$$IEU*zJAp{+8_$f-r`x`ywKMPU-)a zy*A0%^KJ7kD6S&vDm#3ktnuA{Gcw-vno!yuJRJ+&xya1OJ#=YXXvwN>l&tBdYZw~- zg0nMicx}RUTwAY;^f*Os-b(ad#ENZcNy(5q^s<>aOt_V3-J3)_zG9ij+v+5TQ$?j2 z1SM})y5o-MoHojRwMaZ(T}^;qBv%T^m?6rMQx@1XI7zQ2hmF+Q*qPx~s(ntr!s}OC2l4r7q@xvtdZfG&QL%}@UO!-UGzTZ* z0B!fy@YjGLJ(YQkjs>_d>l>WWC}|tIyza#1o(RX;sd*lke?7cle%X@Z6!Z&a^!eea z<+;ZX0x{Uh4w&C_$sh&w+!p6f>lS<8=ABcNPg+%*W1B0im z%73P`O@1)rzfBx@bm+u{B-|@XrHC-9NlG~9aq01s#k0aj5&aJ?oF5#GNlSNC5wD=} zkz{9ukU9F!+MF3-tAKb>lq7tWM_Y)sH1lntU?XVWOcgJtBLf+K_mWt_%E7hi8p<_f zUJdmmCZlZ^NOCEyF6xDndYd6XMpLd(KQ^9+~-y_T#4Fcip%CZ&> zp5%79m$=UKs%cjqPGhlLLWi3RLt@^x`zq@cQT5Z*m>ElG(F`w5$VrCwky(OX&SFIi7jJ%wPVezw3z*cR`G zH*_F(QWVcr=;d`-hS*1S{xFa9A-&^2E4A6v>~?Lqx_<&Sywn^wC)NYCm(V?fQlA-* zaU_e_h}tka@q^v>%fD*u#tM@uN^@C;Y6g*)?1lEAeX(Ql`qQbt;NJ_dK5b`FYUXw4 Ef2Y!o00000 From 5cfde743ca370029426ace95692e61b48d5f2717 Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Wed, 25 Nov 2015 20:41:56 +0900 Subject: [PATCH 3/6] add before render --- lib/hooks/backlog/hook.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/hooks/backlog/hook.rb b/lib/hooks/backlog/hook.rb index f548514..ab34fa3 100644 --- a/lib/hooks/backlog/hook.rb +++ b/lib/hooks/backlog/hook.rb @@ -6,12 +6,18 @@ class Backlog < Base helper Helper + before_render do + skip_processing! unless type + end + private def type case payload.type when 1, 2, 3, 4, 14, 17 'issue' + else + nil end end From e317175731fcea4eaa2b5dd1101db216242c5f38 Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Wed, 25 Nov 2015 20:42:28 +0900 Subject: [PATCH 4/6] add type error spec --- spec/backlog_spec.rb | 76 +++++++------------ spec/fixtures/payload/backlog/type_error.json | 22 ++++++ 2 files changed, 49 insertions(+), 49 deletions(-) create mode 100644 spec/fixtures/payload/backlog/type_error.json diff --git a/spec/backlog_spec.rb b/spec/backlog_spec.rb index 8377f95..78d18e1 100644 --- a/spec/backlog_spec.rb +++ b/spec/backlog_spec.rb @@ -4,6 +4,18 @@ describe '#process_payload' do subject { hook.process_payload } + context 'on type error' do + let(:payload_type) { 'type_error' } + + before do + post payload, 'Content-Type' => 'application/json' + end + + subject { ->{ hook.process_payload } } + + it { expect(subject).to raise_error(Idobata::Hook::SkipProcessing) } + end + context 'on issue create without space_id' do let(:payload_type) { 'issue_create' } @@ -13,7 +25,7 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }

- test issue + test issue created by ozamasa.

test description

@@ -31,11 +43,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }

- test issue + test issue created by ozamasa. -

- https://test.backlog.jp/view/TEST-100 -

test description

HTML @@ -52,11 +61,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }

- test issue + test issue updated by ozamasa. -

- https://test.backlog.jp/view/TEST-100#comment-200 -

HTML @@ -73,32 +79,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }

- test issue - commented by ozamasa. -

- https://test.backlog.jp/view/TEST-100#comment-200 -

-

test comment

-

- HTML - - its([:format]) { should eq(:html) } - end - - context 'on issue comment' do - let(:payload_type) { 'issue_comment' } - - before do - post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} - end - - its([:source]) { should eq(<<-HTML.strip_heredoc) } -

- test issue + test issue commented by ozamasa. -

- https://test.backlog.jp/view/TEST-100#comment-200 -

test comment

HTML @@ -115,11 +97,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }

- + TEST-100 issue deleted by ozamasa. -

- https://test.backlog.jp/view/TEST-100 -

HTML @@ -135,14 +114,16 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }

- + multiple issues updated by ozamasa. -

- https://test.backlog.jp/view/TEST-100 -

-

- https://test.backlog.jp/view/TEST-101 -

+

HTML @@ -158,11 +139,8 @@ its([:source]) { should eq(<<-HTML.strip_heredoc) }

- test issue + test issue noticed by ozamasa. -

- https://test.backlog.jp/view/TEST-100#comment-200 -

test comment

HTML diff --git a/spec/fixtures/payload/backlog/type_error.json b/spec/fixtures/payload/backlog/type_error.json new file mode 100644 index 0000000..9a6122a --- /dev/null +++ b/spec/fixtures/payload/backlog/type_error.json @@ -0,0 +1,22 @@ +{ + "created":"2015-11-24T00:00:00Z", + "project":{ + "archived":false, + "projectKey":"TEST", + "name":"TestProject", + "chartEnabled":false, + "id":100, + "subtaskingEnabled":false + }, + "id":10, + "type":9999, + "notifications":[], + "createdUser":{ + "name":"ozamasa", + "mailAddress":null, + "id":6336, + "roleType":1, + "lang":"ja", + "userId":null + } +} From d288e1f6e7e92573edf7f68c56d68adb8ad181a4 Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Wed, 25 Nov 2015 21:49:46 +0900 Subject: [PATCH 5/6] change template --- lib/hooks/backlog/helper.rb | 30 ++++++++++++--------- lib/hooks/backlog/templates/issue.html.haml | 14 +++++++--- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/lib/hooks/backlog/helper.rb b/lib/hooks/backlog/helper.rb index 81cb006..d3a1216 100644 --- a/lib/hooks/backlog/helper.rb +++ b/lib/hooks/backlog/helper.rb @@ -20,27 +20,33 @@ def type_label end def backlog_url_base - "https://#{space_id}.backlog.jp/view/#{payload.project.projectKey}" if space_id + "https://#{space_id}.backlog.jp/view/" if space_id + end + + def backlog_url + if backlog_url_base && payload.content.key_id && payload.content.summary + url = "#{backlog_url_base}#{project_key_id}" + url += "#comment-#{payload.content.comment.id}" if payload.content.comment.try(:id) + end + url end def backlog_urls urls = [] - if backlog_url_base - if payload.content.key_id - url = "#{backlog_url_base}-#{payload.content.key_id}" - url += "#comment-#{payload.content.comment.id}" if payload.content.comment && payload.content.comment.id - urls << url - else - payload.content.link.each do |link| - urls << "#{backlog_url_base}-#{link.key_id}" if link.key_id - end + if backlog_url_base && payload.content.link + payload.content.link.each do |link| + urls << "#{backlog_url_base}#{payload.project.projectKey}-#{link.key_id}" if link.key_id end end urls end - def md(source) - HTML::Pipeline::MarkdownFilter.new(source, gfm: true).call.to_s.html_safe + def project_key_id + "#{payload.project.projectKey}-#{payload.content.key_id}" if payload.content.key_id + end + + def summary + payload.content.summary || project_key_id end def hbr(source) diff --git a/lib/hooks/backlog/templates/issue.html.haml b/lib/hooks/backlog/templates/issue.html.haml index 5385163..9e6782c 100644 --- a/lib/hooks/backlog/templates/issue.html.haml +++ b/lib/hooks/backlog/templates/issue.html.haml @@ -1,10 +1,16 @@ %p - %b= payload.content.summary + - if backlog_url && summary + %a{href: backlog_url}= summary + - else + = summary + #{type_label} by #{payload.createdUser.name}. - - backlog_urls.each do |url| - %p - %a{href: url}= url + - if backlog_urls.size > 1 + %ul + - backlog_urls.each do |url| + %li + %a{href: url}= url - if payload.type == 1 %p=hbr payload.content.description From 3088a6d2ab66c5103e60fffaf5d835dec3292549 Mon Sep 17 00:00:00 2001 From: Masaki Ozawa Date: Thu, 26 Nov 2015 13:11:49 +0900 Subject: [PATCH 6/6] change backlog issue web hook --- lib/hooks/backlog/help.html.haml | 2 ++ lib/hooks/backlog/helper.rb | 29 +++++++------------ lib/hooks/backlog/templates/issue.html.haml | 13 +++------ spec/backlog_spec.rb | 12 +++----- ...update.json => issue_multiple_update.json} | 0 5 files changed, 20 insertions(+), 36 deletions(-) rename spec/fixtures/payload/backlog/{issue_multipul_update.json => issue_multiple_update.json} (100%) diff --git a/lib/hooks/backlog/help.html.haml b/lib/hooks/backlog/help.html.haml index a75c4ae..3e8e7f4 100644 --- a/lib/hooks/backlog/help.html.haml +++ b/lib/hooks/backlog/help.html.haml @@ -5,5 +5,7 @@ You can add webhook URL to your team in backlog. %br See Webhook | Backlog for more details. + %br + Support the events of issue for now. %p Please append space_id parameter as below. %pre {{endpoint}}?space_id=hogehoge diff --git a/lib/hooks/backlog/helper.rb b/lib/hooks/backlog/helper.rb index d3a1216..e95529f 100644 --- a/lib/hooks/backlog/helper.rb +++ b/lib/hooks/backlog/helper.rb @@ -23,30 +23,21 @@ def backlog_url_base "https://#{space_id}.backlog.jp/view/" if space_id end - def backlog_url - if backlog_url_base && payload.content.key_id && payload.content.summary - url = "#{backlog_url_base}#{project_key_id}" - url += "#comment-#{payload.content.comment.id}" if payload.content.comment.try(:id) - end - url - end + def issue_link(summary, key_id, comment=nil) + issue_key = "#{payload.project.projectKey}-#{key_id}" if key_id - def backlog_urls - urls = [] - if backlog_url_base && payload.content.link - payload.content.link.each do |link| - urls << "#{backlog_url_base}#{payload.project.projectKey}-#{link.key_id}" if link.key_id - end + if backlog_url_base && issue_key + url = "#{backlog_url_base}#{issue_key}" + url += "#comment-#{comment.id}" if comment.try(:id) + + anker = render_as_haml("%a{href: url}= summary", url: url, summary: summary) if summary end - urls - end - def project_key_id - "#{payload.project.projectKey}-#{payload.content.key_id}" if payload.content.key_id + anker || summary || issue_key end - def summary - payload.content.summary || project_key_id + def render_as_haml(haml, locals) + Haml::Engine.new(haml, escape_html: true).render(self, locals) end def hbr(source) diff --git a/lib/hooks/backlog/templates/issue.html.haml b/lib/hooks/backlog/templates/issue.html.haml index 9e6782c..5d029aa 100644 --- a/lib/hooks/backlog/templates/issue.html.haml +++ b/lib/hooks/backlog/templates/issue.html.haml @@ -1,16 +1,11 @@ %p - - if backlog_url && summary - %a{href: backlog_url}= summary - - else - = summary - + = issue_link payload.content.summary, payload.content.key_id, payload.content.comment #{type_label} by #{payload.createdUser.name}. - - if backlog_urls.size > 1 + - if payload.content.link %ul - - backlog_urls.each do |url| - %li - %a{href: url}= url + - payload.content.link.each do |link| + %li= issue_link link.title, link.key_id - if payload.type == 1 %p=hbr payload.content.description diff --git a/spec/backlog_spec.rb b/spec/backlog_spec.rb index 78d18e1..d71314a 100644 --- a/spec/backlog_spec.rb +++ b/spec/backlog_spec.rb @@ -105,8 +105,8 @@ its([:format]) { should eq(:html) } end - context 'on issue multipul update' do - let(:payload_type) { 'issue_multipul_update' } + context 'on issue multiple update' do + let(:payload_type) { 'issue_multiple_update' } before do post payload, {'Content-Type' => 'application/json'}, {space_id: 'test'} @@ -117,12 +117,8 @@ multiple issues updated by ozamasa.

HTML diff --git a/spec/fixtures/payload/backlog/issue_multipul_update.json b/spec/fixtures/payload/backlog/issue_multiple_update.json similarity index 100% rename from spec/fixtures/payload/backlog/issue_multipul_update.json rename to spec/fixtures/payload/backlog/issue_multiple_update.json