redmine-mattermost 0.3 → 0.4.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -0
  3. data/LICENSE +1 -0
  4. data/README.md +30 -17
  5. data/Rakefile +9 -0
  6. data/app/views/settings/_mattermost_settings.html.erb +60 -20
  7. data/lib/redmine-mattermost.rb +9 -1
  8. data/lib/redmine_mattermost/bridge.rb +63 -0
  9. data/lib/redmine_mattermost/client.rb +28 -0
  10. data/lib/redmine_mattermost/extractors.rb +88 -0
  11. data/lib/redmine_mattermost/extractors/applied_changeset.rb +55 -0
  12. data/lib/redmine_mattermost/extractors/changed_wiki_page.rb +39 -0
  13. data/lib/redmine_mattermost/extractors/new_issue.rb +44 -0
  14. data/lib/redmine_mattermost/extractors/updated_issue.rb +42 -0
  15. data/lib/redmine_mattermost/infos.rb +1 -2
  16. data/lib/redmine_mattermost/issue_patch.rb +14 -14
  17. data/lib/redmine_mattermost/listener.rb +38 -268
  18. data/lib/redmine_mattermost/message_builder.rb +61 -0
  19. data/lib/redmine_mattermost/redmine_plugin.rb +3 -4
  20. data/lib/redmine_mattermost/utils.rb +3 -0
  21. data/lib/redmine_mattermost/utils/journal_mapper.rb +75 -0
  22. data/lib/redmine_mattermost/utils/text.rb +37 -0
  23. data/lib/redmine_mattermost/utils/urls.rb +20 -0
  24. data/lib/redmine_mattermost/version.rb +1 -1
  25. data/redmine-mattermost.gemspec +4 -1
  26. data/spec/client_spec.rb +29 -0
  27. data/spec/extractors/applied_changeset_spec.rb +82 -0
  28. data/spec/extractors/changed_wiki_page_spec.rb +63 -0
  29. data/spec/extractors/new_issue_spec.rb +209 -0
  30. data/spec/extractors/updated_issue_spec.rb +169 -0
  31. data/spec/message_builder_spec.rb +71 -0
  32. data/spec/redmine_mattermost_spec.rb +9 -0
  33. data/spec/spec_helper.rb +17 -0
  34. data/spec/support/mock_support.rb +113 -0
  35. data/spec/utils/text_spec.rb +142 -0
  36. data/spec/utils/text_spec_alt.rb +142 -0
  37. metadata +87 -9
