jdt 0.0.2 → 0.0.3

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.
Files changed (43) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile.lock +11 -5
  3. data/bin/jdt +3 -16
  4. data/cucumber.yml +0 -0
  5. data/features/clean.feature +2 -0
  6. data/features/find.feature +19 -0
  7. data/features/manifest.feature +17 -19
  8. data/features/new.feature +9 -94
  9. data/features/release.feature +0 -7
  10. data/features/status.feature +47 -10
  11. data/jdt.gemspec +2 -1
  12. data/lib/jdt/cli.rb +2 -1
  13. data/lib/jdt/commands/build.rb +10 -0
  14. data/lib/jdt/commands/new.rb +38 -16
  15. data/lib/jdt/config.rb +77 -0
  16. data/lib/jdt/generator/component_generator.rb +92 -0
  17. data/lib/jdt/generator/generator.rb +23 -232
  18. data/lib/jdt/generator/language_generator.rb +21 -0
  19. data/lib/jdt/generator/library_generator.rb +29 -0
  20. data/lib/jdt/generator/module_generator.rb +29 -0
  21. data/lib/jdt/generator/plugin_generator.rb +24 -0
  22. data/lib/jdt/generator/template_generator.rb +25 -0
  23. data/lib/jdt/generator/templates/{access.xml.erb → component/access.xml.erb} +0 -0
  24. data/lib/jdt/generator/templates/{config.xml.erb → component/config.xml.erb} +0 -0
  25. data/lib/jdt/generator/templates/{controller.php.erb → component/controller.php.erb} +0 -0
  26. data/lib/jdt/generator/templates/{dummy_html.erb → component/dummy_html.erb} +0 -0
  27. data/lib/jdt/generator/templates/{entry.erb → component/entry.erb} +0 -0
  28. data/lib/jdt/generator/templates/library/CHANGELOG.erb +0 -0
  29. data/lib/jdt/generator/templates/library/README.erb +7 -0
  30. data/lib/jdt/generator/templates/library/entry.php.erb +4 -0
  31. data/lib/jdt/generator/templates/library/manifest.xml.erb +32 -0
  32. data/lib/jdt/generator.rb +7 -1
  33. data/lib/jdt/manifest/build.rb +57 -15
  34. data/lib/jdt/manifest/find.rb +23 -4
  35. data/lib/jdt/manifest/secure.rb +3 -27
  36. data/lib/jdt/manifest/xslts/pretty_print.xsl +7 -43
  37. data/lib/jdt/util.rb +4 -0
  38. data/lib/jdt/version.rb +1 -1
  39. data/lib/jdt/xampp.rb +109 -0
  40. metadata +47 -23
  41. data/lib/jdt/generator/templates/manifest.xml.erb +0 -59
  42. data/lib/jdt/generator/templates/script.php.erb +0 -66
  43. data/lib/not_yet_added/xampp.rb +0 -82
data/.gitignore CHANGED
@@ -4,3 +4,4 @@
4
4
  *.gem
5
5
  /tmp/
6
6
  .bundle
7
+ /doc/
data/Gemfile.lock CHANGED
@@ -2,29 +2,32 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  jdt (0.0.2)
5
+ launchy
5
6
  nokogiri
6
7
  rubyzip
7
- thor
8
+ thor (= 0.15.0.rc2)
8
9
 
9
10
  GEM
10
11
  remote: http://rubygems.org/
11
12
  specs:
13
+ addressable (2.2.6)
12
14
  aruba (0.4.6)
13
15
  bcat (>= 0.6.1)
14
16
  childprocess (>= 0.2.0)
15
17
  cucumber (>= 1.0.2)
18
+ rdiscount (>= 1.6.8)
16
19
  rspec (>= 2.6.0)
17
20
  bcat (0.6.1)
18
21
  rack (~> 1.0)
19
22
  builder (3.0.0)
20
23
  childprocess (0.2.2)
21
24
  ffi (~> 1.0.6)
22
- cucumber (1.0.2)
25
+ cucumber (1.0.3)
23
26
  builder (>= 2.1.2)
24
27
  diff-lcs (>= 1.1.2)
25
- gherkin (~> 2.4.5)
28
+ gherkin (~> 2.4.18)
26
29
  json (>= 1.4.6)
