jqueryplugingen 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,14 @@
1
+ 0.2.0 2009-06-08
2
+
3
+ * rewrite of js plugin structure/code
4
+ * add rake bootstrap sequence
5
+ * add rake open tasks to browser for testing
6
+
7
+ == 0.1.5 2009-06-08
8
+
9
+ * add jsspec library
10
+ * add acceptance tests
11
+
1
12
  == 0.1.4 2009-06-08
2
13
 
3
14
  * BUG-FIX: plugin name was hardcoded on rake compile
data/Manifest.txt CHANGED
@@ -169,7 +169,11 @@ lib/jquery_plugin_gen/support/build.rake
169
169
  lib/jquery_plugin_gen/support/bundles.rake
170
170
  lib/jquery_plugin_gen/support/jquery.rake
171
171
  lib/jquery_plugin_gen/support/package.rake
172
+ lib/jquery_plugin_gen/support/test.rake
172
173
  lib/jquery_plugin_gen/tasks.rb
174
+ lib/jsspec/JSSpec.css
175
+ lib/jsspec/JSSpec.js
176
+ lib/jsspec/diff_match_patch.js
173
177
  lib/packer/Pack.pm
174
178
  lib/packer/ParseMaster.pm
175
179
  lib/packer/jsPacker.pl
@@ -178,6 +182,7 @@ lib/templates/README.txt.erb
178
182
  lib/templates/Rakefile.erb
179
183
  lib/templates/example.html.erb
180
184
  lib/templates/src/plugin.js.erb
185
+ lib/templates/test/acceptance.html.erb
181
186
  lib/templates/test/spec_plugin.js.erb
182
187
  lib/templates/test/specs.html.erb
183
188
  script/console
data/README.rdoc CHANGED
@@ -9,10 +9,10 @@ Generate the structure of jquery plugins easily. Manage library dependencies suc
9
9
 
10
10
  == FEATURES/PROBLEMS:
11
11
 
12
+ * CAN't have a '-' or '.' in the project name [need to split plugin name and filename :-)]
13
+ * refactor jquery.rake task like compiletask as it is pretty ugly and has some spaghetti going on
12
14
  * be able to use the produced code on linux and windows (need jqp.bat)
13
- * bundle up jsspec
14
15
  * include qunit
15
- * add acceptance test
16
16
  * add hoe-type features for updating plugins to jquery plugin page (as rake tasks)
17
17
  * be able to bundle/package library dependencies
18
18
  * be able to switch between local and remote libraries in actual html pages (perhaps this is the release bundle)
@@ -23,28 +23,89 @@ Generate the structure of jquery plugins easily. Manage library dependencies suc
23
23
 
24
24
  jqp -p myplugin
25
25
 
26
- This will generate:
26
+ jQuery plugin generator to help you kick start your plugin development with the following structure:
27
+
28
+ plugin
29
+ /src
30
+ /css
31
+ /images
32
+ query.plugin.js
33
+ /test
34
+ spec_plugin.js
35
+ acceptance_plugin.js
36
+ specs.html
37
+ acceptance.html
38
+ /lib
39
+ /jsspec
40
+ jquery.min.js
41
+ jquery-ui.js
42
+ /themes
43
+ /base
44
+ example.html
45
+ Rakefile
46
+ History.txt
47
+ README.txt
48
+
49
+ It will generate a base plugin of the structure:
50
+
51
+ ;(function($) {
52
+
53
+ $.jquery.test = {
54
+ VERSION: "0.0.1",
55
+ defaults: {
56
+ key: 'value'
57
+ }
58
+ };
59
+
60
+ $.fn.extend({
61
+ jquery.test: function(settings) {
62
+ settings = $.extend({}, $.jquery.test.defaults, settings);
63
+ return this.each( function(){
64
+ self = this;
65
+
66
+ // NOTE: semicolons are needed more if you are planning on packing your code
67
+ console.log(this);
68
+ console.log($(this));
69
+ console.log($.jquery.test.VERSION);
70
+ console.log($.jquery.test.defaults.key);
71
+ // your plugin
72
+
73
+ })
74
+ }
75
+
76
+ })
77
+ })(jQuery);
78
+
79
+ And a base set of jsspec tests all hooked into an html page ready to go:
80
+
81
+ describe('The tests can load', {
82
+
83
+ 'before': function() {
84
+ },
85
+
86
+ 'after': function(){
87
+ },
88
+
89
+ 'should load': function(){
90
+
91
+ },
92
+
93
+ })
94
+
95
+ Once you have written your code. You have three views of the plugin:
96
+
97
+ 1. Acceptance: rake acceptance (compiles and loads tests in browser)
98
+ 2. Specs: rake specs (loads tests in browser)
99
+ 3. Example: rake show (compiles and loads the sample page in a browser)
100
+
101
+ Finally, package your plugin ready for uploading the plugins.jquery.com
102
+
103
+ rake package
27
104
 
