worktool 0.1.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 +7 -0
- data/bin/worktool +6 -0
- data/lib/worktool.rb +13 -0
- data/lib/worktool/command.rb +22 -0
- data/lib/worktool/github.rb +37 -0
- data/lib/worktool/project_manager.rb +40 -0
- metadata +133 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 80a9a01d543fd1254130980bd0819d520fc364b9
|
4
|
+
data.tar.gz: a9c9af9a29da1e2fae2a8d6af7ff16fde7dbcc84
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 68cf078dedf336329e98843710678a8f18c409d7702431a4baa8bf1f0e9c6fd075f25e11e775908937fdbdda894d55ec4ec0ec2fcff33118af4b8d126484416b
|
7
|
+
data.tar.gz: 4c96346b96fb090b499454efb394651b5f68800666f352839d0194f94aadd6f4e2109cbb0ca09b67aab37ab1003667ea341f22d47e68ae62698827f42b86ff0b
|
data/bin/worktool
ADDED
data/lib/worktool.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Worktool
|
2
|
+
require 'clamp'
|
3
|
+
require 'git'
|
4
|
+
require 'term/ansicolor'
|
5
|
+
require 'github_api'
|
6
|
+
require 'io/console'
|
7
|
+
require 'json'
|
8
|
+
require 'pathname'
|
9
|
+
require 'shellwords'
|
10
|
+
require 'worktool/project_manager'
|
11
|
+
require 'worktool/github'
|
12
|
+
require 'worktool/command'
|
13
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Worktool
|
2
|
+
class Command < Clamp::Command
|
3
|
+
|
4
|
+
parameter 'query', 'query - simple issue, repo, url', :attribute_name => :query
|
5
|
+
|
6
|
+
def execute
|
7
|
+
commands = []
|
8
|
+
params = Worktool::Github.new.extract(query)
|
9
|
+
manager = Worktool::ProjectManager.new(ENV['PROJECTS_PATH'])
|
10
|
+
repo = manager.find_repo_path(params)
|
11
|
+
if repo
|
12
|
+
commands << 'cd ' + Shellwords.escape(repo.to_s)
|
13
|
+
if params[:issue]
|
14
|
+
commands << 'gi checkout ' + Shellwords.escape(params[:issue].to_s)
|
15
|
+
end
|
16
|
+
else
|
17
|
+
commands << '# Repo not found'
|
18
|
+
end
|
19
|
+
puts commands.join(' && ')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Worktool
|
2
|
+
class Github
|
3
|
+
|
4
|
+
def extract(query)
|
5
|
+
if query.match(/^https?:\/\//)
|
6
|
+
return extract_url(query)
|
7
|
+
end
|
8
|
+
extract_hash(query)
|
9
|
+
end
|
10
|
+
|
11
|
+
def extract_url(url)
|
12
|
+
matches = url.match(/^https?:\/\/(?:www\.)?github\.com\/([^\/]+)\/([^\/]+)\/(.*)/)
|
13
|
+
return nil unless matches
|
14
|
+
data = {
|
15
|
+
:user => matches[1],
|
16
|
+
:repo => matches[2]
|
17
|
+
}
|
18
|
+
suffix = matches[3]
|
19
|
+
|
20
|
+
matches = suffix.match(/^(issues|pull)\/([0-9]+)/)
|
21
|
+
data[:issue] = matches[2].to_i if matches
|
22
|
+
data
|
23
|
+
end
|
24
|
+
|
25
|
+
def extract_hash(hash)
|
26
|
+
matches = hash.match(/^(?:([^#\/]+)\/)?([^#\/]+)(?:#([0-9]+))?$/)
|
27
|
+
return nil unless matches
|
28
|
+
data = {
|
29
|
+
:repo => matches[2],
|
30
|
+
}
|
31
|
+
data[:user] = matches[1] if matches[1]
|
32
|
+
data[:issue] = matches[3].to_i if matches[3]
|
33
|
+
data
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Worktool
|
2
|
+
class ProjectManager
|
3
|
+
|
4
|
+
def initialize(projects_path)
|
5
|
+
@projects_path = projects_path
|
6
|
+
end
|
7
|
+
|
8
|
+
def find_repo_path(params)
|
9
|
+
return nil unless params[:repo]
|
10
|
+
if params[:user]
|
11
|
+
project = find_project(params[:user] + '/' + params[:repo])
|
12
|
+
else
|
13
|
+
project = find_project_by_repo(params[:repo])
|
14
|
+
end
|
15
|
+
return nil unless project
|
16
|
+
Pathname.new(@projects_path).join(project).to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
def find_project_by_repo(repo)
|
20
|
+
matches = projects.select do |project|
|
21
|
+
project.match(/\/#{repo}$/)
|
22
|
+
end
|
23
|
+
matches.first if matches
|
24
|
+
end
|
25
|
+
|
26
|
+
def find_project(user_repo)
|
27
|
+
matches = projects.select do |project|
|
28
|
+
project == user_repo
|
29
|
+
end
|
30
|
+
matches.first if matches
|
31
|
+
end
|
32
|
+
|
33
|
+
def projects
|
34
|
+
projects_path = Pathname.new(@projects_path)
|
35
|
+
Pathname.glob(projects_path.join('*/*/')).map do |directory|
|
36
|
+
directory.relative_path_from(projects_path).to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: worktool
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tomasz Durka
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: clamp
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.6.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.6.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: git
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.0
|
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.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: github_api
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.10.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.10.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: term-ansicolor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.2.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.2.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: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.0'
|
97
|
+
description:
|
98
|
+
email: tomasz@durka.pl
|
99
|
+
executables:
|
100
|
+
- worktool
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- bin/worktool
|
105
|
+
- lib/worktool.rb
|
106
|
+
- lib/worktool/command.rb
|
107
|
+
- lib/worktool/github.rb
|
108
|
+
- lib/worktool/project_manager.rb
|
109
|
+
homepage: https://github.com/tomaszdurka/worktool.git
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
metadata: {}
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options: []
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 2.2.2
|
130
|
+
signing_key:
|
131
|
+
specification_version: 4
|
132
|
+
summary: Tool for navigating beetwen github based projects and their issues
|
133
|
+
test_files: []
|