caterpillar 0.9.16 → 1.0.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.
Files changed (51) hide show
  1. data/ChangeLog +9 -1
  2. data/README +36 -6
  3. data/generators/caterpillar/USAGE +1 -1
  4. data/generators/caterpillar/caterpillar_generator.rb +44 -25
  5. data/generators/caterpillar/templates/config/portlets.rb +5 -5
  6. data/generators/caterpillar/templates/images/portlet_test_bench/Leafy_Sea_Dragon_1.jpg +0 -0
  7. data/generators/caterpillar/templates/images/portlet_test_bench/debug.jpg +0 -0
  8. data/generators/caterpillar/templates/images/portlet_test_bench/java.png +0 -0
  9. data/generators/caterpillar/templates/images/portlet_test_bench/rails.png +0 -0
  10. data/generators/caterpillar/templates/images/portlet_test_bench/ruby.gif +0 -0
  11. data/generators/caterpillar/templates/javascripts/portlet_test_bench/main.js +3 -0
  12. data/generators/caterpillar/templates/stylesheets/portlet_test_bench/main.css +163 -0
  13. data/init.rb +30 -3
  14. data/lib/caterpillar.rb +36 -1
  15. data/lib/caterpillar/config.rb +12 -2
  16. data/lib/caterpillar/liferay.rb +70 -14
  17. data/lib/caterpillar/portlet.rb +9 -0
  18. data/lib/caterpillar/task.rb +3 -12
  19. data/lib/web/portlet.rb +0 -7
  20. data/portlet_test_bench/controllers/caterpillar/application.rb +13 -0
  21. data/portlet_test_bench/controllers/caterpillar/css_controller.rb +9 -0
  22. data/portlet_test_bench/controllers/caterpillar/http_methods_controller.rb +35 -0
  23. data/portlet_test_bench/controllers/caterpillar/js_controller.rb +74 -0
  24. data/portlet_test_bench/controllers/caterpillar/login_controller.rb +41 -0
  25. data/portlet_test_bench/controllers/caterpillar/resource_controller.rb +23 -0
  26. data/portlet_test_bench/controllers/caterpillar/session_controller.rb +57 -0
  27. data/portlet_test_bench/controllers/caterpillar/user_controller.rb +6 -0
  28. data/portlet_test_bench/helpers/caterpillar/application_helper.rb +3 -0
  29. data/portlet_test_bench/routing.rb +43 -0
  30. data/portlet_test_bench/views/caterpillar/application/_back_to_menu.html.erb +13 -0
  31. data/portlet_test_bench/views/caterpillar/application/index.html.erb +70 -0
  32. data/portlet_test_bench/views/caterpillar/css/background.html.erb +30 -0
  33. data/portlet_test_bench/views/caterpillar/css/simple.html.erb +53 -0
  34. data/portlet_test_bench/views/caterpillar/http_methods/back.html.erb +2 -0
  35. data/portlet_test_bench/views/caterpillar/http_methods/parameter.html.erb +21 -0
  36. data/portlet_test_bench/views/caterpillar/http_methods/post.html.erb +43 -0
  37. data/portlet_test_bench/views/caterpillar/http_methods/post_and_redirect.html.erb +25 -0
  38. data/portlet_test_bench/views/caterpillar/http_methods/redirect.html.erb +4 -0
  39. data/portlet_test_bench/views/caterpillar/js/_scriptaculous_jquery.html.erb +19 -0
  40. data/portlet_test_bench/views/caterpillar/js/dragndrop.html.erb +40 -0
  41. data/portlet_test_bench/views/caterpillar/js/jquery.html.erb +5 -0
  42. data/portlet_test_bench/views/caterpillar/js/link_to_post.html.erb +5 -0
  43. data/portlet_test_bench/views/caterpillar/js/prototype.html.erb +5 -0
  44. data/portlet_test_bench/views/caterpillar/js/scriptaculous.html.erb +10 -0
  45. data/portlet_test_bench/views/caterpillar/js/simple.html.erb +34 -0
  46. data/portlet_test_bench/views/caterpillar/login/index.html.erb +52 -0
  47. data/portlet_test_bench/views/caterpillar/resource/exit_portlet.html.erb +3 -0
  48. data/portlet_test_bench/views/caterpillar/resource/images.html.erb +13 -0
  49. data/portlet_test_bench/views/caterpillar/user/home.html.erb +3 -0
  50. data/portlet_test_bench/views/layouts/basic.html.erb +20 -0
  51. metadata +61 -3
