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
@@ -1,261 +1,52 @@
1
1
  require 'thor'
2
+ require 'thor/actions'
2
3
  require 'date'
3
4
  require 'nokogiri'
4
5
 
5
6
  module Jdt
6
7
 
7
- class ExtensionTypeNotFoundError < RuntimeError;
8
- end
9
-
10
8
  class Generator < Thor
11
9
  include Thor::Actions
12
10
 
13
- # include templates directory
14
- def self.source_root
15
- File.dirname(__FILE__)
16
- end
17
-
18
11
  attr_accessor :name, :author, :description, :creation_date, :location
19
12
 
20
- def initialize(name)
13
+ desc "generate NAME", "generate using name"
14
+
15
+ def generate(name)
16
+
17
+ # set up variables with default values
21
18
  @name = name
22
19
  @version = "0.0.1"
23
20
  @author = "AUTHOR"
24
21
  @description = "DESCRIPTION"
25
22
  @creation_date = "#{Date::MONTHNAMES[Time.now.month]} #{Time.now.year}"
26
23
  @location = "."
27
- end
28
24
 
29
- no_tasks{
30
- def generate
31
- # create directory
25
+ # create directory and files which every extension needs
32
26
  empty_directory(prefixed_name)
33
-
34
- # TODO create README, LICENSE, CHANGELOG
35
- end
36
-
37
- def type
38
- throw NoMethodError
39
- end
40
-
41
- def type_short
42
- throw NoMethodError
27
+ template("README.erb", "#{prefixed_name}/README")
28
+ #template("LICENSE.erb", "#{prefixed_name}/LICENSE")
29
+ template("CHANGELOG.erb", "#{prefixed_name}/CHANGELOG")
30
+ template("manifest.xml.erb", "#{prefixed_name}/manifest.xml")
43
31
  end
44
32
 
45
- def self.find(type, name)
46
33
 
47
- if (type == :component)
48
- ComponentGenerator.new(name)
49
- elsif(type == :module)
50
- ModuleGenerator.new(name)
51
- elsif(type == :plugin)
52
- PluginGenerator.new(name)
53
- elsif(type == :library)
54
- LibraryGenerator.new(name)
55
- elsif(type == :template)
56
- TemplateGenerator.new(name)
57
- elsif(type == :language)
58
- LanguageGenerator.new(name)
59
- else
60
- raise ExtensionTypeNotFoundError
34
+ no_tasks {
35
+ def type
36
+ throw NoMethodError
61
37
  end
62
38
 
63
- end
64
-
65
- def prefixed_name
66
- "#{type_short}_#{name}"
67
- end
68
-
69
- def folder
70
- "#{location}/#{prefixed_name}"
71
- end
72
- }
73
- end
74
-
75
- class LanguageGenerator < Generator
76
- no_tasks{
77
- def generate
78
- super
79
-
80
- end
81
-
82
- def type
83
- "language"
84
- end
85
-
86
- def type_short
87
- "lang"
88
- end
89
- }
90
- end
91
-
92
- class TemplateGenerator < Generator
93
- no_tasks{
94
- def generate
95
- super
96
-
97
- #create empty directory
98
- empty_directory("#{folder}/css")
99
- empty_directory("#{folder}/html")
100
- empty_directory("#{folder}/images")
101
- end
102
-
103
- def type
104
- "template"
105
- end
106
-
107
- def type_short
108
- "tpl"
109
- end
110
- }
111
- end
112
-
113
- class LibraryGenerator < Generator
114
- no_tasks{
115
- def generate
116
- super
117
- end
118
-
119
- def type
120
- "library"
121
- end
122
-
123
- def type_short
124
- "lib"
125
- end
126
- }
127
- end
128
-
129
- class PluginGenerator < Generator
130
- no_tasks{
131
- def generate
132
- super
133
-
134
- # create files
135
- template("templates/plugin/manifest.xml.erb", "#{folder}/#{prefixed_name}.xml")
136
- template("templates/plugin/main.php.erb", "#{folder}/#{prefixed_name}.php")
137
- end
138
-
139
- def type
140
- "plugin"
141
- end
142
-
143
- def type_short
144
- "plg"
145
- end
146
- }
147
- end
148
-
149
- class ModuleGenerator < Generator
150
- no_tasks{
151
- def generate
152
- super
153
-
154
- # create sub directories
155
- empty_directory("#{folder}/tmpl")
156
-
157
- # create files
158
- template("templates/module/manifest.xml.erb", "#{folder}/#{prefixed_name}.xml")
159
- template("templates/module/mod_name.php.erb", "#{folder}/#{prefixed_name}.php")
160
- template("templates/module/helper.php.erb", "#{folder}/helper.php")
161
- template("templates/module/tmpl/default.php.erb", "#{folder}/tmpl/default.php")
162
- end
163
-
164
- def type
165
- "module"
166
- end
167
-
168
- def type_short
169
- "mod"
170
- end
171
- }
172
- end
173
-
174
- class ComponentGenerator < Generator
175
- no_tasks{
176
- def generate
177
- super
178
-
179
- view_name = "#{name}"
180
-
181
- empty_directory("#{folder}")
182
- template('templates/component/manifest.xml.erb', "#{folder}/manifest.xml")
183
- template('templates/component/script.php.erb', "#{folder}/script.php")
184
-
185
- # site
186
- site_dir = "#{folder}/site"
187
- empty_directory("#{site_dir}")
188
- template('templates/component/site/com_name.php.erb', "#{site_dir}/#{prefixed_name}.php")
189
- template('templates/component/site/controller.php.erb', "#{site_dir}/controller.php")
190
-
191
- #site view
192
- empty_directory("#{site_dir}/views/")
193
- empty_directory("#{site_dir}/views/#{view_name}")
194
- template('templates/component/site/views/view_name/view.html.erb', "#{site_dir}/views/#{view_name}/view.html.php")
195
- empty_directory("#{site_dir}/views/#{view_name}/tmpl")
196
- template('templates/component/site/views/view_name/tmpl/default.php.erb', "#{site_dir}/views/#{view_name}/tmpl/default.php")
197
- template('templates/component/site/views/view_name/tmpl/default.xml.erb', "#{site_dir}/views/#{view_name}/tmpl/default.xml")
198
-
199
- #site models
200
- empty_directory("#{site_dir}/models/")
201
- template('templates/component/site/models/com_model_name.erb', "#{site_dir}/models/com_#{name}.php")
202
-
203
- #site controllers
204
- empty_directory("#{site_dir}/controllers/")
205
-
206
- #site language
207
- empty_directory("#{site_dir}/language/")
208
- empty_directory("#{site_dir}/language/en-GB/")
209
- empty_directory("#{site_dir}/language/de-DE/")
210
-
211
- # admin
212
- admin_dir = "#{folder}/admin"
213
- empty_directory("#{admin_dir}")
214
- template('templates/component/admin/access.xml.erb', "#{admin_dir}/access.xml")
215
- template('templates/component/admin/config.xml.erb', "#{admin_dir}/config.xml")
216
- template('templates/component/admin/com_name.php.erb', "#{admin_dir}/com_#{name}.php")
217
- template('templates/component/admin/controller.php.erb', "#{admin_dir}/controller.php")
218
-
219
- #admin views
220
- empty_directory("#{admin_dir}/views/")
221
- empty_directory("#{admin_dir}/views/#{view_name}")
222
- template('templates/component/admin/views/view_name/view.html.erb', "#{admin_dir}/views/#{view_name}/view.html.php")
223
- empty_directory("#{admin_dir}/views/#{view_name}/tmpl")
224
- template('templates/component/admin/views/view_name/tmpl/default.php.erb', "#{admin_dir}/views/#{view_name}/tmpl/default.php")
225
-
226
- #admin models
227
- empty_directory("#{admin_dir}/models/")
228
- empty_directory("#{admin_dir}/models/forms/")
229
- empty_directory("#{admin_dir}/models/rules/")
230
- empty_directory("#{admin_dir}/models/fields/")
231
-
232
- #admin controllers
233
- empty_directory("#{admin_dir}/controllers/")
234
-
235
- #admin helpers
236
- empty_directory("#{admin_dir}/helpers/")
237
-
238
- #admin tables
239
- empty_directory("#{admin_dir}/tables/")
240
-
241
- #admin language
242
- empty_directory("#{admin_dir}/language/")
243
- empty_directory("#{admin_dir}/language/en-GB/")
244
- empty_directory("#{admin_dir}/language/de-DE/")
245
-
246
- #admin sql
247
- empty_directory("#{admin_dir}/sql/")
248
- empty_directory("#{admin_dir}/sql/updates/")
249
-
250
- end
39
+ def type_short
40
+ throw NoMethodError
41
+ end
251
42
 
252
- def type
253
- "component"
254
- end
43
+ def prefixed_name
44
+ "#{type_short}_#{name}"
45
+ end
255
46
 
256
- def type_short
257
- "com"
258
- end
47
+ def folder
48
+ "#{location}/#{prefixed_name}"
49
+ end
259
50
  }
260
51
  end
261
52
 
@@ -0,0 +1,21 @@
1
+ module Jdt
2
+
3
+ class LanguageGenerator < Generator
4
+
5
+ def generate(name)
6
+ super
7
+
8
+ end
9
+
10
+ no_tasks {
11
+ def type
12
+ "language"
13
+ end
14
+
15
+ def type_short
16
+ "lang"
17
+ end
18
+ }
19
+ end
20
+
21
+ end
@@ -0,0 +1,29 @@
1
+ module Jdt
2
+
3
+
4
+ class LibraryGenerator < Generator
5
+
6
+ # include templates directory
7
+ def self.source_root
8
+ "#{File.dirname(__FILE__)}/templates/library"
9
+ end
10
+
11
+ def generate(name)
12
+ super
13
+
14
+ empty_directory("#{prefixed_name}/lib")
15
+ template("entry.php","#{prefixed_name}/#{prefixed_name}.php")
16
+ end
17
+
18
+ no_tasks {
19
+ def type
20
+ "library"
21
+ end
22
+
23
+ def type_short
24
+ "lib"
25
+ end
26
+ }
27
+ end
28
+
29
+ end
@@ -0,0 +1,29 @@
1
+ module Jdt
2
+
3
+ class ModuleGenerator < Generator
4
+
5
+ def generate(name)
6
+ super
7
+
8
+ # create sub directories
9
+ empty_directory("#{folder}/tmpl")
10
+
11
+ # create files
12
+ template("templates/module/manifest.xml.erb", "#{folder}/#{prefixed_name}.xml")
13
+ template("templates/module/mod_name.php.erb", "#{folder}/#{prefixed_name}.php")
14
+ template("templates/module/helper.php.erb", "#{folder}/helper.php")
15
+ template("templates/module/tmpl/default.php.erb", "#{folder}/tmpl/default.php")
16
+ end
17
+
18
+ no_tasks {
19
+ def type
20
+ "module"
21
+ end
22
+
23
+ def type_short
24
+ "mod"
25
+ end
26
+ }
27
+ end
28
+
29
+ end
@@ -0,0 +1,24 @@
1
+ module Jdt
2
+
3
+ class PluginGenerator < Generator
4
+
5
+ def generate(name)
6
+ super
7
+
8
+ # create files
9
+ template("templates/plugin/manifest.xml.erb", "#{folder}/#{prefixed_name}.xml")
10
+ template("templates/plugin/main.php.erb", "#{folder}/#{prefixed_name}.php")
11
+ end
12
+
13
+ no_tasks {
14
+ def type
15
+ "plugin"
16
+ end
17
+
18
+ def type_short
19
+ "plg"
20
+ end
21
+ }
22
+ end
23
+
24
+ end
@@ -0,0 +1,25 @@
1
+ module Jdt
2
+
3
+ class TemplateGenerator < Generator
4
+
5
+ def generate(name)
6
+ super
7
+
8
+ #create empty directory
9
+ empty_directory("#{folder}/css")
10
+ empty_directory("#{folder}/html")
11
+ empty_directory("#{folder}/images")
12
+ end
13
+
14
+ no_tasks {
15
+ def type
16
+ "template"
17
+ end
18
+
19
+ def type_short
20
+ "tpl"
21
+ end
22
+ }
23
+ end
24
+
25
+ end
File without changes
@@ -0,0 +1,7 @@
1
+
2
+
3
+ # Description
4
+
5
+ # Installation
6
+
7
+ # Frequently Asked Questions
@@ -0,0 +1,4 @@
1
+ <?PHP
2
+ /*
3
+ * This files is the entry file of the library <%= @name %>
4
+ */
@@ -0,0 +1,32 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <extension type="library" version="1.7.0" method="upgrade">
3
+
4
+ <name><%= @name %></name>
5
+ <version><%= @version %></version>
6
+
7
+ <creationDate><%= @creation_date %></creationDate>
8
+ <homepage>https://www.github.com/simonharrer/activerecord</homepage>
9
+ <description><%= @description %></description>
10
+
11
+ <!-- optional attributes
12
+ <author><%= @author %></author>
13
+ <authorEmail>email.to@author.com</authorEmail>
14
+ <authorUrl>http://www.url.to/author</authorUrl>
15
+
16
+ <license>LICENSE</license>
17
+ <copyright>COPYRIGHT</copyright>
18
+ -->
19
+
20
+ <!-- Library specific attributes -->
21
+ <libraryname><%= @libraryname %></libraryname>
22
+
23
+ <!-- Copy Section -->
24
+ <files>
25
+ <filename><%= @name %>.php</filename>
26
+ <filename>README</filename>
27
+ <filename>CHANGELOG</filename>
28
+ <folder>lib</folder>
29
+ </files>
30
+
31
+
32
+ </extension>
data/lib/jdt/generator.rb CHANGED
@@ -1 +1,7 @@
1
- require "jdt/generator/generator"
1
+ require "jdt/generator/generator"
2
+ require "jdt/generator/component_generator"
3
+ require "jdt/generator/language_generator"
4
+ require "jdt/generator/library_generator"
5
+ require "jdt/generator/module_generator"
6
+ require "jdt/generator/plugin_generator"
7
+ require "jdt/generator/template_generator"
@@ -22,28 +22,18 @@ module Jdt
22
22
 
23
23
  def zip(type)
24
24
 
25
- if (type == :release)
26
- zip_file_name = zip_file
27
- elsif (type == :build)
28
- zip_file_name = zip_file_with_timestamp
29
- else
30
- raise ArgumentError("Type is not either :release or :build, but #{type}")
31
- end
25
+ zip_file_name = zip_file_name(type)
32
26
 
33
27
  # ensure that the file does not exist
34
- if (File.exists?(zip_file_name))
35
- File.delete(zip_file_name)
36
- end
28
+ ensure_zip_file_does_not_exist(zip_file_name)
37
29
 
38
30
  # ensure that directory exists
39
- dir = File.dirname(zip_file_name)
40
- if(not File.directory?(dir))
41
- Dir.mkdir(dir)
42
- end
31
+ ensure_zip_dir_exists(zip_file_name)
43
32
 
44
33
  # create zip file
45
34
  Zip::ZipFile.open(zip_file_name, Zip::ZipFile::CREATE) do |zos|
46
35
  add_files_to_zip(zos)
36
+ add_index_html_to_every_dir(zos)
47
37
  end
48
38
 
49
39
  # return zip file
@@ -52,6 +42,30 @@ module Jdt
52
42
 
53
43
  private
54
44
 
45
+ def ensure_zip_dir_exists(zip_file_name)
46
+ dir = File.dirname(zip_file_name)
47
+ if (not File.directory?(dir))
48
+ Dir.mkdir(dir)
49
+ end
50
+ end
51
+
52
+ def ensure_zip_file_does_not_exist(zip_file_name)
53
+ if (File.exists?(zip_file_name))
54
+ File.delete(zip_file_name)
55
+ end
56
+ end
57
+
58
+ def zip_file_name(type)
59
+ if (type == :release)
60
+ zip_file_name = zip_file
61
+ elsif (type == :build)
62
+ zip_file_name = zip_file_with_timestamp
63
+ else
64
+ raise ArgumentError("Type is not either :release or :build, but #{type}")
65
+ end
66
+ zip_file_name
67
+ end
68
+
55
69
  def zip_folder
56
70
  "#{@manifest.folder}/zip"
57
71
  end
@@ -68,7 +82,7 @@ module Jdt
68
82
  Time.now.strftime("%Y%m%d%H%M%S%L")
69
83
  end
70
84
 
71
- def add_files_to_zip(zip)
85
+ def add_files_to_zip(zip)
72
86
 
73
87
  # add manifest
74
88
  add_manifest(zip)
@@ -99,7 +113,35 @@ module Jdt
99
113
  end
100
114
  end
101
115
 
116
+ def add_index_html_to_every_dir(zos)
117
+ # TODO add a index.html file containing only the line <html><body bgcolor="#FFFFFF"></body></html> at every directory within the zip file
118
+ end
119
+
120
+ end
102
121
 
122
+ class IndexCreater
123
+ include Thor::Actions
124
+
125
+ def initialize (path)
126
+ @path = path
127
+ end
128
+
129
+ def create_index
130
+ create_index_recursive(@path)
131
+ end
132
+
133
+ private
134
+
135
+ def create_index_recursive (path)
136
+ template('/templates/component/index.html.erb', "#{path}/index.html")
137
+ Dir.chdir("#{path}") do
138
+ Dir.glob("*").each do |dir|
139
+ if File.directory?(dir)
140
+ create_index_recursive("#{path}/#{dir}")
141
+ end
142
+ end
143
+ end
144
+ end
103
145
 
104
146
  end
105
147
 
@@ -1,3 +1,5 @@
1
+ require "pathname"
2
+
1
3
  module Jdt
2
4
 
3
5
  class Manifest
@@ -7,7 +9,7 @@ module Jdt
7
9
  end
8
10
 
9
11
  def to_specific
10
- if(ext_type == "library")
12
+ if (ext_type == "library")
11
13
  LibraryManifest.new(file)
12
14
  else
13
15
  raise RuntimeError("the current type #{ext_type} is not supported")
@@ -36,9 +38,26 @@ module Jdt
36
38
 
37
39
  def retrieve_manifest_path
38
40
 
39
- # create list of possible files for the manifest
40
- manifest_named_after_directory = File.basename(File.expand_path(path))
41
- manifest_files = ["#{File.expand_path(path)}/manifest.xml", manifest_named_after_directory]
41
+ manifest_files = []
42
+
43
+ Pathname.new(File.expand_path(path)).ascend do |current_path|
44
+
45
+ # create list of possible files for the manifest
46
+ current_folder = current_path
47
+ current_folder_name = File.basename(current_folder)
48
+
49
+ manifest_named_after_directory = "#{current_folder}/#{current_folder_name}.xml"
50
+ manifest_with_fixed_name = "#{current_folder}/manifest.xml"
51
+ manifest_files << manifest_with_fixed_name
52
+ manifest_files << manifest_named_after_directory
53
+
54
+ if (current_folder_name.include? "_")
55
+ folder_name_without_prefix = current_folder_name.split("_")[1..-1].join("_")
56
+
57
+ manifest_files << "#{current_folder}/#{folder_name_without_prefix}.xml"
58
+ end
59
+
60
+ end
42
61
 
43
62
  # evaluate each possible manifest file
44
63
  manifest_files.each do |file|
@@ -5,33 +5,9 @@ module Jdt
5
5
  class Manifest
6
6
 
7
7
  def secure
8
-
9
- end
10
-
11
- end
12
-
13
- class IndexCreater
14
- include Thor::Actions
15
-
16
- def initialize (path)
17
- @path = path
18
- end
19
-
20
- def create_index
21
- create_index_recursive(@path)
22
- end
23
-
24
- private
25
-
26
- def create_index_recursive (path)
27
- template('/templates/component/index.html.erb', "#{path}/index.html")
28
- Dir.chdir("#{path}") do
29
- Dir.glob("*").each do |dir|
30
- if File.directory?(dir)
31
- create_index_recursive("#{path}/#{dir}")
32
- end
33
- end
34
- end
8
+ "do nothing"
9
+ # TODO check if every file with the ending .php contains the line::::: defined('_JEXEC') or die('Restricted access');
10
+ # TODO if not, insert this directly after the line containing <?php within the file, including the comment: //No direct access to this file and print which files have been changed.
35
11
  end
36
12
 
37
13
  end