lita-jira-issues-redux 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 754e2ebb4f9f676b62f1409a20f16fc1e3c1273d
4
+ data.tar.gz: 96bf719e80c7a847760425678dbb055df0ea8108
5
+ SHA512:
6
+ metadata.gz: 710c2ed31e1c757b6f8cf8e075ec3c8478f940d786aff2fbdda3f0d7bebddfc67a3e25197b9417ecdd58238a6f83df6ed7ee05bce6e8ab8ed7c4b45c482b994c
7
+ data.tar.gz: 9bc284db8d1515d8568bc24b3597d2b61f04921bc046f6673df67e8405b3561a538282c5be7a897ea466eb3d79cd934667a8a352783e339c4bc9693798a229e2
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,80 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ lita-rational-change (0.0.3)
5
+ lita (>= 4.3)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ byebug (5.0.0)
11
+ columnize (= 0.9.0)
12
+ coderay (1.1.0)
13
+ columnize (0.9.0)
14
+ diff-lcs (1.2.5)
15
+ faraday (0.9.2)
16
+ multipart-post (>= 1.2, < 3)
17
+ http_router (0.11.2)
18
+ rack (>= 1.0.0)
19
+ url_mount (~> 0.2.1)
20
+ i18n (0.7.0)
21
+ ice_nine (0.11.1)
22
+ lita (4.6.1)
23
+ bundler (>= 1.3)
24
+ faraday (>= 0.8.7)
25
+ http_router (>= 0.11.2)
26
+ i18n (>= 0.6.9)
27
+ ice_nine (>= 0.11.0)
28
+ multi_json (>= 1.7.7)
29
+ puma (>= 2.7.1)
30
+ rack (>= 1.5.2)
31
+ rb-readline (>= 0.5.1)
32
+ redis-namespace (>= 1.3.0)
33
+ thor (>= 0.18.1)
34
+ method_source (0.8.2)
35
+ multi_json (1.11.2)
36
+ multipart-post (2.0.0)
37
+ pry (0.10.2)
38
+ coderay (~> 1.1.0)
39
+ method_source (~> 0.8.1)
40
+ slop (~> 3.4)
41
+ pry-byebug (3.2.0)
42
+ byebug (~> 5.0)
43
+ pry (~> 0.10)
44
+ puma (2.14.0)
45
+ rack (1.6.4)
46
+ rack-test (0.6.3)
47
+ rack (>= 1.0)
48
+ rake (10.4.2)
49
+ rb-readline (0.5.3)
50
+ redis (3.2.1)
51
+ redis-namespace (1.5.2)
52
+ redis (~> 3.0, >= 3.0.4)
53
+ rspec (3.3.0)
54
+ rspec-core (~> 3.3.0)
55
+ rspec-expectations (~> 3.3.0)
56
+ rspec-mocks (~> 3.3.0)
57
+ rspec-core (3.3.2)
58
+ rspec-support (~> 3.3.0)
59
+ rspec-expectations (3.3.1)
60
+ diff-lcs (>= 1.2.0, < 2.0)
61
+ rspec-support (~> 3.3.0)
62
+ rspec-mocks (3.3.2)
63
+ diff-lcs (>= 1.2.0, < 2.0)
64
+ rspec-support (~> 3.3.0)
65
+ rspec-support (3.3.0)
66
+ slop (3.6.0)
67
+ thor (0.19.1)
68
+ url_mount (0.2.1)
69
+ rack
70
+
71
+ PLATFORMS
72
+ ruby
73
+
74
+ DEPENDENCIES
75
+ bundler (~> 1.3)
76
+ lita-rational-change!
77
+ pry-byebug
78
+ rack-test
79
+ rake
80
+ rspec (>= 3.0.0)
@@ -0,0 +1,30 @@
1
+ # lita-jira-issues
2
+
3
+ Watches a channel for JIRA issue mentions and displays a link and helpful information
4
+
5
+ ## Installation
6
+
7
+ Add lita-jira-issues to your Lita instance's Gemfile:
8
+
9
+ ``` ruby
10
+ gem "lita-jira-issues"
11
+ ```
12
+
13
+ ## Configuration
14
+
15
+ Add the following to your lita_config.rb and customize:
16
+ # lita-jira-issues
17
+ config.handlers.jira_issues.username = "<jira user name>"
18
+ config.handlers.jira_issues.password = "<password>"
19
+ config.handlers.jira_issues.site = "http://code.example.com/jira/"
20
+ config.handlers.jira_issues.context_path = ''
21
+ config.handlers.jira_issues.auth_type = 'basic'
22
+ config.handlers.jira_issues.base_url = "http://code.example.com/jira/browse/"
23
+
24
+ ## Usage
25
+
26
+ TODO: Describe the plugin's features and how to use them.
27
+
28
+
29
+ ## Changelog
30
+ 0.0.1 Initial implementation, only links are output for now.
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,27 @@
1
+ class JiraIssue
2
+
3
+ include Mention
4
+
5
+ def initialize(issue_slug, redis_instance)
6
+ @name = issue_slug
7
+ @redis = redis_instance
8
+ end
9
+
10
+ def name
11
+ @name
12
+ end
13
+
14
+ def synopsis
15
+ end
16
+
17
+ def filed_against
18
+ end
19
+
20
+ def priority
21
+ end
22
+
23
+ def url
24
+ Lita.config.handlers.jira_issues.base_url + CGI::escape(@name)
25
+ end
26
+
27
+ end
@@ -0,0 +1,14 @@
1
+ require "lita"
2
+
3
+ Lita.load_locales Dir[File.expand_path(
4
+ File.join("..", "..", "locales", "*.yml"), __FILE__
5
+ )]
6
+
7
+ require "lita/handlers/jira_issues"
8
+ require "mention"
9
+ require "jira_issue"
10
+
11
+ Lita::Handlers::JiraIssues.template_root File.expand_path(
12
+ File.join("..", "..", "templates"),
13
+ __FILE__
14
+ )
@@ -0,0 +1,77 @@
1
+ module Lita
2
+ module Handlers
3
+ class JiraIssues < Handler
4
+
5
+ config :base_url, type: String, required: true
6
+ config :timeout, type: Float, default: 600.0, required: false
7
+
8
+ config :username, type: String, required: true
9
+ config :password, type: String, required: true
10
+ config :site, type: String, required: true
11
+ config :context_path, type: String, required: false
12
+ config :auth_type, type: String, required: true
13
+
14
+
15
+ route %r{([A-Z]{2,}-\d+)}i, :build_issue_link
16
+
17
+ # build a link to ratus1 here
18
+ def build_issue_link(response)
19
+ Lita.logger.warn "triggered "
20
+ # don't respond to own messages -- why does this happen?
21
+ if response.user.name == Lita.config.robot.name
22
+ Lita.logger.warn "received message from myself, ignoring..."
23
+ return
24
+ end
25
+
26
+ visible_issues = load_issues(response.matches.flatten)
27
+ Lita.logger.info("visible_issues count: #{visible_issues.length}")
28
+
29
+ if visible_issues.any?
30
+ case robot.config.robot.adapter
31
+ when :slack
32
+ target = response.message.source.room_object || response.message.source.user
33
+ urls = format_urls_for_slack(visible_issues)
34
+ robot.chat_service.send_attachment(target, build_attachment(urls.join(', ')))
35
+ else
36
+ response.reply(render_template('issue', issue: visible_issues.first, url: visible_issues.first.url))
37
+ end
38
+ visible_issues.map(&:mentioned!)
39
+ end
40
+ end
41
+
42
+ def format_urls_for_slack(issues)
43
+ links = []
44
+ issues.each do |issue|
45
+ links << format_url(issue)
46
+ end
47
+ links
48
+ end
49
+
50
+ def format_url(issue)
51
+ "<#{issue.url}|#{issue.name}>"
52
+ end
53
+
54
+ def load_issues(issue_list)
55
+ links = []
56
+ issue_list.each do |issue|
57
+ jira_issue = JiraIssue.new(issue, redis)
58
+ Lita.logger.info "ISSUE #{jira_issue.name} mention status #{jira_issue.mentioned_recently?}"
59
+ links << jira_issue unless jira_issue.mentioned_recently?
60
+ end
61
+ links
62
+ end
63
+
64
+ # build the attachment object for slack
65
+ def build_attachment(text)
66
+ Lita::Adapters::Slack::Attachment.new(text,
67
+ {
68
+ :color => 'danger',
69
+ :title => 'Recently mentioned defects',
70
+ :thumb_url => 'http://i.imgur.com/Z5HdCsT.png',
71
+ })
72
+ end
73
+ end
74
+
75
+ Lita.register_handler(JiraIssues)
76
+ end
77
+ end
@@ -0,0 +1,21 @@
1
+ require 'redis'
2
+ module Mention
3
+
4
+ def mentioned_recently?
5
+ now = Time.now.utc
6
+ mention = @redis.get(@name)
7
+
8
+ return false unless mention
9
+ mention = Time.parse(mention)
10
+ mention ||= now
11
+
12
+ last_seen = (now - mention)
13
+ Lita.logger.info "#{@name} last mentioned at #{mention}, now #{now}, diff #{last_seen}"
14
+ return last_seen < Lita.config.handlers.jira_issues.timeout
15
+ end
16
+
17
+ def mentioned!
18
+ @redis.set(@name, Time.now.utc)
19
+ end
20
+
21
+ end
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "lita-jira-issues-redux"
3
+ spec.version = "0.0.1"
4
+ spec.authors = ["Jeff Paquette"]
5
+ spec.email = ["jeff@snowmoonsoftware.com"]
6
+ spec.description = "Watches for issue mentions and responds with helpful details and link"
7
+ spec.summary = "Watches for issue mentions and responds with helpful details and link"
8
+ spec.homepage = "https://github.com/snowmoonsoftware/lita-rational-change"
9
+ spec.license = "MIT"
10
+ spec.metadata = { "lita_plugin_type" => "handler" }
11
+
12
+ spec.files = `git ls-files`.split($/)
13
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
14
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
+ spec.require_paths = ["lib"]
16
+
17
+ spec.add_runtime_dependency "lita", "~> 4.3"
18
+ spec.add_runtime_dependency "jira-ruby", "~> 1.2"
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "pry-byebug", "~> 0"
22
+ spec.add_development_dependency "rake", "~> 0"
23
+ spec.add_development_dependency "rack-test", "~> 0"
24
+ spec.add_development_dependency "rspec", '~> 3.0', '>= 3.0.0'
25
+ end
@@ -0,0 +1,4 @@
1
+ en:
2
+ lita:
3
+ handlers:
4
+ rational_change:
@@ -0,0 +1,4 @@
1
+ require "spec_helper"
2
+
3
+ describe Lita::Handlers::RationalChange, lita_handler: true do
4
+ end
@@ -0,0 +1,6 @@
1
+ require "lita-jira-issues"
2
+ require "lita/rspec"
3
+
4
+ # A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
5
+ # was generated with Lita 4, the compatibility mode should be left disabled.
6
+ Lita.version_3_compatibility_mode = false
File without changes
@@ -0,0 +1 @@
1
+ CR <%= @cr %> can be viewed at <%= @url %>
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lita-jira-issues-redux
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jeff Paquette
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: lita
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: jira-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack-test
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 3.0.0
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '3.0'
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 3.0.0
117
+ description: Watches for issue mentions and responds with helpful details and link
118
+ email:
119
+ - jeff@snowmoonsoftware.com
120
+ executables: []
121
+ extensions: []
122
+ extra_rdoc_files: []
123
+ files:
124
+ - Gemfile
125
+ - Gemfile.lock
126
+ - README.md
127
+ - Rakefile
128
+ - lib/jira_issue.rb
129
+ - lib/lita-jira-issues.rb
130
+ - lib/lita/handlers/jira_issues.rb
131
+ - lib/mention.rb
132
+ - lita-jira-issues.gemspec
133
+ - locales/en.yml
134
+ - spec/lita/handlers/rational_change_spec.rb
135
+ - spec/spec_helper.rb
136
+ - templates/.gitkeep
137
+ - templates/cr.erb
138
+ homepage: https://github.com/snowmoonsoftware/lita-rational-change
139
+ licenses:
140
+ - MIT
141
+ metadata:
142
+ lita_plugin_type: handler
143
+ post_install_message:
144
+ rdoc_options: []
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ requirements: []
158
+ rubyforge_project:
159
+ rubygems_version: 2.4.3
160
+ signing_key:
161
+ specification_version: 4
162
+ summary: Watches for issue mentions and responds with helpful details and link
163
+ test_files:
164
+ - spec/lita/handlers/rational_change_spec.rb
165
+ - spec/spec_helper.rb