28
- /src
29
- jquery.myplugin.js
30
- /test
31
- spec_myplugin.js
32
- specs.html
33
- example.html
34
- /lib
35
- Rakefile
36
- Makefile
37
-
38
- Once you have written your code:
39
-
40
- (a) test with jsspec at test/specs.html
41
- (b) package with make and see the results in /dist
42
105
 
43
106
  == REQUIREMENTS:
44
107
 
45
- * jquery
46
- * jspec
47
- * a packer (currently linux or cygwin)
108
+ * jquery (installed with rake:jquery:add)
48
109
 
49
110
  == INSTALL:
50
111
 
data/lib/jqp/cli.rb CHANGED
@@ -4,13 +4,11 @@ module Jqp
4
4
  class CLI
5
5
  def self.execute(stdout, arguments=[])
6
6
 
7
- # NOTE: the option -p/--path= is given as an example, and should be replaced in your application.
8
-
9
7
  options = {
10
- :project => '~jq-plugin',
8
+ :project => 'jqplugin',
11
9
  :version => '0.0.1'
12
10
  }
13
- mandatory_options = %w( )
11
+ mandatory_options = %w(project)
14
12
 
15
13
  parser = OptionParser.new do |opts|
16
14
  opts.banner = <<-BANNER.gsub(/^ /,'')
@@ -23,8 +21,16 @@ module Jqp
23
21
  query.plugin.js
24
22
  /test
25
23
  spec_plugin.js
26
- /dist
27
- Makefile
24
+ acceptance_plugin.js
25
+ specs.html
26
+ acceptance.html
27
+ /lib
28
+ /jsspec
29
+ jquery.min.js
30
+ jquery-ui.js
31
+ /themes
32
+ /base
33
+ example.html
28
34
  Rakefile
29
35
  History.txt
30
36
  README.txt
@@ -51,7 +57,31 @@ module Jqp
51
57
 
52
58
  JqueryPluginGen::Generator.execute(options)
53
59
 
54
- stdout.puts "To update this executable, look in lib/jqp/cli.rb"
60
+ stdout.puts <<-MSG
61
+
62
+ **********************************************************
63
+
64
+ Now include the jQuery libraries with:
65
+
66
+ cd <jq-plugin>
67
+ rake first_time
68
+
69
+ First time will:
70
+ - add jquery core, ui and base themes
71
+ - compile js to a packed version (see build directory)
72
+ - load three html files in your browser to demon
73
+ 1. Acceptance tests
74
+ 2. Spec tests
75
+ 3. Example page
76
+
77
+ Note: you don't have to add jquery core, ui and themes.
78
+ However, if you don't you will need to update the html
79
+ pages (example.html, test/spec.html). To see other options
80
+ use rake -T
81
+
82
+ **********************************************************
83
+
84
+ MSG
55
85
  end
56
86
  end
57
87
  end
@@ -100,7 +100,6 @@ module Rake
100
100
  def define
101
101
  fail "Name required (or :noversion)" if @name.nil?
102
102
  @name = nil if :noname == @name
103
-
104
103
 
105
104
  desc "Build all the packages"
106
105
  task :compile => :pack do
@@ -120,6 +119,7 @@ module Rake
120
119
 
121
120
  desc "Merge js files into one"
122
121
  task :merge do
122
+ FileUtils.mkdir(package_dir_path) rescue nil
123
123
  `#{sed_command}`
124
124
  end
125
125
 
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'rake'
2
3
 
3
4
  module JqueryPluginGen
4
5
  class Generator
