pit 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.
- data/ChangeLog +4 -0
- data/README +47 -0
- data/Rakefile +136 -0
- data/bin/pit +123 -0
- data/lib/pit.rb +72 -0
- data/test/pit_test.rb +60 -0
- data/test/test_helper.rb +3 -0
- metadata +71 -0
data/ChangeLog
ADDED
data/README
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
= pit
|
3
|
+
|
4
|
+
|
5
|
+
== Description
|
6
|
+
|
7
|
+
pit is account management tool.
|
8
|
+
|
9
|
+
|
10
|
+
== Installation
|
11
|
+
|
12
|
+
=== Archive Installation
|
13
|
+
|
14
|
+
rake install
|
15
|
+
|
16
|
+
=== Gem Installation
|
17
|
+
|
18
|
+
gem install pit
|
19
|
+
|
20
|
+
|
21
|
+
== Features/Problems
|
22
|
+
|
23
|
+
|
24
|
+
== Synopsis
|
25
|
+
|
26
|
+
command:
|
27
|
+
|
28
|
+
$ pit set twitter.com
|
29
|
+
open 'twitter.com' config with $EDITOR"
|
30
|
+
|
31
|
+
$ pit get twitter.com | lv
|
32
|
+
get config of 'twitter.com' by YAML.
|
33
|
+
|
34
|
+
$ pit switch dev
|
35
|
+
switch profile to 'dev'
|
36
|
+
|
37
|
+
ruby lib.
|
38
|
+
|
39
|
+
require "pit"
|
40
|
+
|
41
|
+
Pit.get("foo")
|
42
|
+
|
43
|
+
== Copyright
|
44
|
+
|
45
|
+
Author:: cho45 <cho45@lowreal.net>
|
46
|
+
Copyright:: Copyright (c) 2008 cho45
|
47
|
+
License:: Creative Commons by
|
data/Rakefile
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/rdoctask'
|
8
|
+
require 'rake/contrib/rubyforgepublisher'
|
9
|
+
require 'rake/contrib/sshpublisher'
|
10
|
+
require 'fileutils'
|
11
|
+
include FileUtils
|
12
|
+
|
13
|
+
NAME = "pit"
|
14
|
+
AUTHOR = "cho45"
|
15
|
+
EMAIL = "cho45@lowreal.net"
|
16
|
+
DESCRIPTION = "pit: account management tool"
|
17
|
+
RUBYFORGE_PROJECT = "lowreal"
|
18
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
19
|
+
BIN_FILES = %w( pit )
|
20
|
+
VERS = "0.0.1"
|
21
|
+
|
22
|
+
|
23
|
+
REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
24
|
+
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
25
|
+
RDOC_OPTS = [
|
26
|
+
'--title', "#{NAME} documentation",
|
27
|
+
"--charset", "utf-8",
|
28
|
+
"--opname", "index.html",
|
29
|
+
"--line-numbers",
|
30
|
+
"--main", "README",
|
31
|
+
"--inline-source",
|
32
|
+
]
|
33
|
+
|
34
|
+
task :default => [:test]
|
35
|
+
task :package => [:clean]
|
36
|
+
|
37
|
+
Rake::TestTask.new("test") do |t|
|
38
|
+
t.libs << "test"
|
39
|
+
t.pattern = "test/**/*_test.rb"
|
40
|
+
t.verbose = true
|
41
|
+
end
|
42
|
+
|
43
|
+
spec = Gem::Specification.new do |s|
|
44
|
+
s.name = NAME
|
45
|
+
s.version = VERS
|
46
|
+
s.platform = Gem::Platform::RUBY
|
47
|
+
s.has_rdoc = true
|
48
|
+
s.extra_rdoc_files = ["README", "ChangeLog"]
|
49
|
+
s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
|
50
|
+
s.summary = DESCRIPTION
|
51
|
+
s.description = DESCRIPTION
|
52
|
+
s.author = AUTHOR
|
53
|
+
s.email = EMAIL
|
54
|
+
s.homepage = HOMEPATH
|
55
|
+
s.executables = BIN_FILES
|
56
|
+
s.rubyforge_project = RUBYFORGE_PROJECT
|
57
|
+
s.bindir = "bin"
|
58
|
+
s.require_path = "lib"
|
59
|
+
s.autorequire = "pit"
|
60
|
+
s.test_files = Dir["test/test_*.rb"]
|
61
|
+
|
62
|
+
#s.add_dependency('activesupport', '>=1.3.1')
|
63
|
+
#s.required_ruby_version = '>= 1.8.2'
|
64
|
+
|
65
|
+
s.files = %w(README ChangeLog Rakefile) +
|
66
|
+
Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
|
67
|
+
Dir.glob("ext/**/*.{h,c,rb}") +
|
68
|
+
Dir.glob("examples/**/*.rb") +
|
69
|
+
Dir.glob("tools/*.rb")
|
70
|
+
|
71
|
+
s.extensions = FileList["ext/**/extconf.rb"].to_a
|
72
|
+
end
|
73
|
+
|
74
|
+
Rake::GemPackageTask.new(spec) do |p|
|
75
|
+
p.need_tar = true
|
76
|
+
p.gem_spec = spec
|
77
|
+
end
|
78
|
+
|
79
|
+
task :install do
|
80
|
+
name = "#{NAME}-#{VERS}.gem"
|
81
|
+
sh %{rake package}
|
82
|
+
sh %{sudo gem install pkg/#{name}}
|
83
|
+
end
|
84
|
+
|
85
|
+
task :uninstall => [:clean] do
|
86
|
+
sh %{sudo gem uninstall #{NAME}}
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
Rake::RDocTask.new do |rdoc|
|
91
|
+
rdoc.rdoc_dir = 'html'
|
92
|
+
rdoc.options += RDOC_OPTS
|
93
|
+
rdoc.template = "resh"
|
94
|
+
#rdoc.template = "#{ENV['template']}.rb" if ENV['template']
|
95
|
+
if ENV['DOC_FILES']
|
96
|
+
rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
|
97
|
+
else
|
98
|
+
rdoc.rdoc_files.include('README', 'ChangeLog')
|
99
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
100
|
+
rdoc.rdoc_files.include('ext/**/*.c')
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
desc "Publish to RubyForge"
|
105
|
+
task :rubyforge => [:rdoc, :package] do
|
106
|
+
require 'rubyforge'
|
107
|
+
@local_dir = "html"
|
108
|
+
@host = "cho45@rubyforge.org"
|
109
|
+
@remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/#{NAME}"
|
110
|
+
sh %{rsync -r --delete --verbose #{@local_dir}/ #{@host}:#{@remote_dir}}
|
111
|
+
end
|
112
|
+
|
113
|
+
desc 'Package and upload the release to rubyforge.'
|
114
|
+
task :release => [:clean, :package] do |t|
|
115
|
+
require 'rubyforge'
|
116
|
+
v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
|
117
|
+
abort "Versions don't match #{v} vs #{VERS}" unless v == VERS
|
118
|
+
pkg = "pkg/#{NAME}-#{VERS}"
|
119
|
+
|
120
|
+
rf = RubyForge.new
|
121
|
+
puts "Logging in"
|
122
|
+
rf.login
|
123
|
+
|
124
|
+
c = rf.userconfig
|
125
|
+
# c["release_notes"] = description if description
|
126
|
+
# c["release_changes"] = changes if changes
|
127
|
+
c["preformatted"] = true
|
128
|
+
|
129
|
+
files = [
|
130
|
+
"#{pkg}.tgz",
|
131
|
+
"#{pkg}.gem"
|
132
|
+
].compact
|
133
|
+
|
134
|
+
puts "Releasing #{NAME} v. #{VERS}"
|
135
|
+
rf.add_release RUBYFORGE_PROJECT, NAME, VERS, *files
|
136
|
+
end
|
data/bin/pit
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# vim:ft=ruby:
|
3
|
+
# ruby -Ilib bin/pit
|
4
|
+
|
5
|
+
require "optparse"
|
6
|
+
require "pathname"
|
7
|
+
require "pit"
|
8
|
+
|
9
|
+
class PitCommand
|
10
|
+
VERSION = "0.0.1"
|
11
|
+
NAME = "pit"
|
12
|
+
|
13
|
+
def self.run(argv)
|
14
|
+
new(argv.dup).run
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(argv)
|
18
|
+
@argv = argv
|
19
|
+
|
20
|
+
@subparsers = {
|
21
|
+
"help" => OptionParser.new { |opts|
|
22
|
+
opts.banner = <<-EOB.gsub(/^\t+/, "")
|
23
|
+
Usage: #{NAME} help <subcommand>
|
24
|
+
|
25
|
+
Show help of subcommand.
|
26
|
+
EOB
|
27
|
+
},
|
28
|
+
|
29
|
+
"set" => OptionParser.new { |opts|
|
30
|
+
opts.banner = <<-EOB.gsub(/^\t+/, "")
|
31
|
+
Usage: #{NAME} set <name>
|
32
|
+
|
33
|
+
Config values of name with $EDITOR.
|
34
|
+
EOB
|
35
|
+
},
|
36
|
+
|
37
|
+
"get" => OptionParser.new { |opts|
|
38
|
+
opts.banner = <<-EOB.gsub(/^\t+/, "")
|
39
|
+
Usage: #{NAME} get <name>
|
40
|
+
|
41
|
+
Get values of <name>.
|
42
|
+
EOB
|
43
|
+
},
|
44
|
+
|
45
|
+
"switch" => OptionParser.new { |opts|
|
46
|
+
opts.banner = <<-EOB.gsub(/^\t+/, "")
|
47
|
+
Usage: #{NAME} switch <profile>
|
48
|
+
|
49
|
+
Switch profile to <profile>.
|
50
|
+
EOB
|
51
|
+
},
|
52
|
+
}
|
53
|
+
|
54
|
+
@parser = OptionParser.new do |parser|
|
55
|
+
parser.banner = <<-EOB.gsub(/^\t+/, "")
|
56
|
+
Usage: #{NAME} <subcommand> <args>
|
57
|
+
|
58
|
+
EOB
|
59
|
+
|
60
|
+
parser.separator ""
|
61
|
+
|
62
|
+
parser.separator "Subcommands:"
|
63
|
+
@subparsers.keys.sort.each do |k|
|
64
|
+
parser.separator "#{parser.summary_indent} #{k}"
|
65
|
+
end
|
66
|
+
|
67
|
+
parser.separator ""
|
68
|
+
|
69
|
+
parser.separator "Options:"
|
70
|
+
parser.on('--version', "Show version string `#{VERSION}'") do
|
71
|
+
puts VERSION
|
72
|
+
exit
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def run
|
78
|
+
@parser.order!(@argv)
|
79
|
+
if @argv.empty?
|
80
|
+
puts @parser.help
|
81
|
+
exit
|
82
|
+
else
|
83
|
+
@subcommand = @argv.shift
|
84
|
+
method_name = "cmd_#{@subcommand}"
|
85
|
+
if self.respond_to?(method_name)
|
86
|
+
@subparsers[@subcommand].parse!(@argv)
|
87
|
+
self.send(method_name)
|
88
|
+
else
|
89
|
+
puts "Not implemented subcommand: `#{@subcommand}'."
|
90
|
+
puts
|
91
|
+
puts @parser.help
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def cmd_get
|
97
|
+
name, = @argv
|
98
|
+
exit if name.nil?
|
99
|
+
if $stdout.tty?
|
100
|
+
$stderr.puts "do not output to tty."
|
101
|
+
else
|
102
|
+
puts Pit.get(name).to_yaml
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def cmd_set
|
107
|
+
name, = @argv
|
108
|
+
exit if name.nil?
|
109
|
+
Pit.set(name)
|
110
|
+
end
|
111
|
+
|
112
|
+
def cmd_switch
|
113
|
+
profile, = @argv
|
114
|
+
profile = "default" if profile.nil?
|
115
|
+
profile.gsub(/[^a-z0-9.-]/i, "")
|
116
|
+
Pit.switch(profile)
|
117
|
+
$stderr.puts "Switch profile to #{profile}"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
PitCommand.run(ARGV)
|
122
|
+
|
123
|
+
|
data/lib/pit.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
|
2
|
+
require "yaml"
|
3
|
+
require "pathname"
|
4
|
+
require "tempfile"
|
5
|
+
|
6
|
+
module Pit
|
7
|
+
Directory = Pathname.new("~/.pit").expand_path
|
8
|
+
@@config = Directory + "pit.yaml"
|
9
|
+
@@profile = Directory + "default.yaml"
|
10
|
+
|
11
|
+
def self.set(name, opts={})
|
12
|
+
if opts.key?(:data)
|
13
|
+
result = opts[:data]
|
14
|
+
else
|
15
|
+
c = self.get(name).to_yaml
|
16
|
+
t = Tempfile.new("pit")
|
17
|
+
t << c
|
18
|
+
t.close
|
19
|
+
system(ENV["EDITOR"], t.path)
|
20
|
+
t.open
|
21
|
+
result = t.read
|
22
|
+
if result == c
|
23
|
+
$stderr.puts "No Changes"
|
24
|
+
return
|
25
|
+
end
|
26
|
+
result = YAML.load(result)
|
27
|
+
end
|
28
|
+
config = self.load
|
29
|
+
config[name] = result
|
30
|
+
@@profile.open("w") {|f| YAML.dump(config, f) }
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.get(name, opts={})
|
35
|
+
self.load[name] || {"username"=>"", "password"=>""}
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.switch(name, opts={})
|
39
|
+
@@profile = Directory + "#{name}.yaml"
|
40
|
+
config = self.config
|
41
|
+
config["profile"] = name
|
42
|
+
@@config.open("w") {|f| f << config.to_yaml }
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.load
|
46
|
+
Directory.mkpath unless Directory.exist?
|
47
|
+
unless @@config.exist?
|
48
|
+
@@config.open("w") {|f| f << {"profile"=>"default"}.to_yaml }
|
49
|
+
@@config.chmod(0600)
|
50
|
+
end
|
51
|
+
self.switch(self.config["profile"])
|
52
|
+
unless @@profile.exist?
|
53
|
+
@@profile.open("w") {|f| f << {}.to_yaml }
|
54
|
+
@@profile.chmod(0600)
|
55
|
+
end
|
56
|
+
YAML.load(@@profile.read) || {}
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.config
|
60
|
+
YAML.load(@@config.read)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
__END__
|
66
|
+
p Pit.set("test")
|
67
|
+
p Pit.get("test")
|
68
|
+
|
69
|
+
config = Pit.get("twitter")
|
70
|
+
p config["password"]
|
71
|
+
p config["username"]
|
72
|
+
|
data/test/pit_test.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require "tmpdir"
|
2
|
+
require "pathname"
|
3
|
+
|
4
|
+
class Pathname
|
5
|
+
@@tempname_number = 0
|
6
|
+
def self.tempname(base=$0, dir=Dir.tmpdir)
|
7
|
+
@@tempname_number += 1
|
8
|
+
name = "#{dir}/#{base}.#{$$}.#{@@tempname_number}"
|
9
|
+
path = new(name)
|
10
|
+
at_exit do
|
11
|
+
path.rmtree if path.exist?
|
12
|
+
end
|
13
|
+
path
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
dir = Pathname.tempname
|
18
|
+
dir.mkpath
|
19
|
+
ENV["HOME"] = dir
|
20
|
+
|
21
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
22
|
+
|
23
|
+
require "test/unit"
|
24
|
+
class PitTest < Test::Unit::TestCase
|
25
|
+
def test_load
|
26
|
+
assert Pit
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_set_get
|
30
|
+
Pit.set("test", :data => {"username"=>"foo","password"=>"bar"})
|
31
|
+
assert_equal "foo", Pit.get("test")["username"]
|
32
|
+
assert_equal "bar", Pit.get("test")["password"]
|
33
|
+
|
34
|
+
Pit.set("test2", :data => {"username"=>"foo2","password"=>"bar2"})
|
35
|
+
assert_equal "foo2", Pit.get("test2")["username"]
|
36
|
+
assert_equal "bar2", Pit.get("test2")["password"]
|
37
|
+
|
38
|
+
Pit.set("test", :data => {"username"=>"foo","password"=>"bar"})
|
39
|
+
assert_equal "foo", Pit.get("test")["username"]
|
40
|
+
assert_equal "bar", Pit.get("test")["password"]
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_switch
|
44
|
+
Pit.switch("default")
|
45
|
+
Pit.set("test", :data => {"username"=>"foo","password"=>"bar"})
|
46
|
+
assert_equal "foo", Pit.get("test")["username"]
|
47
|
+
assert_equal "bar", Pit.get("test")["password"]
|
48
|
+
|
49
|
+
Pit.switch("profile2")
|
50
|
+
assert_equal "profile2", Pit.config["profile"]
|
51
|
+
Pit.set("test", :data => {"username"=>"foo2","password"=>"bar2"})
|
52
|
+
assert_equal "foo2", Pit.get("test")["username"]
|
53
|
+
assert_equal "bar2", Pit.get("test")["password"]
|
54
|
+
|
55
|
+
Pit.switch("default")
|
56
|
+
Pit.set("test", :data => {"username"=>"foo","password"=>"bar"})
|
57
|
+
assert_equal "foo", Pit.get("test")["username"]
|
58
|
+
assert_equal "bar", Pit.get("test")["password"]
|
59
|
+
end
|
60
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- cho45
|
8
|
+
autorequire: pit
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-01-02 00:00:00 +09:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: "pit: account management tool"
|
17
|
+
email: cho45@lowreal.net
|
18
|
+
executables:
|
19
|
+
- pit
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- ChangeLog
|
25
|
+
files:
|
26
|
+
- README
|
27
|
+
- ChangeLog
|
28
|
+
- Rakefile
|
29
|
+
- bin/pit
|
30
|
+
- test/pit_test.rb
|
31
|
+
- test/test_helper.rb
|
32
|
+
- lib/pit.rb
|
33
|
+
has_rdoc: true
|
34
|
+
homepage: http://lowreal.rubyforge.org
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options:
|
37
|
+
- --title
|
38
|
+
- pit documentation
|
39
|
+
- --charset
|
40
|
+
- utf-8
|
41
|
+
- --opname
|
42
|
+
- index.html
|
43
|
+
- --line-numbers
|
44
|
+
- --main
|
45
|
+
- README
|
46
|
+
- --inline-source
|
47
|
+
- --exclude
|
48
|
+
- ^(examples|extras)/
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
56
|
+
version:
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
requirements: []
|
64
|
+
|
65
|
+
rubyforge_project: lowreal
|
66
|
+
rubygems_version: 1.0.1
|
67
|
+
signing_key:
|
68
|
+
specification_version: 2
|
69
|
+
summary: "pit: account management tool"
|
70
|
+
test_files:
|
71
|
+
- test/test_helper.rb
|