caterpillar 1.4.4 → 1.6.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 (62) hide show
  1. data/.gitignore +9 -0
  2. data/ChangeLog +27 -0
  3. data/MIT-LICENSE +0 -4
  4. data/README.rdoc +3 -3
  5. data/Rakefile +6 -22
  6. data/caterpillar.gemspec +28 -0
  7. data/generators/caterpillar/caterpillar_generator.rb +12 -4
  8. data/generators/caterpillar/templates/config/portlets.rb +10 -2
  9. data/generators/caterpillar/templates/stylesheets/portlet_test_bench/main.css +2 -2
  10. data/init.rb +20 -8
  11. data/lib/caterpillar.rb +33 -27
  12. data/lib/caterpillar/config.rb +3 -1
  13. data/lib/caterpillar/helpers/liferay.rb +129 -132
  14. data/lib/caterpillar/helpers/portlet.rb +41 -0
  15. data/lib/caterpillar/liferay.rb +2 -3
  16. data/lib/caterpillar/navigation.rb +2 -4
  17. data/lib/caterpillar/parser.rb +1 -5
  18. data/lib/caterpillar/portlet.rb +20 -19
  19. data/lib/caterpillar/portlet_support.rb +9 -22
  20. data/lib/caterpillar/security.rb +20 -42
  21. data/lib/caterpillar/task.rb +17 -36
  22. data/lib/caterpillar/usage.rb +14 -10
  23. data/lib/caterpillar/util.rb +1 -1
  24. data/lib/java/rails-portlet-0.12.0.jar +0 -0
  25. data/lib/rails_gem_chooser.rb +14 -7
  26. data/lib/web/portlet.rb +1 -1
  27. data/portlet_test_bench/controllers/caterpillar/application.rb +0 -5
  28. data/portlet_test_bench/controllers/caterpillar/junit_controller.rb +30 -9
  29. data/portlet_test_bench/controllers/caterpillar/liferay_controller.rb +13 -3
  30. data/portlet_test_bench/controllers/caterpillar/session_controller.rb +3 -0
  31. data/portlet_test_bench/controllers/caterpillar/xhr_controller.rb +12 -1
  32. data/portlet_test_bench/views/caterpillar/application/_back_to_menu.html.erb +1 -1
  33. data/portlet_test_bench/views/caterpillar/application/index.html.erb +8 -1
  34. data/portlet_test_bench/views/caterpillar/application/portlet_test_bench.html.erb +26 -8
  35. data/portlet_test_bench/views/caterpillar/css/background.html.erb +4 -1
  36. data/portlet_test_bench/views/caterpillar/css/simple.html.erb +13 -9
  37. data/portlet_test_bench/views/caterpillar/liferay/session_variables.html.erb +3 -12
  38. data/portlet_test_bench/views/caterpillar/session/cookies.html.erb +5 -0
  39. data/portlet_test_bench/views/caterpillar/session/namespace.html.erb +14 -0
  40. data/portlet_test_bench/views/caterpillar/xhr/resource.html.erb +15 -0
  41. data/portlet_test_bench/views/caterpillar/xhr/time.html.erb +7 -6
  42. data/spec/app1/config/routes.rb +3 -0
  43. data/spec/app2/config/routes.rb +7 -0
  44. data/spec/app3/config/routes.rb +5 -0
  45. data/spec/caterpillar/helper_spec.rb +69 -0
  46. data/spec/caterpillar/task_spec.rb +192 -0
  47. data/spec/spec.opts +5 -0
  48. data/spec/spec_helper.rb +44 -0
  49. data/test/README +4 -0
  50. data/test/dtd/liferay-display_5_1_0.dtd +44 -44
  51. data/test/dtd/liferay-display_5_2_0.dtd +44 -44
  52. data/test/dtd/liferay-display_6_0_0.dtd +44 -44
  53. data/test/dtd/liferay-portlet-app_5_1_0.dtd +582 -582
  54. data/test/dtd/liferay-portlet-app_5_2_0.dtd +642 -642
  55. data/test/dtd/liferay-portlet-app_6_0_0.dtd +730 -730
  56. data/test/dtd/portlet-app_2_0.xsd +830 -830
  57. data/test/liferay_helpers_test.rb +94 -7
  58. data/test/portlet_support_test.rb +0 -18
  59. data/test/portlets_test.rb +6 -11
  60. data/test/xml_test.rb +4 -14
  61. metadata +53 -31
  62. data/lib/java/rails-portlet-0.10.1.jar +0 -0