@@ -6,7 +7,11 @@ module JqueryPluginGen
6
7
  def self.base_dirs
7
8
  %w(src lib test src/images src/css test/data tasks)
8
9
  end
9
-
10
+
11
+ def self.copy_jsspec
12
+ FileUtils.cp_r(File.join(File.dirname(__FILE__), "../jsspec"), 'lib')
13
+ end
14
+
10
15
  def self.execute(args)
11
16
 
12
17
  project = args[:project]
@@ -30,18 +35,23 @@ module JqueryPluginGen
30
35
  puts "creating: #{path}"
31
36
  Dir.mkdir path
32
37
  end
38
+
39
+ copy_jsspec
33
40
 
34
- details = args
41
+ details = args
35
42
  files = {
43
+ "Rakefile" => QuickTemplate.erb('Rakefile', details),
36
44
  "History.txt" => QuickTemplate.erb('History.txt', details),
37
45
  "README.txt" => QuickTemplate.erb('README.txt', details),
46
+ "example.html" => QuickTemplate.erb('example.html', details),
38
47
  "src/#{file_name}.js" => QuickTemplate.erb('src/plugin.js', details),
39
- "test/spec_#{file_name}.js" => QuickTemplate.erb('test/spec_plugin.js', details),
40
- "Rakefile" => QuickTemplate.erb('Rakefile', details),
41
48
  "src/css/screen.#{file_name}.css" => "",
42
49
  "test/specs.html" => QuickTemplate.erb('test/specs.html', details),
50
+ "test/spec_#{file_name}.js" => QuickTemplate.erb('test/spec_plugin.js', details),
43
51
  "test/data/#{file_name}_01.json" => "",
44
52
  "test/data/#{file_name}_01.js" => "",
53
+ "test/acceptance.html" => QuickTemplate.erb('test/acceptance.html', details),
54
+ "test/acceptance_#{file_name}.js" => QuickTemplate.erb('test/spec_plugin.js', details),
45
55
  }
46
56
 
47
57
  files["Manifest.txt"] = files.keys.sort.join("\n")
@@ -52,7 +62,8 @@ module JqueryPluginGen
52
62
  f.write content
53
63
  end
54
64
  end
55
- end
65
+
66
+ end
56
67
  end
57
68
 
58
69
  end
@@ -10,4 +10,4 @@ CLEAN.include %w( build )
10
10
  require 'jquery_plugin_gen/compiletask'
11
11
 
12
12
  desc "Compile tasks"
13
- Rake::CompileTask.new(PLUGIN)
13
+ Rake::CompileTask.new(JQUERY_PLUGIN)
@@ -1,76 +1,75 @@
1
1
  begin
2
- %w[rake fileutils simple-rss open-uri].each { |f| require f }
2
+ %w[rake tmpdir fileutils simple-rss open-uri].each { |f| require f }
3
3
  rescue LoadError
4
4
  require 'rubygems' unless ENV['NO_RUBYGEMS']
5
5
  %w[rake tmpdir fileutils simple-rss open-uri].each { |f| require f }
6
6
  end
7
7
 
8
8
  lib_dir = 'lib'
9
+ tmp_dir = Dir.tmpdir
9
10
 
10
11
  namespace :jquery do
11
12
 
12
13
  desc "Add latest jquery core, ui and themes to #{lib_dir}"
13
- task :all => ['core:add', 'ui:add', 'themes:add']
14
+ task :add => [:add_core, :add_ui, :add_themes]
14
15
 
15
- namespace :core do
16
-
17
- desc "List versions of released packages"
18
- task :packages do
19
- versions(jquery_atom){ |e| e.title }
20
- end
21
-
22
- desc "List jQuery packages available"
23
- task :versions do
24
- versions(jquery_atom){ |e| e.title.gsub(/jquery-(\d\.\d\.\d|\d\.\d).*/, '\1') }
25
- end
16
+ desc "Add latest jQuery to library"
17
+ task :add_core do
18
+ uri = first(jquery_atom){ |e| e.content.gsub(/.*a href=&quot;(.*)&quot;.*/m, '\1') if e.title.include?('.min.js') }
19
+ get_and_install(uri, lib_dir, 'jquery.min.js')
20
+ end
26
21
 