27
- term-ansicolor (>= 1.0.5)
30
+ term-ansicolor (>= 1.0.6)
28
31
  diff-lcs (1.1.3)
29
32
  ffi (1.0.9-java)
30
33
  ffi (1.0.9-x86-mingw32)
@@ -34,10 +37,13 @@ GEM
34
37
  json (>= 1.4.6)
35
38
  json (1.5.4)
36
39
  json (1.5.4-java)
40
+ launchy (2.0.5)
41
+ addressable (~> 2.2.6)
37
42
  nokogiri (1.5.0-java)
38
43
  nokogiri (1.5.0-x86-mingw32)
39
44
  rack (1.3.2)
40
45
  rake (0.9.2)
46
+ rdiscount (1.6.8)
41
47
  rspec (2.6.0)
42
48
  rspec-core (~> 2.6.0)
43
49
  rspec-expectations (~> 2.6.0)
@@ -48,7 +54,7 @@ GEM
48
54
  rspec-mocks (2.6.0)
49
55
  rubyzip (0.9.4)
50
56
  term-ansicolor (1.0.6)
51
- thor (0.14.6)
57
+ thor (0.15.0.rc2)
52
58
 
53
59
  PLATFORMS
54
60
  java
data/bin/jdt CHANGED
@@ -1,16 +1,3 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # This file was generated by Bundler.
4
- #
5
- # The application 'jdt' is installed as part of a gem, and
6
- # this file is here to facilitate running it.
7
- #
8
-
9
- require 'pathname'
10
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
- Pathname.new(__FILE__).realpath)
12
-
13
- require 'rubygems'
14
- require 'bundler/setup'
15
-
16
- load Gem.bin_path('jdt', 'jdt')
1
+ require "rubygems"
2
+ require "jdt/cli"
3
+ Jdt::CLI.start
data/cucumber.yml ADDED
File without changes
@@ -0,0 +1,2 @@
1
+ Feature: clean
2
+
@@ -0,0 +1,19 @@
1
+ @wip
2
+ Feature: find the manifest file
3
+
4
+ Scenario Outline: Not within an extension
5
+ Given the current directory is no extension directory
6
+ When I run `jdt.bat <status>`
7
+ Then the output should contain exactly "No manifest found\n"
8
+
9
+ Examples:
10
+ | status |
11
+ | status |
12
+ | clean |
13
+ | build |
14
+ | release |
15
+ | manifest |
16
+ | validate |
17
+ | secure |
18
+ | bump |
19
+ | install |
@@ -1,25 +1,23 @@
1
1
  Feature: Manifest
2
2
 
3
- Scenario: Not within an extension
4
- Given the current directory is no extension directory
5
- When I run `jdt.bat manifest`
6
- Then the output should contain exactly "No manifest found\n"
7
-
8
3
  Scenario: Success
9
4
  Given a file named "manifest.xml" with:
10
- """
11
- <?xml version="1.0" encoding="UTF-8"?>
12
- <extension type="library" version="1.7.0" method="upgrade">
13
- <name>activerecord</name>
14
- <version>1.0.0</version>
15
- </extension>
16
- """
5
+ """
6
+ <?xml version="1.0" encoding="UTF-8"?>
7
+
8
+ <extension type="library" version="1.7.0" method="upgrade">
9
+ <name>activerecord</name>
10
+
11
+ <version>1.0.0</version>
12
+ </extension>
13
+ """
17
14
  When I run `jdt.bat manifest`
18
15
  Then the output should contain exactly:
19
- """
20
- <?xml version="1.0" encoding="UTF-8"?>
21
- <extension method="upgrade" type="library" version="1.7.0">
22
- <name>activerecord</name>
23
- <version>1.0.0</version>
24
- </extension>
25
- """
16
+ """
17
+ <?xml version="1.0" encoding="UTF-8"?>
18
+ <extension type="library" version="1.7.0" method="upgrade">
19
+ <name>activerecord</name>
20
+ <version>1.0.0</version>
21
+ </extension>
22
+
23
+ """
data/features/new.feature CHANGED
@@ -1,97 +1,12 @@
1
1
  Feature: new