@@ -0,0 +1,9 @@
1
+ .DS_Store
2
+ .#*
3
+ pkg
4
+ *~
5
+ coverage
6
+ *.xml
7
+ *.gem
8
+ caterpillar-developer
9
+ examples
data/ChangeLog CHANGED
@@ -1,3 +1,30 @@
1
+ = 1.6.0
2
+ Tested with Rails 2 and Liferay 5 and 6.
3
+ - upgrade to Rails-portlet jar 0.12, which supports both Liferay5 and Liferay6
4
+ - use most recent Liferay version (6.0.6) in the default config template, although container version in configuration is now obsolete
5
+ - remove parsing of :uid and :gid path variables
6
+ - update portlet test bench to get Liferay UID and GID from a cookie, and move the helper methods to Caterpillar::Helpers::Liferay
7
+ - refactor shared secret to portlets.rb - requires config file update for existing installations - see the portlets.rb config template
8
+ - removed useless and broken link_to_liferay() method
9
+ - cleaned up some of the init process
10
+ - update test bench cookie actions
11
+ - change test bench css colors to human-readable
12
+
13
+ = 1.5.0
14
+ This version contains a number of changes over a long period of time.
15
+ Tested to work on Rails 2.3.8 and 2.3.10.
16
+ Major changes include:
17
+ - compatibility with rails 2.3.10
18
+ - added PortletSupport#ajax_response method
19
+ - introduce ResourceUrl
20
+
21
+ Smaller changes include:
22
+
23
+ - fixed return link in test bench
24
+ - some new test cases
25
+ - removed rake related libraries from gemspec
26
+ - pruning of the Rakefile: removing the RDoc task that was broken, add a 'gem' task
27
+
1
28
  = 1.4.4
2
29
  - XML fixes
3
30
  - added /caterpillar view
@@ -1,9 +1,5 @@
1
- = Caterpillar
2
-
3
1
  Caterpillar is provided under the terms of the MIT license.
4
2
 
5
- (c) Copyright 2008,2009 Mikael Lammentausta for Cel'Amanzi Ltd
6
-
7
3
  Permission is hereby granted, free of charge, to any person
8
4
  obtaining a copy of this software and associated documentation files
9
5
  (the "Software"), to deal in the Software without restriction,
@@ -138,12 +138,12 @@ For example:
138
138
  :preferences_route => '/my_portlet/test/preferences'
139
139
  }
140
140
 
141
- Rails-portlet will provide us a hash with all saved preferences, to access this method we need to include the Caterpillar::PortletSupport module, like:
142
- include Caterpillar::PortletSupport
141
+ Rails-portlet will provide us a hash with all saved preferences, to access this method we need to include the Caterpillar::Helpers::Liferay module, like:
142
+ include Caterpillar::Helpers::Liferay
143
143
 
144
144
  This module will provide <b>get_liferay_preferences</b> method which returns the preferences hash. A good approach is to include this module on <i>ApplicationController</i>, like:
145
145
  class ApplicationController < ActionController::Base
146
- include Caterpillar::PortletSupport
146
+ include Caterpillar::Helpers::Liferay
147
147
 
148
148
  helper :all # include all helpers, all the time
149
149
  protect_from_forgery # See ActionController::RequestForgeryProtection for details
data/Rakefile CHANGED
@@ -1,17 +1,17 @@
1
1
  require 'rake'
2
2
  require 'rake/testtask'
3
- require 'rake/rdoctask'
4
- require 'rake/gempackagetask'
5
- load 'caterpillar.gemspec'
6
-
7
- # gem install rspec -v 1.3.0
8
3
  require 'spec/rake/spectask'
9
- # gem install rcov
10
4
  require 'spec/rake/verify_rcov'
11
5
 
12
6
  desc 'Default: create API doc.'
13
7
  task :default => :rdoc
14
8
 