@@ -35,14 +35,24 @@ module Caterpillar
35
35
 
36
36
  # Sets sane defaults that are overridden in the config file.
37
37
  def initialize
38
- @rails_root = File.expand_path(defined?(RAILS_ROOT) ? RAILS_ROOT : Dir.getwd)
38
+ # RAILS_ROOT is at least defined in Caterpillar initialization
39
+ @rails_root = File.expand_path(RAILS_ROOT)
39
40
  @servlet = File.basename(@rails_root)
40
41
  @category = @servlet
41
42
  @instances = []
42
43
  @javascripts = []
43
44
  @include_all_named_routes = true
45
+
46
+ rails_conf = File.join(@rails_root,'config','environment.rb')
47
+ unless File.exists?(rails_conf)
48
+ STDERR.puts 'Rails configuration file could not be found'
49
+ end
50
+
44
51
  @warbler_conf = File.join(@rails_root,'config','warble.rb')
45
- STDERR.puts 'Warbler configuration file could not be found' unless File.exists?(@warbler_conf)
52
+ unless File.exists?(@warbler_conf)
53
+ STDERR.puts 'Warbler configuration file could not be found'
54
+ end
55
+
46
56
  #@logger = (defined?(RAILS_DEFAULT_LOGGER) ? RAILS_DEFAULT_LOGGER : Logger.new)
47
57
 
48
58
  yield self if block_given?
@@ -7,6 +7,33 @@
7
7
  module Caterpillar
8
8
  # Creates liferay-portlet XML and liferay-display XML.
9
9
  # The latter optionally combines your production portlet display configuration.
10
+ #
11
+ # See http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Liferay-portlet.xml
12
+ #
13
+ # Supported portlet.xml tags:
14
+ # (*) stands for non-configurable
15
+ #
16
+ # <portlet-name>
17
+ # <icon> (*)
18
+ # <instanceable> (*; always true)
19
+ #
20
+ # 5.1.x -specific:
21
+ # <header-portal-javascript>
22
+ #
23
+ # 5.2.0 -specific:
24
+ # <footer-portal-javascript>
25
+ # <control-panel-entry-category>
26
+ # <control-panel-entry-weight> (*; always 99.0)
27
+ #
28
+ # TODO:
29
+ # <footer-portlet-javascript>
30
+ # <header-portlet-css>
31
+ # <use-default-template>
32
+ # <private-request-attributes>
33
+ # <private-session-attributes>
34
+ # <render-weight>
35
+ # <restore-current-view>
36
+ #
10
37
  class Liferay
11
38
 
12
39
  # Liferay version
@@ -16,9 +43,8 @@ module Caterpillar
16
43
  attr_accessor :root
17
44
 
18
45
  # Liferay version is given as a String, eg. '5.2.2'.
19
- # Unless given, the latest buildnumber value in the release_ table is used to decipher the version.
46
+ # Defaults to +Lportal::Schema.version+.
20
47
  def initialize(version=nil)
21
-
22
48
  @version = version
23
49
  @root = '/usr/local/liferay'
24
50
  end
@@ -103,12 +129,12 @@ module Caterpillar
103
129
  # liferay-portlet XML
104
130
  def portletapp_xml(portlets)
105
131
  doctype = 'liferay-portlet-app'
106
- xml = self.xml_header(doctype)
132
+ xml = xml_header(doctype)
107
133
  portlets.each do |p|
108
- xml << self.portletapp_template(p)
134
+ xml << portletapp_template(p)
109
135
  end
110
- xml << self.portlet_xml_footer(doctype)
111
- return xml
136
+ xml << roles
137
+ xml << portlet_xml_footer(doctype)
112
138
  end
113
139
 
114
140
  # liferay-display XML
