jira-cli 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: 1899da7c2bc62844806201e66ec6efa76ae7aa2a
4
+ data.tar.gz: 7640f9a343f471738008aa88b4a1ada6b61ece5f
5
+ SHA512:
6
+ metadata.gz: f1bb34acfcca4560898e0632de7d0c4ffc3dfcd096c13cdc2b80e758755d8c23813c4100f801323ed231cbeddef8dc847828eff065a879f7ae1b0ecae9fa47c2
7
+ data.tar.gz: 6c57048f99459abbac3f8185e4d022345d1ec799e4f544705bfe2a8c798d4d14cd102aea6bba0176cfb10556c9cf7c1c4e76008599327193883c7c47721df19d
@@ -0,0 +1,4 @@
1
+ jira-cli
2
+ ========
3
+
4
+ Ruby gem CLI tool used to manage JIRA workflows leveraging git
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'jira'
4
+
5
+ Jira::CLI.start
@@ -0,0 +1,13 @@
1
+ require 'thor'
2
+ require 'fileutils'
3
+ require 'jira/constants'
4
+ require 'jira/mixins'
5
+ require 'jira/version'
6
+ require 'jira/install'
7
+ require 'jira/lookup'
8
+
9
+ module Jira
10
+ class CLI < Thor
11
+
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module Jira
2
+
3
+ VERSION = "0.0.1"
4
+
5
+ end
@@ -0,0 +1,29 @@
1
+ #
2
+ # Installation Script
3
+ #
4
+
5
+ module Jira
6
+ class CLI < Thor
7
+
8
+ desc "install", "Guides the user through JIRA installation"
9
+ def install
10
+ say self.jira_url_path
11
+ say self.jira_auth_path
12
+
13
+ create_file self.jira_url_path, nil, verbose:false do
14
+ self.cli.ask("Enter your JIRA URL: ")
15
+ end
16
+
17
+ create_file self.jira_auth_path, nil, verbose:false do
18
+ username = self.cli.ask("Enter your JIRA username: ")
19
+ password = self.cli.ask("Enter your JIRA password: ") do |q|
20
+ q.echo = false
21
+ end
22
+ "#{username}:#{password}"
23
+ end
24
+
25
+ self.discard_memoized
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,80 @@
1
+ module Jira
2
+ class CLI < Thor
3
+
4
+ desc "summarize", "Outputs the summary of the input ticket"
5
+ def summarize(ticket=nil)
6
+ ticket ||= ex('git rev-parse --abbrev-ref HEAD')
7
+ json = self.query("issue/#{ticket}")
8
+ summary = json['fields']['summary']
9
+ status = json['fields']['status']['name']
10
+ self.mutex.synchronize do
11
+ say "#{self.colored_ticket(ticket)} "\
12
+ "#{self.colored_status(status).center(26)} "\
13
+ "#{self.colored_summary(summary)}"
14
+ end
15
+ end
16
+
17
+ desc "all", "Summarizes all tickets that have local branches"
18
+ def all
19
+ tickets = []
20
+ branches = ex("git branch").delete("*").split("\n")
21
+ branches.each do |branch|
22
+ stripped = branch.strip
23
+ if !!stripped[/^[a-zA-Z]+-[0-9]+$/]
24
+ tickets << stripped
25
+ end
26
+ end
27
+
28
+ threads = []
29
+ tickets.each do |ticket|
30
+ threads << Thread.new{ self.summarize(ticket) }
31
+ end
32
+ threads.each{ |thread| thread.join }
33
+ end
34
+
35
+ protected
36
+
37
+ def colored_ticket(ticket)
38
+ "("\
39
+ "#{Thor::Shell::Color::RED}"\
40
+ "#{ticket}"\
41
+ "#{Thor::Shell::Color::CLEAR}"\
42
+ ")"
43
+ end
44
+
45
+ def colored_status(status)
46
+ "["\
47
+ "#{Thor::Shell::Color::BLUE}"\
48
+ "#{status}"\
49
+ "#{Thor::Shell::Color::CLEAR}"\
50
+ "]"
51
+ end
52
+
53
+ def colored_summary(summary)
54
+ "#{Thor::Shell::Color::BOLD}"\
55
+ "#{Thor::Shell::Color::WHITE}"\
56
+ "#{summary}"\
57
+ "#{Thor::Shell::Color::CLEAR}"
58
+ end
59
+
60
+ def query(path)
61
+ response = self.client.get "#{self.jira_url}/rest/api/2/#{path}"
62
+ return JSON.parse(response.body)
63
+ end
64
+
65
+ def mutex
66
+ @mutex ||= Mutex.new
67
+ end
68
+
69
+ def client
70
+ self.mutex.synchronize do
71
+ return @client if !@client.nil?
72
+ @client = Faraday.new
73
+ username, password = self.jira_auth
74
+ @client.basic_auth(username, password)
75
+ return @client
76
+ end
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,88 @@
1
+ module Jira
2
+ class CLI < Thor
3
+
4
+ require 'highline/import'
5
+ require 'json'
6
+ require 'faraday'
7
+ include Thor::Actions
8
+ include Thor::Shell
9
+
10
+ protected
11
+
12
+ #
13
+ # @return [String] JIRA endpoint
14
+ #
15
+ def jira_url
16
+ return @jira_url if !@jira_url.nil?
17
+ path = self.jira_url_path
18
+ self.validate_path!(path)
19
+ @jira_url ||= File.read(path).strip
20
+ end
21
+
22
+ #
23
+ # @return [String] JIRA authorization
24
+ #
25
+ # @return [String] username
26
+ # @return [String] password
27
+ #
28
+ def jira_auth
29
+ if !@username.nil? && !@password.nil?
30
+ return @username, @password
31
+ end
32
+ path = self.jira_auth_path
33
+ self.validate_path!(path)
34
+ @username, @password = File.read(path).strip.split(':')
35
+ return @username, @password
36
+ end
37
+
38
+ #
39
+ # @return [String] path to .jira-url file
40
+ #
41
+ def jira_url_path
42
+ @url_path ||= self.root_path + "/.jira-url"
43
+ end
44
+
45
+ #
46
+ # @return [String] path to .jira-auth file
47
+ #
48
+ def jira_auth_path
49
+ @auth_path ||= self.root_path + "/.jira-auth"
50
+ end
51
+
52
+ #
53
+ # @return [String] path to root git directory
54
+ #
55
+ def root_path
56
+ @root_path ||= ex "git rev-parse --show-toplevel"
57
+ end
58
+
59
+ #
60
+ # @return [Highline] HighLine instance for handling input
61
+ #
62
+ def cli
63
+ @highline ||= ::HighLine.new
64
+ end
65
+
66
+ #
67
+ # Execute shell command
68
+ #
69
+ # @param command [String] command to run
70
+ # @return [String] output of the run command
71
+ #
72
+ def ex(command)
73
+ run(command, verbose:false, capture:true).strip
74
+ end
75
+
76
+ def validate_path!(path)
77
+ if !File.exists?(path)
78
+ say "Please run `jira install` before running this action..."
79
+ abort
80
+ end
81
+ end
82
+
83
+ def discard_memozied
84
+ @jira_url = nil
85
+ end
86
+
87
+ end
88
+ end
@@ -0,0 +1,10 @@
1
+ module Jira
2
+ class CLI < Thor
3
+
4
+ desc "version", "Displays the version"
5
+ def version
6
+ say "jira #{Jira::VERSION}"
7
+ end
8
+
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jira-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Darren Lin Cheng
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: highline
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.6.20
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.6.20
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.8.8
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.8.8
55
+ description: CLI used to manage JIRA workflows leveraging git
56
+ email: darren@thanx.com
57
+ executables:
58
+ - jira
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - bin/jira
63
+ - lib/jira/constants.rb
64
+ - lib/jira/install.rb
65
+ - lib/jira/lookup.rb
66
+ - lib/jira/mixins.rb
67
+ - lib/jira/version.rb
68
+ - lib/jira.rb
69
+ - README.md
70
+ homepage: http://rubygems.org/gems/jira-cli
71
+ licenses:
72
+ - MIT
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 2.1.4
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: JIRA CLI
94
+ test_files: []
95
+ has_rdoc: