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
--- /dev/null
+{
+ "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"
+ ]
+}
--- /dev/null
+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)
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"