From: Dickson S. Guedes Date: Sun, 8 May 2011 23:08:02 +0000 (-0300) Subject: added templates, author name and author mail to CLI X-Git-Tag: v0.0.4~3^2~12 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=1d3e1633ee800ed2aa69e0685cf55cfa35a13acf;p=pgxn-utils.git added templates, author name and author mail to CLI --- 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="your@email.here") + 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 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 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 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 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 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"