cknife 0.1.5 → 0.1.6
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/.ruby-version +1 -1
- data/Gemfile +11 -11
- data/Gemfile.lock +14 -11
- data/README.md +33 -0
- data/VERSION +1 -1
- data/bin/cknifeaws +1 -0
- data/bin/cknifepg +5 -0
- data/cknife.gemspec +42 -39
- data/cknife.yml.sample +6 -0
- data/lib/cknife/cknife_pg.rb +161 -0
- data/lib/cknife/config.rb +1 -0
- metadata +68 -64
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 14209947e3be6f0beb5fcb80bbc9e6d949d3016e
|
4
|
+
data.tar.gz: 8f252a3c65e2457678ce467a4a423b330d8e078c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c72064ad1f12de37de9a12b97d1e354e73e3b72921d171fba04deebd723607b9aa4013cef76cdb1b6ba6aeac6018bd568e55c5e40caf8f16f5b9fa03959acb0a
|
7
|
+
data.tar.gz: 7d0f4b2317cf17885daf81ca3be7d76fc2d7b8a7f385f9d6727c054d48f7340a8fb4006986ca9a039e2a5f5f52574a42b81cd31e47cff67bf92b215a2a85a979
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0-p643
|
data/Gemfile
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gem "rest-client", '>= 1.6'
|
4
|
-
gem "nokogiri", '>= 1.6'
|
5
|
-
gem "i18n", "~> 0
|
6
|
-
gem "activesupport", '
|
7
|
-
gem "actionpack", '
|
8
|
-
gem "mail"
|
9
|
-
gem "thor", '>= 0.14'
|
10
|
-
gem "builder", '
|
11
|
-
gem "fog", '>= 1.15'
|
12
|
-
gem "unf", '>= 0.1'
|
3
|
+
gem "rest-client", '>= 1.6', '~> 1'
|
4
|
+
gem "nokogiri", '>= 1.6', '~> 1'
|
5
|
+
gem "i18n", "~> 0"
|
6
|
+
gem "activesupport", '~> 3'
|
7
|
+
gem "actionpack", '~> 3'
|
8
|
+
gem "mail", '~> 2.4'
|
9
|
+
gem "thor", '>= 0.14', '~> 0'
|
10
|
+
gem "builder", '~> 3.0'
|
11
|
+
gem "fog", '>= 1.15', '<= 1.17'
|
12
|
+
gem "unf", '>= 0.1', '~> 0'
|
13
13
|
|
14
14
|
# Add dependencies to develop your gem here.
|
15
15
|
# Include everything needed to run rake, tests, features, etc.
|
16
16
|
group :development do
|
17
17
|
# gem "cknife", :path => "." # this arguably makes it easier to test quickly, locally.
|
18
18
|
gem "bundler", "~> 1.0"
|
19
|
-
gem "jeweler", "
|
19
|
+
gem "jeweler", "~> 2.0"
|
20
20
|
end
|
21
21
|
|
22
22
|
|
data/Gemfile.lock
CHANGED
@@ -113,15 +113,18 @@ PLATFORMS
|
|
113
113
|
ruby
|
114
114
|
|
115
115
|
DEPENDENCIES
|
116
|
-
actionpack (
|
117
|
-
activesupport (
|
118
|
-
builder (
|
116
|
+
actionpack (~> 3)
|
117
|
+
activesupport (~> 3)
|
118
|
+
builder (~> 3.0)
|
119
119
|
bundler (~> 1.0)
|
120
|
-
fog (>= 1.15)
|
121
|
-
i18n (~> 0
|
122
|
-
jeweler (
|
123
|
-
mail
|
124
|
-
nokogiri (>= 1.6)
|
125
|
-
rest-client (>= 1.6)
|
126
|
-
thor (>= 0.14)
|
127
|
-
unf (>= 0.1)
|
120
|
+
fog (>= 1.15, <= 1.17)
|
121
|
+
i18n (~> 0)
|
122
|
+
jeweler (~> 2.0)
|
123
|
+
mail (~> 2.4)
|
124
|
+
nokogiri (~> 1, >= 1.6)
|
125
|
+
rest-client (~> 1, >= 1.6)
|
126
|
+
thor (~> 0, >= 0.14)
|
127
|
+
unf (~> 0, >= 0.1)
|
128
|
+
|
129
|
+
BUNDLED WITH
|
130
|
+
1.10.3
|
data/README.md
CHANGED
@@ -194,6 +194,27 @@ switched to DNS Simple and don't use this much anymore.
|
|
194
194
|
cknifezerigo help [TASK] # Describe available tasks or one specific task
|
195
195
|
cknifezerigo list # List available host names.
|
196
196
|
|
197
|
+
# Postgre SQL Backups
|
198
|
+
|
199
|
+
This requires the following setup in the configuration:
|
200
|
+
|
201
|
+
pg:
|
202
|
+
host: localhost
|
203
|
+
database: dbname
|
204
|
+
username: dbuser
|
205
|
+
password: dbpassword
|
206
|
+
|
207
|
+
Setup Postgres credentials in a Rails-style configuration (in the same
|
208
|
+
cknife config file) and you can capture a snapshot of your database.
|
209
|
+
|
210
|
+
> bundle exec cknifepg help
|
211
|
+
Tasks:
|
212
|
+
cknifepg capture # Capture a dump of the database to db(current timestamp).dump.
|
213
|
+
cknifepg disconnect # Disconnect all sessions from the database. You must have a superuser configured for this to work.
|
214
|
+
cknifepg help [TASK] # Describe available tasks or one specific task
|
215
|
+
cknifepg restore # Restore a file. Use the one with the most recent mtime by default. Searches for db*.dump files in the CWD.
|
216
|
+
cknifepg sessions # List active sessions in this database and provide a string suitable for giving to kill for stopping those sessions.
|
217
|
+
|
197
218
|
# Dub
|
198
219
|
|
199
220
|
Like du, but sorts your output by size. This helps you determine
|
@@ -231,6 +252,18 @@ Make a gem release. This will generate a commit and a tag for v0.1.2.
|
|
231
252
|
|
232
253
|
bundle exec rake release
|
233
254
|
|
255
|
+
You may also build a raw gem for testing installs without
|
256
|
+
releasing to Rubygems publically. Use scp
|
257
|
+
to move this .gem file to a machine you want to install
|
258
|
+
on:
|
259
|
+
|
260
|
+
bundle exec rake build
|
261
|
+
|
262
|
+
If a gem is already built, you can remove it with
|
263
|
+
something like the following:
|
264
|
+
|
265
|
+
rm pkg/cknife-0.1.6.gem
|
266
|
+
|
234
267
|
### Invoking commands without clobbering the gemspec
|
235
268
|
|
236
269
|
You can uncommente the 'gem cknife' line in the Gemfile.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
data/bin/cknifeaws
CHANGED
data/bin/cknifepg
ADDED
data/cknife.gemspec
CHANGED
@@ -2,17 +2,19 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: cknife 0.1.6 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "cknife"
|
8
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.6"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
11
13
|
s.authors = ["Mike De La Loza"]
|
12
|
-
s.date = "
|
14
|
+
s.date = "2015-06-06"
|
13
15
|
s.description = "Cali Army Knife, a collection of command line tools, especially for popular API services."
|
14
16
|
s.email = "mikedll@mikedll.com"
|
15
|
-
s.executables = ["cknifeaws", "cknifedub", "cknifemail", "cknifenowtimestamp", "cknifewcdir", "cknifezerigo"]
|
17
|
+
s.executables = ["cknifeaws", "cknifedub", "cknifemail", "cknifenowtimestamp", "cknifepg", "cknifewcdir", "cknifezerigo"]
|
16
18
|
s.extra_rdoc_files = [
|
17
19
|
"LICENSE",
|
18
20
|
"README.md"
|
@@ -30,61 +32,62 @@ Gem::Specification.new do |s|
|
|
30
32
|
"bin/cknifedub",
|
31
33
|
"bin/cknifemail",
|
32
34
|
"bin/cknifenowtimestamp",
|
35
|
+
"bin/cknifepg",
|
33
36
|
"bin/cknifewcdir",
|
34
37
|
"bin/cknifezerigo",
|
35
38
|
"cknife.gemspec",
|
36
39
|
"cknife.yml.sample",
|
40
|
+
"lib/cknife/cknife_pg.rb",
|
37
41
|
"lib/cknife/config.rb"
|
38
42
|
]
|
39
43
|
s.homepage = "http://github.com/mikedll/cali-army-knife"
|
40
44
|
s.licenses = ["MIT"]
|
41
|
-
s.
|
42
|
-
s.rubygems_version = "1.8.28"
|
45
|
+
s.rubygems_version = "2.4.7"
|
43
46
|
s.summary = "Cali Army Knife"
|
44
47
|
|
45
48
|
if s.respond_to? :specification_version then
|
46
|
-
s.specification_version =
|
49
|
+
s.specification_version = 4
|
47
50
|
|
48
51
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
-
s.add_runtime_dependency(%q<rest-client>, [">= 1.6"])
|
50
|
-
s.add_runtime_dependency(%q<nokogiri>, [">= 1.6"])
|
51
|
-
s.add_runtime_dependency(%q<i18n>, ["~> 0
|
52
|
-
s.add_runtime_dependency(%q<activesupport>, ["
|
53
|
-
s.add_runtime_dependency(%q<actionpack>, ["
|
54
|
-
s.add_runtime_dependency(%q<mail>, ["
|
55
|
-
s.add_runtime_dependency(%q<thor>, [">= 0.14"])
|
56
|
-
s.add_runtime_dependency(%q<builder>, ["
|
57
|
-
s.add_runtime_dependency(%q<fog>, [">= 1.15"])
|
58
|
-
s.add_runtime_dependency(%q<unf>, [">= 0.1"])
|
52
|
+
s.add_runtime_dependency(%q<rest-client>, [">= 1.6", "~> 1"])
|
53
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 1.6", "~> 1"])
|
54
|
+
s.add_runtime_dependency(%q<i18n>, ["~> 0"])
|
55
|
+
s.add_runtime_dependency(%q<activesupport>, ["~> 3"])
|
56
|
+
s.add_runtime_dependency(%q<actionpack>, ["~> 3"])
|
57
|
+
s.add_runtime_dependency(%q<mail>, ["~> 2.4"])
|
58
|
+
s.add_runtime_dependency(%q<thor>, [">= 0.14", "~> 0"])
|
59
|
+
s.add_runtime_dependency(%q<builder>, ["~> 3.0"])
|
60
|
+
s.add_runtime_dependency(%q<fog>, ["<= 1.17", ">= 1.15"])
|
61
|
+
s.add_runtime_dependency(%q<unf>, [">= 0.1", "~> 0"])
|
59
62
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
60
|
-
s.add_development_dependency(%q<jeweler>, ["
|
63
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
|
61
64
|
else
|
62
|
-
s.add_dependency(%q<rest-client>, [">= 1.6"])
|
63
|
-
s.add_dependency(%q<nokogiri>, [">= 1.6"])
|
64
|
-
s.add_dependency(%q<i18n>, ["~> 0
|
65
|
-
s.add_dependency(%q<activesupport>, ["
|
66
|
-
s.add_dependency(%q<actionpack>, ["
|
67
|
-
s.add_dependency(%q<mail>, ["
|
68
|
-
s.add_dependency(%q<thor>, [">= 0.14"])
|
69
|
-
s.add_dependency(%q<builder>, ["
|
70
|
-
s.add_dependency(%q<fog>, [">= 1.15"])
|
71
|
-
s.add_dependency(%q<unf>, [">= 0.1"])
|
65
|
+
s.add_dependency(%q<rest-client>, [">= 1.6", "~> 1"])
|
66
|
+
s.add_dependency(%q<nokogiri>, [">= 1.6", "~> 1"])
|
67
|
+
s.add_dependency(%q<i18n>, ["~> 0"])
|
68
|
+
s.add_dependency(%q<activesupport>, ["~> 3"])
|
69
|
+
s.add_dependency(%q<actionpack>, ["~> 3"])
|
70
|
+
s.add_dependency(%q<mail>, ["~> 2.4"])
|
71
|
+
s.add_dependency(%q<thor>, [">= 0.14", "~> 0"])
|
72
|
+
s.add_dependency(%q<builder>, ["~> 3.0"])
|
73
|
+
s.add_dependency(%q<fog>, ["<= 1.17", ">= 1.15"])
|
74
|
+
s.add_dependency(%q<unf>, [">= 0.1", "~> 0"])
|
72
75
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
73
|
-
s.add_dependency(%q<jeweler>, ["
|
76
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
74
77
|
end
|
75
78
|
else
|
76
|
-
s.add_dependency(%q<rest-client>, [">= 1.6"])
|
77
|
-
s.add_dependency(%q<nokogiri>, [">= 1.6"])
|
78
|
-
s.add_dependency(%q<i18n>, ["~> 0
|
79
|
-
s.add_dependency(%q<activesupport>, ["
|
80
|
-
s.add_dependency(%q<actionpack>, ["
|
81
|
-
s.add_dependency(%q<mail>, ["
|
82
|
-
s.add_dependency(%q<thor>, [">= 0.14"])
|
83
|
-
s.add_dependency(%q<builder>, ["
|
84
|
-
s.add_dependency(%q<fog>, [">= 1.15"])
|
85
|
-
s.add_dependency(%q<unf>, [">= 0.1"])
|
79
|
+
s.add_dependency(%q<rest-client>, [">= 1.6", "~> 1"])
|
80
|
+
s.add_dependency(%q<nokogiri>, [">= 1.6", "~> 1"])
|
81
|
+
s.add_dependency(%q<i18n>, ["~> 0"])
|
82
|
+
s.add_dependency(%q<activesupport>, ["~> 3"])
|
83
|
+
s.add_dependency(%q<actionpack>, ["~> 3"])
|
84
|
+
s.add_dependency(%q<mail>, ["~> 2.4"])
|
85
|
+
s.add_dependency(%q<thor>, [">= 0.14", "~> 0"])
|
86
|
+
s.add_dependency(%q<builder>, ["~> 3.0"])
|
87
|
+
s.add_dependency(%q<fog>, ["<= 1.17", ">= 1.15"])
|
88
|
+
s.add_dependency(%q<unf>, [">= 0.1", "~> 0"])
|
86
89
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
87
|
-
s.add_dependency(%q<jeweler>, ["
|
90
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0"])
|
88
91
|
end
|
89
92
|
end
|
90
93
|
|
data/cknife.yml.sample
CHANGED
@@ -0,0 +1,161 @@
|
|
1
|
+
require 'open3'
|
2
|
+
require 'thor'
|
3
|
+
require 'cknife/config'
|
4
|
+
|
5
|
+
class CKnifePg < Thor
|
6
|
+
|
7
|
+
no_tasks do
|
8
|
+
def config
|
9
|
+
@config ||= CKnife::Config
|
10
|
+
end
|
11
|
+
|
12
|
+
def conf
|
13
|
+
@conf ||= {
|
14
|
+
:host => config['pg.host'] || "localhost",
|
15
|
+
:port => config['pg.port'] || 5432,
|
16
|
+
:database => config['pg.database'],
|
17
|
+
:username => config['pg.username'],
|
18
|
+
:password => config['pg.password']
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def connection_options
|
23
|
+
"-h #{conf[:host]} -p #{conf[:port]} -U #{conf[:username]} --no-password"
|
24
|
+
end
|
25
|
+
|
26
|
+
def psql_invocation
|
27
|
+
"psql #{connection_options} -d #{conf[:database]} --no-align --tuples-only"
|
28
|
+
end
|
29
|
+
|
30
|
+
def pg_pass_file
|
31
|
+
@pg_pass_file = ".pgpass"
|
32
|
+
end
|
33
|
+
|
34
|
+
def pg_pass_file_execute(cmd, input = nil)
|
35
|
+
return if !@session_ok
|
36
|
+
puts cmd
|
37
|
+
stdin, stdout, stderr, wait_thread = Open3.popen3({'PGPASSFILE' => pg_pass_file}, cmd)
|
38
|
+
if input
|
39
|
+
puts input
|
40
|
+
stdin.write input
|
41
|
+
stdin.close
|
42
|
+
end
|
43
|
+
output = stdout.read
|
44
|
+
output += stderr.read
|
45
|
+
$stdout.write output
|
46
|
+
stdout.close
|
47
|
+
stderr.close
|
48
|
+
result = wait_thread.value.to_i
|
49
|
+
@session_ok = @session_ok && (result == 0)
|
50
|
+
yield if block_given?
|
51
|
+
output
|
52
|
+
end
|
53
|
+
|
54
|
+
def with_pg_pass_file
|
55
|
+
if @session_live
|
56
|
+
return yield
|
57
|
+
end
|
58
|
+
|
59
|
+
@session_live = true
|
60
|
+
@session_ok = true
|
61
|
+
|
62
|
+
if File.exists?(pg_pass_file)
|
63
|
+
say("This generates a pgpass file but one is already on disk. Exiting.")
|
64
|
+
return
|
65
|
+
end
|
66
|
+
|
67
|
+
# pgpass format
|
68
|
+
File.open(pg_pass_file, "w", 0600) { |f| f.write "#{conf[:host]}:#{conf[:port]}:*:#{conf[:username]}:#{conf[:password]}" }
|
69
|
+
|
70
|
+
result = yield
|
71
|
+
|
72
|
+
FileUtils.rm(pg_pass_file)
|
73
|
+
if File.exists?(pg_pass_file)
|
74
|
+
say("Failed to remove pg_pass file. Please remove it for security purposes.")
|
75
|
+
end
|
76
|
+
|
77
|
+
say
|
78
|
+
say("Command failed.", :red) if !@session_ok
|
79
|
+
@session_live = false
|
80
|
+
|
81
|
+
result
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
desc "disconnect", "Disconnect all sessions from the database. You must have a superuser configured for this to work."
|
86
|
+
def disconnect
|
87
|
+
with_pg_pass_file do
|
88
|
+
my_pid = pg_pass_file_execute(psql_invocation, "select pg_backend_pid();").split.first
|
89
|
+
ids = pg_pass_file_execute(psql_invocation, "SELECT procpid FROM pg_stat_activity WHERE datname = '#{conf[:database]}' AND procpid != #{my_pid};")
|
90
|
+
ids.split.each do |pid|
|
91
|
+
pg_pass_file_execute(psql_invocation, "select pg_terminate_backend(#{pid});")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
desc "capture", "Capture a dump of the database to db(current timestamp).dump."
|
97
|
+
def capture
|
98
|
+
file_name = "db" + Time.now.strftime("%Y%m%d%H%M%S") + ".dump"
|
99
|
+
|
100
|
+
with_pg_pass_file do
|
101
|
+
pg_pass_file_execute("pg_dump -Fc --no-owner #{connection_options} -f #{file_name} #{conf[:database]}") do
|
102
|
+
say("Captured #{file_name}.")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
desc "sessions", "List active sessions in this database and provide a string suitable for giving to kill for stopping those sessions."
|
108
|
+
def sessions
|
109
|
+
with_pg_pass_file do
|
110
|
+
my_pid = pg_pass_file_execute(psql_invocation, "select pg_backend_pid();").split.first
|
111
|
+
ids_output = pg_pass_file_execute(psql_invocation, "SELECT procpid, application_name FROM pg_stat_activity WHERE datname = '#{conf[:database]}' AND procpid != #{my_pid};")
|
112
|
+
table = ids_output.split.map { |line| line.split("|") }
|
113
|
+
print_table([["PID", "Application Name"]] + table, :indent => 2)
|
114
|
+
ids = table.map { |row| row.first }
|
115
|
+
|
116
|
+
say("If you would like to kill these sessions, you can do so with this command:")
|
117
|
+
say("kill -9 #{ids.join(' ')}")
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
desc "restore", "Restore a file. Use the one with the most recent mtime by default. Searches for db*.dump files in the CWD."
|
122
|
+
method_options :filename => nil
|
123
|
+
def restore
|
124
|
+
to_restore = options[:filename] if options[:filename]
|
125
|
+
if to_restore.nil?
|
126
|
+
files = Dir["db*.dump"]
|
127
|
+
with_mtime = files.map { |f| [f, File.mtime(f)] }
|
128
|
+
with_mtime.sort! { |a,b| a.last <=> b.last }
|
129
|
+
files = with_mtime.map(&:first)
|
130
|
+
to_restore = files.last
|
131
|
+
end
|
132
|
+
|
133
|
+
if to_restore.nil?
|
134
|
+
say("No backups file to restore. None given on the command line and none could be found in the CWD.", :red)
|
135
|
+
return
|
136
|
+
else
|
137
|
+
if !yes?("Restore #{to_restore}?", :green)
|
138
|
+
return
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
with_pg_pass_file do
|
143
|
+
output = pg_pass_file_execute("dropdb #{connection_options} #{conf[:database]}")
|
144
|
+
|
145
|
+
if !@session_ok
|
146
|
+
if output.split("\n").any? { |s| s =~ /There are [0-9]+ other session\(s\) using the database./ }
|
147
|
+
say
|
148
|
+
say("Other sessions are blocking the database from being dropped.")
|
149
|
+
say("You may want to terminate these sessions and try again. See the 'sessions' command.")
|
150
|
+
end
|
151
|
+
else
|
152
|
+
say("Doing restore...")
|
153
|
+
|
154
|
+
pg_pass_file_execute("createdb -T template0 #{connection_options} #{conf[:database]}")
|
155
|
+
pg_pass_file_execute("pg_restore -n public --no-privileges --no-owner #{connection_options} -d #{conf[:database]} #{to_restore}") do
|
156
|
+
say("Restored #{to_restore}")
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
data/lib/cknife/config.rb
CHANGED
metadata
CHANGED
@@ -1,180 +1,188 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cknife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Mike De La Loza
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-06-06 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rest-client
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.6'
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1'
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
25
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '1.6'
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1'
|
30
33
|
- !ruby/object:Gem::Dependency
|
31
34
|
name: nokogiri
|
32
35
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
36
|
requirements:
|
35
|
-
- -
|
37
|
+
- - '>='
|
36
38
|
- !ruby/object:Gem::Version
|
37
39
|
version: '1.6'
|
40
|
+
- - ~>
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1'
|
38
43
|
type: :runtime
|
39
44
|
prerelease: false
|
40
45
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
46
|
requirements:
|
43
|
-
- -
|
47
|
+
- - '>='
|
44
48
|
- !ruby/object:Gem::Version
|
45
49
|
version: '1.6'
|
50
|
+
- - ~>
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '1'
|
46
53
|
- !ruby/object:Gem::Dependency
|
47
54
|
name: i18n
|
48
55
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
56
|
requirements:
|
51
57
|
- - ~>
|
52
58
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0
|
59
|
+
version: '0'
|
54
60
|
type: :runtime
|
55
61
|
prerelease: false
|
56
62
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
63
|
requirements:
|
59
64
|
- - ~>
|
60
65
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
66
|
+
version: '0'
|
62
67
|
- !ruby/object:Gem::Dependency
|
63
68
|
name: activesupport
|
64
69
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
70
|
requirements:
|
67
|
-
- -
|
71
|
+
- - ~>
|
68
72
|
- !ruby/object:Gem::Version
|
69
|
-
version: '3
|
73
|
+
version: '3'
|
70
74
|
type: :runtime
|
71
75
|
prerelease: false
|
72
76
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
77
|
requirements:
|
75
|
-
- -
|
78
|
+
- - ~>
|
76
79
|
- !ruby/object:Gem::Version
|
77
|
-
version: '3
|
80
|
+
version: '3'
|
78
81
|
- !ruby/object:Gem::Dependency
|
79
82
|
name: actionpack
|
80
83
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
84
|
requirements:
|
83
|
-
- -
|
85
|
+
- - ~>
|
84
86
|
- !ruby/object:Gem::Version
|
85
|
-
version: '3
|
87
|
+
version: '3'
|
86
88
|
type: :runtime
|
87
89
|
prerelease: false
|
88
90
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
91
|
requirements:
|
91
|
-
- -
|
92
|
+
- - ~>
|
92
93
|
- !ruby/object:Gem::Version
|
93
|
-
version: '3
|
94
|
+
version: '3'
|
94
95
|
- !ruby/object:Gem::Dependency
|
95
96
|
name: mail
|
96
97
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
98
|
requirements:
|
99
|
-
- -
|
99
|
+
- - ~>
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
101
|
+
version: '2.4'
|
102
102
|
type: :runtime
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
105
|
requirements:
|
107
|
-
- -
|
106
|
+
- - ~>
|
108
107
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
108
|
+
version: '2.4'
|
110
109
|
- !ruby/object:Gem::Dependency
|
111
110
|
name: thor
|
112
111
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
112
|
requirements:
|
115
|
-
- -
|
113
|
+
- - '>='
|
116
114
|
- !ruby/object:Gem::Version
|
117
115
|
version: '0.14'
|
116
|
+
- - ~>
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
118
119
|
type: :runtime
|
119
120
|
prerelease: false
|
120
121
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0.14'
|
126
|
+
- - ~>
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
126
129
|
- !ruby/object:Gem::Dependency
|
127
130
|
name: builder
|
128
131
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
132
|
requirements:
|
131
|
-
- -
|
133
|
+
- - ~>
|
132
134
|
- !ruby/object:Gem::Version
|
133
135
|
version: '3.0'
|
134
136
|
type: :runtime
|
135
137
|
prerelease: false
|
136
138
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
139
|
requirements:
|
139
|
-
- -
|
140
|
+
- - ~>
|
140
141
|
- !ruby/object:Gem::Version
|
141
142
|
version: '3.0'
|
142
143
|
- !ruby/object:Gem::Dependency
|
143
144
|
name: fog
|
144
145
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
146
|
requirements:
|
147
|
-
- -
|
147
|
+
- - <=
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '1.17'
|
150
|
+
- - '>='
|
148
151
|
- !ruby/object:Gem::Version
|
149
152
|
version: '1.15'
|
150
153
|
type: :runtime
|
151
154
|
prerelease: false
|
152
155
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
156
|
requirements:
|
155
|
-
- -
|
157
|
+
- - <=
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.17'
|
160
|
+
- - '>='
|
156
161
|
- !ruby/object:Gem::Version
|
157
162
|
version: '1.15'
|
158
163
|
- !ruby/object:Gem::Dependency
|
159
164
|
name: unf
|
160
165
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
166
|
requirements:
|
163
|
-
- -
|
167
|
+
- - '>='
|
164
168
|
- !ruby/object:Gem::Version
|
165
169
|
version: '0.1'
|
170
|
+
- - ~>
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
166
173
|
type: :runtime
|
167
174
|
prerelease: false
|
168
175
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
176
|
requirements:
|
171
|
-
- -
|
177
|
+
- - '>='
|
172
178
|
- !ruby/object:Gem::Version
|
173
179
|
version: '0.1'
|
180
|
+
- - ~>
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: '0'
|
174
183
|
- !ruby/object:Gem::Dependency
|
175
184
|
name: bundler
|
176
185
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
186
|
requirements:
|
179
187
|
- - ~>
|
180
188
|
- !ruby/object:Gem::Version
|
@@ -182,7 +190,6 @@ dependencies:
|
|
182
190
|
type: :development
|
183
191
|
prerelease: false
|
184
192
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
193
|
requirements:
|
187
194
|
- - ~>
|
188
195
|
- !ruby/object:Gem::Version
|
@@ -190,17 +197,15 @@ dependencies:
|
|
190
197
|
- !ruby/object:Gem::Dependency
|
191
198
|
name: jeweler
|
192
199
|
requirement: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
200
|
requirements:
|
195
|
-
- -
|
201
|
+
- - ~>
|
196
202
|
- !ruby/object:Gem::Version
|
197
203
|
version: '2.0'
|
198
204
|
type: :development
|
199
205
|
prerelease: false
|
200
206
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
207
|
requirements:
|
203
|
-
- -
|
208
|
+
- - ~>
|
204
209
|
- !ruby/object:Gem::Version
|
205
210
|
version: '2.0'
|
206
211
|
description: Cali Army Knife, a collection of command line tools, especially for popular
|
@@ -211,6 +216,7 @@ executables:
|
|
211
216
|
- cknifedub
|
212
217
|
- cknifemail
|
213
218
|
- cknifenowtimestamp
|
219
|
+
- cknifepg
|
214
220
|
- cknifewcdir
|
215
221
|
- cknifezerigo
|
216
222
|
extensions: []
|
@@ -230,37 +236,35 @@ files:
|
|
230
236
|
- bin/cknifedub
|
231
237
|
- bin/cknifemail
|
232
238
|
- bin/cknifenowtimestamp
|
239
|
+
- bin/cknifepg
|
233
240
|
- bin/cknifewcdir
|
234
241
|
- bin/cknifezerigo
|
235
242
|
- cknife.gemspec
|
236
243
|
- cknife.yml.sample
|
244
|
+
- lib/cknife/cknife_pg.rb
|
237
245
|
- lib/cknife/config.rb
|
238
246
|
homepage: http://github.com/mikedll/cali-army-knife
|
239
247
|
licenses:
|
240
248
|
- MIT
|
249
|
+
metadata: {}
|
241
250
|
post_install_message:
|
242
251
|
rdoc_options: []
|
243
252
|
require_paths:
|
244
253
|
- lib
|
245
254
|
required_ruby_version: !ruby/object:Gem::Requirement
|
246
|
-
none: false
|
247
255
|
requirements:
|
248
|
-
- -
|
256
|
+
- - '>='
|
249
257
|
- !ruby/object:Gem::Version
|
250
258
|
version: '0'
|
251
|
-
segments:
|
252
|
-
- 0
|
253
|
-
hash: 1454050378644929282
|
254
259
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
255
|
-
none: false
|
256
260
|
requirements:
|
257
|
-
- -
|
261
|
+
- - '>='
|
258
262
|
- !ruby/object:Gem::Version
|
259
263
|
version: '0'
|
260
264
|
requirements: []
|
261
265
|
rubyforge_project:
|
262
|
-
rubygems_version:
|
266
|
+
rubygems_version: 2.4.7
|
263
267
|
signing_key:
|
264
|
-
specification_version:
|
268
|
+
specification_version: 4
|
265
269
|
summary: Cali Army Knife
|
266
270
|
test_files: []
|