27
- desc "Add latest jQuery to library"
28
- task :add do
29
- uri = first(jquery_atom){ |e| e.content.gsub(/.*a href=&quot;(.*)&quot;.*/m, '\1') if e.title.include?('.min.js') }
30
- get_and_install(uri, lib_dir, 'jquery.min.js')
31
- end
32
-
33
- desc "Add specific version of jQuery library: see with VERSION=X.X.X on command line"
34
- task :add_version do
35
- version = ENV['VERSION']
36
- return puts('No version specified - add VERSION=X.X.X to rake command') if version.nil?
37
- uri = first(jquery_atom){ |e| e.content.gsub(/.*a href=&quot;(.*)&quot;.*/m, '\1') if e.title.include?(version) }
38
- return puts("Specified version #{version} not found in repository - use rake jquery:core:versions to determine available versions") if uri.nil?
39
- get_and_install(uri, lib_dir, "jquery-#{version}.min.js")
40
- end
22
+ desc "Add latest jQueryUI (without theme) to library"
23
+ task :add_ui do
24
+ uri = first(jqueryui_atom){ |e| e.content.gsub(/.*a href=&quot;(.*)&quot;.*/m, '\1') unless e.title.include?('themes') }
25
+ file = uri.gsub(/.*files\/(.*)(\d.\drc\d.\d|\d.\drc\d|\d\.\d\.\d|\d\.\d)(.*)/, '\1\2\3')
26
+ get_and_install(uri, tmp_dir, file)
27
+ unzip_and_install(lib_dir, tmp_dir, file)
41
28
  end
42
29
 
43
- namespace :ui do
44
-
45
- desc "List versions of released packages"
46
- task :packages do
47
- versions(jqueryui_atom){ |e| e.title }
48
- end
49
-
50
- desc "List jQuery UI packages available"
51
- task :versions do
52
- versions(jqueryui_atom){ |e| e.title.gsub(/.*-(\d.\drc\d.\d|\d.\drc\d|\d\.\d\.\d|\d\.\d).*/, '\1') }
53
- end
54
-
55
- desc "Add latest jQueryUI (without theme) to library"
56
- task :add do
57
- uri = first(jqueryui_atom){ |e| e.content.gsub(/.*a href=&quot;(.*)&quot;.*/m, '\1') unless e.title.include?('themes') }
58
- file = uri.gsub(/.*files\/(.*)(\d.\drc\d.\d|\d.\drc\d|\d\.\d\.\d|\d\.\d)(.*)/, '\1\2\3')
59
- get_and_install(uri, lib_dir, file)
60
- unzip_and_install(lib_dir, file)
61
- end
30
+ desc "Add all themes to libary"
31
+ task :add_themes do
32
+ uri = first(jqueryui_atom){ |e| e.content.gsub(/.*a href=&quot;(.*)&quot;.*/m, '\1') if e.title.include?('themes') }
33
+ file = uri.gsub(/.*files\/(.*)(\d.\drc\d.\d|\d.\drc\d|\d\.\d\.\d|\d\.\d)(.*)/, '\1\2\3')
34
+ get_and_install(uri, tmp_dir, file)
35
+ unzip_and_install(lib_dir, tmp_dir, file)
36
+ end
37
+
38
+ desc "Add specific version of jQuery library: see with VERSION=X.X.X on command line"
39
+ task :add_version do
40
+ version = ENV['VERSION']
41
+ return puts('No version specified - add VERSION=X.X.X to rake command') if version.nil?
42
+ uri = first(jquery_atom){ |e| e.content.gsub(/.*a href=&quot;(.*)&quot;.*/m, '\1') if e.title.include?(version) }
43
+ return puts("Specified version #{version} not found in repository - use rake jquery:core:versions to determine available versions") if uri.nil?
44
+ get_and_install(uri, lib_dir, "jquery-#{version}.min.js")
45
+ end
46
+
47
+ desc "List all versions for core and ui "
48
+ task :versions => [:versions_core, :versions_ui]
49
+
50
+ desc "List jQuery packages available"
51
+ task :versions_core do
52
+ versions(jquery_atom){ |e| e.title.gsub(/jquery-(\d\.\d\.\d|\d\.\d).*/, '\1') }
62
53
  end