9
+ desc "Create the caterpillar gem file"
10
+ task :gem do
11
+ spec = eval(IO.read("caterpillar.gemspec"))
12
+ Gem::Builder.new(spec).build
13
+ end
14
+
15
15
  Spec::Rake::SpecTask.new do |t|
16
16
  t.spec_opts ||= []
17
17
  t.spec_opts << "--options" << "spec/spec.opts"
@@ -21,21 +21,5 @@ Spec::Rake::SpecTask.new("spec:rcov") do |t|
21
21
  t.spec_opts ||= []
22
22
  t.spec_opts << "--options" << "spec/spec.opts"
23
23
  t.rcov = true
24
- # t.rcov_opts = ['--text-report', '--exclude', "gems/,spec/,rcov.rb,#{File.expand_path(File.join(File.dirname(__FILE__),'../../..'))}"]
25
24
  t.rcov_opts = ['--exclude', 'diff-lcs,rake,spec,rcov,active_support,action_controller,action_view,json,rack']
26
25
  end
27
-
28
- RCov::VerifyTask.new(:rcov => "spec:rcov") do |t|
29
- t.threshold = 100
30
- end
31
-
32
- desc 'Generate documentation for the example plugin.'
33
- Rake::RDocTask.new(:rdoc) do |rdoc|
34
- rdoc.rdoc_dir = 'rdoc'
35
- rdoc.title = 'Caterpillar'
36
- rdoc.main = 'README.rdoc'
37
- rdoc.rdoc_files.include('README.rdoc')
38
- rdoc.rdoc_files.include('lib/**/*.rb')
39
- rdoc.rdoc_files.include('generators/**/*.rb')
40
- rdoc.options << '--line-numbers' << '--inline-source' << '-U'
41
- end
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'lib/caterpillar'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = %q{caterpillar}
6
+ s.authors = ["Mikael Lammentausta"]
7
+ s.email = %q{mikael.lammentausta@gmail.com}
8
+ s.homepage = %q{http://github.com/lamikae/caterpillar}
9
+ s.version = Caterpillar::VERSION
10
+
11
+ s.add_dependency("hpricot", ">= 0.6.164")
12
+ s.add_dependency("jrexml")
13
+ s.add_dependency("rake")
14
+
15
+ s.description = %q{= Caterpillar}
16
+
17
+ s.executables = ["caterpillar"]
18
+ s.default_executable = %q{caterpillar}
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+
22
+ s.extra_rdoc_files = ["README.rdoc","MIT-LICENSE","ChangeLog"]
23
+ s.rdoc_options = ["--main", "README.rdoc"]
24
+ s.rdoc_options << '--line-numbers' << '--inline-source'
25
+ s.rubyforge_project = %q{rails-portlet}
26
+ s.summary = %q{Caterpillar helps building Rails applications for JSR286 portlets.}
27
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
+ end
@@ -18,6 +18,16 @@ class CaterpillarGenerator < Rails::Generator::Base
18
18
  end
19
19
 
20
20
  def after_generate
21
+ # generate random shared secret
22
+ msg(
23
+ "Generating new random shared secret to config/portlets.rb"
24
+ )
25
+ File.open(File.join('config','portlets.rb'), "r+") do |f|
26
+ newconf = f.read().sub('somereallylongrandomkey', Caterpillar::Security::random_secret)
27
+ f.seek 0
28
+ f.write newconf
29
+ end
30
+
21
31
  msg(
22
32
  "If you want to use the portlet test bench,\n" + \
23
33
  "put the following line in your config/routes.rb before other routes.\n" + \
@@ -37,10 +47,8 @@ class CaterpillarGenerator < Rails::Generator::Base
37
47
  record do |m|
38
48
 
39
49
  ### config ###
40
- # m.directory('config')
41
- # file = 'portlets.rb'
42
- # m.file(File.join('config',file), File.join('config',file))
43
- m.template('config/portlets.rb','config/portlets.rb')
50
+ file = File.join('config','portlets.rb')
51
+ m.template(file,file)
44
52
 
45
53
  ### Navigation ###
46
54
  target = File.join('public','images')
@@ -5,7 +5,7 @@ Caterpillar::Config.new do |portlet|
5
5
  # By default only portlet.xml is created.
6
6
  # Currently only Liferay is supported. You may optionally define the version.
7
7
  portlet.container = Liferay
8
- # portlet.container.version = '5.2.3'
8
+ # portlet.container.version = '6.0.6'
9
9
 
10
10
  # If you want to install the Rails-portlet JAR into the container, the container
11
11
  # WEB-INF will be used.
@@ -15,7 +15,7 @@ Caterpillar::Config.new do |portlet|
15
15
  #
16
16
  # No changes are made to any of the files in this directory while making XML,
17
17
  # only the deploy and install tasks make any changes.
18
- # portlet.container.root = '/usr/local/liferay/tomcat/'
18
+ # portlet.container.root = '/usr/local/liferay-portal-6.0.6/tomcat-6.0.29'
19
19
 
20
20
  # The server that the container is running on.
21
21
  # Possible values:
@@ -87,6 +87,14 @@ Caterpillar::Config.new do |portlet|
87
87
  :title => 'Rails-portlet test bench',
88
88
  :category => 'Caterpillar'
89
89
  }
90
+
91
+ # This secret string is shared between the portlets and the Rails server,
92
+ # and passed in a cookie with every request.
93
+ # It is used to prevent spoofed requests from unauthorized clients.
94
+ portlet.session_secret = {
95
+ :key => '_rails_portlet',
96
+ :secret => 'somereallylongrandomkey'
97
+ }
90
98
 
91
99
  # this will include all named routes without further configuration
92
100
  portlet.include_all_named_routes = true
@@ -1,7 +1,7 @@
1
1
  /* main.css */
2
2
 
3
3
  body {
4
- background-color: #FFFFCC;
4
+ background-color: gray;
5
5
  }
6
6
 
7
7
  /* testing leading whitespaces */
@@ -38,7 +38,7 @@ font: 14px Times New Roman;
38
38
 
39
39
  /* used on css test page */
40
40
  #simple_content {
41
- margin: 25px; padding: 10px; border: 1px solid #000000; background: #93FFE4;
41
+ margin: 25px; padding: 10px; border: 1px solid #000000; background: purple; color: white;
42
42
  }