2
2
 
3
+ @wip
3
4
  Scenario: Create library
4
- When I run `jdt new library test`
5
- Then a directory named "lib_test" should exist
6
- And a file named "test/manifest.xml" with:
7
- """
8
- <?xml version="1.0" encoding="UTF-8"?>
9
- <extension method="upgrade" type="library" version="1.7.0">
10
- <name>test</name>
11
- <version>0.0.1</version>
12
- <libraryname>test</libraryname>
13
-
14
- </extension>
15
- """
16
- And a file named "test/test.php" with:
17
- """
18
-
19
- """
20
-
21
- Scenario: Create plugin
22
- When I run `jdt new plugin test`
23
- Then a directory named "plg_test" should exist
24
- And a file named "test/manifest.xml" with:
25
- """
26
- <?xml version="1.0" encoding="UTF-8"?>
27
- <extension method="upgrade" type="library" version="1.7.0">
28
- <name>test</name>
29
- <version>0.0.1</version>
30
- <libraryname>test</libraryname>
31
-
32
- </extension>
33
- """
34
- And a file named "test/test.php" with:
35
- """
36
-
37
- """
38
-
39
- Scenario: Create template
40
- When I run `jdt new template test`
41
- Then a directory named "tpl_test" should exist
42
- And a file named "tpl_test/manifest.xml" with:
43
- """
44
- <?xml version="1.0" encoding="UTF-8"?>
45
- <extension method="upgrade" type="template" version="1.7.0">
46
- <name>test</name>
47
- <version>0.0.1</version>
48
- </extension>
49
- """
50
-
51
- Scenario: Create language
52
- When I run `jdt new language test`
53
- Then a directory named "lang_test" should exist
54
- And a file named "lang_test/manifest.xml" with:
55
- """
56
- <?xml version="1.0" encoding="UTF-8"?>
57
- <extension method="upgrade" type="language" version="1.7.0">
58
- <name>test</name>
59
- <version>0.0.1</version>
60
- </extension>
61
- """
62
-
63
- Scenario: Create module
64
- When I run `jdt new module test`
65
- Then a directory named "mod_test" should exist
66
- And a file named "mod_test/manifest.xml" with:
67
- """
68
- <?xml version="1.0" encoding="UTF-8"?>
69
- <extension method="upgrade" type="module" version="1.7.0">
70
- <name>test</name>
71
- <version>0.0.1</version>
72
- </extension>
73
- """
74
-
75
- Scenario: Create component
76
- When I run `jdt new component test`
77
- Then a directory named "com_test" should exist
78
- And a file named "com_test/manifest.xml" with:
79
- """
80
- <?xml version="1.0" encoding="UTF-8"?>
81
- <extension method="upgrade" type="module" version="1.7.0">
82
- <name>test</name>
83
- <version>0.0.1</version>
84
- </extension>
85
- """
86
-
87
- Scenario: Create package
88
- When I run `jdt new package test`
89
- Then a directory named "pkg_test" should exist
90
- And a file named "pkg_test/manifest.xml" with:
91
- """
92
- <?xml version="1.0" encoding="UTF-8"?>
93
- <extension method="upgrade" type="package" version="1.7.0">
94
- <name>test</name>
95
- <version>0.0.1</version>
96
- </extension>
97
- """
5
+ When I successfully run `jdt.bat new library test`
6
+ Then the following directories should exist:
7
+ | lib_test |
8
+ | lib_test/lib |
9
+ And the following files should exist:
10
+ | lib_test/README |
11
+ | lib_test/CHANGELOG |
12
+ | lib_test/test.php |
@@ -3,13 +3,6 @@ Feature: release
3
3
  In order to obtain a deployable zip file of the extension
4
4
  I as a CLI
5
5
 
6
-
7
- Scenario: Not within an extension
8
- Given the current directory is no extension directory
9
- When I run `jdt.bat release`
10
- Then the output should contain exactly "No manifest found\n"
11
-
12
-
13
6
  Scenario: Success
14
7
  Given a file named "manifest.xml" with:
