cknife 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|