gitgut 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 94dc47b7fdf0914947313f8a19c3c14e3b79c2f2
4
+ data.tar.gz: cdc09a9fbb53282f8888e20c7f113dc8828115aa
5
+ SHA512:
6
+ metadata.gz: ffa8a129a1fbf84d70f0e695143e8076697ab9d20f6de3ae89f4836e8c915b8681d2cc26f44d687e385c24f647d231c66bdf54d9cac71bfab95b439c7e591e41
7
+ data.tar.gz: 3a2dc0fe09932f8f6eadd34211ae404ceeccbeec2cbb17927fff1aaef212902f3ddf4c6264b9805a3595d79e4322b059048c1c0da43ab68e894a12cb1e5fdcb3
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /vendor/
11
+ *.swp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gitgut.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Benoit Dinocourt
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # Gitgut
2
+
3
+ Display PR and JIRA tickets info about the branches that are currently checked out on your git repository.
4
+
5
+ ## Disclaimer
6
+
7
+ This gem is tailored for the JobTeaser.com development workflow and is probably not suited for anything else at this time.
8
+
9
+ Use only for inspiration purpose.
10
+
11
+ ## Expected features
12
+
13
+ * Show how many commits are not merged in staging/develop
14
+ * Show all commits for the branch only
15
+ * Allow to checkout a branch from the jira number
16
+ * Show if branch has one or more PR and the state of the PR
17
+ * Categorize branches by JIRA/NO JIRA, developer/reviewer, JIRA status
18
+ * Automatically delete branches that are merged in develop
19
+ * Display time retrieving various info
20
+
21
+ ## Installation
22
+
23
+ Add this line to your application's Gemfile:
24
+
25
+ ```ruby
26
+ gem 'gitgut'
27
+ ```
28
+
29
+ And then execute:
30
+
31
+ $ bundle
32
+
33
+ Or install it yourself as:
34
+
35
+ $ gem install gitgut
36
+
37
+ ## Usage
38
+
39
+ Add a .gitgut file to the working directory of your application
40
+
41
+ # .gitgut
42
+ jira:
43
+ username: first_name.last_name
44
+ password: 'p@$$W0rd'
45
+ endpoint: https://[companyname].atlassian.net/rest/api/2/search
46
+
47
+ github:
48
+ login: username
49
+ password: 'p@$$W0rd'
50
+ repo:
51
+ name: name_of_the_repository
52
+ owner: repo_owner_username
53
+
54
+ And then run gitgut from the same directory
55
+
56
+ $ gitgut
57
+
58
+ ### Interactive console
59
+
60
+ $ bin/console
61
+
62
+ ## Development
63
+
64
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
65
+
66
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
67
+
68
+ ## Contributing
69
+
70
+ Bug reports and pull requests are welcome on GitHub at https://github.com/Ghrind/gitgut.
71
+
72
+
73
+ ## License
74
+
75
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
76
+
data/Rakefile ADDED
@@ -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
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "gitgut"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/exe/gitgut ADDED
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ t1 = Time.now
4
+
5
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
6
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
7
+
8
+ require 'gitgut'
9
+
10
+ require 'colorize'
11
+
12
+ headings = ['Branch name', 'Develop', 'Staging', 'PR', 'JIRA', 'Suggestion']
13
+
14
+ def present_commit_count(count, error = false)
15
+ return count.to_s.colorize(:red) if error
16
+ return '-' if count.zero?
17
+ count.to_s
18
+ end
19
+
20
+ print 'Retrieving info: '
21
+ data = []
22
+
23
+ branches = []
24
+ `git branch`.each_line do |l|
25
+ branch = Gitgut::Branch.new(l)
26
+
27
+ next if %w(develop master staging).include? branch.name
28
+
29
+ branches << branch
30
+ end
31
+
32
+ require 'parallel'
33
+ branches = Parallel.map(branches) do |branch|
34
+ branch.preload!.tap do
35
+ print '.'.colorize(:green)
36
+ end
37
+ end
38
+
39
+ branches.each do |branch|
40
+ row = [
41
+ branch.name.colorize(branch.color),
42
+ present_commit_count(branch.to_develop),
43
+ present_commit_count(branch.to_staging, branch.develop_is_ahead_of_staging? || branch.merge_in_staging_required_by_ticket_status?),
44
+ branch.pull_requests.map { |pr| pr.number.colorize(pr.color) }.join(' '),
45
+ (branch.ticket ? branch.ticket.key.colorize(branch.ticket.color) : ''),
46
+ #(branch.ticket ? branch.ticket.assignee_initials : ''),
47
+ #(branch.ticket ? branch.ticket.status : '')
48
+ branch.action_suggestion
49
+ ]
50
+
51
+ data << row
52
+ end
53
+ puts
54
+ puts
55
+
56
+ require 'terminal-table'
57
+ table = Terminal::Table.new headings: headings, rows: data
58
+
59
+ puts table
60
+
61
+ puts
62
+ puts "Rendered in #{(Time.now - t1).round(1)}s"
data/gitgut.gemspec ADDED
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'gitgut/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "gitgut"
8
+ spec.version = Gitgut::VERSION
9
+ spec.authors = ["Benoit Dinocourt"]
10
+ spec.email = ["ghrind@gmail.com"]
11
+
12
+ spec.summary = %q{See your branches, Github PRs and JIRA tickets in one glance!}
13
+ spec.description = %q{Display PR and JIRA tickets info about the branches that are currently checked out on your git repository.}
14
+ spec.homepage = "https://github.com/Ghrind/gitgut"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ # TODO: Add required versions
23
+ spec.add_dependency 'colorize'
24
+ spec.add_dependency 'httparty'
25
+ spec.add_dependency 'parallel'
26
+ spec.add_dependency 'terminal-table'
27
+ spec.add_dependency 'octokit'
28
+ spec.add_dependency 'settingslogic'
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.11"
31
+ spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "rspec", "~> 3.0"
33
+ spec.add_development_dependency 'webmock'
34
+ spec.add_development_dependency 'simplecov'
35
+ # spec.add_development_dependency 'pry-byebug'
36
+ end
@@ -0,0 +1,109 @@
1
+ module Gitgut
2
+ # A local git branch
3
+ class Branch
4
+ def initialize(name)
5
+ @raw_name = name
6
+ end
7
+
8
+ # TODO: Sanitization should be done elsewhere
9
+ def name
10
+ return @name if @name
11
+ match_data = /[ *]+(?<branch>[^\s]*)/.match @raw_name
12
+ @name = match_data[:branch]
13
+ end
14
+
15
+ def to_develop
16
+ Gitgut::Git.missing_commits_count('develop', name)
17
+ end
18
+
19
+ def from_develop
20
+ Gitgut::Git.missing_commits_count(name, 'develop')
21
+ end
22
+
23
+ def to_staging
24
+ Gitgut::Git.missing_commits_count('staging', name)
25
+ end
26
+
27
+ def from_staging
28
+ Gitgut::Git.missing_commits_count(name, 'staging')
29
+ end
30
+
31
+ def pull_requests
32
+ @pull_requests ||= Gitgut::Github.client.pull_requests("#{Settings.github.repo.owner}/#{Settings.github.repo.name}", state: 'all', head: "#{Settings.github.repo.owner}:#{name}").map { |pr| Gitgut::Github::PullRequest.new(pr) }
33
+ end
34
+
35
+ def jira_ticket_number
36
+ matches = name.match(/^jt-(?<id>\d+)/i)
37
+ return 'JT-' + matches[:id] if matches
38
+ end
39
+
40
+ def ticket
41
+ return @ticket if defined?(@ticket)
42
+ if jira_ticket_number
43
+ payload = Gitgut::Jira.request 'id=' + jira_ticket_number
44
+ return @ticket = nil if payload['issues'].empty?
45
+ @ticket = Gitgut::Jira::Ticket.new(payload['issues'].first)
46
+ else
47
+ @ticket = nil
48
+ end
49
+ end
50
+
51
+ def color
52
+ return :red unless valid?
53
+ if has_pull_requests? && all_pull_requests_merged?
54
+ :green
55
+ else
56
+ :white
57
+ end
58
+ end
59
+
60
+ def all_pull_requests_merged?
61
+ pull_requests.all?(&:merged?)
62
+ end
63
+
64
+ def has_pull_requests?
65
+ !pull_requests.empty?
66
+ end
67
+
68
+ def valid?
69
+ return false if develop_is_ahead_of_staging?
70
+ return false if merge_in_staging_required_by_ticket_status?
71
+ true
72
+ end
73
+
74
+ def develop_is_ahead_of_staging?
75
+ to_develop > 0 && to_develop < to_staging
76
+ end
77
+
78
+ def merge_in_staging_required_by_ticket_status?
79
+ return false unless ticket
80
+ if ['In Functional Review', 'In Review', 'Ready for Release'].include?(ticket.status) && to_staging > 0
81
+ return true
82
+ end
83
+ false
84
+ end
85
+
86
+ def merged_everywhere?
87
+ to_staging.zero? && to_develop.zero?
88
+ end
89
+
90
+ def action_suggestion
91
+ return 'Review the PR' if ticket && ticket.assigned_to_me? && ticket.in_review?
92
+ return 'Merge into staging' if merge_in_staging_required_by_ticket_status?
93
+ return 'Merge into staging or update your staging branch' if develop_is_ahead_of_staging?
94
+ if ticket
95
+ return 'Do some code' if ticket.assigned_to_me?
96
+ return 'Assign the ticket to me (and start the development)' if ticket.assignee.nil? && !ticket.done?
97
+ end
98
+ return 'Delete the local branch' if (merged_everywhere? && (!ticket || ticket.done?)) || (ticket && ticket.closed?)
99
+ end
100
+
101
+ def preload!
102
+ ticket
103
+ pull_requests
104
+ to_staging
105
+ to_develop
106
+ self
107
+ end
108
+ end
109
+ end
data/lib/gitgut/git.rb ADDED
@@ -0,0 +1,11 @@
1
+ module Gitgut
2
+ # Wrapper around git commands
3
+ #
4
+ # Show commits only on this branch
5
+ # git log --no-merges HEAD --not develop --pretty=oneline
6
+ module Git
7
+ def self.missing_commits_count(from, to)
8
+ `git rev-list #{from}..#{to} --count`.to_i
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ require 'octokit'
2
+
3
+ module Gitgut
4
+ # A wrapper around an octokit client
5
+ module Github
6
+ def self.client
7
+ @client ||= Octokit::Client.new(login: Settings.github.login, password: Settings.github.password)
8
+ end
9
+
10
+ # A Github pull request
11
+ class PullRequest
12
+ attr_reader :number, :state, :merged_at
13
+
14
+ def initialize(payload)
15
+ @number = payload[:number].to_s
16
+ @state = payload[:state]
17
+ # @url = payload[:url]
18
+ # @title = payload[:title]
19
+ @merged_at = payload[:merged_at]
20
+ # @closed_at = payload[:closed_at]
21
+ end
22
+
23
+ def color
24
+ case state
25
+ when 'open'
26
+ :white
27
+ when 'closed'
28
+ merged? ? :green : :light_black
29
+ end
30
+ end
31
+
32
+ def merged?
33
+ !@merged_at.nil?
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,110 @@
1
+ require 'httparty'
2
+
3
+ module Gitgut
4
+ # Namespace around Atlassian/JIRA objects
5
+ module Jira
6
+ # A JIRA ticket
7
+ class Ticket
8
+ attr_reader :key, :assignee, :status
9
+
10
+ def initialize(payload)
11
+ @key = payload['key']
12
+ # TODO: use Mash?
13
+ if payload['fields']['assignee']
14
+ @assignee = payload['fields']['assignee']['name']
15
+ @assignee_display_name = payload['fields']['assignee']['displayName']
16
+ end
17
+
18
+ if payload['fields']['status']
19
+ @status = payload['fields']['status']['name']
20
+ end
21
+ end
22
+
23
+ def assigned_to_me?
24
+ assignee == Settings.jira.username
25
+ end
26
+
27
+ def assignee_initials
28
+ return '' unless assignee
29
+ words = @assignee_display_name.split(/ +/)
30
+ "#{words.first} #{words.last[0]}."
31
+ end
32
+
33
+ def ready_for_release?
34
+ status == 'Ready for Release'
35
+ end
36
+
37
+ def in_review?
38
+ status == 'In Review'
39
+ end
40
+
41
+ def done?
42
+ ready_for_release? || released? || closed?
43
+ end
44
+
45
+ def closed?
46
+ status == 'Closed'
47
+ end
48
+
49
+ def released?
50
+ status == 'Released'
51
+ end
52
+
53
+ def color
54
+ return :light_blue if assigned_to_me?
55
+ case status
56
+ when 'In Functional Review', 'In Review'
57
+ :white
58
+ when 'In Development', 'Open'
59
+ :light_blue
60
+ when 'Ready for Release', 'Released'
61
+ :green
62
+ when 'Closed'
63
+ :light_black
64
+ else
65
+ :white
66
+ end
67
+ end
68
+ end
69
+
70
+ def self.request(query)
71
+ response = Request.new(query).perform!
72
+ JSON.parse(response.body)
73
+ end
74
+
75
+ # Wrapper around a JQL query for JIR
76
+ class Request
77
+ DEFAULT_OPTIONS = {
78
+ headers: { 'Content-Type' => 'application/json' }
79
+ }.freeze
80
+
81
+ JQL_PARAM_NAME = 'jql'.freeze
82
+
83
+ def initialize(query)
84
+ @query = query
85
+ end
86
+
87
+ # TODO: Maybe use a flag like performed? and store the response in an
88
+ # attr_reader
89
+ def perform!
90
+ options = DEFAULT_OPTIONS.merge(
91
+ basic_auth: auth_options
92
+ )
93
+ HTTParty.get(url, options)
94
+ end
95
+
96
+ def url
97
+ url = URI.parse(Settings.jira.endpoint)
98
+ url.query = "#{JQL_PARAM_NAME}=#{URI.escape(@query)}"
99
+ url
100
+ end
101
+
102
+ def auth_options
103
+ {
104
+ username: Settings.jira.username,
105
+ password: Settings.jira.password
106
+ }
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,10 @@
1
+ require 'settingslogic'
2
+
3
+ module Gitgut
4
+ # Application-wide settings accessor
5
+ #
6
+ # It reads the .gitgut in the runtime directory
7
+ class Settings < Settingslogic
8
+ source '.gitgut'
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Gitgut
2
+ VERSION = '0.1.1'.freeze
3
+ end
data/lib/gitgut.rb ADDED
@@ -0,0 +1,10 @@
1
+ require "gitgut/version"
2
+ require 'gitgut/jira'
3
+ require 'gitgut/branch'
4
+ require 'gitgut/github'
5
+ require 'gitgut/git'
6
+ require 'gitgut/settings'
7
+
8
+ module Gitgut
9
+ # Your code goes here...
10
+ end
metadata ADDED
@@ -0,0 +1,218 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitgut
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Benoit Dinocourt
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-02-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: httparty
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: parallel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: terminal-table
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
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: octokit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
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: settingslogic
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
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: bundler
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.11'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.11'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '10.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '10.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: webmock
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: simplecov
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'
167
+ description: Display PR and JIRA tickets info about the branches that are currently
168
+ checked out on your git repository.
169
+ email:
170
+ - ghrind@gmail.com
171
+ executables:
172
+ - gitgut
173
+ extensions: []
174
+ extra_rdoc_files: []
175
+ files:
176
+ - ".gitignore"
177
+ - ".rspec"
178
+ - ".travis.yml"
179
+ - Gemfile
180
+ - LICENSE.txt
181
+ - README.md
182
+ - Rakefile
183
+ - bin/console
184
+ - bin/setup
185
+ - exe/gitgut
186
+ - gitgut.gemspec
187
+ - lib/gitgut.rb
188
+ - lib/gitgut/branch.rb
189
+ - lib/gitgut/git.rb
190
+ - lib/gitgut/github.rb
191
+ - lib/gitgut/jira.rb
192
+ - lib/gitgut/settings.rb
193
+ - lib/gitgut/version.rb
194
+ homepage: https://github.com/Ghrind/gitgut
195
+ licenses:
196
+ - MIT
197
+ metadata: {}
198
+ post_install_message:
199
+ rdoc_options: []
200
+ require_paths:
201
+ - lib
202
+ required_ruby_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ required_rubygems_version: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ requirements: []
213
+ rubyforge_project:
214
+ rubygems_version: 2.4.8
215
+ signing_key:
216
+ specification_version: 4
217
+ summary: See your branches, Github PRs and JIRA tickets in one glance!
218
+ test_files: []