Empact-rails-plugin-package-task 0.1

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.
data/MIT-LICENSE ADDED
@@ -0,0 +1,17 @@
1
+ Copyright (c) 2006 by Zak Mandhro
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
4
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
5
+ including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
6
+ and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
7
+ subject to the following conditions:
8
+
9
+ The above copyright notice and this permission notice shall be included in all copies or substantial
10
+ portions of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
13
+ LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
14
+ EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
15
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
16
+ USE OR OTHER DEALINGS IN THE SOFTWARE.
17
+
data/README.rdoc ADDED
@@ -0,0 +1,43 @@
1
+ = Rails Plug-in Package Task
2
+
3
+ RailsPluginPackageTask is a rake task designed to automate the publishing of
4
+ Ruby on Rails plug-ins. The Rails plug-in installer _RecursiveHTTPFetcher_ makes
5
+ certain assumptions about the web servers that does not hold through from
6
+ server to server, for example:
7
+
8
+ * Server generates an index page with links
9
+ * All links to plug-in files are relative links
10
+ * Folder links end with a forward slash (used to recurse)
11
+
12
+ RubyForge web server is an example of where these assupmtions don't hold
13
+ true. As a result, you can not simply copy your files to a web server
14
+ and expect Rails HTTP plugin installer to just work.
15
+
16
+ This Rake task helps fill the gap by complying to the plug-in scripts assumptions.
17
+ Following the Rake package task conventions, it defines the "rails_plugin" task
18
+ that recurses through your _package_files_, generates compliant index.html for
19
+ each folder (that contains a file), and creates a directory structure that you
20
+ can publish as a set for your plugin.
21
+
22
+ == Example
23
+
24
+ The following example uses the Rake::RailsPluginPackageTask to create
25
+ the package. It then uses the Rake::SshDirPublisher to publish the plugin
26
+ directory to RubyForge.
27
+
28
+ Rake::RailsPluginPackageTask.new(ProjectInfo[:name], ProjectInfo[:version]) do |p|
29
+ p.package_files = PluginPackageFiles
30
+ p.plugin_files = FileList["rails_plugin/**/*"]
31
+ p.extra_links = {"Project page"=>ProjectInfo[:homepage],
32
+ "Author: #{ProjectInfo[:author_name]}"=>ProjectInfo[:author_link]}
33
+ p.verbose = true
34
+ end
35
+ task :rails_plugin=>:clobber
36
+
37
+ desc "Publish Ruby on Rails plug-in on RubyForge"
38
+ task :release_plugin=>:rails_plugin do |task|
39
+ pub = Rake::SshDirPublisher.new("#{RubyForgeConfig[:user_name]}@rubyforge.org",
40
+ "/var/www/gforge-projects/#{RubyForgeConfig[:unix_name]}",
41
+ "pkg/rails_plugin")
42
+ pub.upload()
43
+ end
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ require 'rake/gempackagetask'
2
+ require "rake/rdoctask"
3
+
4
+ spec = eval(IO.read("rails-plugin-package-task.gemspec"))
5
+
6
+ Rake::GemPackageTask.new(spec) do |pkg|
7
+ pkg.gem_spec = spec
8
+ end
9
+
10
+ Rake::RDocTask.new do |rd|
11
+ rd.rdoc_dir = "doc"
12
+ rd.rdoc_files.include("lib/**/*.rb")
13
+ rd.rdoc_files.include(spec.extra_rdoc_files)
14
+ rd.options = spec.rdoc_options
15
+ end
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rake'
4
+ require 'rake/tasklib'
5
+
6
+ module Rake
7
+ # RailsPluginPackageTask defines the "rails_plugin" task
8
+ # that recurses through your _package_files_, generates compliant index.html for
9
+ # each folder (that contains a file), and creates a directory structure that you
10
+ # can publish as a set for your plugin.
11
+ #
12
+ # Noteworthy attributes:
13
+ #
14
+ # [package_dir] Directory to store the package. Default 'pkg/rails_plugin'
15
+ #
16
+ # [package_dir] Files to include in the plugin.
17
+ #
18
+ # [extra_links] Links to put on every generated index page. Can be a hash, e.g.
19
+ # {"Home"=>"http://roxml.rubyforge.org"}, an array of strings or
20
+ # a single string.
21
+ #
22
+ # [plugin_files] Files to be placed in the root folder of the plug-in, e.g.
23
+ # init.rb. All files that are in the root of _package_dir_
24
+ # will also be placed in the root of the plug-in.
25
+ #
26
+ class RailsPluginPackageTask < TaskLib
27
+ # Name of plug-in or application
28
+ attr_accessor :name
29
+ # Version of plugin - distribution folder will be name_version
30
+ attr_accessor :version
31
+ # Directory used to store the package files (default is 'pkg/rails_plugin').
32
+ attr_accessor :package_dir
33
+ # Files to be stored in the package
34
+ attr_accessor :package_files
35
+ # Files to go into the root of the plug-in folder (e.g. init.rb)
36
+ attr_accessor :plugin_files
37
+ # Homepage for more information
38
+ attr_accessor :extra_links
39
+ # Verbose [true | false]
40
+ attr_accessor :verbose
41
+
42
+ # Create the "rails_plugin" task
43
+ def initialize(name=nil, version=nil)
44
+ init(name, version)
45
+ yield self if block_given?
46
+ define unless name.nil?
47
+ end
48
+
49
+ # Initialize with defaults
50
+ def init(name, version)
51
+ @name = name
52
+ @version = version
53
+ @extra_links = nil
54
+ @package_files = Rake::FileList.new
55
+ @plugin_files = Rake::FileList.new
56
+ @package_dir = 'pkg/rails_plugin'
57
+ @folders = {}
58
+ @verbose = false
59
+ end
60
+
61
+ # Define the rails_plugin task
62
+ def define
63
+ desc "Create Ruby on Rails plug-in package"
64
+ task :rails_plugin do
65
+ @dest = "#@package_dir/#{@name}_#{@version}"
66
+ makedirs(@dest,:verbose=>false)
67
+ @plugin_files.each do |fn|
68
+ cp(fn, @dest,:verbose=>false)
69
+ add_file(File.basename(fn))
70
+ end
71
+
72
+ @package_files.each do |fn|
73
+ puts ". #{fn}" if verbose
74
+ f = File.join(@dest, fn)
75
+ fdir = File.dirname(f)
76
+ unless File.exist?(fdir)
77
+ mkdir_p(fdir,:verbose=>false)
78
+ add_folder("#{fdir}/")
79
+ end
80
+ if File.directory?(fn)
81
+ mkdir_p(f,:verbose=>false)
82
+ add_folder("#{fn}/")
83
+ else
84
+ cp(fn, f, :verbose=>false)
85
+ add_file(fn)
86
+ end
87
+ end
88
+
89
+ generate_index_files()
90
+ end
91
+ end
92
+
93
+ # Generate the index.html files
94
+ def generate_index_files
95
+ @folders.each do |folder, files|
96
+ puts " + Creating #{@dest}/#{folder}/index.html" if @verbose
97
+ File.open("#{@dest}/#{folder}/index.html", "w") do |index|
98
+ title = "Rails Plug-in for #@name #@version"
99
+ index.write("<html><head><title>#{title}</title></head>\n")
100
+ index.write("<body>\n")
101
+ index.write("<h2>#{title}</h2>\n")
102
+ extra_links = create_extra_links()
103
+ index.write("<p>#{extra_links}</p>\n") if extra_links
104
+ files.each { |fn|
105
+ puts(" - Adding #{fn}") if @verbose
106
+ index.write("&nbsp;&nbsp;<a href=\"#{fn}\">#{fn}</a><br/>\n")
107
+ }
108
+ index.write("<hr size=\"1\"/><p style=\"font-size: x-small\">Generated with RailsPluginPackageTask<p>")
109
+ index.write("</body>\n")
110
+ index.write("</html>\n")
111
+ end
112
+ end
113
+ end
114
+
115
+ private
116
+ # Add a file to the folders hash
117
+ def add_file(filename)
118
+ dir = File.dirname(filename).gsub("#{@dest}",".")
119
+ fn = File.basename(filename)
120
+ folder = @folders[dir] || @folders[dir]=[]
121
+ folder << fn
122
+ end
123
+
124
+ # Add a folder to the folders hash
125
+ def add_folder(folder_name)
126
+ dir = File.dirname(folder_name).gsub("#{@dest}",".").gsub("./","")
127
+ fn = File.basename(folder_name) + "/"
128
+ folder = @folders[dir] || @folders[dir]=[]
129
+ folder << fn
130
+ end
131
+
132
+ # Create the anchor tag for extra links
133
+ def create_extra_links
134
+ return nil unless @extra_links
135
+ x_links = ""
136
+ if (@extra_links.class==Hash)
137
+ @extra_links.each do |k,v|
138
+ x_links << "<a href=\"#{v}\">#{k}</a>&nbsp;"
139
+ end
140
+ elsif (@extra_links.class==Array)
141
+ @extra_links.each do |link|
142
+ x_links << "<a href=\"#{link}\">#{link}</a>&nbsp;"
143
+ end
144
+ else
145
+ x_links = "<a href=\"#{@extra_links.to_s}\">#{@extra_links.to_s}</a>"
146
+ end
147
+ return x_links
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,21 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "rails-plugin-package-task"
3
+ s.version = "0.1"
4
+ s.date = "2008-08-27"
5
+ s.summary = "Automates the publishing of Rail plug-ins"
6
+ s.email = "mandhro@yahoo.com"
7
+ s.homepage = "http://roxml.rubyforge.org/"
8
+ s.description = "Designed to automate the publishing of Rail plug-ins. Extracted from ROXML CVS."
9
+ s.has_rdoc = true
10
+ s.author = "Zak Mandhro"
11
+ s.files = ["MIT-LICENSE",
12
+ "Rakefile",
13
+ "README.rdoc",
14
+ "rails-plugin-package-task.gemspec",
15
+ "lib/rails_plugin_package_task.rb"]
16
+ s.require_path = 'lib'
17
+ s.extra_rdoc_files = ["README.rdoc", 'MIT-LICENSE']
18
+ s.rdoc_options << '--line-numbers' << '--inline-source' <<
19
+ '--title' << 'Rails Plug-in Package Task' <<
20
+ '--main' << 'README.rdoc'
21
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Empact-rails-plugin-package-task
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Zak Mandhro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-27 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Designed to automate the publishing of Rail plug-ins. Extracted from ROXML CVS.
17
+ email: mandhro@yahoo.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - MIT-LICENSE
25
+ files:
26
+ - MIT-LICENSE
27
+ - Rakefile
28
+ - README.rdoc
29
+ - rails-plugin-package-task.gemspec
30
+ - lib/rails_plugin_package_task.rb
31
+ has_rdoc: true
32
+ homepage: http://roxml.rubyforge.org/
33
+ post_install_message:
34
+ rdoc_options:
35
+ - --line-numbers
36
+ - --inline-source
37
+ - --title
38
+ - Rails Plug-in Package Task
39
+ - --main
40
+ - README.rdoc
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ version:
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ requirements: []
56
+
57
+ rubyforge_project:
58
+ rubygems_version: 1.2.0
59
+ signing_key:
60
+ specification_version: 2
61
+ summary: Automates the publishing of Rail plug-ins
62
+ test_files: []
63
+