@@ -181,41 +207,71 @@ module Caterpillar
181
207
  '5.1.0'
182
208
  elsif @version[/5.2/]
183
209
  '5.2.0'
210
+ else
211
+ @version
184
212
  end
185
213
  when 'display'
186
214
  if @version[/5.1/]
187
215
  '5.1.0'
188
216
  elsif @version[/5.2/]
189
217
  '5.2.0'
218
+ else
219
+ @version
190
220
  end
191
221
  end
192
222
  end
193
223
 
224
+ # the actual portlet definition
194
225
  def portletapp_template(portlet)
195
226
  xml = " <portlet>\n"
196
227
  xml << " <portlet-name>%s</portlet-name>\n" % portlet[:name]
197
- xml << " <icon>/%s/images/icon.png</icon>\n" % portlet[:servlet]
228
+ xml << " <icon>/%s/favicon.ico</icon>\n" % portlet[:servlet]
198
229
  # can there be several portlet instances on the same page?
199
230
  xml << " <instanceable>true</instanceable>\n"
231
+ # define the control panel category for 5.2 and newer
232
+ unless @version[/5.1/]
233
+ xml << " <control-panel-entry-category>#{portlet[:category]}</control-panel-entry-category>\n"
234
+ xml << " <control-panel-entry-weight>99.0</control-panel-entry-weight>\n"
235
+ end
200
236
  # include javascripts?
237
+ js_tag = (@version[/5.1/] ? 'header' : 'footer') + '-portal-javascript'
201
238
  portlet[:javascripts].each do |js|
202
- xml << " <header-portal-javascript>"
203
- xml << "/%s/javascripts/%s" % [portlet[:servlet],js]
204
- xml << "</header-portal-javascript>\n"
239
+ xml << " <#{js_tag}>"
240
+ xml << "/#{portlet[:servlet]}/javascripts/#{js}"
241
+ xml << "</#{js_tag}>\n"
205
242
  end
206
243
  xml << " </portlet>\n\n"
207
244
  end
208
245
 
209
246
  def display_template(category,portlets)
210
247
  xml = ' <category name="%s">' % category +"\n"
211
-
212
248
  portlets.each do |p|
213
- xml << ' <portlet id="%s" />' % p[:name]
214
- xml << "\n"
249
+ xml << ' <portlet id="%s" />' % p[:name] + "\n"
215
250
  end
216
251
  xml << " </category>\n\n"
252
+ end
217
253
 
218
- return xml
254
+ private
255
+
256
+ # XML role-mapper.
257
+ # Has to be duplicated in -ext.xml
258
+ def roles
259
+ xml = " <role-mapper>\n"
260
+ xml << " <role-name>administrator</role-name>\n"
261
+ xml << " <role-link>Administrator</role-link>\n"
262
+ xml << " </role-mapper>\n"
263
+ xml << " <role-mapper>\n"
264
+ xml << " <role-name>guest</role-name>\n"
265
+ xml << " <role-link>Guest</role-link>\n"
266
+ xml << " </role-mapper>\n"
267
+ xml << " <role-mapper>\n"
268
+ xml << " <role-name>power-user</role-name>\n"
269
+ xml << " <role-link>Power User</role-link>\n"
270
+ xml << " </role-mapper>\n"
271
+ xml << " <role-mapper>\n"
272
+ xml << " <role-name>user</role-name>\n"
273
+ xml << " <role-link>User</role-link>\n"
274
+ xml << " </role-mapper>\n"
219
275
  end
220
276
 
221
277
  public
@@ -55,6 +55,10 @@ module Caterpillar
55
55
 
56
56
  # portlet.xml template.
57
57
  def template(portlet)
58
+ # add roles
59
+ # TODO: move into portlet hash
60
+ # administrator, power-user, user
61
+ roles = %w{ administrator }
58
62
  xml = " <!-- %s -->\n" % portlet[:title]
59
63
 
60
64
  xml << " <portlet>\n"
@@ -74,6 +78,11 @@ module Caterpillar
74
78
  xml << " <portlet-info>\n"
75
79
  xml << " <title>%s</title>\n" % portlet[:title]
76
80
  xml << " </portlet-info>\n"
