caterpillar 0.9.2 → 0.9.4

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 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