pasqual 0.0.1 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +49 -2
- data/lib/pasqual/command.rb +24 -13
- data/lib/pasqual/database.rb +13 -4
- data/lib/pasqual/psql.rb +22 -0
- data/lib/pasqual/version.rb +1 -1
- data/pasqual.gemspec +1 -1
- data/spec/pasqual/database_spec.rb +24 -0
- metadata +5 -6
- data/bin/rspec +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16d0bb1110e38f1ff70ae8c108949c29052b8faa
|
4
|
+
data.tar.gz: 87c42ab7e84370f7d448117b227c717439c82e3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74fbc561d80a6258ba47bb5ac43719d607cebedf6179160aac00d02f933d120152d40de391b98b93aa72ccd2d648cb46e7db82541bafaec95ce0af750f94d045
|
7
|
+
data.tar.gz: b9473965169ecb96b5368b21069f436c59308843e0fbaa0a514cb8b17b011470fb08893889868f4236b0be16088569f55eed272f9fb63a6d20d79d5d16113759
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Pasqual
|
2
2
|
|
3
|
-
|
3
|
+
Run Postgres CLI commands with the help of database settings configured with environment variables.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -20,7 +20,54 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
First, get an instance of Pasqual:
|
24
|
+
|
25
|
+
``` ruby
|
26
|
+
psql = Pasqual.for ENV['DATABASE_URL']
|
27
|
+
```
|
28
|
+
|
29
|
+
### createdb
|
30
|
+
|
31
|
+
Createdb automatically uses the database name defined in `ENV`.
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
psql.createdb
|
35
|
+
```
|
36
|
+
|
37
|
+
A custom name can optionally be specified:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
psql.createdb 'foodb'
|
41
|
+
```
|
42
|
+
|
43
|
+
### dropdb
|
44
|
+
|
45
|
+
Dropdb automatically uses the database name defined in `ENV`.
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
psql.dropdb
|
49
|
+
```
|
50
|
+
A custom name can optionally be specified:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
psql.dropdb 'foodb'
|
54
|
+
```
|
55
|
+
|
56
|
+
### command
|
57
|
+
|
58
|
+
Executes an SQL script, the same as piping text into the psql command.
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
psql.command "SELECT * from users;"
|
62
|
+
```
|
63
|
+
|
64
|
+
### pipe
|
65
|
+
|
66
|
+
You can pipe a file into the `psql` command:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
psql.pipe_sql '/path/to/file.sql'
|
70
|
+
```
|
24
71
|
|
25
72
|
## Contributing
|
26
73
|
|
data/lib/pasqual/command.rb
CHANGED
@@ -4,20 +4,21 @@ module Pasqual
|
|
4
4
|
|
5
5
|
class Command
|
6
6
|
|
7
|
-
def self.execute(program, username, password, host, port, name)
|
8
|
-
new(program, username, password, host, port, name).tap { |c| c.execute }
|
7
|
+
def self.execute(program, username, password, host, port, name, file = nil)
|
8
|
+
new(program, username, password, host, port, name, file).tap { |c| c.execute }
|
9
9
|
end
|
10
10
|
|
11
|
-
attr_accessor :program, :username, :password, :host, :port, :name,
|
11
|
+
attr_accessor :program, :username, :password, :host, :port, :name, :file,
|
12
12
|
:output, :status
|
13
13
|
|
14
|
-
def initialize(program, username, password, host, port, name)
|
14
|
+
def initialize(program, username, password, host, port, name, file = nil)
|
15
15
|
self.program = program
|
16
16
|
self.username = username
|
17
17
|
self.password = password
|
18
18
|
self.host = host
|
19
19
|
self.port = port
|
20
20
|
self.name = name
|
21
|
+
self.file = file
|
21
22
|
end
|
22
23
|
|
23
24
|
def execute
|
@@ -29,17 +30,27 @@ module Pasqual
|
|
29
30
|
|
30
31
|
process.io.stdout = process.io.stderr = outfile
|
31
32
|
|
32
|
-
if
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
33
|
+
process.duplex = true if file
|
34
|
+
|
35
|
+
# TODO: find out why piping to stdin doesn't work :(
|
36
|
+
ENV['PGPASSWORD'] = password
|
37
|
+
process.start
|
38
|
+
|
39
|
+
if file && File.exist?(file)
|
40
|
+
File.open file do |f|
|
41
|
+
process.io.stdin.puts f.read
|
42
|
+
process.io.stdin.flush
|
43
|
+
end
|
44
|
+
process.io.stdin.close
|
45
|
+
elsif file
|
46
|
+
process.io.stdin.puts file
|
47
|
+
process.io.stdin.flush
|
48
|
+
process.io.stdin.close
|
41
49
|
end
|
42
50
|
|
51
|
+
process.poll_for_exit(30)
|
52
|
+
ENV['PGPASSWORD'] = nil
|
53
|
+
|
43
54
|
outfile.rewind
|
44
55
|
self.output = outfile.read
|
45
56
|
self.status = process.exit_code
|
data/lib/pasqual/database.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'uri'
|
2
2
|
require 'pasqual/createdb'
|
3
3
|
require 'pasqual/dropdb'
|
4
|
+
require 'pasqual/psql'
|
4
5
|
|
5
6
|
module Pasqual
|
6
7
|
|
@@ -20,12 +21,20 @@ module Pasqual
|
|
20
21
|
@port ||= 5432
|
21
22
|
end
|
22
23
|
|
23
|
-
def createdb(name)
|
24
|
-
Createdb.execute username, password, host, port,
|
24
|
+
def createdb(create_name = name)
|
25
|
+
Createdb.execute username, password, host, port, create_name
|
25
26
|
end
|
26
27
|
|
27
|
-
def dropdb(name)
|
28
|
-
Dropdb.execute username, password, host, port,
|
28
|
+
def dropdb(drop_name = name)
|
29
|
+
Dropdb.execute username, password, host, port, drop_name
|
30
|
+
end
|
31
|
+
|
32
|
+
def command(statement)
|
33
|
+
Psql.command statement, username, password, host, port, name
|
34
|
+
end
|
35
|
+
|
36
|
+
def pipe_sql(file)
|
37
|
+
Psql.pipe file, username, password, host, port, name
|
29
38
|
end
|
30
39
|
|
31
40
|
end
|
data/lib/pasqual/psql.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pasqual
|
2
|
+
|
3
|
+
module Psql
|
4
|
+
class Failed < StandardError; end
|
5
|
+
|
6
|
+
def self.pipe(file, username, password, host, port, name)
|
7
|
+
cmd = Command.execute 'psql', username, password, host, port, name, file
|
8
|
+
|
9
|
+
raise Failed unless cmd.success?
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.command(statement, username, password, host, port, name)
|
14
|
+
cmd = Command.execute 'psql', username, password, host, port, name, statement
|
15
|
+
|
16
|
+
raise Failed unless cmd.success?
|
17
|
+
cmd.output
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/lib/pasqual/version.rb
CHANGED
data/pasqual.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["dkastner@gmail.com"]
|
11
11
|
spec.summary = %q{Interface easily with postgres CLI tools}
|
12
12
|
spec.description = %q{Shortcuts for postgres commands, with option to use ENV-configured conenction URLs}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/dkastner/pasqual"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'securerandom'
|
2
3
|
require 'pasqual/database'
|
3
4
|
|
4
5
|
describe Pasqual::Database do
|
@@ -25,5 +26,28 @@ describe Pasqual::Database do
|
|
25
26
|
|
26
27
|
end
|
27
28
|
|
29
|
+
describe '#command' do
|
30
|
+
|
31
|
+
it 'runs an sql command' do
|
32
|
+
expect do
|
33
|
+
database.command "SELECT 0;"
|
34
|
+
end.to_not raise_error
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#pipe_sql' do
|
40
|
+
|
41
|
+
it 'runs an sql script file' do
|
42
|
+
file = Tempfile.new 'sql-script'
|
43
|
+
file.puts "SELECT 0;"
|
44
|
+
|
45
|
+
expect do
|
46
|
+
database.pipe_sql file.path
|
47
|
+
end.to_not raise_error
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
28
52
|
end
|
29
53
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pasqual
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Kastner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: childprocess
|
@@ -70,8 +70,7 @@ description: Shortcuts for postgres commands, with option to use ENV-configured
|
|
70
70
|
URLs
|
71
71
|
email:
|
72
72
|
- dkastner@gmail.com
|
73
|
-
executables:
|
74
|
-
- rspec
|
73
|
+
executables: []
|
75
74
|
extensions: []
|
76
75
|
extra_rdoc_files: []
|
77
76
|
files:
|
@@ -80,19 +79,19 @@ files:
|
|
80
79
|
- LICENSE.txt
|
81
80
|
- README.md
|
82
81
|
- Rakefile
|
83
|
-
- bin/rspec
|
84
82
|
- lib/pasqual.rb
|
85
83
|
- lib/pasqual/arglist.rb
|
86
84
|
- lib/pasqual/command.rb
|
87
85
|
- lib/pasqual/createdb.rb
|
88
86
|
- lib/pasqual/database.rb
|
89
87
|
- lib/pasqual/dropdb.rb
|
88
|
+
- lib/pasqual/psql.rb
|
90
89
|
- lib/pasqual/version.rb
|
91
90
|
- pasqual.gemspec
|
92
91
|
- spec/pasqual/database_spec.rb
|
93
92
|
- spec/pasqual_spec.rb
|
94
93
|
- spec/spec_helper.rb
|
95
|
-
homepage:
|
94
|
+
homepage: https://github.com/dkastner/pasqual
|
96
95
|
licenses:
|
97
96
|
- MIT
|
98
97
|
metadata: {}
|
data/bin/rspec
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'rspec' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('rspec-core', 'rspec')
|