added templates, author name and author mail to CLI
authorDickson S. Guedes <[email protected]>
Sun, 8 May 2011 23:08:02 +0000 (20:08 -0300)
committerDickson S. Guedes <[email protected]>
Sun, 8 May 2011 23:08:02 +0000 (20:08 -0300)
lib/pgxn_utils/cli.rb
lib/pgxn_utils/templates/root/%extension_name%.control.tt [new file with mode: 0644]
lib/pgxn_utils/templates/root/META.json.tt [new file with mode: 0644]
lib/pgxn_utils/templates/root/Makefile.tt [new file with mode: 0644]
lib/pgxn_utils/templates/root/doc/%extension_name%.md [new file with mode: 0644]
lib/pgxn_utils/templates/root/sql/%extension_name%.sql [new file with mode: 0644]
lib/pgxn_utils/templates/root/sql/uninstall_%extension_name%.sql [new file with mode: 0644]
lib/pgxn_utils/templates/root/test/expected/base.out [new file with mode: 0644]
lib/pgxn_utils/templates/root/test/sql/base.sql [new file with mode: 0644]
spec/cli_spec.rb

index f80a77ccdd758d096fa99e5a3cc52f649570d61a..b8a2e48e3556c1e7388c2e5fc00c0148f32ef468 100644 (file)
@@ -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 (file)
index 0000000..7024085
--- /dev/null
@@ -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 (file)
index 0000000..afbbe37
--- /dev/null
@@ -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 (file)
index 0000000..ff0022e
--- /dev/null
@@ -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 (file)
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 (file)
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 (file)
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 (file)
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 (file)
index 0000000..e69de29
index 7122e268f4d9a4a614b61aa8f90e89c089ae1165..c78f4456c9cd3fe46c184d44bb8a0aa0c3c15c21 100644 (file)
@@ -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"