jdt 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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