43
43
 
44
44
  /* resource test page */
data/init.rb CHANGED
@@ -1,14 +1,13 @@
1
1
  # encoding: utf-8
2
-
3
-
4
2
  #--
5
- # (c) Copyright 2008,2009 Mikael Lammentausta
3
+ # (c) Copyright 2008 - 2011 Mikael Lammentausta
4
+ # 2010 - 2011 Tulio Ornelas dos Santos
6
5
  #
7
6
  # See the file MIT-LICENSE included with the distribution for
8
7
  # software license details.
9
8
  #++
10
9
 
11
- ### Initialize the Rails plugin.
10
+ ### Initializes the Rails2 plugin
12
11
 
13
12
  file = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
14
13
  this_dir = File.dirname(File.expand_path(file))
@@ -16,21 +15,34 @@ this_dir = File.dirname(File.expand_path(file))
16
15
  # load the main file
17
16
  require File.join(this_dir, 'lib', 'caterpillar')
18
17
 
19
- #STDERR.puts 'Caterpillar: version %s' % Caterpillar::VERSION
20
-
21
18
  # Add Caterpillar portlet navigation to views paths
22
19
  ActionController::Base.append_view_path File.join(this_dir, 'views')
23
20
 
21
+ # Detect Rails version to use proper load commands
22
+ v = RailsGemChooser.version
23
+ raise 'Unable to detect available Rails version' unless v
24
+ rails_version = v.gsub('.','').to_i
25
+
24
26
  ### Initialize the portlet test bench
25
27
 
26
28
  # Adding directories to the load path makes them appear just like files in the the main app directory.
27
29
  %w{ controllers helpers }.each do |path|
28
- ActiveSupport::Dependencies.load_paths << File.join(this_dir, 'portlet_test_bench', path)
30
+ if rails_version > 238
31
+ # this changed between 2.3.8 and 2.3.10
32
+ ActiveSupport::Dependencies.autoload_paths << File.join(this_dir, 'portlet_test_bench', path)
33
+ else
34
+ ActiveSupport::Dependencies.load_paths << File.join(this_dir, 'portlet_test_bench', path)
35
+ end
29
36
  end
30
37
 
31
38
  # Removing a directory from the load once paths allow changes
