worktool 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
4
+ require 'worktool'
5
+
6
+ Worktool::Command.run
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: []