seamus-pasqual 0.2.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3b6ea3b9ef075f0d38fd1211c83e1ac7ca6ac288
4
+ data.tar.gz: 2d68abe021da7274c9ec7d47ebca6dfd57099830
5
+ SHA512:
6
+ metadata.gz: 518ac9fc203fa42988edd8361931c24c64958b8bd8ebc32a0d00b23df71d4109bdcdd33780e372b814917e0f7280586fb788a8af1714114a4e9c7b91249ddbee
7
+ data.tar.gz: 72e5ee83324396b9ff12eb47ba738639914b91fc9f545a42b3fbb19fb7924b24fa723f94ace4902f662801e63dc2ef6122e004124c525f4ae34b9cd3858fd0df
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ bin/rspec
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.1.1
5
+
6
+ addons:
7
+ postgresql: "9.3"
8
+
9
+ env: DATABASE_URL=postgres://postgres@localhost:5432/pasqual_test
10
+
11
+ script: bundle exec rspec spec
@@ -0,0 +1,15 @@
1
+ * 0.2.2 - 2017-10-13
2
+
3
+ * Enhancements
4
+
5
+ * No more arbitrary 30-second limit
6
+
7
+ * 0.2.0 - 2015-05-06
8
+
9
+ * Enhancements
10
+
11
+ * Add pasqual bin
12
+
13
+ * 0.1.3 - 2015-03-16
14
+
15
+ * Added more detailed failure message on createdb
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pasqual.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Derek Kastner
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,80 @@
1
+ # Pasqual
2
+
3
+ Run Postgres CLI commands with the help of database settings configured with environment variables.
4
+
5
+ ![](https://travis-ci.org/dkastner/pasqual.svg?branch=master)
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'pasqual'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install pasqual
22
+
23
+ ## Usage
24
+
25
+ First, get an instance of Pasqual:
26
+
27
+ ``` ruby
28
+ psql = Pasqual.for ENV['DATABASE_URL']
29
+ ```
30
+
31
+ ### createdb
32
+
33
+ Createdb automatically uses the database name defined in `ENV`.
34
+
35
+ ```ruby
36
+ psql.createdb
37
+ ```
38
+
39
+ A custom name can optionally be specified:
40
+
41
+ ```ruby
42
+ psql.createdb 'foodb'
43
+ ```
44
+
45
+ ### dropdb
46
+
47
+ Dropdb automatically uses the database name defined in `ENV`.
48
+
49
+ ```ruby
50
+ psql.dropdb
51
+ ```
52
+ A custom name can optionally be specified:
53
+
54
+ ```ruby
55
+ psql.dropdb 'foodb'
56
+ ```
57
+
58
+ ### command
59
+
60
+ Executes an SQL script, the same as piping text into the psql command.
61
+
62
+ ```ruby
63
+ psql.command "SELECT * from users;"
64
+ ```
65
+
66
+ ### pipe
67
+
68
+ You can pipe a file into the `psql` command:
69
+
70
+ ```ruby
71
+ psql.pipe_sql '/path/to/file.sql'
72
+ ```
73
+
74
+ ## Contributing
75
+
76
+ 1. Fork it ( https://github.com/[my-github-username]/pasqual/fork )
77
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
78
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
79
+ 4. Push to the branch (`git push origin my-new-feature`)
80
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+
5
+ require 'pasqual/cli'
6
+ Pasqual::CLI.start ARGV
@@ -0,0 +1,14 @@
1
+ require "pasqual/version"
2
+ require 'pasqual/database'
3
+
4
+ module Pasqual
5
+
6
+ def self.new
7
+ self.for ENV['DATABASE_URL']
8
+ end
9
+
10
+ def self.for(url)
11
+ Database.new url
12
+ end
13
+
14
+ end
@@ -0,0 +1,19 @@
1
+ module Pasqual
2
+
3
+ module Arglist
4
+
5
+ def self.args(username, password, host, port, name)
6
+ list = []
7
+ list << '-h' << host if host.to_s.length > 0
8
+ list << '-U' << username if username.to_s.length > 0
9
+ list << '-p' << port.to_s if port.to_s.length > 0
10
+ list << '-w' if password.to_s.length == 0
11
+ list << '--no-psqlrc'
12
+ list << '--pset' << 'pager=off'
13
+
14
+ list + [name]
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,118 @@
1
+ require 'thor'
2
+
3
+ require 'pasqual'
4
+
5
+ module Pasqual
6
+ class CLI < Thor
7
+ def self.exit_on_failure?
8
+ true
9
+ end
10
+
11
+ desc "create DATABASE_URL", "create database"
12
+ def create(url = nil)
13
+ puts "Creating #{pasqual(url).name}"
14
+ pasqual(url).createdb
15
+ rescue Pasqual::Createdb::AlreadyExists
16
+ puts "#{pasqual(url).name} already exists, skipped creation"
17
+ end
18
+
19
+ desc "drop DATABASE_URL", "drop database"
20
+ def drop(url = nil)
21
+ puts "Dropping #{pasqual(url).name}"
22
+ pasqual(url).dropdb
23
+ rescue Pasqual::Dropdb::Failed
24
+ puts "Could not drop #{pasqual(url).name}, skipped"
25
+ end
26
+
27
+ desc "poll DATABASE_URL", "poll for the existence of a database server"
28
+ def poll(url = nil)
29
+ say "Waiting for Postgres to come available"
30
+ if attempt_connect(url)
31
+ say "Connected!"
32
+ exit 0
33
+ else
34
+ say "Failed to connect"
35
+ exit 1
36
+ end
37
+ end
38
+
39
+ desc "reset [SQL_FILE] [DATABASE_URL]", "drop, create, structure"
40
+ def reset(path = nil, url = nil)
41
+ drop(url)
42
+ create(url)
43
+ file(path, url) if path
44
+ end
45
+
46
+ desc "psql [SQL] [DATABASE_URL]", "start a psql console or run an SQL statement"
47
+ def psql(*cmd_args)
48
+ url = nil
49
+ sql_args = []
50
+ cmd_args.each do |arg|
51
+ if arg =~ /postgres:/
52
+ url = arg
53
+ else
54
+ sql_args << arg
55
+ end
56
+ end
57
+ db = pasqual(url)
58
+ args = Pasqual::Arglist.
59
+ args(db.username, db.password, db.host, db.port, db.name)
60
+ if sql_args.any?
61
+ args << '-c'
62
+ args += sql_args.map(&:inspect)
63
+ puts "Executing in #{db.name}: #{sql_args.inspect}"
64
+ else
65
+ cmd = "psql #{args.join(' ')}"
66
+ end
67
+ puts "Running #{cmd}"
68
+ Kernel.exec({ 'PGPASSWORD' => db.password }, "psql #{args.join(' ')}")
69
+ end
70
+
71
+
72
+ desc "file PATH [DATABASE_URL]", "execute an SQL script in a file"
73
+ def file(path, url = nil)
74
+ puts "Structuring #{pasqual(url).name}"
75
+ pasqual(url).pipe_sql path
76
+ rescue Errno::EPIPE
77
+ puts "#{pasqual(url).name} doesn't exist, skipped structure"
78
+ end
79
+
80
+ private
81
+
82
+ def pasqual(url)
83
+ @pasqual ||= Pasqual.for(url || ENV['DATABASE_URL'])
84
+ end
85
+
86
+ def pg_connection(url, no_db: false)
87
+ db = pasqual(url)
88
+ conn = PG::Connection.connect_start(
89
+ host: db.host,
90
+ port: db.port,
91
+ dbname: no_db ? nil : db.name,
92
+ user: db.username,
93
+ password: db.password,
94
+ connect_timeout: (60 * 5))
95
+ end
96
+
97
+ def attempt_connect(url)
98
+ require 'pg'
99
+
100
+ timeout = Time.now.to_i + (60 * 5)
101
+
102
+ # Don't connect to a specific database because we may be polling the
103
+ # the server to know whether we can _create_ a database yet.
104
+ conn = pg_connection(url, no_db: true)
105
+ status = conn.connect_poll
106
+ while(Time.now.to_i < timeout && status != PG::PGRES_POLLING_OK) do
107
+ sleep 2
108
+ status = conn.connect_poll
109
+
110
+ conn = pg_connection(url, no_db: true) if status == PG::PGRES_POLLING_FAILED
111
+ puts "Status: #{status.inspect}, Timeout: #{Time.now.to_i - timeout}" if ENV['DEBUG']
112
+ end
113
+ conn.finish
114
+ status == PG::PGRES_POLLING_OK
115
+ end
116
+
117
+ end
118
+ end
@@ -0,0 +1,65 @@
1
+ require 'pasqual/arglist'
2
+
3
+ module Pasqual
4
+
5
+ class Command
6
+
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
+ end
10
+
11
+ attr_accessor :program, :username, :password, :host, :port, :name, :file,
12
+ :output, :status
13
+
14
+ def initialize(program, username, password, host, port, name, file = nil)
15
+ self.program = program
16
+ self.username = username
17
+ self.password = password
18
+ self.host = host
19
+ self.port = port
20
+ self.name = name
21
+ self.file = file
22
+ end
23
+
24
+ def execute
25
+ outfile = Tempfile.new("pasqual-#{name}")
26
+ outfile.sync = true
27
+
28
+ process = ChildProcess.build program,
29
+ *Arglist.args(username, password, host, port, name)
30
+
31
+ process.io.stdout = process.io.stderr = outfile
32
+
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
49
+ end
50
+
51
+ process.wait
52
+ ENV['PGPASSWORD'] = nil
53
+
54
+ outfile.rewind
55
+ self.output = outfile.read
56
+ self.status = process.exit_code
57
+ end
58
+
59
+ def success?
60
+ status == 0
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,22 @@
1
+ require 'childprocess'
2
+ require 'tempfile'
3
+
4
+ require 'pasqual/command'
5
+
6
+ module Pasqual
7
+
8
+ module Createdb
9
+ class AlreadyExists < StandardError; end
10
+ class Failed < StandardError; end
11
+
12
+ def self.execute(username, password, host, port, name)
13
+ cmd = Command.execute 'createdb', username, password, host, port, name
14
+
15
+ raise AlreadyExists if cmd.output =~ /already exists/
16
+ raise(Failed, cmd.output) unless cmd.success?
17
+ true
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,42 @@
1
+ require 'uri'
2
+ require 'pasqual/createdb'
3
+ require 'pasqual/dropdb'
4
+ require 'pasqual/psql'
5
+
6
+ module Pasqual
7
+
8
+ class Database
9
+ attr_reader :username, :password, :host, :port, :name
10
+
11
+ def initialize(url)
12
+ uri = URI.parse url
13
+ @username = uri.user
14
+ @password = uri.password
15
+ @host = uri.host
16
+ @port = uri.port
17
+ @name = uri.path.sub(/^\//, '')
18
+ end
19
+
20
+ def port
21
+ @port ||= 5432
22
+ end
23
+
24
+ def createdb(create_name = name)
25
+ Createdb.execute username, password, host, port, create_name
26
+ end
27
+
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, dbname = name)
37
+ Psql.pipe file, username, password, host, port, dbname
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,20 @@
1
+ require 'childprocess'
2
+ require 'tempfile'
3
+
4
+ require 'pasqual/command'
5
+
6
+ module Pasqual
7
+
8
+ module Dropdb
9
+ class Failed < StandardError; end
10
+
11
+ def self.execute(username, password, host, port, name)
12
+ cmd = Command.execute 'dropdb', username, password, host, port, name
13
+
14
+ raise Failed unless cmd.success?
15
+ true
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -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
@@ -0,0 +1,3 @@
1
+ module Pasqual
2
+ VERSION = "0.2.2"
3
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pasqual/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "seamus-pasqual"
8
+ spec.version = Pasqual::VERSION
9
+ spec.authors = ["Derek Kastner"]
10
+ spec.email = ["dkastner@gmail.com"]
11
+ spec.summary = %q{Interface easily with postgres CLI tools}
12
+ spec.description = %q{Shortcuts for postgres commands, with option to use ENV-configured conenction URLs}
13
+ spec.homepage = "https://github.com/dkastner/pasqual"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "childprocess", "~> 0.5"
22
+ spec.add_runtime_dependency "thor", "~> 0.5"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.6"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rspec", "~> 3.0.0"
27
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+ require 'securerandom'
3
+ require 'pasqual/database'
4
+
5
+ describe Pasqual::Database do
6
+ let(:database) { Pasqual::Database.new ENV['DATABASE_URL'] }
7
+
8
+ describe '#createdb' do
9
+ let(:name) { SecureRandom.hex(10) }
10
+
11
+ after :each do
12
+ database.dropdb name
13
+ end
14
+
15
+ it 'creates a database' do
16
+ expect(database.createdb(name)).to be true
17
+ end
18
+
19
+ it 'raises an error if a database already exists' do
20
+ database.createdb name
21
+
22
+ expect do
23
+ database.createdb name
24
+ end.to raise_error(Pasqual::Createdb::AlreadyExists)
25
+ end
26
+
27
+ end
28
+
29
+ describe '#command' do
30
+ before { database.createdb rescue Pasqual::Dropdb::Failed }
31
+
32
+ it 'runs an sql command' do
33
+ expect do
34
+ database.command "SELECT 0;"
35
+ end.to_not raise_error
36
+ end
37
+
38
+ end
39
+
40
+ describe '#pipe_sql' do
41
+ before { database.createdb rescue Pasqual::Dropdb::Failed }
42
+
43
+ it 'runs an sql script file' do
44
+ file = Tempfile.new 'sql-script'
45
+ file.puts "SELECT 0;"
46
+
47
+ expect do
48
+ database.pipe_sql file.path
49
+ end.to_not raise_error
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+ require 'securerandom'
3
+ require 'pasqual'
4
+
5
+ describe Pasqual do
6
+
7
+ describe '.new' do
8
+
9
+ it 'returns a Pasqual::Database configured for a URL' do
10
+ p = Pasqual.new
11
+ expect(p).to be_a(Pasqual::Database)
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+
@@ -0,0 +1,5 @@
1
+ Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |file| require file }
2
+
3
+ RSpec.configure do |config|
4
+ config.order = 'random'
5
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: seamus-pasqual
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ platform: ruby
6
+ authors:
7
+ - Derek Kastner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-10-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: childprocess
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
83
+ description: Shortcuts for postgres commands, with option to use ENV-configured conenction
84
+ URLs
85
+ email:
86
+ - dkastner@gmail.com
87
+ executables:
88
+ - pasqual
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - ".gitignore"
93
+ - ".travis.yml"
94
+ - CHANGELOG
95
+ - Gemfile
96
+ - LICENSE.txt
97
+ - README.md
98
+ - Rakefile
99
+ - bin/pasqual
100
+ - lib/pasqual.rb
101
+ - lib/pasqual/arglist.rb
102
+ - lib/pasqual/cli.rb
103
+ - lib/pasqual/command.rb
104
+ - lib/pasqual/createdb.rb
105
+ - lib/pasqual/database.rb
106
+ - lib/pasqual/dropdb.rb
107
+ - lib/pasqual/psql.rb
108
+ - lib/pasqual/version.rb
109
+ - pasqual.gemspec
110
+ - spec/pasqual/database_spec.rb
111
+ - spec/pasqual_spec.rb
112
+ - spec/spec_helper.rb
113
+ homepage: https://github.com/dkastner/pasqual
114
+ licenses:
115
+ - MIT
116
+ metadata: {}
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project:
133
+ rubygems_version: 2.6.8
134
+ signing_key:
135
+ specification_version: 4
136
+ summary: Interface easily with postgres CLI tools
137
+ test_files:
138
+ - spec/pasqual/database_spec.rb
139
+ - spec/pasqual_spec.rb
140
+ - spec/spec_helper.rb