32
39
  # to be picked up as soon as you save the file – without having to restart the web server.
33
- ActiveSupport::Dependencies.load_once_paths.delete(File.join(this_dir, 'portlet_test_bench'))
40
+ if rails_version > 238
41
+ # this changed between 2.3.8 and 2.3.10
42
+ ActiveSupport::Dependencies.autoload_once_paths.delete(File.join(this_dir, 'portlet_test_bench'))
43
+ else
44
+ ActiveSupport::Dependencies.load_once_paths.delete(File.join(this_dir, 'portlet_test_bench'))
45
+ end
34
46
 
35
47
  # Add views
36
48
  ActionController::Base.append_view_path File.join(this_dir, 'portlet_test_bench','views')
@@ -1,16 +1,18 @@
1
1
  # encoding: utf-8
2
2
  #--
3
- # (c) Copyright 2008-2010 Mikael Lammentausta
4
- # 2010 Tulio Ornelas
3
+ # (c) Copyright 2008 - 2011 Mikael Lammentausta
4
+ # 2010 Tulio Ornelas dos Santos
5
5
  #
6
6
  # See the file MIT-LICENSE included with the distribution for
7
7
  # software license details.
8
8
  #++
9
9
 
10
- module Caterpillar
11
- VERSION = '1.4.4' unless defined? Caterpillar::VERSION
10
+ module Caterpillar
11
+ VERSION = '1.6.0' unless defined? Caterpillar::VERSION
12
12
  end
13
13
 
14
+ STDOUT.puts 'Caterpillar: version %s' % Caterpillar::VERSION
15
+
14
16
  this_file = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
15
17
  this_dir = File.dirname(File.expand_path(this_file))
16
18
 
@@ -32,30 +34,34 @@ require 'find'
32
34
  require 'rake'
33
35
  require 'rake/tasklib'
34
36
 
35
- if defined? RAILS_ROOT
36
- # NOTE: During normal startup (not while building the gem),
37
- # ActiveRecord should be loaded at this point, before loading any of the models.
38
- # However, this may conflict later when Rails' rake task activates the boot process.
39
- # The correct versions should be loaded at this point.
40
- require File.join(this_dir,'rails_gem_chooser')
41
- RailsGemChooser.__load # detects the Rails config file from RAILS_ROOT
37
+ require File.join(this_dir,'rails_gem_chooser')
38
+
39
+ if (defined? RAILS_ROOT)
40
+ # ActiveRecord should be loaded at this point, before loading any of the models.
41
+ # However, this may conflict later when Rails' rake task activates the boot process.
42
+ # The correct versions should be loaded at this point.
43
+ RailsGemChooser.__load # detects the Rails config file from RAILS_ROOT
42
44
  end
43
45
 
44
46
  # include all ruby files
45
- Find.find(this_dir) do |file|
46
- if FileTest.directory?(file)
47
- if File.basename(file) == 'deprecated'
48
- Find.prune # Don't look any further into this directory.
49
-
50
- # load helpers only in Rails environment
51
- elsif (not defined?(RAILS_ENV) and %w{web helpers}.include?(File.basename(file)))
52
- Find.prune
53
-
54
- else
55
- next
56
- end
57
- else
58
- # do not require this file twice
59
- require file if file[/.rb$/] and File.basename(file) != File.basename(this_file)
60
- end
47
+ %w{
48
+ config
49
+ util
50
+ usage
51
+ task
52
+ security
53
+ portlet_support
54
+ portlet
55
+ parser
56
+ navigation
57
+ liferay
58
+ }.each do |src|
59
+ require File.join(this_dir, 'caterpillar', src+'.rb')
60
+ end
61
+
62
+ # these are used in Rails environment
63
+ if (defined? RAILS_ENV)
64
+ require File.join(this_dir, 'web', 'portlet.rb')
65
+ require File.join(this_dir, 'caterpillar', 'helpers', 'portlet.rb')
66
+ require File.join(this_dir, 'caterpillar', 'helpers', 'liferay.rb')
61
67
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  #--
3
3
  # (c) Copyright 2008 Mikael Lammentausta
4
- # See the file LICENSES.txt included with the distribution for
4
+ # See the file MIT-LICENSE included with the distribution for
5
5
  # software license details.
