caterpillar 0.9.2 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ = 0.9.4
2
+ - Web::PortletNames migrations + model
3
+ - random small fixes
4
+
5
+
1
6
  = 0.9.2
2
7
  - fixed a problem with navigation; enhanced css
3
8
  - deployment task
@@ -10,4 +15,4 @@ Released at 2008-12-18
10
15
 
11
16
  = 0.9.0
12
17
  Released at 2008-12-17
13
- - the initial release
18
+ - the initial release
@@ -0,0 +1,17 @@
1
+ class PortletNames < ActiveRecord::Migration
2
+ def self.up
3
+ # dealing with tables that have no id is a pain with ActiveRecord,
4
+ # and using the 'id' column for portletid does not work either,
5
+ # ActiveRecord does not let that column to be set manually.
6
+ create_table :portlet_names do |t|
7
+ t.column :portletid, :string, :null => false
8
+ t.column :name, :string, :null => false
9
+ t.column :title, :string, :null => false
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ drop_table :portlet_names
15
+ #ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS portlet_names")
16
+ end
17
+ end
@@ -4,6 +4,8 @@ class LportalSequences < ActiveRecord::Migration
4
4
  @@tables = [
5
5
  Account,
6
6
  Address,
7
+ Announcement::Delivery,
8
+ Announcement::Entry,
7
9
  Asset,
8
10
  Contact,
9
11
  Group,
data/lib/caterpillar.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  #++
6
6
 
7
7
  module Caterpillar
8
- VERSION='0.9.2'
8
+ VERSION='0.9.4'
9
9
  end
10
10
 
11
11
  this_file = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
@@ -0,0 +1,183 @@
1
+ module Caterpillar
2
+ module Helpers
3
+ module Liferay
4
+ # include ActionView::Helpers::UrlHelper
5
+ # include ActionView::Helpers::TagHelper
6
+
7
+ # Formulates a link to Liferay.
8
+ # Parameters:
9
+ # - obj is an instance of a model from the lportal library.
10
+ # - options
11
+ def link_to_liferay(obj,options={})
12
+ options.update(:use_large_igpreview => false) unless options[:use_large_igpreview]
13
+
14
+ # Rails-portlet cannot pass the actual redirect parameter.
15
+ # Workaround with JavaScript.
16
+ redirect = 'javascript: history.go(-1)'
17
+
18
+ title = 'n/a' # link title
19
+ begin
20
+ STDERR.puts 'This method is DEPRECATED - use obj.path instead'
21
+ logger.debug "Formulating Liferay link for #{obj}"
22
+ case obj.liferay_class
23
+
24
+ ### group
25
+ when 'com.liferay.portal.model.Group'
26
+ # title = (obj.name.empty? ? obj.owner.fullname : obj.name)
27
+ # urls = LiferayUrl.new(obj,nil,nil).static_url
28
+ # logger.debug urls
29
+ # if options[:private]
30
+ # label = _('yksityiset sivut')
31
+ # urls[:private] ?
32
+ # link_to_exit_portlet( label, urls[:private] ) :
33
+ # link_to_function(
34
+ # label, "alert('%s')" % _('Yhteisöllä ei ole yksityisiä sivuja'))
35
+ # else
36
+ # label = _('julkiset sivut')
37
+ # urls[:public] ?
38
+ # link_to_exit_portlet( label, urls[:public] ) :
39
+ # link_to_function(
40
+ # label, "alert('%s')" % _('Yhteisöllä ei ole julkisia sivuja'))
41
+ # end
42
+
43
+
44
+ # siirretty malliin
45
+ # when 'com.liferay.portal.model.Layout'
46
+ # url = LiferayUrl.new(obj).static_url
47
+ # return url_to_exit_portlet(url)
48
+
49
+
50
+ ### user
51
+ when 'com.liferay.portal.model.User'
52
+ # urls = LiferayUrl.new(obj,nil,nil).static_url
53
+ # #logger.debug urls
54
+ # if options[:private]
55
+ # label = options[:label]
56
+ # label ||= _('yksityiset sivut')
57
+ # urls[:private] ?
58
+ # link_to_exit_portlet( label, urls[:private] ) :
59
+ # link_to_function(
60
+ # label, "alert('%s')" % _('Tunnuksella ei ole yksityisiä sivuja'))
61
+ # else
62
+ # label = options[:label] || _('julkiset sivut')
63
+ # urls[:public] ?
64
+ # link_to_exit_portlet( label, urls[:public] ) :
65
+ # link_to_function(
66
+ # label, "alert('%s')" % _('Tunnuksella ei ole julkisia sivuja'))
67
+ # end
68
+
69
+
70
+ ### blog
71
+ when 'com.liferay.portlet.blogs.model.BlogsEntry'
72
+ title = _('Linkki blogimerkintään "%s"') % obj.title
73
+ url = LiferayUrl.new(obj,@user,redirect).instance_url
74
+ link_to_exit_portlet( title, url )
75
+
76
+
77
+ ### document library file
78
+ #
79
+ # tämä toimii hiukan eri logiikalla kuin toiset, koska
80
+ # sama malli joutuu mallintamaan myös tyyppinsä tiedostopäätteestä
81
+ when 'com.liferay.portlet.documentlibrary.model.DLFileEntry'
82
+ redirect_link=request.env["PATH_INFO"] # ei toimi portletissa
83
+
84
+ label = 'Tiedostotyyppiä %s ei vielä tueta' % obj.type[:name]
85
+ #_('Lataa tiedosto "%s"') % obj.asset.title
86
+ case obj.type[:uuid]
87
+ when :video
88
+ label = _('Linkki videoon "%s"') % obj.asset.title
89
+ link_to_exit_portlet( label, url_for(
90
+ { :controller => :video,
91
+ :action => :asset,
92
+ :id => obj.asset.id,
93
+ :uid => @user.id,
94
+ :redirect => redirect_link
95
+ }))
96
+
97
+ when :pdf
98
+ label = _('Linkki dokumenttiin "%s"') % obj.asset.title
99
+ redirect = ''
100
+ url = LiferayUrl.new(obj,nil,redirect).static_url
101
+ link_to_exit_portlet( label, url )
102
+
103
+ end
104
+
105
+
106
+ ### galleriakuva
107
+ when 'com.liferay.portlet.imagegallery.model.IGImage'
108
+ base_url = "#{$LIFERAY_SERVER}/image/image_gallery"
109
+ img_id = (options[:use_large_igpreview] == true ? obj.large.id : obj.small.id)
110
+
111
+ img = link_to_exit_portlet(
112
+ image_tag( "#{base_url}?img_id=#{img_id}", :alt => obj.description, :class => 'asset_image' ),
113
+ "#{base_url}?img_id=#{obj.large.id}"
114
+ )
115
+ logger.debug img
116
+ return img
117
+
118
+
119
+ when 'com.liferay.portlet.journal.model.JournalArticle'
120
+ url = LiferayUrl.new(obj,@user,redirect).instance_url
121
+ link_to_exit_portlet( _('Lue koko artikkeli "%s"') % obj.asset.title, url )
122
+
123
+ when 'com.liferay.portlet.messageboards.model.MBCategory'
124
+ # url = LiferayUrl.new(obj,@user,redirect).static_url
125
+ # link_to_exit_portlet( obj.name, url )
126
+
127
+
128
+ when 'com.liferay.portlet.messageboards.model.MBMessage'
129
+ url = LiferayUrl.new(obj,@user,redirect).instance_url
130
+ link_to_exit_portlet( _('Lue viesti "%s"') % obj.asset.title, url )
131
+
132
+ # when 'com.liferay.portlet.messageboards.model.MBThread'
133
+
134
+ when 'com.liferay.portlet.wiki.model.WikiNode'
135
+ logger.debug "WikiNode"
136
+ # url = LiferayUrl.new(obj,@user,redirect).instance_url
137
+ # link_to_exit_portlet( _('Lue sivu "%s"') % obj.asset.title, url )
138
+
139
+ when 'com.liferay.portlet.wiki.model.WikiPage'
140
+ logger.debug "WikiPage"
141
+ url = LiferayUrl.new(obj,@user,redirect).instance_url
142
+ link_to_exit_portlet( _('Lue sivu "%s"') % obj.asset.title, url )
143
+
144
+ else
145
+ logger.debug obj.liferay_class
146
+ raise _('Tämän tyyppistä linkkiä ei vielä hallita')
147
+
148
+ end
149
+
150
+ rescue Exception => err
151
+ logger.error '*** ERROR ***: %s' % err.message
152
+ link_to_function( _('Kohteeseen ei voi linkittää.'), "alert('#{err.message}')" )
153
+ end
154
+ end
155
+
156
+
157
+ def url_to_exit_portlet(url)
158
+ directive = { :exit_portlet => 'true' }
159
+
160
+ if url.is_a? Hash
161
+ url.update directive
162
+
163
+ elsif url.is_a? String
164
+ if url[/\?[\w]*\=/] # url has parameters
165
+ delimiter = '&amp;'
166
+ else # no parameters
167
+ delimiter = '?'
168
+ end
169
+ url += "#{delimiter}#{directive.keys.first}=#{directive.values.first}"
170
+
171
+ end
172
+ return url
173
+ end
174
+
175
+
176
+ # formulates a link that the rails286-portlet will leave unparsed.
177
+ def link_to_exit_portlet(label, url)
178
+ link_to label, url_to_exit_portlet(url)
179
+ end
180
+
181
+ end
182
+ end
183
+ end
@@ -33,6 +33,10 @@ module Caterpillar
33
33
  portlets = []
34
34
 
35
35
  f=File.open(self.WEB_INF+'/portlet-custom.xml','r')
36
+ custom_xml = Hpricot.XML(f.read)
37
+ f.close
38
+
39
+ f=File.open(self.WEB_INF+'/liferay-portlet.xml','r')
36
40
  portlet_xml = Hpricot.XML(f.read)
37
41
  f.close
38
42
 
@@ -40,15 +44,20 @@ module Caterpillar
40
44
  display_xml = Hpricot.XML(f.read)
41
45
  f.close
42
46
 
43
- (portlet_xml/'portlet').each do |portlet|
47
+ (custom_xml/'portlet').each do |portlet|
44
48
  _p = {
45
- :name => (portlet/'portlet-name').innerHTML,
49
+ :id => (portlet/'portlet-name').innerHTML,
46
50
  :title => (portlet/'display-name').innerHTML
47
51
  }
48
52
 
49
- # horribly ineffective
53
+ # search the name
54
+ portlet_xml.search("//portlet-name").each do |p|
55
+ _p.update(:name => (p/"../struts-path").text) if p.innerHTML==_p[:id]
56
+ end
57
+
58
+ # search the category - horribly ineffective
50
59
  display_xml.search("//category").each do |c|
51
- _p.update(:category => c['name'] ) if (c/"//portlet[@id='#{_p[:name]}']").any?
60
+ _p.update(:category => c['name'] ) if (c/"//portlet[@id='#{_p[:id]}']").any?
52
61
  end
53
62
 
54
63
  portlets << _p
@@ -167,7 +176,7 @@ module Caterpillar
167
176
  # tables that are skipped when creating fixtures
168
177
  def skip_fixture_tables
169
178
  [
170
- "country","cyrususer","cyrusvirtual",
179
+ "cyrususer","cyrusvirtual",
171
180
  "documentlibrary_fsentry","documentlibrary_binval","documentlibrary_node","documentlibrary_prop","documentlibrary_refs",
172
181
  "expandocolumn",
173
182
  "expandorow",
@@ -177,10 +186,6 @@ module Caterpillar
177
186
  "chat_entry",
178
187
  "chat_status",
179
188
  "journalcontentsearch",
180
- "journalfeed",
181
- "journalstructure",
182
- "journaltemplate",
183
- "listtype",
184
189
  "mbban",
185
190
  "mbmessageflag",
186
191
  "mbstatsuser",
@@ -190,9 +195,6 @@ module Caterpillar
190
195
  "passwordpolicy",
191
196
  "passwordtracker",
192
197
  "pluginsetting",
193
- "pollschoice",
194
- "pollsquestion",
195
- "pollsvote",
196
198
  "quartz_blob_triggers",
197
199
  "quartz_calendars",
198
200
  "quartz_cron_triggers",
@@ -238,4 +240,4 @@ module Caterpillar
238
240
  end
239
241
 
240
242
  end
241
- end
243
+ end
@@ -238,13 +238,15 @@ module Caterpillar
238
238
  ActiveRecord::Migrator.migrate(
239
239
  File.expand_path(
240
240
  File.dirname(__FILE__) + "/../../db/migrate"))
241
- # Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
241
+ STDOUT.puts 'Now, run rake db:schema:dump'
242
+ #Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
242
243
 
243
244
  @portlets = config.container.analyze(:native)
244
245
  @portlets.each do |portlet|
245
- LiferayPortlet.create(
246
- :name => portlet[:name],
247
- :title => portlet[:title]
246
+ Web::PortletName.create(
247
+ :portletid => portlet[:id],
248
+ :name => portlet[:name],
249
+ :title => portlet[:title]
248
250
  )
249
251
  end
250
252
  end
@@ -261,7 +263,8 @@ module Caterpillar
261
263
  ActiveRecord::Migrator.migrate(
262
264
  File.expand_path(
263
265
  File.dirname(__FILE__) + "/../../db/migrate"), version)
264
- # Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
266
+ STDOUT.puts 'Now, run rake db:schema:dump'
267
+ #Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
265
268
  end
266
269
  end
267
270
  end
@@ -274,16 +277,17 @@ module Caterpillar
274
277
  raise 'Only Liferay is supported' unless @config.container.kind_of? Liferay
275
278
  require 'find'
276
279
 
280
+ #version = '0.5.2'
281
+ version = '0.6.0'
282
+
277
283
  portlet_jar = nil
278
284
  old_jar = nil
279
- version = nil
280
285
  source = File.join(CATERPILLAR_LIBS,'java')
281
286
  target = File.join(@config.container.WEB_INF,'lib')
282
287
 
283
288
  Find.find(source) do |file|
284
- if File.basename(file) =~ /rails-portlet/
289
+ if File.basename(file) =~ /rails-portlet-#{version}/
285
290
  portlet_jar = file
286
- version = file[/(\d.\d.\d).jar/,1]
287
291
  end
288
292
  end
289
293
 
@@ -361,10 +365,20 @@ module Caterpillar
361
365
  end
362
366
 
363
367
 
364
-
368
+ # Using JRuby to build the WAR file is necessary, as MRI Ruby can build broken files, even with the same set of rubygems.
369
+ # Especially gettext seems to be a problem.
365
370
  def define_warble_task
366
371
  desc 'Create a WAR package with Warbler'
367
372
  task :warble do
373
+ unless ENV['JRUBY_HOME']
374
+ info 'Environment variable JRUBY_HOME is not set, exiting'
375
+ exit 1
376
+ end
377
+ jruby = File.join(ENV['JRUBY_HOME'],'bin','jruby')
378
+ unless File.exists?(jruby)
379
+ info 'JRuby executable was not found in %s, exiting' % jruby
380
+ exit 1
381
+ end
368
382
  unless system('which warble')
369
383
  info 'Warbler was not found in PATH, exiting'
370
384
  exit 1
@@ -373,14 +387,9 @@ module Caterpillar
373
387
  info 'Warbler configuration file %s was not found, exiting' % @config.warbler_conf
374
388
  exit 1
375
389
  end
376
- info 'building WAR package'
377
-
378
- system('ruby -S warble war')
390
+ info 'building WAR package using JRuby (%s)' % jruby
391
+ system(jruby+' -S warble war')
379
392
 
380
- unless File.exists?(@config.servlet+'.war')
381
- info 'cannot find the WAR file, exiting'
382
- exit 1
383
- end
384
393
  end
385
394
  end
386
395
 
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,10 @@
1
+ require 'active_record'
2
+
3
+ module Web
4
+ class Portlet < ActiveRecord::Base
5
+ def title
6
+ p = Web::PortletName.find_by_portletid(self.portletid)
7
+ p ? p.title : nil
8
+ end
9
+ end
10
+ end
@@ -2,7 +2,7 @@ require 'active_record'
2
2
 
3
3
  module Web # :nodoc:
4
4
  # This model does not appear in the lportal database. This is created by a migration and contains the portlet id => name mappings.
5
- class PortletName < ActiveRecord::Base # :nodoc:
6
- set_table_name :web_portlet_names
5
+ class PortletName < ActiveRecord::Base
6
+ set_table_name :portlet_names
7
7
  end
8
8
  end
@@ -0,0 +1,10 @@
1
+ require 'active_record'
2
+
3
+ module Web
4
+ class PortletPreferences < ActiveRecord::Base
5
+ def title
6
+ p = Web::PortletName.find_by_portletid(self.name)
7
+ p ? p.title : nil
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+ require File.dirname(File.expand_path(__FILE__))+'/test_helper'
3
+
4
+ class LiferayHelpersTest < Caterpillar::TestCase # :nodoc:
5
+ def test_link_to_liferay
6
+ user = User.first
7
+
8
+ flunk
9
+ end
10
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caterpillar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Lammentausta
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-19 00:00:00 +02:00
12
+ date: 2009-01-23 00:00:00 +02:00
13
13
  default_executable: caterpillar
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -47,11 +47,16 @@ files:
47
47
  - install.rb
48
48
  - init.rb
49
49
  - lib/java
50
+ - lib/java/rails-portlet-0.6.0.jar
50
51
  - lib/java/rails-portlet-0.5.2.jar
52
+ - lib/java/commons-httpclient-3.1.jar
53
+ - lib/java/htmlparser-1.6.jar
54
+ - lib/java/commons-codec-1.3.jar
51
55
  - lib/caterpillar
52
56
  - lib/caterpillar/config.rb
57
+ - lib/caterpillar/helpers
58
+ - lib/caterpillar/helpers/liferay.rb
53
59
  - lib/caterpillar/navigation.rb
54
- - lib/caterpillar/liferay_portlet.rb
55
60
  - lib/caterpillar/usage.rb
56
61
  - lib/caterpillar/liferay.rb
57
62
  - lib/caterpillar/portlet.rb
@@ -61,6 +66,8 @@ files:
61
66
  - lib/caterpillar.rb
62
67
  - lib/web
63
68
  - lib/web/portlet_name.rb
69
+ - lib/web/portlet_preferences.rb
70
+ - lib/web/portlet.rb
64
71
  - generators/caterpillar
65
72
  - generators/caterpillar/templates
66
73
  - generators/caterpillar/templates/stylesheets
@@ -77,7 +84,7 @@ files:
77
84
  - generators/caterpillar/caterpillar_generator.rb
78
85
  - generators/caterpillar/USAGE
79
86
  - db/migrate
80
- - db/migrate/20081205000001_lportal_portlets.rb
87
+ - db/migrate/20081205000001_portlet_names.rb
81
88
  - db/migrate/20081205000002_lportal_sequences.rb
82
89
  - views/caterpillar
83
90
  - views/caterpillar/_navigation.html.erb
@@ -91,7 +98,6 @@ rdoc_options:
91
98
  - README
92
99
  - --line-numbers
93
100
  - --inline-source
94
- - -U
95
101
  require_paths:
96
102
  - lib
97
103
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -115,4 +121,5 @@ specification_version: 2
115
121
  summary: Caterpillar helps building Rails applications for JSR286 portlets.
116
122
  test_files:
117
123
  - test/portlets_test.rb
124
+ - test/liferay_helpers_test.rb
118
125
  - test/xml_test.rb
@@ -1,12 +0,0 @@
1
- class LportalPortlets < ActiveRecord::Migration
2
- def self.up
3
- create_table :lportal_portlets do |t|
4
- t.column :name, :string
5
- t.column :title, :string
6
- end
7
- end
8
-
9
- def self.down
10
- drop_table :lportal_portlets
11
- end
12
- end
@@ -1,8 +0,0 @@
1
- require 'active_record'
2
-
3
- module Caterpillar
4
- # This model does not appear in the lportal database. This is created by a migration and contains the portlet id => name mappings.
5
- class LiferayPortlet < ActiveRecord::Base
6
- set_table_name :lportal_portlets
7
- end
8
- end