81
+ roles.each do |role|
82
+ xml << " <security-role-ref>\n"
83
+ xml << " <role-name>#{role}</role-name>\n"
84
+ xml << " </security-role-ref>\n"
85
+ end
77
86
  xml << " </portlet>\n\n"
78
87
 
79
88
  ### portlet filters
@@ -7,15 +7,6 @@
7
7
  # software license details.
8
8
  #++
9
9
 
10
- require 'rake'
11
- require 'rake/tasklib'
12
-
13
- # these are required for Caterpillar to work on Ruby 1.8.5.
14
- # you shouldn't have more than one Rails installed at a time, or you should
15
- # use the latest with Caterpillar.
16
- require 'actionpack'
17
- require 'action_controller'
18
-
19
10
  # --
20
11
  # Rake task. Allows defining multiple configurations inside the same
21
12
  # Rakefile by using different task names.
@@ -127,7 +118,7 @@ module Caterpillar
127
118
  end
128
119
 
129
120
  # print produced portlets
130
- tasks << :portlets
121
+ #tasks << :portlets
131
122
 
132
123
  task :xml => tasks
133
124
  end
@@ -136,7 +127,7 @@ module Caterpillar
136
127
  def define_portlets_task
137
128
  desc 'Prints portlet configuration'
138
129
  task :portlets => :parse do
139
- portal_info
130
+ #portal_info
140
131
  info 'Portlet configuration ***********************'
141
132
  print_portlets(@portlets)
142
133
  end
@@ -208,7 +199,7 @@ module Caterpillar
208
199
  with_namespace_and_config do |name, config|
209
200
  desc 'Create JSR286 portlet XML'
210
201
  task :portlet do
211
- portal_info
202
+ #portal_info
212
203
 
213
204
  exit 1 unless system('touch %s' % file)
214
205
  f=File.open(file,'w')
data/lib/web/portlet.rb CHANGED
@@ -1,10 +1,3 @@
1
- unless defined?(RAILS_ENV)
2
- # this should load an appropriate version, there are problems when using an older Rails
3
- # than the latest stable.
4
- require 'rubygems'
5
- require 'active_record'
6
- end
7
-
8
1
  module Web # :nodoc:
9
2
  # Adds Caterpillar portlets to available portlets.
10
3
  class Portlet < ActiveRecord::Base
