manage bookmarks, bugfixes
[smr.git] / gui / lib / smr / link.rb
blob62017cd4598318a30f77092f55b0b9681855123d
2 # This file is part of SMR.
4 # SMR is free software: you can redistribute it and/or modify it under the
5 # terms of the GNU General Public License as published by the Free Software
6 # Foundation, either version 3 of the License, or (at your option) any later
7 # version.
9 # SMR is distributed in the hope that it will be useful, but WITHOUT ANY
10 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License along with
14 # SMR.  If not, see <http://www.gnu.org/licenses/>.
18 # Link to some item in the application or to the outside.
19 class Smr::Link
21   # reader to init value
22   attr_reader :type
23   attr_reader :destination
24   attr_reader :name
26   ##
27   # For :type see #types on whats possible. Giving an unknown type will raise
28   # a exception.
29   #
30   # The :destination parameter is whatever makes sense for the given type.
31   # Usually its the numerical id.
32   #
33   # The :name parameter is shown by #to_s if given.
34   def initialize(type, destination, name=false)
35     raise 'given :type=%s is not supported' % type unless types.has_value? type
36     @type=type
37     @destination=destination
38     @name=name
39   end
41   ##
42   # supported types
43   def self.types
44       {
45         'External Link'   => :url,
46         'Asset Position'  => :position,
47         'Cash Deposit'    => :cashposition,
48         'Order'           => :order,
49         'Blog Commentary' => :comment,
50         'Edit Blog Commentary' => :comment_edit,
51         'Security'        => :security,
52         'Organization'    => :organization,
53 #        'Document'       => :document
54         'Portfolio'       => :portfolio,
55         'Figure'          => :figurevar,
56         'User'            => :user,
57       }
58   end
59   def types
60       Smr::Link.types
61   end
63   ##
64   # URL String to the destination of this link
65   def to_url
66       url_helpers = Rails.application.routes.url_helpers
67       case @type
68           when :url then @destination
69           when :position     then url_helpers.position_path :id=>@destination
70           when :cashposition then url_helpers.cashposition_path :id=>@destination
71           when :order        then url_helpers.order_path :id=>@destination
72           when :comment      then url_helpers.blog_path :id=>@destination
73           when :comment_edit then url_helpers.new_blog_path :id=>@destination # FIXME: the :new action should not do this
74           when :security     then url_helpers.portrait_security_path :id=>@destination
75           when :organization then url_helpers.portrait_organization_path :id=>@destination
76           when :portfolio    then url_helpers.show_portfolio_path :id_portfolio=>@destination
77           when :figurevar    then url_helpers.figures_path   # :id=>@destination - to be implemented
78           when :user         then url_helpers.root_path  # :id=>@destination - to be implemented
79       end
80   end
82   ##
83   # String to present this link to humans.
84   def to_s
85       return @name if @name
86       if @type == :url
87           @destination.to_s
88       else '%s #%i' % [types.key(@type), @destination] end
89   end
90 end