6
6
  #++
7
7
 
@@ -41,6 +41,8 @@ module Caterpillar
41
41
  attr_accessor :warbler_conf
42
42
 
43
43
  attr_accessor :logger
44
+
45
+ attr_accessor :session_secret
44
46
 
45
47
  # Sets sane defaults that are overridden in the config file.
46
48
  def initialize(detect_configuration_file = true)
@@ -1,35 +1,129 @@
1
1
  # encoding: utf-8
2
-
2
+ #--
3
+ # Copyright (c) 2007-2011 Mikael Lammmentausta
4
+ # 2010 Tulio Ornelas dos Santos
5
+ #
6
+ # See the file MIT-LICENSE included with the distribution for
7
+ # software license details.
8
+ #++
3
9
 
4
10
  require 'rubygems'
5
11
  require 'action_controller'
6
12
 
7
- module Caterpillar
8
- module Helpers
13
+ module Caterpillar # :nodoc:
14
+ module Helpers # :nodoc:
9
15
 
10
16
  # This module contains Rails helpers that provide methods to deal with various aspects
11
17
  # of portlet functionality in Liferay.
12
- #
13
- # Currently this consists of things that were constructed whenever needed during development,
14
- # and concidered general enough to be included here.
15
- #
16
- # link_to_liferay is deprecated, and is clearly a wrong way to solve the problem in question.
17
- # A better way has been constructed, but it is not perfect due to its dependency on a specific portlet.
18
18
  module Liferay
19
- include ActionView::Helpers::UrlHelper
20
19
  include ActionView::Helpers::TagHelper
21
-
22
- def liferay_resource_url(params, resource_url = cookies[:Liferay_resourceUrl])
23
- if resource_url.nil? then return raise "resource_url is needed!" end
20
+ include Portlet
21
+
22
+ class ResourceUrl
23
+ include ActionController::UrlWriter
24
+
25
+ require 'uri'
24
26
 
25
- controller = params.delete :controller
26
- action = params.delete :action
27
+ attr_accessor :resource_uri
28
+ attr_accessor :namespace
29
+ attr_accessor :options
30
+ attr_accessor :params
27
31
 
28
- if controller.nil? then return resource_url end
29
- if action.nil? then action = :index end
32
+ def initialize(base_url, namespace = '', options = {}, params = {})
33
+ @resource_uri = URI.parse(base_url)
34
+ @namespace = namespace
35
+ @options = options
36
+ @params = params
37
+ end
30
38
 
31
- url = "#{resource_url}&railsRoute=/#{controller}/#{action}"
39
+ def to_s()
40
+ uri = @resource_uri.dup
41
+ if @options.values.compact.empty?
42
+ # pass
43
+ else
44
+ query = {}
45
+ # unpack query
46
+ unless uri.query.nil?
47
+ uri.query.split('&').map do |p| p.split('=').reduce {|k,v| query.update({k => v})} end
48
+ end
49
+ # since url_for can't handle modularized controllers at this point,
50
+ # offer an explicit route as a workaround.
51
+ if @options[:route]
52
+ route = @options[:route]
53
+ else
54
+ # need controller and action
55
+ options = @options.dup
56
+ options.update(:host => 'localhost') unless options[:host]
57
+ options.update(:only_path => true)
58
+ if options[:action].nil? then options.update(:action => 'index') end
59
+ route = url_for(options)
60
+ end
61
+ query.update('_%s_%s' % [@namespace,'railsRoute'] => route)
62
+ @params.each_pair do |k,v|
63
+ query.update('_%s_%s' % [@namespace,k] => v)
64
+ end
65
+ # pack query
66
+ uri.query = query.each_pair.map{|k,v| '%s=%s' % [k,v]}.join('&')
67
+ end
68
+ return '%s://%s:%i%s' % [uri.scheme, uri.host, uri.port, uri.request_uri]
69
+ end
32
70
 
