summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDickson S. Guedes2011-05-08 23:08:02 +0000
committerDickson S. Guedes2011-05-08 23:08:02 +0000
commit1d3e1633ee800ed2aa69e0685cf55cfa35a13acf (patch)
tree46e922e7e82cbd46fd3260e37627afa24219d653
parent82458e2d0c9e139cc8eec2a8aa04318239e9a548 (diff)
added templates, author name and author mail to CLI
-rw-r--r--lib/pgxn_utils/cli.rb26
-rw-r--r--lib/pgxn_utils/templates/root/%extension_name%.control.tt5
-rw-r--r--lib/pgxn_utils/templates/root/META.json.tt28
-rw-r--r--lib/pgxn_utils/templates/root/Makefile.tt24
-rw-r--r--lib/pgxn_utils/templates/root/doc/%extension_name%.md0
-rw-r--r--lib/pgxn_utils/templates/root/sql/%extension_name%.sql0
-rw-r--r--lib/pgxn_utils/templates/root/sql/uninstall_%extension_name%.sql0
-rw-r--r--lib/pgxn_utils/templates/root/test/expected/base.out0
-rw-r--r--lib/pgxn_utils/templates/root/test/sql/base.sql0
-rw-r--r--spec/cli_spec.rb62
10 files changed, 117 insertions, 28 deletions
diff --git a/lib/pgxn_utils/cli.rb b/lib/pgxn_utils/cli.rb
index f80a77c..b8a2e48 100644
--- a/lib/pgxn_utils/cli.rb
+++ b/lib/pgxn_utils/cli.rb
@@ -1,13 +1,23 @@
module PgxnUtils
class CLI < Thor
- desc "create_extension EXTENSION_NAME", "creates an extension skeleton in current directory"
- def create_extension(extension_name)
- %x[bash -c "mkdir -p #{extension_name}/{sql,doc,test/{sql,expected}}"]
- %x[bash -c "touch #{extension_name}/{sql/{#{extension_name},uninstall_#{extension_name}}.sql,doc/#{extension_name}.md,test/{sql/base.sql,expected/base.out}}"]
- %x[echo "results/" > #{extension_name}/.gitignore]
- %x[touch #{extension_name}/META.json]
- %x[touch #{extension_name}/Makefile]
- %x[touch #{extension_name}/#{extension_name}.control]
+ attr_accessor :extension_name
+ attr_accessor :author_name
+ attr_accessor :author_mail
+
+ include Thor::Actions
+
+ def self.source_root
+ @_source_root ||= File.expand_path('../templates', __FILE__)
+ end
+
+ desc "create_extension EXTENSION_PATH [AUTHOR_NAME] [AUTHOR_MAIL]", "Creates an extension skeleton in current directory. A full path is accepted."
+ def create_extension(extension_name, author_name="Your Name", author_mail="[email protected]")
+ self.destination_root = File.dirname(extension_name) || destination_root
+ self.extension_name = File.basename(extension_name)
+ self.author_name = author_name
+ self.author_mail = author_mail
+
+ directory "root", extension_name
end
end
end
diff --git a/lib/pgxn_utils/templates/root/%extension_name%.control.tt b/lib/pgxn_utils/templates/root/%extension_name%.control.tt
new file mode 100644
index 0000000..7024085
--- /dev/null
+++ b/lib/pgxn_utils/templates/root/%extension_name%.control.tt
@@ -0,0 +1,5 @@
+# <%= extension_name %> extension
+comment = 'template'
+default_version = '1.0.0'
+module_pathname = '/<%= extension_name %>'
+relocatable = true
diff --git a/lib/pgxn_utils/templates/root/META.json.tt b/lib/pgxn_utils/templates/root/META.json.tt
new file mode 100644
index 0000000..afbbe37
--- /dev/null
+++ b/lib/pgxn_utils/templates/root/META.json.tt
@@ -0,0 +1,28 @@
+{
+ "name": "<%= extension_name %>",
+ "abstract": "template",
+ "description": "A long description for <%= extension_name %>",
+ "version": "1.0.0",
+ "maintainer": [
+ "<%= author_name %> \<<%= author_mail %>\>"
+ ],
+ "license": "postgresql",
+ "provides": {
+ "<%= extension_name %>": {
+ "abstract": "",
+ "file": "sql/<%= extension_name %>.sql",
+ "docfile": "doc/<%= extension_name %>.md",
+ "version": "1.0.0"
+ }
+ },
+ "generated_by": "<%= author_name %>",
+ "meta-spec": {
+ "version": "1.0.0",
+ "url": "http://pgxn.org/meta/spec.txt"
+ },
+ "tags": [
+ "templ",
+ "some",
+ "tags"
+ ]
+}
diff --git a/lib/pgxn_utils/templates/root/Makefile.tt b/lib/pgxn_utils/templates/root/Makefile.tt
new file mode 100644
index 0000000..ff0022e
--- /dev/null
+++ b/lib/pgxn_utils/templates/root/Makefile.tt
@@ -0,0 +1,24 @@
+EXTENSION = <%= extension_name %>
+EXTVERSION = $(shell grep default_version $(EXTENSION).control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/")
+
+DATA = $(filter-out $(wildcard sql/*--*.sql),$(wildcard sql/*.sql))
+DOCS = $(wildcard doc/*.txt)
+TESTS = $(wildcard test/sql/*.sql)
+REGRESS = $(patsubst test/sql/%.sql,%,$(TESTS))
+REGRESS_OPTS = --inputdir=test --load-language=plpgsql
+MODULES = $(patsubst %.c,%,$(wildcard src/*.c))
+PG_CONFIG = pg_config
+PG91 = $(shell $(PG_CONFIG) --version | grep -qE " 8\.| 9\.0" && echo no || echo yes)
+
+ifeq ($(PG91),yes)
+all: sql/$(EXTENSION)--$(EXTVERSION).sql
+
+sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql
+ cp $< $@
+
+DATA = $(wildcard sql/*--*.sql) sql/$(EXTENSION)--$(EXTVERSION).sql
+EXTRA_CLEAN = sql/$(EXTENSION)--$(EXTVERSION).sql
+endif
+
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
diff --git a/lib/pgxn_utils/templates/root/doc/%extension_name%.md b/lib/pgxn_utils/templates/root/doc/%extension_name%.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/pgxn_utils/templates/root/doc/%extension_name%.md
diff --git a/lib/pgxn_utils/templates/root/sql/%extension_name%.sql b/lib/pgxn_utils/templates/root/sql/%extension_name%.sql
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/pgxn_utils/templates/root/sql/%extension_name%.sql
diff --git a/lib/pgxn_utils/templates/root/sql/uninstall_%extension_name%.sql b/lib/pgxn_utils/templates/root/sql/uninstall_%extension_name%.sql
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/pgxn_utils/templates/root/sql/uninstall_%extension_name%.sql
diff --git a/lib/pgxn_utils/templates/root/test/expected/base.out b/lib/pgxn_utils/templates/root/test/expected/base.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/pgxn_utils/templates/root/test/expected/base.out
diff --git a/lib/pgxn_utils/templates/root/test/sql/base.sql b/lib/pgxn_utils/templates/root/test/sql/base.sql
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/pgxn_utils/templates/root/test/sql/base.sql
diff --git a/spec/cli_spec.rb b/spec/cli_spec.rb
index 7122e26..c78f445 100644
--- a/spec/cli_spec.rb
+++ b/spec/cli_spec.rb
@@ -1,30 +1,52 @@
require File.expand_path('spec/spec_helper')
describe PgxnUtils::CLI do
- before(:each) do
- @cli = PgxnUtils::CLI.new
- @extension_name = "extension_test.#{$$}"
+
+ after(:all) do
+ system "rm -rf /tmp/*.#{$$}"
end
+
context "create extension" do
- it "should accepts a path and extracts destination and extension name"
+ before(:each) do
+ @cli = PgxnUtils::CLI.new
+ end
+
+ it "should set destination root and extension name when a path is supplied" do
+ extension_path = "/tmp/my_cool_extension.#{$$}"
+ @cli.create_extension(extension_path)
+ @cli.extension_name.should == "my_cool_extension.#{$$}"
+ @cli.destination_root.should == "/tmp"
+ end
+
+ it "should store author's name and email" do
+ @cli.create_extension("/tmp/guedes.extension.#{$$}","Guedes","guedes@nonexistant")
+ @cli.author_name.should == "Guedes"
+ @cli.author_mail.should == "guedes@nonexistant"
+ end
it "should generates an skeleton" do
- @cli.create_extension(@extension_name)
- Dir["#{@extension_name}/**/*"].sort.should be_eql([
- "#{@extension_name}/META.json",
- "#{@extension_name}/Makefile",
- "#{@extension_name}/doc",
- "#{@extension_name}/doc/#{@extension_name}.md",
- "#{@extension_name}/sql",
- "#{@extension_name}/sql/#{@extension_name}.sql",
- "#{@extension_name}/sql/uninstall_#{@extension_name}.sql",
- "#{@extension_name}/test",
- "#{@extension_name}/test/expected",
- "#{@extension_name}/test/expected/base.out",
- "#{@extension_name}/test/sql",
- "#{@extension_name}/test/sql/base.sql",
- "#{@extension_name}/#{@extension_name}.control"
- ].sort)
+ extension_path = "/tmp/extension_test.#{$$}"
+
+ @cli.create_extension(extension_path)
+
+ extension_name = @cli.extension_name
+ extension_root = @cli.destination_root
+
+ Dir["#{extension_path}/**/*"].sort.should == [
+ "#{extension_path}/META.json",
+ "#{extension_path}/Makefile",
+ "#{extension_path}/doc",
+ "#{extension_path}/doc/#{extension_name}.md",
+ "#{extension_path}/sql",
+ "#{extension_path}/sql/#{extension_name}.sql",
+ "#{extension_path}/sql/uninstall_#{extension_name}.sql",
+ "#{extension_path}/test",
+ "#{extension_path}/test/expected",
+ "#{extension_path}/test/expected/base.out",
+ "#{extension_path}/test/sql",
+ "#{extension_path}/test/sql/base.sql",
+ "#{extension_path}/#{extension_name}.control"
+ ].sort
end
it "should generates a test skeleton"