63
54
 
64
- namespace :themes do
65
-
66
- desc "Add all themes to libary"
67
- task :add do
68
- uri = first(jqueryui_atom){ |e| e.content.gsub(/.*a href=&quot;(.*)&quot;.*/m, '\1') if e.title.include?('themes') }
69
- file = uri.gsub(/.*files\/(.*)(\d.\drc\d.\d|\d.\drc\d|\d\.\d\.\d|\d\.\d)(.*)/, '\1\2\3')
70
- get_and_install(uri, lib_dir, file)
71
- unzip_and_install(lib_dir, file)
55
+ desc "List jQuery UI packages available"
56
+ task :versions_ui do
57
+ versions(jqueryui_atom){ |e| e.title.gsub(/.*-(\d.\drc\d.\d|\d.\drc\d|\d\.\d\.\d|\d\.\d).*/, '\1') }
58
+ end
59
+
60
+ desc "List all packages for core and ui"
61
+ task :packages => [:packages_core, :packages_ui]
62
+
63
+ desc "List versions of released packages"
64
+ task :packages_core do
65
+ versions(jquery_atom){ |e| e.title }
72
66
  end
73
- end
67
+
68
+ desc "List versions of released packages"
69
+ task :packages_ui do
70
+ versions(jqueryui_atom){ |e| e.title }
71
+ end
72
+
74
73
  end
75
74
 
76
75
 
@@ -115,29 +114,39 @@ def get_and_install(uri, path, file)
115
114
 
116
115
  File.open(new_file, 'w') do |file|
117
116
  download.open { |jq| jq.each_line {|line| file.puts line} }
118
- end
117
+ end unless File.exists?(new_file)
119
118
  new_file
120
119
  end
121
120
 
122
- def unzip_and_install(path, file)
121
+ def unzip_and_install(dest, tmp_dir, file)
123
122
 
124
- path = File.join(File.dirname(__FILE__), path)
125
- extracted_folder = File.join(Dir.tmpdir, file.gsub(/(.*)\.zip/, '\1'))
123
+ puts tmp_dir
124
+ # dest = File.join(dest)
125
+ extracted_folder = File.join(tmp_dir, file.gsub(/(.*)\.zip/, '\1'))
126
126
 
127
127
  if /mswin|mingw/ =~ RUBY_PLATFORM then
128
128
  zip = ENV['ZIP'] || '7z'
129
129
  puts "Extracting using #{zip} - this should be on your path or set the ZIP=path/to/zip/cmd on rake command"
130
- `#{zip} #{file} -o #{Dir.tmpdir}`
130
+ `#{zip} #{tmp_dir}/#{file} -o #{tmp_dir}`
131
131
  else
132
- puts 'Extracting files'
133
- `unzip -o #{path}/#{file} -d #{Dir.tmpdir}`
132
+ puts "Extracting files #{tmp_dir}/#{file} to #{tmp_dir}"
133
+ `unzip -o #{tmp_dir}/#{file} -d #{tmp_dir}`
134
134
  end
135
135
 
136
- puts 'Copying ui and themes'
137
- FileUtils.cp Dir.glob("#{extracted_folder}/ui/jquery*.js") , path
138
- FileUtils.cp_r "#{extracted_folder}/themes", path
136
+ puts "Copying ui and themes in #{extracted_folder} to #{dest}"
137
+ FileUtils.cp(Dir.glob("#{extracted_folder}/ui/jquery*.js"), dest) rescue nil
138
+
139
+ begin
140
+ FileUtils.cp_r("#{patch_themes_path(extracted_folder)}/themes", dest)
141
+ rescue LoadError
142
+ puts "Error in the way JQuery Themes was packaged please contact gem owner for patch"
143
+ end
139
144
 
140
145
  puts 'Cleaning extracted files'
141
- FileUtils.rm "#{path}/#{file}"
146
+ # FileUtils.rm "#{tmp_dir}/#{file}" # I'm allowing for caching
142
147
  FileUtils.rm_rf extracted_folder
143
148
  end
149
+
150
+ def patch_themes_path(extracted_path)
151
+ extracted_path.gsub(/1.7.2.0/, '1.7.2')
152
+ end