@@ -0,0 +1,13 @@
1
+ class Caterpillar::ApplicationController < ActionController::Base
2
+
3
+ layout 'basic'
4
+
5
+ helper 'Caterpillar::Application'
6
+
7
+ before_filter :is_test_selected
8
+
9
+ def is_test_selected
10
+ @test_is_selected = self.class.to_s[/Application/].nil?
11
+ end
12
+
13
+ end
@@ -0,0 +1,9 @@
1
+ class Caterpillar::CssController < Caterpillar::ApplicationController
2
+ def simple
3
+ render :layout => false
4
+ end
5
+
6
+ def background
7
+ render :layout => false
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ class Caterpillar::HttpMethodsController < Caterpillar::ApplicationController
2
+
3
+ def post
4
+ @msg = params[:msg] if request.post?
5
+ @checkbox = params[:checkbox]
6
+ render :action => :post
7
+ end
8
+
9
+ def post_and_redirect
10
+ @msg = '"%s" passed from POST to GET' % params[:msg_get] if request.get? and params[:msg_get]
11
+ if request.post?
12
+ redirect_to :action => :post_and_redirect, :msg_get => params[:msg]
13
+ end
14
+ end
15
+
16
+ def parameter
17
+ @params = params
18
+ @params.delete :action
19
+ @params.delete :controller
20
+ end
21
+
22
+ def redirect_back
23
+ redirect_to :back
24
+ end
25
+
26
+ def redirect_action
27
+ flash[:info] = 'This message was set in the action before redirect'
28
+ redirect_to :action => :redirect, :x => true
29
+ end
30
+
31
+ # def redirect_target
32
+ # render :action => :redirect
33
+ # end
34
+
35
+ end
@@ -0,0 +1,74 @@
1
+ class Caterpillar::JsController < Caterpillar::ApplicationController
2
+
3
+ def simple
4
+ @javascripts = false
5
+ render :layout => false
6
+ end
7
+
8
+ # the :defaults JavaScripts in javascript_include_tag
9
+ def defaults
10
+ @javascripts = false # do not include any javascripts
11
+ id = params[:id]
12
+ if id then
13
+ render :template => "js/#{id}"
14
+ else
15
+ render :template => 'js/defaults'
16
+ end
17
+ end
18
+
19
+ def prototype
20
+ @javascripts = ['prototype']
21
+ end
22
+
23
+ def scriptaculous
24
+ @javascripts = ['prototype','effects','controls']
25
+ end
26
+
27
+ def jquery
28
+ @javascripts = ['jquery','jquery-ui','jrails']
29
+ end
30
+
31
+ def dragndrop
32
+ #@javascript = ['prototype','scriptaculous']
33
+ # @javascripts = ['prototype','effects','dragdrop','controls']
34
+ # @javascripts = ['jquery','jquery-ui','jrails']
35
+ @javascripts = :defaults
36
+ end
37
+
38
+ def link_to_post
39
+ @msg = params[:msg] || 'method was GET'
40
+ end
41
+
42
+ def link_to_post_action
43
+ msgs = ['successful','ok','it works','dandy']
44
+ redirect_to :action => :link_to_post, :msg => msgs[rand(msgs.size)]
45
+ end
46
+
47
+ #######
48
+
49
+ def highlight_test
50
+ render :update do |page|
51
+ page[:highlight_test].visual_effect(:highlight)
52
+ end
53
+ end
54
+
55
+ def appear_test
56
+ render :update do |page|
57
+ page.visual_effect 'toggle_appear', "appear_test"
58
+ end
59
+ end
60
+
61
+ def toggle_blind_test
62
+ render :update do |page|
63
+ page.visual_effect 'toggle_blind', "toggle_blind_test"
64
+ end
65
+ end
66
+
67
+ def receive_drop
68
+ render :update do |page|
69
+ page[:drop_status].appear
70
+ page[:drop_status].replace_html('Received: %s' % params[:id])
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,41 @@
1
+ class Caterpillar::LoginController < Caterpillar::ApplicationController
2
+
3
+ before_filter :authorize, :except => [ :login, :index, :logout ]
4
+
5
+ # def initialize
6
+ # end
7
+
8
+ def index
9
+ @user = session[:username]
10
+ render :action => :index
11
+ end
12
+
13
+ def login
14
+ if request.post?
15
+ user = User.authenticate(params[:username],params[:password])
16
+ if user
17
+ session[:username] = user[:username]
18
+ # STDERR.puts user.inspect
19
+ flash[:notice] = "Logged in"
20
+ redirect_to :action => :index
21
+ else
22
+ flash[:notice] = "Invalid credentials"
23
+ render :action => :index
24
+ end
25
+ else
26
+ render :action => :index
27
+ end
28
+ end
29
+
30
+ def logout
31
+ session[:username] = nil
32
+ flash[:notice] = "Logged out"
33
+ redirect_to :action => :index
34
+ end
35
+
36
+
37
+ def authorize
38
+ redirect_to :action => :index
39
+ end
40
+
41
+ end
@@ -0,0 +1,23 @@
1
+ class Caterpillar::ResourceController < Caterpillar::ApplicationController
2
+
3
+ def images
4
+ @images = [
5
+ { :description => "Rails logo", :file => 'portlet_test_bench/rails.png' }
6
+ # { :description => "Image from a subdirectory", :file => 'lolcat/lolcat-monorail.jpg' }
7
+ ]
8
+ end
9
+
10
+ # Inline text
11
+ def inline
12
+ render :inline => "Inline text"
13
+ end
14
+
15
+ # link to outside the portlet
16
+ def exit_portlet
17
+ @links = ['http://www.rubyonrails.org', 'http://www.google.fi/search?q=jsr286', {:action => :exit_portlet}]
18
+ if params.include? :exit_portlet
19
+ render :inline => 'portlet should now be exited'
20
+ end
21
+ end
22
+
23
+ end