71
+ end
72
+
73
+ def resource_url_cookie
74
+ cookies[:Liferay_resourceUrl]
75
+ end
76
+
77
+ def preferences_cookie
78
+ cookies[:Liferay_preferences]
79
+ end
80
+
81
+ # Get the Liferay UID from cookie.
82
+ def get_liferay_uid
83
+ uid_key = 'Liferay_UID'
84
+ unless cookies.nil? or cookies[uid_key].nil?
85
+ @uid = cookies[uid_key]
86
+ logger.debug("Liferay UID %s" % @uid)
87
+ else
88
+ logger.debug("UID key is not present in cookies %s" % cookies.inspect)
89
+ end
90
+ end
91
+
92
+ # Get the Liferay GID from cookie.
93
+ def get_liferay_gid
94
+ gid_key = 'Liferay_GID'
95
+ unless cookies.nil? or cookies[gid_key].nil?
96
+ @gid = cookies[gid_key]
97
+ logger.debug("Liferay GID %s" % @gid)
98
+ else
99
+ logger.debug("GID key is not present in cookies %s" % cookies.inspect)
100
+ end
101
+ end
102
+
103
+ # Formulate resource URL for Liferay.
104
+ # The request will be handled by serveResource().
105
+ # The cookie "Liferay_resourceUrl" should be automatically included into
106
+ # available cookies by "rails-portlet".
107
+ def liferay_resource_url(_params, resource_url=resource_url_cookie)
108
+ if resource_url.nil? then return raise "resource_url is needed!" end
109
+ params = _params.dup # create duplicate params, do not modify originals!
110
+
111
+ options = {
112
+ :controller => params.delete(:controller),
113
+ :action => params.delete(:action),
114
+ :route => params.delete(:route)
115
+ }
116
+
117
+ res = ResourceUrl.new(resource_url)
118
+ res.options = options
119
+ res.namespace = @namespace || namespace_cookie
120
+ res.params = params
121
+ #p res
122
+ return res.to_s
123
+ =begin
124
+ if options[:controller].nil? then return resource_url end
125
+ #if route_params[:action].nil? then action = :index end
126
+ url = "#{resource_url}&#{namespace}railsRoute=/#{path}"
33
127
  unless params.empty?
34
128
  url += '?'
35
129
  params.keys.each do |key|
@@ -37,127 +131,30 @@ module Helpers
37
131
  end
38
132
  url.gsub!(/&$/, '')
39
133
  end
40
-
41
134
  url
135
+ =end
42
136
  end
43
137
 
44
- # Link that the rails-portlet will leave unparsed.
45
- def link_to_exit_portlet(name, options = {}, html_options = {})
46
- link_to(name, url_to_exit_portlet(options), html_options)
47
- end
48
-
49
- # Formulates a link to Liferay. DEPRECATED.
138
+ # Gets portlet preferences from a cookie (Liferay_preferences) and generates
139
+ # a hash with it. Returns nil if cookie do not exists or the value is nil.
50
140
  #
