ruboty-jira 0.1.0 → 0.2.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 +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +44 -0
- data/.travis.yml +1 -0
- data/Guardfile +38 -0
- data/Rakefile +3 -3
- data/bin/console +3 -3
- data/lib/ruboty/handlers/jira.rb +40 -13
- data/lib/ruboty/jira.rb +10 -9
- data/lib/ruboty/jira/actions/associate_project.rb +37 -0
- data/lib/ruboty/jira/actions/associate_user.rb +32 -0
- data/lib/ruboty/jira/actions/base.rb +48 -27
- data/lib/ruboty/jira/actions/comment.rb +1 -0
- data/lib/ruboty/jira/actions/create_issue.rb +53 -0
- data/lib/ruboty/jira/actions/issue_detail.rb +1 -0
- data/lib/ruboty/jira/version.rb +1 -1
- data/ruboty-jira.gemspec +20 -13
- metadata +106 -5
- data/lib/ruboty/jira/actions/issue.rb +0 -18
- data/lib/ruboty/jira/actions/set_project.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a3243d52cce5fabd30b55d8cce5d09e9ed647b2
|
4
|
+
data.tar.gz: c6b02ff8fb29afc3afd054f2453004f9b82711e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1f3ad5d5aed5c7ada06908b737fd7012066a3f6c5ff3b05752c971a1820f41b69de83c0d61ddd927ef4634d65e43430a5935680acdbcea1b40e4cd274f85f85
|
7
|
+
data.tar.gz: 59476bc2fd010dcd504a4a6c328627bfbcf7b5dd4ab179df14644b0b3de31387b0e1b092a07b549850a00b7dce3f2b1dd02d027256c85835965001b04cb5aa35
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- 'vendor/**/*'
|
4
|
+
- 'spec/fixtures/**/*'
|
5
|
+
- 'tmp/**/*'
|
6
|
+
- 'templates/**/*'
|
7
|
+
##################### Metrics ##################################
|
8
|
+
|
9
|
+
Metrics/MethodLength:
|
10
|
+
Max: 30
|
11
|
+
|
12
|
+
Metrics/LineLength:
|
13
|
+
Max: 130
|
14
|
+
|
15
|
+
Metrics/ClassLength:
|
16
|
+
CountComments: false
|
17
|
+
Max: 150
|
18
|
+
|
19
|
+
Metrics/LineLength:
|
20
|
+
Max: 150
|
21
|
+
|
22
|
+
##################### Style ##################################
|
23
|
+
|
24
|
+
# Use nested module/class definitions instead of compact style.
|
25
|
+
# NG: module Gem::Search
|
26
|
+
Style/ClassAndModuleChildren:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
Style/AsciiComments:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
Style/Documentation:
|
33
|
+
Enabled: false
|
34
|
+
|
35
|
+
Style/DotPosition:
|
36
|
+
EnforcedStyle: trailing
|
37
|
+
|
38
|
+
Style/FrozenStringLiteralComment:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
Metrics/BlockLength:
|
42
|
+
Exclude:
|
43
|
+
- 'rounders.gemspec'
|
44
|
+
- 'spec/**/*'
|
data/.travis.yml
CHANGED
data/Guardfile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec features) \
|
6
|
+
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
7
|
+
|
8
|
+
## Note: if you are using the `directories` clause above and you are not
|
9
|
+
## watching the project directory ('.'), then you will want to move
|
10
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
11
|
+
#
|
12
|
+
# $ mkdir config
|
13
|
+
# $ mv Guardfile config/
|
14
|
+
# $ ln -s config/Guardfile .
|
15
|
+
#
|
16
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
17
|
+
|
18
|
+
# Note: The cmd option is now required due to the increasing number of ways
|
19
|
+
# rspec may be run, below are examples of the most common uses.
|
20
|
+
# * bundler: 'bundle exec rspec'
|
21
|
+
# * bundler binstubs: 'bin/rspec'
|
22
|
+
# * spring: 'bin/rspec' (This will use spring if running and you have
|
23
|
+
# installed the spring binstubs per the docs)
|
24
|
+
# * zeus: 'zeus rspec' (requires the server to be started separately)
|
25
|
+
# * 'just' rspec: 'rspec'
|
26
|
+
|
27
|
+
group :red_green_refactor do
|
28
|
+
guard :rubocop, all_on_start: false, cli: ['--format', 'clang', '-D'] do
|
29
|
+
watch(/.+\.rb$/)
|
30
|
+
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
31
|
+
end
|
32
|
+
|
33
|
+
guard :rspec, cmd: 'bundle exec rspec --color --format documentation' do
|
34
|
+
watch(%r{^spec/.+_spec\.rb$})
|
35
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
36
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
37
|
+
end
|
38
|
+
end
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'ruboty/jira'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +10,5 @@ require "ruboty/jira"
|
|
10
10
|
# require "pry"
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'irb'
|
14
14
|
IRB.start
|
data/lib/ruboty/handlers/jira.rb
CHANGED
@@ -2,19 +2,38 @@ module Ruboty
|
|
2
2
|
module Handlers
|
3
3
|
# Ruboty jira client
|
4
4
|
class Jira < Base
|
5
|
-
on
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
on
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
on(/jira project associate ?(?<project>.+)\z/,
|
6
|
+
name: 'associate_project',
|
7
|
+
description: 'Associate this channel with jira project')
|
8
|
+
|
9
|
+
on(/jira details ?(?<issue>.+)/,
|
10
|
+
name: 'issue_detail',
|
11
|
+
description: 'issue')
|
12
|
+
|
13
|
+
on(/jira comment ?(?<issue>.+) ?(?<comment>.+) /,
|
14
|
+
name: 'comment',
|
15
|
+
description: 'comment to issue')
|
16
|
+
|
17
|
+
on(%r{#{ENV['JIRA_URL']}\/browse\/?(?<issue>.+)},
|
18
|
+
all: true, name: 'issue_detail',
|
19
|
+
description: 'comment to issue')
|
20
|
+
|
21
|
+
on(/jira user #(?<jira_id>.+) is @(?<chat_name>.+)/,
|
22
|
+
name: 'associate_user',
|
23
|
+
description: 'Associate jira_id with chat_name')
|
24
|
+
|
25
|
+
on(/jira create (?<issue_type>\S+) (?<summary>\S+) ?(?<subject>.*)/,
|
26
|
+
name: 'create_issue',
|
27
|
+
description: 'Create issue to Jira project')
|
28
|
+
|
29
|
+
env :JIRA_URL, 'https://jira-domain.com:9090'
|
30
|
+
env :JIRA_PASSWORD, 'jira password'
|
31
|
+
env :JIRA_USERNAME, 'jira username'
|
32
|
+
env :JIRA_CONTEXT_PATH, 'jira context path', optional: true
|
33
|
+
env :JIRA_USE_SSL, 'jira context path', optional: true
|
34
|
+
|
35
|
+
def associate_project(message)
|
36
|
+
Ruboty::Jira::Actions::AssociateProject.new(message).call
|
18
37
|
end
|
19
38
|
|
20
39
|
def issue(message)
|
@@ -28,6 +47,14 @@ module Ruboty
|
|
28
47
|
def comment(message)
|
29
48
|
Ruboty::Jira::Actions::Comment.new(message).call
|
30
49
|
end
|
50
|
+
|
51
|
+
def create_issue(message)
|
52
|
+
Ruboty::Jira::Actions::CreateIssue.new(message).call
|
53
|
+
end
|
54
|
+
|
55
|
+
def associate_user(message)
|
56
|
+
Ruboty::Jira::Actions::AssociateUser.new(message).call
|
57
|
+
end
|
31
58
|
end
|
32
59
|
end
|
33
60
|
end
|
data/lib/ruboty/jira.rb
CHANGED
@@ -1,15 +1,16 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'jira-ruby'
|
2
|
+
require 'ruboty/jira/version'
|
3
|
+
require 'ruboty/handlers/jira'
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
5
|
+
require 'ruboty/jira/actions/base'
|
6
|
+
require 'ruboty/jira/actions/comment'
|
7
|
+
require 'ruboty/jira/actions/issue_detail'
|
8
|
+
require 'ruboty/jira/actions/create_issue'
|
9
|
+
require 'ruboty/jira/actions/associate_project'
|
10
|
+
require 'ruboty/jira/actions/associate_user'
|
10
11
|
|
11
12
|
module Ruboty
|
12
13
|
module Jira
|
13
|
-
NAME_SPACE = 'ruboty-jira'
|
14
|
+
NAME_SPACE = 'ruboty-jira'.freeze
|
14
15
|
end
|
15
16
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Ruboty
|
2
|
+
module Jira
|
3
|
+
module Actions
|
4
|
+
class AssociateProject < Base
|
5
|
+
def call
|
6
|
+
associate_project
|
7
|
+
replay_message
|
8
|
+
rescue => e
|
9
|
+
message.reply(e.message)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def associate_project
|
15
|
+
project = find_project(project_key)
|
16
|
+
return if project.nil?
|
17
|
+
|
18
|
+
projects[message.to] = {
|
19
|
+
id: project.id
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def project_key
|
24
|
+
message[:project]
|
25
|
+
end
|
26
|
+
|
27
|
+
def replay_message
|
28
|
+
if associate_project.nil?
|
29
|
+
message.reply('The jira project is not found.')
|
30
|
+
else
|
31
|
+
message.reply('Registered.')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Ruboty
|
2
|
+
module Jira
|
3
|
+
module Actions
|
4
|
+
class AssociateUser < Base
|
5
|
+
def call
|
6
|
+
associate
|
7
|
+
reply_message
|
8
|
+
rescue => e
|
9
|
+
message.reply(e.message)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def associate
|
15
|
+
user = find_user(message[:jira_id])
|
16
|
+
return if user.nil?
|
17
|
+
users[message[:chat_name]] = {
|
18
|
+
name: user.name
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def reply_message
|
23
|
+
if associate_user.nil?
|
24
|
+
message.reply("The jira account #{message[:jira_id]} is not found")
|
25
|
+
else
|
26
|
+
message.reply('Registered.')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -4,62 +4,83 @@ module Ruboty
|
|
4
4
|
class Base < Ruboty::Actions::Base
|
5
5
|
def client
|
6
6
|
JIRA::Client.new(
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
username: jira_username,
|
8
|
+
password: jira_password,
|
9
|
+
site: jira_site,
|
10
|
+
context_path: jira_context,
|
11
|
+
auth_type: :basic,
|
12
|
+
use_ssl: use_ssl
|
13
13
|
)
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
|
18
|
-
rescue
|
19
|
-
log.error('JIRA HTTPError')
|
20
|
-
nil
|
16
|
+
def jira_username
|
17
|
+
ENV['JIRA_USERNAME']
|
21
18
|
end
|
22
19
|
|
23
|
-
def
|
24
|
-
ENV[
|
20
|
+
def jira_password
|
21
|
+
ENV['JIRA_PASSWORD']
|
25
22
|
end
|
26
23
|
|
27
|
-
def
|
28
|
-
ENV[
|
24
|
+
def jira_site
|
25
|
+
ENV['JIRA_URL']
|
29
26
|
end
|
30
27
|
|
31
|
-
def
|
32
|
-
ENV[
|
33
|
-
end
|
34
|
-
|
35
|
-
def context
|
36
|
-
ENV["JIRA_CONTEXT_PATH"] || ''
|
28
|
+
def jira_context
|
29
|
+
ENV['JIRA_CONTEXT_PATH'] || ''
|
37
30
|
end
|
38
31
|
|
39
32
|
def use_ssl
|
40
|
-
ENV[
|
33
|
+
value = ENV['JIRA_USE_SSL']
|
34
|
+
return value unless value.nil?
|
35
|
+
true
|
41
36
|
end
|
42
37
|
|
43
38
|
def memory
|
44
39
|
message.robot.brain.data[Ruboty::Jira::NAME_SPACE] ||= {}
|
45
40
|
end
|
46
41
|
|
42
|
+
def users
|
43
|
+
memory['USERS'] ||= {}
|
44
|
+
end
|
45
|
+
|
46
|
+
def projects
|
47
|
+
memory['PROJECTS'] ||= {}
|
48
|
+
end
|
49
|
+
|
50
|
+
def associate_user
|
51
|
+
user = users[message.from_name]
|
52
|
+
return if user.nil?
|
53
|
+
user
|
54
|
+
end
|
55
|
+
|
56
|
+
def associate_project
|
57
|
+
project = projects[message.to]
|
58
|
+
return if project.nil?
|
59
|
+
project
|
60
|
+
end
|
61
|
+
|
47
62
|
def find_project(key)
|
48
63
|
client.Project.find(key)
|
49
64
|
rescue => e
|
50
65
|
Ruboty.logger.error e
|
51
|
-
Ruboty.logger.info('JIRA HTTPError')
|
52
66
|
nil
|
53
67
|
end
|
54
68
|
|
55
|
-
def find_issue(key
|
69
|
+
def find_issue(key)
|
56
70
|
client.Issue.find(key)
|
57
|
-
rescue
|
58
|
-
|
71
|
+
rescue => e
|
72
|
+
Ruboty.logger.error e
|
73
|
+
nil
|
74
|
+
end
|
75
|
+
|
76
|
+
def find_user(key)
|
77
|
+
client.User.find(key)
|
78
|
+
rescue => e
|
79
|
+
Ruboty.logger.error e
|
59
80
|
nil
|
60
81
|
end
|
61
82
|
|
62
|
-
def
|
83
|
+
def query_issue(jql)
|
63
84
|
client.Issue.jql(jql)
|
64
85
|
end
|
65
86
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Ruboty
|
2
|
+
module Jira
|
3
|
+
module Actions
|
4
|
+
class CreateIssue < Base
|
5
|
+
def call
|
6
|
+
return unless valid_project
|
7
|
+
return unless valid_user
|
8
|
+
issue = create_issue
|
9
|
+
message.reply <<"EOF"
|
10
|
+
Create issue
|
11
|
+
#{jira_site}#{jira_context}/browse/#{issue.key}
|
12
|
+
EOF
|
13
|
+
rescue => e
|
14
|
+
message.reply(e.message)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def valid_project
|
20
|
+
return true unless associate_project.nil?
|
21
|
+
message.reply <<ERROR
|
22
|
+
Please associate this channel with the jira project
|
23
|
+
ex: @Botname jira project associate <project_name>
|
24
|
+
ERROR
|
25
|
+
false
|
26
|
+
end
|
27
|
+
|
28
|
+
def valid_user
|
29
|
+
return true unless associate_user.nil?
|
30
|
+
message.reply <<ERROR
|
31
|
+
Please associate chat name with the jira account
|
32
|
+
ex: @Botname jira user #<jira_user_name> is @<chat_name>
|
33
|
+
ERROR
|
34
|
+
false
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_issue
|
38
|
+
issue = client.Issue.build
|
39
|
+
issue.save(
|
40
|
+
fields: {
|
41
|
+
project: { id: associate_project[:id] },
|
42
|
+
reporter: associate_user,
|
43
|
+
summary: message[:summary],
|
44
|
+
issuetype: { name: message[:issue_type] }
|
45
|
+
}
|
46
|
+
)
|
47
|
+
issue.fetch
|
48
|
+
issue
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/ruboty/jira/version.rb
CHANGED
data/ruboty-jira.gemspec
CHANGED
@@ -4,25 +4,32 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'ruboty/jira/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'ruboty-jira'
|
8
8
|
spec.version = Ruboty::Jira::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Akira Takahashi']
|
10
|
+
spec.email = ['rike422@gmail.com']
|
11
11
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
12
|
+
spec.summary = 'Ruboty jira client'
|
13
|
+
spec.description = 'Ruboty jira client'
|
14
|
+
spec.homepage = 'https://github.com/rike422/ruboty-jira'
|
15
|
+
spec.license = 'MIT'
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
18
|
f.match(%r{^(test|spec|features)/})
|
19
19
|
end
|
20
|
-
spec.bindir =
|
20
|
+
spec.bindir = 'exe'
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
-
spec.require_paths = [
|
22
|
+
spec.require_paths = ['lib']
|
23
23
|
|
24
|
-
spec.
|
25
|
-
spec.
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
24
|
+
spec.add_runtime_dependency 'ruboty'
|
25
|
+
spec.add_dependency 'jira-ruby', '~> 1.2.0'
|
26
|
+
spec.add_development_dependency 'bundler'
|
27
|
+
spec.add_development_dependency 'rake'
|
28
|
+
spec.add_development_dependency 'rspec'
|
29
|
+
spec.add_development_dependency 'simplecov'
|
30
|
+
spec.add_development_dependency 'coveralls'
|
31
|
+
spec.add_development_dependency 'codeclimate-test-reporter'
|
32
|
+
spec.add_development_dependency 'guard'
|
33
|
+
spec.add_development_dependency 'guard-rspec'
|
34
|
+
spec.add_development_dependency 'guard-rubocop'
|
28
35
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruboty-jira
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Takahashi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ruboty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: jira-ruby
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,90 @@ dependencies:
|
|
66
80
|
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
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: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: codeclimate-test-reporter
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: guard-rspec
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: guard-rubocop
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
69
167
|
description: Ruboty jira client
|
70
168
|
email:
|
71
169
|
- rike422@gmail.com
|
@@ -75,9 +173,11 @@ extra_rdoc_files: []
|
|
75
173
|
files:
|
76
174
|
- ".gitignore"
|
77
175
|
- ".rspec"
|
176
|
+
- ".rubocop.yml"
|
78
177
|
- ".travis.yml"
|
79
178
|
- CODE_OF_CONDUCT.md
|
80
179
|
- Gemfile
|
180
|
+
- Guardfile
|
81
181
|
- LICENSE.txt
|
82
182
|
- README.md
|
83
183
|
- Rakefile
|
@@ -85,11 +185,12 @@ files:
|
|
85
185
|
- bin/setup
|
86
186
|
- lib/ruboty/handlers/jira.rb
|
87
187
|
- lib/ruboty/jira.rb
|
188
|
+
- lib/ruboty/jira/actions/associate_project.rb
|
189
|
+
- lib/ruboty/jira/actions/associate_user.rb
|
88
190
|
- lib/ruboty/jira/actions/base.rb
|
89
191
|
- lib/ruboty/jira/actions/comment.rb
|
90
|
-
- lib/ruboty/jira/actions/
|
192
|
+
- lib/ruboty/jira/actions/create_issue.rb
|
91
193
|
- lib/ruboty/jira/actions/issue_detail.rb
|
92
|
-
- lib/ruboty/jira/actions/set_project.rb
|
93
194
|
- lib/ruboty/jira/version.rb
|
94
195
|
- ruboty-jira.gemspec
|
95
196
|
homepage: https://github.com/rike422/ruboty-jira
|
@@ -112,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
213
|
version: '0'
|
113
214
|
requirements: []
|
114
215
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.
|
216
|
+
rubygems_version: 2.6.6
|
116
217
|
signing_key:
|
117
218
|
specification_version: 4
|
118
219
|
summary: Ruboty jira client
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module Ruboty
|
2
|
-
module Jira
|
3
|
-
module Actions
|
4
|
-
class SetProject < Base
|
5
|
-
attr_reader :project
|
6
|
-
|
7
|
-
def call
|
8
|
-
set_project
|
9
|
-
message.reply(replay_message)
|
10
|
-
rescue => e
|
11
|
-
message.reply(e.message)
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
def set_project
|
16
|
-
@project = find_project(project_key)
|
17
|
-
memory[message.to] = project.id unless project.nil?
|
18
|
-
end
|
19
|
-
|
20
|
-
def project_key
|
21
|
-
message[:project]
|
22
|
-
end
|
23
|
-
|
24
|
-
def replay_message
|
25
|
-
if project.nil?
|
26
|
-
"#{project_key}"
|
27
|
-
else
|
28
|
-
"set to #{project.id} is #{message.to || 'default'}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|