@@ -0,0 +1,142 @@
1
+ require "spec_helper"
2
+
3
+ describe RedmineMattermost::Utils::Text do
4
+ subject { Dummy.new(bridge) }
5
+ let(:bridge) { MockBridge.new(settings) }
6
+ let(:settings) { Defaults.settings }
7
+
8
+ describe "h" do
9
+ it "escapes special chars" do
10
+ text = subject.h("some & special <chars>")
11
+ text.must_equal("some &amp; special &lt;chars&gt;")
12
+ end
13
+
14
+ it "handles nil inputs" do
15
+ subject.h(nil).must_be_nil
16
+ end
17
+ end
18
+
19
+ describe "link" do
20
+ it "builds a markdown link" do
21
+ text = subject.link("the < label", "the_target")
22
+ text.must_equal("<the_target|the &lt; label>")
23
+ end
24
+ end
25
+
26
+ describe "to_markdown" do
27
+ it "transforms HTML" do
28
+ input = <<HTML.strip
29
+ <h1>Header1</h1>
30
+ <h2>Header2</h2>
31
+ <p>This is a new comment</p>
32
+ <ul>
33
+ <li>with multiple items</li>
34
+ <li>in a list</li>
35
+ </ul>
36
+
37
+ <p>or a</p>
38
+
39
+ <ol>
40
+ <li>Numbered</li>
41
+ <li>List</li>
42
+ </ol>
43
+
44
+ <p>
45
+ <del>strike</del> <ins>underline</ins> <em>italic</em> <strong>bold</strong>
46
+ </p>
47
+
48
+ <blockquote>
49
+ <p>Block quote</p>
50
+ </blockquote>
51
+
52
+ <p>
53
+ <img src="https://www.example.org/image.png" alt="Example Image">
54
+ </p>
55
+
56
+ <p>
57
+ External link: <a href="https://www.example.org" class="external">ExampleORG</a>
58
+ </p>
59
+
60
+ <pre>
61
+ Some pre-indented text
62
+ in two lines
63
+ </pre>
64
+
65
+ <pre><code class="ruby syntaxhl">
66
+ class Ruby
67
+ end
68
+ </code></pre>
69
+
70
+ HTML
71
+ expected = <<MARKDOWN.strip
72
+ # Header1
73
+
74
+ ## Header2
75
+
76
+ This is a new comment
77
+
78
+ - with multiple items
79
+ - in a list
80
+
81
+ or a
82
+
83
+ 1. Numbered
84
+ 2. List
85
+
86
+ ~~strike~~ underline _italic_ **bold**
87
+
88
+ > Block quote
89
+
90
+ ![Example Image](https://www.example.org/image.png)
91
+
92
+ External link: [ExampleORG](https://www.example.org)
93
+
94
+ ```
95
+ Some pre-indented text
96
+ in two lines
97
+ ```
98
+
99
+ ```
100
+ class Ruby
101
+ end
102
+ ```
103
+ MARKDOWN
104
+ text = subject.to_markdown(input)
105
+ text.must_equal(expected)
106
+ end
107
+
108
+ it "passes already used markdown" do
109
+ settings.text_formatting = "markdown"
110
+ text = subject.to_markdown("> Markdown")
111
+ text.must_equal("> Markdown")
112
+ end
113
+
114
+ it "rescues to escaped test" do
115
+ stub = proc do |formatting, text|
116
+ raise "some error"
117
+ end
118
+ bridge.stub(:to_html, stub) do
119
+ text = subject.to_markdown("<code>")
120
+ text.must_equal("&lt;code&gt;")
121
+ end
122
+ end
123
+ end
124
+
125
+ private
126
+
127
+ class Dummy
128
+ include RedmineMattermost::Utils::Text
129
+
130
+ attr_reader :bridge
131
+
132
+ def initialize(bridge)
133
+ @bridge = bridge
134
+ end
135
+
136
+ # just use the input (assuming the test already)
137
+ # provides valid HTML
138
+ def to_html(formatting, text)
139
+ text
140
+ end
141
+ end
142
+ end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redmine-mattermost
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: 0.4.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AltSol
8
+ - Jonas Thiel
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2016-09-13 00:00:00.000000000 Z
12
+ date: 2016-09-21 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rails
@@ -25,19 +26,19 @@ dependencies:
25
26
  - !ruby/object:Gem::Version
26
27
  version: 4.2.0
27
28
  - !ruby/object:Gem::Dependency
28
- name: httpclient
29
+ name: reverse_markdown
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: 2.8.2
34
+ version: 1.0.3
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: 2.8.2
41
+ version: 1.0.3
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: bundler
43
44
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +67,48 @@ dependencies:
66
67
  - - "~>"
67
68
  - !ruby/object:Gem::Version
68
69
  version: '10.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: minitest
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 5.9.0
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 5.9.0
84
+ - !ruby/object:Gem::Dependency
85
+ name: webmock
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 2.1.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 2.1.0
98
+ - !ruby/object:Gem::Dependency
99
+ name: RedCloth
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: 4.3.2
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: 4.3.2
69
112
  description: Mattermost chat integration
70
113
  email:
71
114
  executables: []
@@ -73,19 +116,43 @@ extensions: []
73
116
  extra_rdoc_files: []
74
117
  files:
75
118
  - ".gitignore"
119
+ - ".travis.yml"
76
120
  - Gemfile
77
121
  - LICENSE
78
122
  - README.md
79
123
  - Rakefile
80
124
  - app/views/settings/_mattermost_settings.html.erb
81
125
  - lib/redmine-mattermost.rb
126
+ - lib/redmine_mattermost/bridge.rb
127
+ - lib/redmine_mattermost/client.rb
82
128
  - lib/redmine_mattermost/engine.rb
129
+ - lib/redmine_mattermost/extractors.rb
130
+ - lib/redmine_mattermost/extractors/applied_changeset.rb
131
+ - lib/redmine_mattermost/extractors/changed_wiki_page.rb
132
+ - lib/redmine_mattermost/extractors/new_issue.rb
133
+ - lib/redmine_mattermost/extractors/updated_issue.rb
83
134
  - lib/redmine_mattermost/infos.rb
84
135
  - lib/redmine_mattermost/issue_patch.rb
85
136
  - lib/redmine_mattermost/listener.rb
137
+ - lib/redmine_mattermost/message_builder.rb
86
138
  - lib/redmine_mattermost/redmine_plugin.rb
139
+ - lib/redmine_mattermost/utils.rb
140
+ - lib/redmine_mattermost/utils/journal_mapper.rb
141
+ - lib/redmine_mattermost/utils/text.rb
142
+ - lib/redmine_mattermost/utils/urls.rb
87
143
  - lib/redmine_mattermost/version.rb
88
144
  - redmine-mattermost.gemspec
145
+ - spec/client_spec.rb
146
+ - spec/extractors/applied_changeset_spec.rb
147
+ - spec/extractors/changed_wiki_page_spec.rb
148
+ - spec/extractors/new_issue_spec.rb
149
+ - spec/extractors/updated_issue_spec.rb
150
+ - spec/message_builder_spec.rb
151
+ - spec/redmine_mattermost_spec.rb
152
+ - spec/spec_helper.rb
153
+ - spec/support/mock_support.rb
154
+ - spec/utils/text_spec.rb
155
+ - spec/utils/text_spec_alt.rb
89
156
  homepage: https://github.com/neopoly/redmine-mattermost
90
157
  licenses:
91
158
  - MIT
@@ -101,13 +168,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
168
  version: '0'
102
169
  required_rubygems_version: !ruby/object:Gem::Requirement
103
170
  requirements:
104
- - - ">="
171
+ - - ">"
105
172
  - !ruby/object:Gem::Version
106
- version: '0'
173
+ version: 1.3.1
107
174
  requirements: []
108
175
  rubyforge_project:
109
- rubygems_version: 2.4.6
176
+ rubygems_version: 2.4.3
110
177
  signing_key:
111
178
  specification_version: 4
112
179
  summary: Mattermost chat integration
113
- test_files: []
180
+ test_files:
181
+ - spec/client_spec.rb
182
+ - spec/extractors/applied_changeset_spec.rb
183
+ - spec/extractors/changed_wiki_page_spec.rb
184
+ - spec/extractors/new_issue_spec.rb
185
+ - spec/extractors/updated_issue_spec.rb
186
+ - spec/message_builder_spec.rb
187
+ - spec/redmine_mattermost_spec.rb
188
+ - spec/spec_helper.rb
189
+ - spec/support/mock_support.rb
190
+ - spec/utils/text_spec.rb
191
+ - spec/utils/text_spec_alt.rb