51
- # Parameters:
52
- # - obj is an instance of a model from the lportal library.
53
- # - options
54
- def link_to_liferay(obj,options={})
55
-
56
- # Rails-portlet cannot pass the actual redirect parameter.
57
- # Workaround with JavaScript.
58
- redirect = 'javascript: history.go(-1)'
59
-
60
- title = 'n/a' # link title
61
- begin
62
- logger.debug "Formulating Liferay link for #{obj}"
63
- case obj.liferay_class
64
-
65
- ### group
66
- when 'com.liferay.portal.model.Group'
67
- STDERR.puts 'Called DEPRECATED method - use %s.path instead' % obj
68
-
69
-
70
- when 'com.liferay.portal.model.Layout'
71
- STDERR.puts 'Called DEPRECATED method - use %s.path instead' % obj
72
-
73
-
74
- ### user
75
- when 'com.liferay.portal.model.User'
76
- STDERR.puts 'Called DEPRECATED method - use %s.path instead' % obj
77
-
78
-
79
- ### blog
80
- when 'com.liferay.portlet.blogs.model.BlogsEntry'
81
- STDERR.puts 'FIXME: %s.path' % obj
82
-
83
- ### document library file
84
- #
85
- # tämä toimii hiukan eri logiikalla kuin toiset, koska
86
- # sama malli joutuu mallintamaan myös tyyppinsä tiedostopäätteestä
87
- when 'com.liferay.portlet.documentlibrary.model.DLFileEntry'
88
- STDERR.puts 'Called DEPRECATED method - use %s.path instead' % obj
89
- redirect_link=request.env["PATH_INFO"] # ei toimi portletissa
90
-
91
- label = 'Tiedostotyyppiä %s ei vielä tueta' % obj.type[:name]
92
- #_('Lataa tiedosto "%s"') % obj.asset.title
93
- case obj.type[:uuid]
94
- when :video
95
- label = _('Linkki videoon "%s"') % obj.asset.title
96
- link_to_exit_portlet( label, url_for(
97
- { :controller => :video,
98
- :action => :asset,
99
- :id => obj.asset.id,
100
- :uid => @user.id,
101
- :redirect => redirect_link
102
- }))
103
-
104
- when :pdf
105
- label = _('Linkki dokumenttiin "%s"') % obj.asset.title
106
- redirect = ''
107
- url = LiferayUrl.new(obj,nil,redirect).static_url
108
- link_to_exit_portlet( label, url )
109
-
110
- end
111
-
112
-
113
- ### galleriakuva
114
- when 'com.liferay.portlet.imagegallery.model.IGImage'
115
- STDERR.puts 'FIXME: %s.path' % obj
116
- base_url = "#{$LIFERAY_SERVER}/image/image_gallery"
117
- options.update(:use_large_igpreview => false) unless options[:use_large_igpreview]
118
- img_id = (options[:use_large_igpreview] == true ? obj.large.id : obj.small.id)
119
-
120
- img = link_to_exit_portlet(
121
- image_tag( "#{base_url}?img_id=#{img_id}", :alt => obj.description, :class => 'asset_image' ),
122
- "#{base_url}?img_id=#{obj.large.id}"
123
- )
124
- logger.debug img
125
- return img
126
-
127
-
128
- when 'com.liferay.portlet.journal.model.JournalArticle'
129
- STDERR.puts 'FIXME: %s.path' % obj
130
- url = LiferayUrl.new(obj,@user,redirect).instance_url
131
- link_to_exit_portlet( _('Lue koko artikkeli "%s"') % obj.asset.title, url )
132
-
133
- when 'com.liferay.portlet.messageboards.model.MBCategory'
134
- STDERR.puts 'Called DEPRECATED method - use %s.path instead' % obj
135
-
136
-
137
- when 'com.liferay.portlet.messageboards.model.MBMessage'
138
- STDERR.puts 'FIXME: %s.path' % obj
139
- url = LiferayUrl.new(obj,@user,redirect).instance_url
140
- link_to_exit_portlet( _('Lue viesti "%s"') % obj.asset.title, url )
141
-
142
- # when 'com.liferay.portlet.messageboards.model.MBThread'
143
-
144
- when 'com.liferay.portlet.wiki.model.WikiPage'
145
- STDERR.puts 'FIXME: %s.path' % obj
146
- url = LiferayUrl.new(obj,@user,redirect).instance_url
147
- link_to_exit_portlet( _('Lue sivu "%s"') % obj.asset.title, url )
148
-
149
- else
150
- STDERR.puts 'Called DEPRECATED method, but no method can handle %s' % obj
151
- raise _('This type of link cannot be handled.')
152
-
141
+ def get_liferay_preferences(value = preferences_cookie)
142
+ preferences = {}
143
+ if value and (not value.empty?)
144
+ value.split(";").each do |pair|
145
+ if pair.nil? or pair.empty? then next end
146
+ result = pair.split("=")
147
+ preferences[result[0].intern] = result[1]
153
148
  end
154
-
155
- rescue Exception => err
156
- logger.error '*** ERROR ***: %s' % err.message
157
- link_to_function( _('Cannot link to resource.'), "alert('#{err.message}')" )
149
+ return preferences
158
150
  end
151
+ nil
159
152
  end
160
153
 
154
+ # Link that the rails-portlet will leave unparsed.
155
+ def link_to_exit_portlet(name, options = {}, html_options = {})
156
+ link_to(name, url_to_exit_portlet(options), html_options)
157
+ end
161
158
 
162
159
  # Appends parameters "exit_portlet=true" into the url.
163
160
  # Url might be either Hash or String.
@@ -182,4 +179,4 @@ module Helpers
182
179
 
183
180
  end
184
181
  end
185
- end
182
+ end