15
8
  """
@@ -4,19 +4,56 @@ Feature: Status
4
4
  As a CLI
5
5
  I want to obtain the name, type and version of the extension
6
6
 
7
- Scenario: Not within an extension
8
- Given the current directory is no extension directory
9
- When I run `jdt.bat status`
10
- Then the output should contain exactly "No manifest found\n"
11
-
12
7
  Scenario: Status success
13
8
  Given a file named "manifest.xml" with:
14
9
  """
15
- <?xml version="1.0" encoding="UTF-8"?>
16
- <extension type="library" version="1.7.0" method="upgrade">
17
- <name>activerecord</name>
18
- <version>1.0.0</version>
19
- </extension>
10
+ <?xml version="1.0" encoding="UTF-8"?>
11
+ <extension type="library" version="1.7.0" method="upgrade">
12
+ <name>activerecord</name>
13
+ <version>1.0.0</version>
14
+ </extension>
15
+ """
16
+ When I run `jdt.bat status`
17
+ Then the output should contain exactly "Extension lib_activerecord-v1.0.0\n"
18
+
19
+ Scenario: Manifest found in directory named after itself with underscore
20
+ Given a directory named "lib_test"
21
+ And a file named "lib_test/test.xml" with:
22
+ """
23
+ <?xml version="1.0" encoding="UTF-8"?>
24
+ <extension type="library" version="1.7.0" method="upgrade">
25
+ <name>activerecord</name>
26
+ <version>1.0.0</version>
27
+ </extension>
28
+ """
29
+ And I cd to "lib_test"
30
+ When I run `jdt.bat status`
31
+ Then the output should contain exactly "Extension lib_activerecord-v1.0.0\n"
32
+
33
+ Scenario: Manifest found in directory named after itself with underscore
34
+ Given a directory named "test"
35
+ And a file named "test/test.xml" with:
36
+ """
37
+ <?xml version="1.0" encoding="UTF-8"?>
38
+ <extension type="library" version="1.7.0" method="upgrade">
39
+ <name>activerecord</name>
40
+ <version>1.0.0</version>
41
+ </extension>
42
+ """
43
+ And I cd to "test"
44
+ When I run `jdt.bat status`
45
+ Then the output should contain exactly "Extension lib_activerecord-v1.0.0\n"
46
+
47
+ Scenario: Manifest found in sub directory
48
+ Given a directory named "lib_test/subdir"
49
+ And a file named "lib_test/test.xml" with:
50
+ """
51
+ <?xml version="1.0" encoding="UTF-8"?>
52
+ <extension type="library" version="1.7.0" method="upgrade">
53
+ <name>activerecord</name>
54
+ <version>1.0.0</version>
55
+ </extension>
20
56
  """
57
+ And I cd to "lib_test/subdir"
21
58
  When I run `jdt.bat status`
22
59
  Then the output should contain exactly "Extension lib_activerecord-v1.0.0\n"
data/jdt.gemspec CHANGED
@@ -17,8 +17,9 @@ Gem::Specification.new do |s|
17
17
  s.require_paths = ["lib"]
18
18
 
19
19
  s.add_dependency "nokogiri"
20
- s.add_dependency "thor"
20
+ s.add_dependency "thor","0.15.0.rc2"
21
21
  s.add_dependency "rubyzip"
22
+ s.add_dependency "launchy"
22
23
  s.add_development_dependency "rspec"
23
24
  s.add_development_dependency "cucumber"
24
25
  s.add_development_dependency "aruba"
data/lib/jdt/cli.rb CHANGED
@@ -5,13 +5,14 @@ require "jdt/commands/bump"
5
5
  require "jdt/commands/install"
6
6
  require "jdt/commands/new"
7
7
  require "jdt/commands/pretty_print"
8
- #require "jdt/commands/secure"
8
+ require "jdt/commands/secure"
9
9
  require "jdt/commands/status"
10
10
  require "jdt/commands/validate"
11
11
  require "jdt/commands/version"
12
12
 
13
13
  require "jdt/manifest"
14
14
  require "jdt/generator"
15
+ require "jdt/xampp"
15
16
 
16
17
  module Jdt
17
18
 
@@ -23,6 +23,16 @@ module Jdt
23
23
  end
24
24
  end
25
25
 
26
+ desc "clean","removes the /zip directory"
27
+ method_options :location => "."
28
+
29
+ def clean
30
+ handle_errors do
31
+ Manifest.find(options[:location]).clean
32
+ say "Everything is cleaned!"
33
+ end
34
+ end
35
+
26
36
  end
27
37
 
28
38
  end
@@ -1,31 +1,53 @@
1
1
  require 'thor'
2
+ require 'thor/group'
2
3
  require 'nokogiri'
3
4
 
4
5
  module Jdt
5
6
 
6
- class CLI < Thor
7
- include Thor::Actions
7
+ class GeneratorCLI < Thor
8
+
9
+ desc "component NAME", "generate component with NAME"
10
+
11
+ def component(name)
12
+ ComponentGenerator.new.generate(name)
13
+ end
14
+
15
+ desc "module NAME", "generate module with NAME"
16
+
17
+ def module(name)
18
+ ModuleGenerator.new.generate(name)
19
+ end
20
+
21
+ desc "plugin NAME", "generate plugin with NAME"
22
+
23
+ def plugin(name)
24
+ PluginGenerator.new.generate(name)
25
+ end
8
26
 
9
- desc "new TYPE NAME", "creates a stub of TYPE with NAME"
10
- method_options :location => "."
27
+ desc "language NAME", "generate language with NAME"
11
28
 
12
- def new(type, name)
29
+ def language(name)
30
+ LanguageGenerator.new.generate(name)
31
+ end
13
32
 
14
- handle_errors do
33
+ desc "template NAME", "generate template with NAME"
15
34
 
16
- begin
17
- generator = Generator.find(type.to_sym, name)
18
- generator.location = options[:location]
19
- generator.generate
20
- rescue Jdt::ExtensionTypeNotFoundError
21
- say("Given type is no Joomla extension type. Chose one of the available Joomla extension types:")
22
- say("Extension types: #{Generator::GENERATORS.join(" ")}")
23
- end
35
+ def template(name)
36
+ TemplateGenerator.new.generate(name)
37
+ end
24
38
 
25
- end
26
-
39
+ desc "library NAME", "generate library with NAME"
40
+
41
+ def library(name)
42
+ LibraryGenerator.new.generate(name)
27
43
  end
28
44
 
29
45
  end
30
46
 
47
+ class CLI < Thor
48
+ register Jdt::GeneratorCLI, :new, "new <command>", "Commands for new extensions"
49
+ end
50
+
51
+
52
+
31
53
  end
data/lib/jdt/config.rb ADDED
@@ -0,0 +1,77 @@
1
+ require "fileutils"
2
+
3
+ module Jdt
4
+
5
+ class Config
6
+
7
+ def initialize(file)
8
+
9
+ # ensure that folder exists
10
+ if (not File.exists?(directory))
11
+ FileUtils.makedirs(directory)
12
+ end
13
+
14
+ @file = file
15
+
16
+ # ensure that file exist
17
+ if (not File.exists?(yaml_file))
18
+ File.open(yaml_file, "w") do |f|
19
+ f << "\#YAML file for storing configuration information"
20
+ end
21
+ end
22
+ end
23
+
24
+ def directory
25
+ "#{ENV['HOME']}/.jdt"
26
+ end
27
+
28
+ def yaml_file
29
+ "#{directory}/#{@file}"
30
+ end
31
+
32
+ def yaml_props
33
+ props = YAML.load_file(yaml_file)
34
+ if (props)
35
+ props
36
+ else
37
+ Hash.new
38
+ end
39
+ end
40
+
41
+ def update
42
+ # read
43
+ props = yaml_props
44
+
45
+ # change
46
+ yield props
47
+
48
+ # write
49
+ File.open(yaml_file, "w") do |f|
50
+ f << props.to_yaml
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ class XamppConfig
57
+
58
+ def initialize
59
+ @yaml = Config.new("xampp.yml")
60
+ end
61
+
62
+ def xampp_path=(path)
63
+ @yaml.update do |props|
64
+ props["path"] = path
65
+ end
66
+ end
67
+
68
+ def xampp_path
69
+ @yaml.yaml_props["path"]
70
+ end
71
+
72
+ def htdocs_path
73
+ File.join(xampp_path,"htdocs")
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,92 @@
1
+ module Jdt
2
+
3
+ class ComponentGenerator < Generator
4
+
5
+ def generate(name)
6
+ super
7
+
8
+ view_name = "#{name}"
9
+
10
+ empty_directory("#{folder}")
11
+ template('templates/component/manifest.xml.erb', "#{folder}/manifest.xml")
12
+ template('templates/component/script.php.erb', "#{folder}/script.php")
13
+
14
+ # site
15
+ site_dir = "#{folder}/site"
16
+ empty_directory("#{site_dir}")
17
+ template('templates/component/site/com_name.php.erb', "#{site_dir}/#{prefixed_name}.php")
18
+ template('templates/component/site/controller.php.erb', "#{site_dir}/controller.php")
19
+
20
+ #site view
21
+ empty_directory("#{site_dir}/views/")
22
+ empty_directory("#{site_dir}/views/#{view_name}")
23
+ template('templates/component/site/views/view_name/view.html.erb', "#{site_dir}/views/#{view_name}/view.html.php")
24
+ empty_directory("#{site_dir}/views/#{view_name}/tmpl")
25
+ template('templates/component/site/views/view_name/tmpl/default.php.erb', "#{site_dir}/views/#{view_name}/tmpl/default.php")
26
+ template('templates/component/site/views/view_name/tmpl/default.xml.erb', "#{site_dir}/views/#{view_name}/tmpl/default.xml")
27
+
28
+ #site models
29
+ empty_directory("#{site_dir}/models/")
30
+ template('templates/component/site/models/com_model_name.erb', "#{site_dir}/models/com_#{name}.php")
31
+
32
+ #site controllers
33
+ empty_directory("#{site_dir}/controllers/")
34
+
35
+ #site language
36
+ empty_directory("#{site_dir}/language/")
37
+ empty_directory("#{site_dir}/language/en-GB/")
38
+ empty_directory("#{site_dir}/language/de-DE/")
39
+
40
+ # admin
41
+ admin_dir = "#{folder}/admin"
42
+ empty_directory("#{admin_dir}")
43
+ template('templates/component/admin/access.xml.erb', "#{admin_dir}/access.xml")
44
+ template('templates/component/admin/config.xml.erb', "#{admin_dir}/config.xml")
45
+ template('templates/component/admin/com_name.php.erb', "#{admin_dir}/com_#{name}.php")
46
+ template('templates/component/admin/controller.php.erb', "#{admin_dir}/controller.php")
47
+
48
+ #admin views
49
+ empty_directory("#{admin_dir}/views/")
50
+ empty_directory("#{admin_dir}/views/#{view_name}")
51
+ template('templates/component/admin/views/view_name/view.html.erb', "#{admin_dir}/views/#{view_name}/view.html.php")
52
+ empty_directory("#{admin_dir}/views/#{view_name}/tmpl")
53
+ template('templates/component/admin/views/view_name/tmpl/default.php.erb', "#{admin_dir}/views/#{view_name}/tmpl/default.php")
54
+
55
+ #admin models
56
+ empty_directory("#{admin_dir}/models/")
57
+ empty_directory("#{admin_dir}/models/forms/")
58
+ empty_directory("#{admin_dir}/models/rules/")
59
+ empty_directory("#{admin_dir}/models/fields/")
60
+
61
+ #admin controllers
62
+ empty_directory("#{admin_dir}/controllers/")
63
+
64
+ #admin helpers
65
+ empty_directory("#{admin_dir}/helpers/")
66
+
67
+ #admin tables
68
+ empty_directory("#{admin_dir}/tables/")
69
+
70
+ #admin language
71
+ empty_directory("#{admin_dir}/language/")
72
+ empty_directory("#{admin_dir}/language/en-GB/")
73
+ empty_directory("#{admin_dir}/language/de-DE/")
74
+
75
+ #admin sql
76
+ empty_directory("#{admin_dir}/sql/")
77
+ empty_directory("#{admin_dir}/sql/updates/")
78
+
79
+ end
80
+
81
+ no_tasks {
82
+ def type
83
+ "component"
84
+ end
85
+
86
+ def type_short
87
+ "com"
88
+ end
89
+ }
90
+ end
91
+
92
+ end