caterpillar 0.9.16 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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