caterpillar 1.3.1 → 1.4.0
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/ChangeLog +24 -1
- data/README.rdoc +30 -3
- data/Rakefile +22 -0
- data/bin/caterpillar +6 -5
- data/generators/caterpillar/caterpillar_generator.rb +11 -5
- data/generators/caterpillar/templates/config/portlets.rb +31 -23
- data/generators/caterpillar/templates/stylesheets/portlet_test_bench/main.css +7 -6
- data/generators/html_template/html_template_generator.rb +18 -0
- data/generators/html_template/templates/application.html.erb +11 -0
- data/lib/caterpillar.rb +25 -14
- data/lib/caterpillar/config.rb +33 -26
- data/lib/caterpillar/liferay.rb +102 -158
- data/lib/caterpillar/parser.rb +13 -10
- data/lib/caterpillar/portlet.rb +149 -104
- data/lib/caterpillar/task.rb +91 -48
- data/lib/caterpillar/usage.rb +3 -2
- data/lib/caterpillar/util.rb +67 -40
- data/lib/java/{rails-portlet-0.10.0.jar → rails-portlet-0.10.1.jar} +0 -0
- data/lib/rails_gem_chooser.rb +21 -17
- data/portlet_test_bench/README.rdoc +5 -5
- data/portlet_test_bench/controllers/caterpillar/http_methods_controller.rb +13 -2
- data/portlet_test_bench/controllers/caterpillar/junit_controller.rb +8 -6
- data/portlet_test_bench/views/caterpillar/http_methods/post.html.erb +86 -31
- data/portlet_test_bench/views/caterpillar/junit/{basic_tags.html.erb → images.html.erb} +0 -0
- data/portlet_test_bench/views/caterpillar/junit/links.html.erb +18 -0
- data/portlets-config.rb +87 -0
- data/test/rails_task_test.rb +3 -1
- data/test/xml_test.rb +84 -14
- metadata +12 -9
- data/lib/java/rails-portlet-0.6.0.jar +0 -0
data/lib/caterpillar/parser.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
|
3
|
-
|
4
2
|
#--
|
5
3
|
# (c) Copyright 2008 Mikael Lammentausta
|
6
4
|
# See the file LICENSES.txt included with the distribution for
|
@@ -22,7 +20,6 @@ module Caterpillar
|
|
22
20
|
# Changes the path variables to a format supported by the Rails-portlet.
|
23
21
|
def portlets(routes=@routes)
|
24
22
|
raise 'No configuration' unless @config
|
25
|
-
raise 'No routes provided' unless routes
|
26
23
|
portlets = []
|
27
24
|
|
28
25
|
@config.instances.flatten.each do |portlet|
|
@@ -49,7 +46,7 @@ module Caterpillar
|
|
49
46
|
portlet.update( :reqs => {} )
|
50
47
|
portlet.update( :vars => [] )
|
51
48
|
|
52
|
-
else
|
49
|
+
else # parse path from routes
|
53
50
|
begin
|
54
51
|
_r = routes.select{
|
55
52
|
|route| route[:name]==portlet[:name].to_sym
|
@@ -57,10 +54,13 @@ module Caterpillar
|
|
57
54
|
path = _r.first[:path] # take only the first segments
|
58
55
|
raise if path.nil?
|
59
56
|
rescue
|
60
|
-
|
57
|
+
$stderr.puts ' !! no route for %s' % portlet[:name]
|
61
58
|
next
|
62
59
|
end
|
63
|
-
|
60
|
+
|
61
|
+
# getting de default values from wildcards (:controller, :action, :other)
|
62
|
+
portlet.update(:defaults => _r.first[:defaults])
|
63
|
+
|
64
64
|
### requirements - controller & action
|
65
65
|
portlet.update( :reqs => _r.first[:reqs] )
|
66
66
|
|
@@ -74,9 +74,11 @@ module Caterpillar
|
|
74
74
|
portlet.update( :vars => vars )
|
75
75
|
|
76
76
|
# delete the route from routes
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
if routes
|
78
|
+
_r.each do |r|
|
79
|
+
routes.delete(r)
|
80
|
+
end
|
81
|
+
end
|
80
82
|
end
|
81
83
|
portlet.update( :path => path )
|
82
84
|
|
@@ -92,10 +94,11 @@ module Caterpillar
|
|
92
94
|
# leftover named routes
|
93
95
|
if @config.include_all_named_routes==true
|
94
96
|
portlets << routes
|
95
|
-
portlets.flatten!
|
96
97
|
end
|
97
98
|
|
98
99
|
# sanity check
|
100
|
+
portlets.flatten!
|
101
|
+
portlets.compact!
|
99
102
|
portlets.each do |portlet|
|
100
103
|
### hostname
|
101
104
|
portlet[:host] ||= @config.host
|
data/lib/caterpillar/portlet.rb
CHANGED
@@ -1,40 +1,23 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
#--
|
3
3
|
# (c) Copyright 2008, 2010 Mikael Lammentausta
|
4
|
+
# 2010 Tulio Ornelas
|
4
5
|
# See the file LICENSES.txt included with the distribution for
|
5
6
|
# software license details.
|
6
7
|
#++
|
8
|
+
|
9
|
+
if RUBY_PLATFORM =~ /java/
|
10
|
+
gem 'jrexml'
|
11
|
+
require 'jrexml'
|
12
|
+
else
|
13
|
+
require "rexml/document"
|
14
|
+
end
|
7
15
|
|
8
16
|
module Caterpillar
|
9
17
|
# Formulates generic JSR286 portlet XML
|
10
18
|
class Portlet
|
11
19
|
class << self
|
12
20
|
|
13
|
-
# Creates portlet XML
|
14
|
-
def xml(portlets)
|
15
|
-
session =
|
16
|
-
begin
|
17
|
-
{
|
18
|
-
:key => Caterpillar::Security.get_session_key(),
|
19
|
-
:secret => Caterpillar::Security.get_secret()
|
20
|
-
}
|
21
|
-
rescue nil
|
22
|
-
end
|
23
|
-
|
24
|
-
xml = self.header
|
25
|
-
portlets.each do |p|
|
26
|
-
xml << self.template(p,session)
|
27
|
-
end
|
28
|
-
xml << self.footer
|
29
|
-
return xml
|
30
|
-
end
|
31
|
-
|
32
|
-
def debug(config,routes) # :nodoc:
|
33
|
-
routes.select{|r| !r[:name].empty?}.each do |route|
|
34
|
-
puts '%s: %s' % [route[:name], route[:path]]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
21
|
# Rails-portlet Java class
|
39
22
|
def portlet_class
|
40
23
|
'com.celamanzi.liferay.portlets.rails286.Rails286Portlet'
|
@@ -45,100 +28,162 @@ module Caterpillar
|
|
45
28
|
'com.celamanzi.liferay.portlets.rails286.Rails286PortletFilter'
|
46
29
|
end
|
47
30
|
|
48
|
-
#
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
31
|
+
# Creates <portlet-app> XML document for portlet-ext.xml.
|
32
|
+
#
|
33
|
+
# @param portlets is an Array of Hashes
|
34
|
+
# @returns String
|
35
|
+
def xml(portlets)
|
36
|
+
# create a new XML document
|
37
|
+
doc = REXML::Document.new
|
38
|
+
doc << REXML::XMLDecl.new('1.0', 'utf-8')
|
39
|
+
app = REXML::Element.new('portlet-app', doc)
|
40
|
+
app.attributes['version'] = '2.0'
|
41
|
+
app.attributes['xmlns'] = 'http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd'
|
42
|
+
app.attributes['xmlns:xsi'] = 'http://www.w3.org/2001/XMLSchema-instance'
|
43
|
+
app.attributes['xsi:schemaLocation'] = 'http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd'
|
44
|
+
|
45
|
+
# create session values, common for all portlets
|
46
|
+
session =
|
47
|
+
begin
|
48
|
+
{
|
49
|
+
:key => Caterpillar::Security.get_session_key(),
|
50
|
+
:secret => Caterpillar::Security.get_secret()
|
51
|
+
}
|
52
|
+
rescue
|
53
|
+
nil
|
54
|
+
end
|
58
55
|
|
59
|
-
|
60
|
-
|
61
|
-
|
56
|
+
# create XML element tree
|
57
|
+
portlets.each do |portlet|
|
58
|
+
# <portlet>
|
59
|
+
app.elements << self.portlet_element(portlet, session, app)
|
60
|
+
# <filter>
|
61
|
+
app.elements << self.filter_element(portlet)
|
62
|
+
# filter mapping
|
63
|
+
app.elements << self.filter_mapping(portlet)
|
64
|
+
end
|
65
|
+
xml = ''
|
66
|
+
#doc.write(xml, -1) # no indentation, tag and text should be on same line
|
67
|
+
doc.write(xml, 4) # without identation is very dificult to reconfigure those files in production
|
68
|
+
return xml.gsub('\'', '"') # fix rexml attribute single quotes to double quotes
|
62
69
|
end
|
63
70
|
|
64
|
-
# portlet
|
71
|
+
# <portlet> element.
|
65
72
|
# session is a hash containing session key and secret from Rails.
|
66
|
-
def
|
67
|
-
|
68
|
-
#
|
69
|
-
|
70
|
-
|
71
|
-
|
73
|
+
def portlet_element(portlet, session = nil, app = nil)
|
74
|
+
element = REXML::Element.new('portlet')
|
75
|
+
# NOTE: to pass validation, the elements need to be in proper order!
|
76
|
+
|
77
|
+
REXML::Element.new('portlet-name', element).text = portlet[:name]
|
78
|
+
REXML::Element.new('portlet-class', element).text = self.portlet_class
|
72
79
|
|
73
|
-
xml << " <portlet>\n"
|
74
|
-
### identification
|
75
|
-
xml << " <portlet-name>%s</portlet-name>\n" % portlet[:name]
|
76
|
-
xml << " <portlet-class>%s</portlet-class>\n" % self.portlet_class
|
77
|
-
### supported portlet modes
|
78
|
-
xml << " <supports>\n"
|
79
|
-
xml << " <mime-type>text/html</mime-type>\n"
|
80
|
-
xml << " <portlet-mode>view</portlet-mode>\n"
|
81
|
-
if portlet[:edit_mode] == true
|
82
|
-
xml << " <portlet-mode>edit</portlet-mode>\n"
|
83
|
-
end
|
84
|
-
xml << " </supports>\n"
|
85
|
-
### title for portlet container
|
86
|
-
xml << " <portlet-info>\n"
|
87
|
-
xml << " <title>%s</title>\n" % portlet[:title]
|
88
|
-
xml << " </portlet-info>\n"
|
89
|
-
### init parameters, XXX: fails xsd test
|
90
|
-
#=begin
|
91
80
|
# insert session key
|
92
81
|
unless session.nil?
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
82
|
+
param = REXML::Element.new('init-param', element)
|
83
|
+
REXML::Element.new('name', param).text = 'session_key'
|
84
|
+
REXML::Element.new('value', param).text = session[:key]
|
85
|
+
|
86
|
+
param = REXML::Element.new('init-param', element)
|
87
|
+
REXML::Element.new('name', param).text = 'secret'
|
88
|
+
REXML::Element.new('value', param).text = session[:secret]
|
97
89
|
end
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
90
|
+
|
91
|
+
supports = REXML::Element.new('supports', element)
|
92
|
+
REXML::Element.new('mime-type', supports).text = 'text/html'
|
93
|
+
### supported portlet modes
|
94
|
+
REXML::Element.new('portlet-mode', supports).text = 'view'
|
95
|
+
if portlet[:edit_mode] == true
|
96
|
+
REXML::Element.new('portlet-mode', supports).text = 'edit'
|
104
97
|
end
|
105
|
-
|
98
|
+
|
99
|
+
# Public Render Parameters
|
100
|
+
if portlet[:public_render_parameters] and portlet[:public_render_parameters].length > 0
|
101
|
+
portlet[:public_render_parameters].each do |param|
|
102
|
+
REXML::Element.new('supported-public-render-parameter', element).text = param
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
info = REXML::Element.new('portlet-info', element)
|
107
|
+
### title for portlet container
|
108
|
+
REXML::Element.new('title', info).text = portlet[:title]
|
109
|
+
|
110
|
+
# add roles
|
111
|
+
# TODO: move into portlet hash
|
112
|
+
# administrator, power-user, user
|
113
|
+
roles = %w{ administrator }
|
106
114
|
roles.each do |role|
|
107
|
-
|
108
|
-
|
109
|
-
xml << " </security-role-ref>\n"
|
115
|
+
ref = REXML::Element.new('security-role-ref', element)
|
116
|
+
REXML::Element.new('role-name', ref).text = role
|
110
117
|
end
|
111
|
-
xml << " </portlet>\n\n"
|
112
118
|
|
113
|
-
|
114
|
-
|
119
|
+
# Public Render Parameters
|
120
|
+
if (not app.nil?) and portlet[:public_render_parameters] and portlet[:public_render_parameters].length > 0
|
121
|
+
portlet[:public_render_parameters].each do |param|
|
122
|
+
prp = REXML::Element.new('public-render-parameter', app)
|
123
|
+
REXML::Element.new('identifier', prp).text = param
|
124
|
+
qname = REXML::Element.new('qname', prp)
|
125
|
+
qname.text = "x:#{param}"
|
126
|
+
qname.attributes['xmlns:x'] = 'http://www.liferay.com/public-render-parameters'
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
return element
|
131
|
+
end
|
132
|
+
|
133
|
+
# <filter> element.
|
134
|
+
def filter_element(portlet)
|
115
135
|
# the filter reads the settings and sets the portlet session
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
136
|
+
element = REXML::Element.new('filter')
|
137
|
+
|
138
|
+
REXML::Element.new('filter-name', element).text = "#{portlet[:name]}_filter"
|
139
|
+
REXML::Element.new('filter-class', element).text = self.portlet_filter_class
|
140
|
+
REXML::Element.new('lifecycle', element).text = 'RENDER_PHASE'
|
141
|
+
REXML::Element.new('lifecycle', element).text = 'RESOURCE_PHASE'
|
120
142
|
|
121
143
|
# define host, servlet and route (path to be more precise)
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
144
|
+
param = REXML::Element.new('init-param', element)
|
145
|
+
REXML::Element.new('name', param).text = 'host'
|
146
|
+
REXML::Element.new('value', param).text = portlet[:host]
|
147
|
+
|
148
|
+
param = REXML::Element.new('init-param', element)
|
149
|
+
REXML::Element.new('name', param).text = 'servlet'
|
150
|
+
REXML::Element.new('value', param).text = portlet[:servlet]
|
151
|
+
|
152
|
+
param = REXML::Element.new('init-param', element)
|
153
|
+
REXML::Element.new('name', param).text = 'route'
|
154
|
+
portlet_path = portlet[:path].gsub(/&/,"&")
|
155
|
+
REXML::Element.new('value', param).text = portlet_path
|
156
|
+
|
157
|
+
if portlet[:edit_mode] == true
|
158
|
+
param = REXML::Element.new('init-param', element)
|
159
|
+
REXML::Element.new('name', param).text = 'preferences_route'
|
160
|
+
|
161
|
+
if portlet[:preferences_route]
|
162
|
+
preferences_route = portlet[:preferences_route]
|
163
|
+
else
|
164
|
+
preferences_route = portlet_path.gsub(':controller', portlet[:defaults][:controller])
|
165
|
+
preferences_route = preferences_route.gsub(':action', 'preferences')
|
166
|
+
end
|
167
|
+
REXML::Element.new('value', param).text = preferences_route
|
168
|
+
end
|
169
|
+
|
170
|
+
return element
|
171
|
+
end
|
172
|
+
|
173
|
+
# <filter-mapping> element.
|
174
|
+
def filter_mapping(portlet)
|
175
|
+
element = REXML::Element.new('filter-mapping')
|
176
|
+
|
177
|
+
REXML::Element.new('filter-name', element).text = "#{portlet[:name]}_filter"
|
178
|
+
REXML::Element.new('portlet-name', element).text = portlet[:name]
|
179
|
+
|
180
|
+
return element
|
181
|
+
end
|
182
|
+
|
183
|
+
def debug(config,routes) # :nodoc:
|
184
|
+
routes.select{|r| !r[:name].empty?}.each do |route|
|
185
|
+
puts '%s: %s' % [route[:name], route[:path]]
|
186
|
+
end
|
142
187
|
end
|
143
188
|
|
144
189
|
end # static methods
|
data/lib/caterpillar/task.rb
CHANGED
@@ -34,19 +34,17 @@ module Caterpillar
|
|
34
34
|
# The main task.
|
35
35
|
# Reads the configuration file and launches appropriate tasks.
|
36
36
|
def initialize(name = :usage, config = nil, tasks = :define_tasks)
|
37
|
-
#STDOUT.puts 'Caterpillar v.%s (c) Copyright 2008,2009 Mikael Lammentausta' % VERSION
|
38
|
-
#STDOUT.puts 'Provided under the terms of the MIT license.'
|
39
|
-
#STDOUT.puts
|
40
|
-
|
41
37
|
@name = name
|
42
|
-
|
38
|
+
|
39
|
+
@config = (name == 'rails' or name == 'version' ) ? Config.new(false) : Util.eval_configuration(config)
|
43
40
|
@logger = @config.logger
|
41
|
+
|
44
42
|
@xml_files = []
|
45
43
|
|
46
44
|
if name == 'rails'
|
47
45
|
@required_gems = %w(rails caterpillar jruby-jars warbler)
|
48
46
|
else
|
49
|
-
|
47
|
+
if not @config and not %w{generate version}.include?(name)
|
50
48
|
Usage.show()
|
51
49
|
exit 1
|
52
50
|
end
|
@@ -59,9 +57,9 @@ module Caterpillar
|
|
59
57
|
private
|
60
58
|
|
61
59
|
def define_tasks
|
60
|
+
define_version_task
|
62
61
|
define_xml_task
|
63
62
|
define_usage_task
|
64
|
-
define_config_task
|
65
63
|
define_pluginize_task
|
66
64
|
define_environment_task
|
67
65
|
define_portletxml_task
|
@@ -82,6 +80,7 @@ module Caterpillar
|
|
82
80
|
define_deploy_xml_task
|
83
81
|
define_deploy_war_task
|
84
82
|
define_rails_task
|
83
|
+
define_generate_task
|
85
84
|
end
|
86
85
|
|
87
86
|
def define_usage_task
|
@@ -90,24 +89,38 @@ module Caterpillar
|
|
90
89
|
end
|
91
90
|
end
|
92
91
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
92
|
+
def define_version_task
|
93
|
+
task :version do
|
94
|
+
version_str = "Caterpillar #{Caterpillar::VERSION} "
|
95
|
+
version_str << "Ruby #{RUBY_VERSION} "
|
96
|
+
if RUBY_PLATFORM =~ /java/
|
97
|
+
version_str << "JRuby #{JRUBY_VERSION}"
|
98
|
+
end
|
99
|
+
$stdout.puts version_str
|
97
100
|
end
|
98
101
|
end
|
99
102
|
|
100
103
|
def define_pluginize_task
|
101
|
-
desc "Unpack Caterpillar
|
104
|
+
desc "Unpack Caterpillar to your Rails application"
|
102
105
|
task :pluginize do
|
103
|
-
if !Dir["vendor/plugins/caterpillar*"].empty?
|
104
|
-
puts "I found an old
|
105
|
-
puts "(directory vendor/plugins/caterpillar* exists)"
|
106
|
+
if !Dir["vendor/plugins/caterpillar*"].empty? && ENV["FORCE"].nil?
|
107
|
+
puts "I found an old pupa"
|
108
|
+
puts "(directory vendor/plugins/caterpillar* exists);"
|
109
|
+
puts "please trash it so I can make a new one,"
|
110
|
+
puts "or prepend the command with environment variable FORCE=1."
|
111
|
+
exit 1
|
106
112
|
elsif !File.directory?("vendor/plugins")
|
107
|
-
puts "I can't find a place to build my
|
113
|
+
puts "I can't find a place to build my pupa"
|
108
114
|
puts "(directory 'vendor/plugins' is missing)"
|
115
|
+
exit 1
|
109
116
|
else
|
117
|
+
rm_rf FileList["vendor/plugins/caterpillar*"], :verbose => false
|
110
118
|
ruby "-S", "gem", "unpack", "caterpillar", "--target", "vendor/plugins"
|
119
|
+
# rename the versioned name to plain "caterpillar",
|
120
|
+
# since Rails has trouble loading some helper files without so
|
121
|
+
File.rename(
|
122
|
+
"vendor/plugins/caterpillar-#{Caterpillar::VERSION}",
|
123
|
+
"vendor/plugins/caterpillar")
|
111
124
|
ruby "./script/generate caterpillar"
|
112
125
|
end
|
113
126
|
end
|
@@ -124,9 +137,10 @@ module Caterpillar
|
|
124
137
|
if @config.container.kind_of? Liferay
|
125
138
|
tasks << "#{@name}:liferayportletapp"
|
126
139
|
tasks << "#{@name}:liferaydisplay"
|
127
|
-
end
|
128
|
-
|
140
|
+
end
|
141
|
+
|
129
142
|
task :makexml => tasks
|
143
|
+
puts 'Done!'
|
130
144
|
end
|
131
145
|
|
132
146
|
# Prints the list of portlets.
|
@@ -170,17 +184,34 @@ module Caterpillar
|
|
170
184
|
end
|
171
185
|
end
|
172
186
|
|
187
|
+
def define_generate_task
|
188
|
+
@name = :generate
|
189
|
+
desc 'Generates stand-alone configuration file'
|
190
|
+
task :generate do
|
191
|
+
filename = 'portlets-config.rb'
|
192
|
+
FileUtils.cp(
|
193
|
+
File.expand_path(File.join(__FILE__,
|
194
|
+
%w{.. .. .. generators caterpillar templates config portlets.rb})),
|
195
|
+
filename
|
196
|
+
)
|
197
|
+
info("Generated #{filename}")
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
173
201
|
### SUB-TASKS
|
174
202
|
|
175
203
|
# reads Rails environment configuration
|
176
204
|
def define_environment_task
|
177
|
-
task :default => :test
|
178
205
|
task :environment do
|
179
|
-
|
206
|
+
begin
|
207
|
+
require(File.join(@config.rails_root, 'config', 'environment'))
|
208
|
+
rescue
|
209
|
+
raise 'Rails environment could not be loaded'
|
210
|
+
end
|
180
211
|
if @config.container.is_a?(Caterpillar::Liferay)
|
181
212
|
if @config.container.version.nil? and !defined?(Lportal)
|
182
|
-
|
183
|
-
|
213
|
+
$stderr.puts 'Liferay version is undefined, and lportal gem is not present.'
|
214
|
+
$stderr.puts 'Please define portlet.container.version in %s.' % @config.class::FILE
|
184
215
|
raise 'Insufficient configuration'
|
185
216
|
end
|
186
217
|
@config.container.version ||= Lportal::Schema.version
|
@@ -191,7 +222,7 @@ module Caterpillar
|
|
191
222
|
|
192
223
|
# collects Rails' routes and parses the config
|
193
224
|
def define_parse_task
|
194
|
-
task :parse
|
225
|
+
task :parse do
|
195
226
|
@config.routes = Util.parse_routes(@config)
|
196
227
|
@portlets = Parser.new(@config).portlets
|
197
228
|
end
|
@@ -202,9 +233,9 @@ module Caterpillar
|
|
202
233
|
@name = :xml
|
203
234
|
# set the output filename
|
204
235
|
if @config.container.kind_of? Liferay
|
205
|
-
file =
|
236
|
+
file = 'portlet-ext.xml'
|
206
237
|
else
|
207
|
-
file =
|
238
|
+
file = 'portlet.xml'
|
208
239
|
end
|
209
240
|
@xml_files << file
|
210
241
|
with_namespace_and_config do |name, config|
|
@@ -212,7 +243,7 @@ module Caterpillar
|
|
212
243
|
task :portlet do
|
213
244
|
#portal_info
|
214
245
|
|
215
|
-
|
246
|
+
FileUtils.touch(file)
|
216
247
|
f=File.open(file,'w')
|
217
248
|
f.write Portlet.xml(@portlets)
|
218
249
|
f.close
|
@@ -224,12 +255,12 @@ module Caterpillar
|
|
224
255
|
# Writes liferay-portlet-ext.xml
|
225
256
|
def define_liferayportletappxml_task
|
226
257
|
@name = :xml
|
227
|
-
file =
|
258
|
+
file = 'liferay-portlet-ext.xml'
|
228
259
|
@xml_files << file
|
229
260
|
with_namespace_and_config do |name, config|
|
230
261
|
desc 'Create Liferay portlet XML'
|
231
262
|
task :liferayportletapp do
|
232
|
-
|
263
|
+
FileUtils.touch(file)
|
233
264
|
f=File.open(file,'w')
|
234
265
|
f.write config.container.portletapp_xml(@portlets)
|
235
266
|
f.close
|
@@ -241,7 +272,7 @@ module Caterpillar
|
|
241
272
|
# Writes liferay-display.xml
|
242
273
|
def define_liferaydisplayxml_task
|
243
274
|
@name = :xml
|
244
|
-
file =
|
275
|
+
file = 'liferay-display.xml'
|
245
276
|
@xml_files << file
|
246
277
|
|
247
278
|
with_namespace_and_config do |name, config|
|
@@ -249,7 +280,7 @@ module Caterpillar
|
|
249
280
|
task :liferaydisplay do
|
250
281
|
raise 'Version 5.1.2 of Liferay is broken!' if config.container.version == '5.1.2'
|
251
282
|
|
252
|
-
|
283
|
+
FileUtils.touch(file)
|
253
284
|
f=File.open(file,'w')
|
254
285
|
f.write config.container.display_xml(@portlets)
|
255
286
|
f.close
|
@@ -333,13 +364,15 @@ module Caterpillar
|
|
333
364
|
|
334
365
|
# detect the version of the JAR to install
|
335
366
|
portlet_jar = nil
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
367
|
+
# XXX: since the filter name has changed, the old JAR does not work
|
368
|
+
#version = (
|
369
|
+
# if container_v and container_v[/^5.1/]
|
370
|
+
# '0.6.0' # FIXME: branch properly
|
371
|
+
# else
|
372
|
+
# '0.10.0'
|
373
|
+
# end
|
374
|
+
#)
|
375
|
+
version = '0.10.1'
|
343
376
|
require 'find'
|
344
377
|
Find.find(source) do |file|
|
345
378
|
if File.basename(file) == "rails-portlet-#{version}.jar"
|
@@ -573,6 +606,7 @@ module Caterpillar
|
|
573
606
|
end
|
574
607
|
exit 1 unless conferring_step 'Creating Rails project...' do
|
575
608
|
create_rails_project
|
609
|
+
Dir.chdir("#{ARGV[1]}"){system("ruby script/generate html_template >/dev/null")}
|
576
610
|
end
|
577
611
|
exit 1 unless conferring_step 'Updating config/environment.rb...' do
|
578
612
|
update_environment(ARGV[1] + '/config/environment.rb')
|
@@ -580,10 +614,11 @@ module Caterpillar
|
|
580
614
|
exit 1 unless conferring_step 'Activating caterpillar...' do
|
581
615
|
# Rake::Task['pluginize'].execute
|
582
616
|
Dir.chdir("#{ARGV[1]}/vendor/plugins"){system 'ruby -S gem unpack caterpillar >/dev/null'}
|
583
|
-
Dir.chdir("#{ARGV[1]}"){system 'script/generate caterpillar >/dev/null'}
|
617
|
+
Dir.chdir("#{ARGV[1]}"){system 'ruby script/generate caterpillar >/dev/null'}
|
584
618
|
end
|
585
619
|
exit 1 unless conferring_step 'Configuring warbler...' do
|
586
620
|
Dir.chdir("#{ARGV[1]}"){system 'ruby -S warble config >/dev/null 2>&1'}
|
621
|
+
update_warble(ARGV[1] +'/config/warble.rb' , ARGV[1].split('/')[-1])
|
587
622
|
end
|
588
623
|
end
|
589
624
|
end
|
@@ -609,7 +644,7 @@ module Caterpillar
|
|
609
644
|
end
|
610
645
|
|
611
646
|
_sorted.each_pair do |category,portlets|
|
612
|
-
|
647
|
+
$stdout.puts category
|
613
648
|
portlets.each do |portlet|
|
614
649
|
# spaces
|
615
650
|
spaces = ''
|
@@ -619,13 +654,13 @@ module Caterpillar
|
|
619
654
|
|
620
655
|
#field = :path
|
621
656
|
#fields = [:name, :id]
|
622
|
-
|
657
|
+
$stdout.puts "\t" + portlet[:title] +spaces+ portlet[:path] # + "\t" + portlet[:vars].inspect
|
623
658
|
end
|
624
659
|
end
|
625
660
|
end
|
626
661
|
|
627
662
|
def info(msg)
|
628
|
-
|
663
|
+
$stdout.puts ' * ' + msg
|
629
664
|
end
|
630
665
|
|
631
666
|
def portal_info(config=@config)
|
@@ -635,7 +670,7 @@ module Caterpillar
|
|
635
670
|
config.container.version,
|
636
671
|
config.container.root
|
637
672
|
]
|
638
|
-
|
673
|
+
info(msg)
|
639
674
|
end
|
640
675
|
|
641
676
|
private
|
@@ -689,22 +724,30 @@ module Caterpillar
|
|
689
724
|
|
690
725
|
def update_environment(file_path)
|
691
726
|
file = File.read(file_path).
|
692
|
-
|
693
|
-
" config.gem 'caterpillar', :version => '#{Caterpillar::VERSION}'\n" + '\1')
|
727
|
+
sub(/([ ]*#[ ]*config\.gem)/,
|
728
|
+
" config.gem 'caterpillar', :version => '>= #{Caterpillar::VERSION}'\n" + '\1')
|
729
|
+
File.open(file_path, 'w') {|f| f << file}
|
730
|
+
end
|
731
|
+
|
732
|
+
def update_warble(file_path, project_name)
|
733
|
+
file = File.read(file_path).
|
734
|
+
sub(/([ ]*#[ ]*config\.war_name = \"mywar\")/,
|
735
|
+
" config.war_name = '#{project_name}-portlet'\n")
|
694
736
|
File.open(file_path, 'w') {|f| f << file}
|
695
737
|
end
|
738
|
+
|
696
739
|
|
697
740
|
def conferring_step(message)
|
698
|
-
|
699
|
-
|
741
|
+
$stdout.print message
|
742
|
+
$stdout.flush
|
700
743
|
|
701
744
|
result = yield
|
702
745
|
if result.class == String or result.class == NilClass
|
703
|
-
|
746
|
+
$stdout.puts "\e[31mFAILED\e[0m"
|
704
747
|
puts result unless result.nil?
|
705
748
|
return false
|
706
749
|
else
|
707
|
-
|
750
|
+
$stdout.puts "\e[32mOK\e[0m"
|
708
751
|
return true
|
709
752
|
end
|
710
753
|
end
|