freerange-cli 0.0.6 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README +7 -0
- data/Rakefile +100 -0
- data/freerange-cli.gemspec +39 -0
- data/lib/freerange.rb +31 -8
- data/zsh/_freerange +32 -0
- metadata +11 -5
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
/pkg
|
data/README
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
A very simple command line tool to make our development easier. Currently with the following commands:
|
2
|
+
|
3
|
+
freerange pair NAME - Starts pairing with the given member on the given project
|
4
|
+
freerange unpair - Stop pairing
|
5
|
+
freerange members - List all members
|
6
|
+
|
7
|
+
There is also a zsh completion script under the zsh folder
|
data/Rakefile
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "rake/gempackagetask"
|
3
|
+
require "rake/rdoctask"
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
task :default => :package do
|
8
|
+
puts "Don't forget to write some tests!"
|
9
|
+
end
|
10
|
+
|
11
|
+
# This builds the actual gem. For details of what all these options
|
12
|
+
# mean, and other ones you can add, check the documentation here:
|
13
|
+
#
|
14
|
+
# http://rubygems.org/read/chapter/20
|
15
|
+
#
|
16
|
+
spec = Gem::Specification.new do |s|
|
17
|
+
|
18
|
+
# Change these as appropriate
|
19
|
+
s.name = "freerange-cli"
|
20
|
+
s.version = "0.0.9"
|
21
|
+
s.summary = "Simple commands to help with Freerange"
|
22
|
+
s.author = "Tom Ward"
|
23
|
+
s.email = "tom.ward@gofreerange.com"
|
24
|
+
s.homepage = "http://gofreerange.com"
|
25
|
+
|
26
|
+
s.has_rdoc = true
|
27
|
+
# You should probably have a README of some kind. Change the filename
|
28
|
+
# as appropriate
|
29
|
+
# s.extra_rdoc_files = %w(README)
|
30
|
+
# s.rdoc_options = %w(--main README)
|
31
|
+
|
32
|
+
# Add any extra files to include in the gem (like your README)
|
33
|
+
s.files = `git ls-files`.split("\n").sort
|
34
|
+
s.require_paths = ["lib"]
|
35
|
+
|
36
|
+
s.executables = FileList["bin/**"].map { |f| File.basename(f) }
|
37
|
+
|
38
|
+
# If you want to depend on other gems, add them here, along with any
|
39
|
+
# relevant versions
|
40
|
+
s.add_dependency("thor")
|
41
|
+
|
42
|
+
# If your tests use any gems, include them here
|
43
|
+
# s.add_development_dependency("mocha") # for example
|
44
|
+
end
|
45
|
+
|
46
|
+
# This task actually builds the gem. We also regenerate a static
|
47
|
+
# .gemspec file, which is useful if something (i.e. GitHub) will
|
48
|
+
# be automatically building a gem for this project. If you're not
|
49
|
+
# using GitHub, edit as appropriate.
|
50
|
+
#
|
51
|
+
# To publish your gem online, install the 'gemcutter' gem; Read more
|
52
|
+
# about that here: http://gemcutter.org/pages/gem_docs
|
53
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
54
|
+
pkg.gem_spec = spec
|
55
|
+
end
|
56
|
+
|
57
|
+
# Stolen from jeweler
|
58
|
+
def prettyify_array(gemspec_ruby, array_name)
|
59
|
+
gemspec_ruby.gsub(/s\.#{array_name.to_s} = \[.+?\]/) do |match|
|
60
|
+
leadin, files = match[0..-2].split("[")
|
61
|
+
leadin + "[\n #{files.split(",").join(",\n ")}\n ]"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
task :gemspec do
|
66
|
+
output = spec.to_ruby
|
67
|
+
output = prettyify_array(output, :files)
|
68
|
+
output = prettyify_array(output, :test_files)
|
69
|
+
output = prettyify_array(output, :extra_rdoc_files)
|
70
|
+
|
71
|
+
file = File.expand_path("../#{spec.name}.gemspec", __FILE__)
|
72
|
+
File.open(file, "w") {|f| f << output }
|
73
|
+
end
|
74
|
+
|
75
|
+
task :package => :gemspec
|
76
|
+
|
77
|
+
# Generate documentation
|
78
|
+
Rake::RDocTask.new do |rd|
|
79
|
+
rd.rdoc_files.include("lib/**/*.rb")
|
80
|
+
rd.rdoc_dir = "rdoc"
|
81
|
+
end
|
82
|
+
|
83
|
+
desc 'Clear out RDoc and generated packages'
|
84
|
+
task :clean => [:clobber_rdoc, :clobber_package] do
|
85
|
+
rm "#{spec.name}.gemspec"
|
86
|
+
end
|
87
|
+
|
88
|
+
task :release => [:gemspec, :package] do
|
89
|
+
if `git diff --cached`.empty?
|
90
|
+
if `git tag`.split("\n").include?("v#{spec.version}")
|
91
|
+
raise "Version #{spec.version} has already been released"
|
92
|
+
end
|
93
|
+
`git add #{File.expand_path("../#{spec.name}.gemspec", __FILE__)}`
|
94
|
+
`git commit -m "Released version #{spec.version}"`
|
95
|
+
`git tag v#{spec.version}`
|
96
|
+
`gem push pkg/#{spec.name}-#{spec.version}.gem`
|
97
|
+
else
|
98
|
+
raise "Unstaged changes still waiting to be committed"
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{freerange-cli}
|
5
|
+
s.version = "0.0.9"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Tom Ward"]
|
9
|
+
s.date = %q{2010-05-23}
|
10
|
+
s.default_executable = %q{freerange}
|
11
|
+
s.email = %q{tom.ward@gofreerange.com}
|
12
|
+
s.executables = ["freerange"]
|
13
|
+
s.files = [
|
14
|
+
".gitignore",
|
15
|
+
"README",
|
16
|
+
"Rakefile",
|
17
|
+
"bin/freerange",
|
18
|
+
"freerange-cli.gemspec",
|
19
|
+
"lib/freerange.rb",
|
20
|
+
"zsh/_freerange"
|
21
|
+
]
|
22
|
+
s.homepage = %q{http://gofreerange.com}
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
s.rubygems_version = %q{1.3.6}
|
25
|
+
s.summary = %q{Simple commands to help with Freerange}
|
26
|
+
|
27
|
+
if s.respond_to? :specification_version then
|
28
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
29
|
+
s.specification_version = 3
|
30
|
+
|
31
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
32
|
+
s.add_runtime_dependency(%q<thor>, [">= 0"])
|
33
|
+
else
|
34
|
+
s.add_dependency(%q<thor>, [">= 0"])
|
35
|
+
end
|
36
|
+
else
|
37
|
+
s.add_dependency(%q<thor>, [">= 0"])
|
38
|
+
end
|
39
|
+
end
|
data/lib/freerange.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'thor'
|
3
3
|
|
4
|
-
|
5
4
|
module FreeRange
|
6
5
|
MEMBERS = {
|
7
6
|
'james.adam' => 'James Adam',
|
@@ -14,6 +13,22 @@ module FreeRange
|
|
14
13
|
}
|
15
14
|
|
16
15
|
class CLI < Thor
|
16
|
+
class Pair
|
17
|
+
def initialize(pair)
|
18
|
+
@pair = pair
|
19
|
+
owner_name = `git config --global --get user.name`.strip
|
20
|
+
@owner = MEMBERS.keys.detect {|x| MEMBERS[x] == owner_name }
|
21
|
+
end
|
22
|
+
|
23
|
+
def name
|
24
|
+
[MEMBERS[@pair], MEMBERS[@owner]].sort.join(" & ")
|
25
|
+
end
|
26
|
+
|
27
|
+
def email
|
28
|
+
[@owner, @pair].sort.join('+') + "+pairing@gofreerange.com"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
17
32
|
desc 'members', 'Lists freerange members'
|
18
33
|
def members
|
19
34
|
MEMBERS.keys.sort.each {|name| puts name }
|
@@ -22,17 +37,25 @@ module FreeRange
|
|
22
37
|
desc 'pair NAME', 'Changes who you are pairing with'
|
23
38
|
method_options :show => :boolean
|
24
39
|
def pair(author)
|
25
|
-
|
26
|
-
|
27
|
-
pair = [MEMBERS[owner], MEMBERS[author]].sort
|
28
|
-
`git config user.name '#{pair.join(" & ")}'`
|
29
|
-
`git config user.email '#{[owner,author].sort.join('+')}+pairing@gofreerange.com'`
|
40
|
+
p = Pair.new(author)
|
41
|
+
set 'user.name' => p.name, 'user.email' => p.email
|
30
42
|
end
|
31
43
|
|
32
44
|
desc 'unpair', 'Stop pairing'
|
33
45
|
def unpair
|
34
|
-
|
35
|
-
|
46
|
+
unset 'user.name', 'user.email'
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def set(options = {})
|
52
|
+
options.each do |key, value|
|
53
|
+
`git config #{key} '#{value}'`
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def unset(*options)
|
58
|
+
options.each {|o| `git config --unset #{o}`}
|
36
59
|
end
|
37
60
|
end
|
38
61
|
end
|
data/zsh/_freerange
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#compdef freerange
|
2
|
+
|
3
|
+
local curcontext="$curcontext" state line ret=1
|
4
|
+
|
5
|
+
_arguments -C \
|
6
|
+
'(- 1 *)'{-h,--help}'[display help information]' \
|
7
|
+
'(- 1)--version[display version information]' \
|
8
|
+
'1: :->cmds' \
|
9
|
+
'*: :->args' && ret=0
|
10
|
+
|
11
|
+
case $state in
|
12
|
+
cmds)
|
13
|
+
if (( ! $+_freerange_cmds )) ; then
|
14
|
+
typeset -gH _freerange_cmds
|
15
|
+
_freerange_cmds=( $(freerange help | grep '^ [a-z]' | cut -d " " -f 4) )
|
16
|
+
fi
|
17
|
+
compadd $_freerange_cmds && ret=0
|
18
|
+
;;
|
19
|
+
args)
|
20
|
+
case $line[1] in
|
21
|
+
(pair)
|
22
|
+
if (( ! $+_freerange_members )) ; then
|
23
|
+
typeset -gH _freerange_members
|
24
|
+
_freerange_members=( $(freerange members | grep '^[A-Za-z]' | cut -d " " -f 1) )
|
25
|
+
fi
|
26
|
+
compadd $_freerange_members && ret=0
|
27
|
+
;;
|
28
|
+
esac
|
29
|
+
;;
|
30
|
+
esac
|
31
|
+
|
32
|
+
return ret
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 9
|
9
|
+
version: 0.0.9
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Tom Ward
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-23 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
type: :runtime
|
31
31
|
version_requirements: *id001
|
32
32
|
description:
|
33
|
-
email: tom@
|
33
|
+
email: tom.ward@gofreerange.com
|
34
34
|
executables:
|
35
35
|
- freerange
|
36
36
|
extensions: []
|
@@ -38,7 +38,13 @@ extensions: []
|
|
38
38
|
extra_rdoc_files: []
|
39
39
|
|
40
40
|
files:
|
41
|
+
- .gitignore
|
42
|
+
- README
|
43
|
+
- Rakefile
|
44
|
+
- bin/freerange
|
45
|
+
- freerange-cli.gemspec
|
41
46
|
- lib/freerange.rb
|
47
|
+
- zsh/_freerange
|
42
48
|
has_rdoc: true
|
43
49
|
homepage: http://gofreerange.com
|
44
50
|
licenses: []
|
@@ -68,6 +74,6 @@ rubyforge_project:
|
|
68
74
|
rubygems_version: 1.3.6
|
69
75
|
signing_key:
|
70
76
|
specification_version: 3
|
71
|
-
summary:
|
77
|
+
summary: Simple commands to help with Freerange
|
72
78
|
test_files: []
|
73
79
|
|