caterpillar 0.9.6 → 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,13 @@
1
+ = 0.9.8
2
+ - fix problem with subcategories in liferay-display.xml
3
+ - model Rails portlets as Web::Portlets
4
+
5
+
6
+ = 0.9.7
7
+ - display version in navigation view
8
+ - comply link_to_exit_portlet with link_to api
9
+
10
+
1
11
  = 0.9.6
2
12
  - added some tables and a notice to sequence migrations
3
13
  - no longer installs css and javascript files, everything is cramped inline into the view
data/README CHANGED
@@ -1,21 +1,37 @@
1
1
  Caterpillar helps you with building Rails applications to be used in Java
2
2
  JSR286 portlets. This is possible with the help of Rails-portlet[http://rails-portlet.rubyforge.org].
3
3
 
4
- Rails portlets have been used on Liferay and the helpers offer specialized methods to support better Liferay integration.
5
-
6
- This package offers these functionalities:
4
+ Writing Rails portlets for Liferay is great fun!
5
+ Caterpillar tasks offer specialized methods for better Liferay integration:
7
6
 
7
+ ++xml++ and ++xml:deploy++
8
8
  - processes the portlet XML configuration in accordance with the named routes
9
9
  See Caterpillar::Config
10
10
 
11
+ ++jar:install++
12
+ - installs the Rails-portlet JAR into Liferay's classpath
13
+
14
+ ++deploy++
15
+ - warbles the application, updates the XML configuration and copies these to Liferay
16
+
17
+ ++pluginize++
11
18
  - provides a navigation view in development (you will have to enable it manually)
12
19
  See Caterpillar::Navigation
13
20
 
21
+ ++db:migrate++
14
22
  - offers a set of migrations to help with Liferay integration
15
23
 
16
- - provides a Rake task 'fixtures', which imports live data
17
- from the production database for testing
24
+ - patches Web::Portlet in the lportal[http://lportal.rubyforge.org] library, so manipulating
25
+ portlets is easier. This requires running the migrations.
26
+
27
+ ++fixtures++
28
+ - imports live data from the production database for testing
29
+
30
+
31
+ See the rdoc documentation and caterpillar --describe for the full feature list.
18
32
 
19
33
 
34
+ Caterpillar is open source! Patches and comments are welcome.
35
+ Join the bugs mailing list (http://rubyforge.org/mailman/listinfo/rails-portlet-bugs) to request help.
20
36
 
21
- See the rdoc documentation and caterpillar --describe for the feature list.
37
+ Caterpillar is written by Mikael Lammentausta for Cel'Amanzi Ltd.
@@ -5,7 +5,7 @@
5
5
  #++
6
6
 
7
7
  module Caterpillar
8
- VERSION='0.9.6'
8
+ VERSION='0.9.8'
9
9
  end
10
10
 
11
11
  this_file = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
@@ -174,9 +174,8 @@ module Helpers
174
174
 
175
175
 
176
176
  # formulates a link that the rails286-portlet will leave unparsed.
177
- def link_to_exit_portlet(label, url)
178
- raise 'No url given' if url.nil?
179
- link_to label, url_to_exit_portlet(url)
177
+ def link_to_exit_portlet(name, options = {}, html_options = {})
178
+ link_to(name, url_to_exit_portlet(options), html_options)
180
179
  end
181
180
 
182
181
  end
@@ -26,7 +26,8 @@ module Caterpillar
26
26
  File.join(self.root,'webapps','ROOT','WEB-INF')
27
27
  end
28
28
 
29
- def analyze(type)
29
+ # Reads Liferay portlet descriptor XML files and parses them with Hpricot.
30
+ def analyze(type=:native)
30
31
  require 'hpricot'
31
32
  return nil unless type==:native
32
33
 
@@ -55,9 +56,28 @@ module Caterpillar
55
56
  _p.update(:name => (p/"../struts-path").text) if p.innerHTML==_p[:id]
56
57
  end
57
58
 
58
- # search the category - horribly ineffective
59
- display_xml.search("//category").each do |c|
60
- _p.update(:category => c['name'] ) if (c/"//portlet[@id='#{_p[:id]}']").any?
59
+ # search the category - horribly ineffective.
60
+ # the categories is an Array where each raising index is a new subcategory
61
+ display_xml.search("display/category").each do |c|
62
+ if (c/"//portlet[@id='#{_p[:id]}']").any?
63
+ # the portlet is in this category
64
+ categories = [c['name']]
65
+
66
+ # child categories
67
+ c.search("category").each do |child|
68
+ categories << child['name']
69
+ end
70
+
71
+ if categories.size > 1
72
+ _p.update(:categories => categories)
73
+ else
74
+ _p.update(:category => categories.first)
75
+ end
76
+ # debug
77
+ #puts _p.inspect
78
+ #portlets << _p
79
+
80
+ end
61
81
  end
62
82
 
63
83
  portlets << _p
@@ -81,12 +101,13 @@ module Caterpillar
81
101
  xml = self.xml_header('display')
82
102
 
83
103
  categories = []
104
+ # process Rails portlets
84
105
  Util.categorize(portlets).each_pair do |category,portlets|
85
106
  categories << category
86
107
  xml << self.display_template(category,portlets)
87
108
  end
88
109
 
89
- # include other native Liferay categories
110
+ # include other native Liferay portlets and categories
90
111
  if self.WEB_INF
91
112
  require 'hpricot'
92
113
 
@@ -94,7 +115,7 @@ module Caterpillar
94
115
  f=File.open(filename,'r')
95
116
  doc = Hpricot.XML(f.read)
96
117
  f.close
97
- (doc/:category).each do |el|
118
+ (doc/"display/category").each do |el|
98
119
  unless categories.include?(el.attributes['name'])
99
120
  xml << ' ' + el.to_original_html + "\n"
100
121
  end
@@ -22,8 +22,6 @@ module Caterpillar
22
22
  #
23
23
  # This will go the body of your layout:
24
24
  # <% if @caterpillar_navigation -%>
25
- # <%= stylesheet_link_tag 'caterpillar/caterpillar' %>
26
- # <%= javascript_include_tag 'caterpillar/caterpillar' %>
27
25
  # <%= render :partial => "caterpillar/navigation" %>
28
26
  # <% end -%>
29
27
  #
@@ -43,7 +43,7 @@ module Caterpillar
43
43
  @config = Util.eval_configuration(config)
44
44
  yield self if block_given?
45
45
  @xml_files = []
46
- STDOUT.puts 'Caterpillar v.%s (c) Copyright 2008 Mikael Lammentausta' % VERSION
46
+ STDOUT.puts 'Caterpillar v.%s (c) Copyright 2008,2009 Mikael Lammentausta' % VERSION
47
47
  #STDOUT.puts 'Caterpillar v.%s' % Caterpillar::VERSION
48
48
  STDOUT.puts 'Provided under the terms of the MIT license.'
49
49
  STDOUT.puts
@@ -481,17 +481,28 @@ module Caterpillar
481
481
  protected
482
482
 
483
483
  def print_portlets(hash)
484
- Util.categorize(hash).each_pair do |category,portlets|
485
- puts category
484
+ # organize
485
+ _sorted = Util.categorize(hash)
486
+
487
+ # calculate the longest title
488
+ longest_title = 0
489
+ _sorted.each_pair do |category,portlets|
490
+ x = portlets.sort_by{|p| p[:title].size}.last[:title]
491
+ longest_title = x.size if x.size > longest_title
492
+ end
493
+
494
+ _sorted.each_pair do |category,portlets|
495
+ STDOUT.puts category
486
496
  portlets.each do |portlet|
487
497
  # spaces
488
498
  spaces = ''
489
- 0.upto(50-portlet[:title].size+1) do
499
+ 0.upto((longest_title + 5)-portlet[:title].size) do
490
500
  spaces << ' '
491
501
  end
492
502
 
493
- field = :path
494
- puts "\t"+ portlet[:title] +spaces+ portlet[field].inspect
503
+ #field = :path
504
+ #fields = [:name, :id]
505
+ STDOUT.puts "\t" + portlet[:title] +spaces+ portlet[:id].inspect + "\t" + portlet[:name].inspect
495
506
  end
496
507
  end
497
508
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # (c) Copyright 2008 Mikael Lammentausta
2
+ # (c) Copyright 2008,2009 Mikael Lammentausta
3
3
  # See the file LICENSES.txt included with the distribution for
4
4
  # software license details.
5
5
  #++
@@ -56,26 +56,35 @@ module Caterpillar
56
56
  # {'Category 1' => [portlets], 'Category 2' => [portlets]}
57
57
  def categorize(portlets)
58
58
  ret = {}
59
- # STDERR.puts portlets.first.inspect
60
59
 
61
- # organize into categories
62
- categories = portlets.collect{|p| p[:category]}.uniq.each do |category|
63
- # select the portlets in this category
64
- _portlets = portlets.select{|p| p[:category]==category}
65
- ret.update(category => _portlets)
66
- end
60
+ # organize into main categories
61
+ categories = portlets.collect{|p| p[:category]}
62
+ categories << portlets.collect{|p| p[:categories].first if p[:categories]}
63
+ categories.flatten!.uniq!
67
64
 
68
- # puts ret.inspect
65
+ categories.each do |category|
66
+ next if category.nil? # skip nil categories
69
67
 
68
+ # does this category have subcategories?
69
+ # skip them. TODO: parse internal categories
70
+ if (portlets.map{|p| (
71
+ !p[:categories].nil? && \
72
+ p[:categories].first==category)} & [true] ).any?
73
+ STDERR.puts '%s has subcategories, skipping' % category.inspect
74
+ next
75
+ end
76
+
77
+ # select the portlets in this category
78
+ _portlets = portlets.select do |p|
79
+ p[:category]==category or (!p[:categories].nil? and p[:categories].include?(category))
80
+ end
70
81
 
71
- # {'Zcore' => [], 'Foo' => []}
82
+ ret.update(category => _portlets)
83
+ end
72
84
 
73
85
  return ret
74
86
  end
75
87
 
76
-
77
-
78
-
79
88
  end # static
80
89
  end
81
90
  end
@@ -2,9 +2,35 @@ require 'active_record'
2
2
 
3
3
  module Web
4
4
  class Portlet < ActiveRecord::Base
5
+
6
+ @@caterpillar_portlets = nil
7
+
8
+ def self.caterpillar_portlets
9
+ return @@caterpillar_portlets if @@caterpillar_portlets
10
+
11
+ config = Caterpillar::Util.eval_configuration
12
+ config.routes = Caterpillar::Util.parse_routes(config)
13
+
14
+ # transform objects
15
+ portlets = []
16
+ Caterpillar::Parser.new(config).portlets.each do |p|
17
+ portlets << self.new(
18
+ :portletid => p[:name].to_s
19
+ )
20
+ end
21
+
22
+ @@caterpillar_portlets = portlets
23
+ end
24
+
25
+ def self.find_caterpillar_portlet(name)
26
+ self.caterpillar_portlets.select{
27
+ |p| p.name=='%s' % name }.first # find_by_name
28
+ end
29
+
5
30
  def title
6
31
  p = Web::PortletName.find_by_portletid(self.portletid)
7
32
  p ? p.title : nil
8
33
  end
34
+
9
35
  end
10
36
  end
@@ -22,12 +22,14 @@
22
22
  .caterpillar_navigation {
23
23
  background: url('/images/caterpillar.gif') no-repeat;
24
24
  padding: 10px 0 0 50px;
25
- margin-left: 10px;
26
- min-height: 50px;
25
+ min-height: 55px;
26
+ overflow: auto;
27
+
27
28
  filter:alpha(opacity=81);-moz-opacity:.81;opacity:.81;
28
29
  /* css3 tags, works on Firefox and Safari */
29
30
  -moz-border-radius: 15px;
30
31
  -webkit-border-radius: 15px;
32
+ border-bottom: 1px dotted green;
31
33
  }
32
34
 
33
35
  .caterpillar_navigation ul {
@@ -67,6 +69,14 @@
67
69
  -moz-border-radius: 8px;
68
70
  -webkit-border-radius: 8px;
69
71
  }
72
+
73
+ #cp_version {
74
+ font-style: italic;
75
+ font-size: 9px;
76
+ position: absolute;
77
+ left: 10px;
78
+ top: 55px;
79
+ }
70
80
  </style>
71
81
 
72
82
  <div class="caterpillar_navigation">
@@ -115,4 +125,7 @@
115
125
  </ul>
116
126
  </div>
117
127
  <% end -%>
128
+ <div id="cp_version">
129
+ Caterpillar v<%= Caterpillar::VERSION -%>
130
+ </div>
118
131
  </div>
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.6
4
+ version: 0.9.8
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: 2009-02-15 00:00:00 +02:00
12
+ date: 2009-02-24 00:00:00 +02:00
13
13
  default_executable: caterpillar
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency