Class: Caterpillar::Helpers::Liferay::ResourceUrl

Inherits:
Object
  • Object
show all
Includes:
ActionController::UrlWriter
Defined in:
lib/caterpillar/helpers/liferay.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_url, namespace = '', options = {}, params = {}) ⇒ ResourceUrl

Returns a new instance of ResourceUrl.



32
33
34
35
36
37
# File 'lib/caterpillar/helpers/liferay.rb', line 32

def initialize(base_url, namespace = '', options = {}, params = {})
  @resource_uri = URI.parse(base_url)
  @namespace = namespace
  @options = options
  @params = params
end

Instance Attribute Details

#namespaceObject

Returns the value of attribute namespace.



28
29
30
# File 'lib/caterpillar/helpers/liferay.rb', line 28

def namespace
  @namespace
end

#optionsObject

Returns the value of attribute options.



29
30
31
# File 'lib/caterpillar/helpers/liferay.rb', line 29

def options
  @options
end

#paramsObject

Returns the value of attribute params.



30
31
32
# File 'lib/caterpillar/helpers/liferay.rb', line 30

def params
  @params
end

#resource_uriObject

Returns the value of attribute resource_uri.



27
28
29
# File 'lib/caterpillar/helpers/liferay.rb', line 27

def resource_uri
  @resource_uri
end

Instance Method Details

#to_sObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/caterpillar/helpers/liferay.rb', line 39

def to_s()
  uri = @resource_uri.dup
  if @options.values.compact.empty?
    # pass
  else
    query = {}
    # unpack query
    unless uri.query.nil?
      uri.query.split('&').map do |p| p.split('=').reduce {|k,v| query.update({k => v})} end
    end
    # since url_for can't handle modularized controllers at this point,
    # offer an explicit route as a workaround.
    if @options[:route]
      route = @options[:route]
    else
      # need controller and action
      options = @options.dup
      options.update(:host => 'localhost') unless options[:host]
      options.update(:only_path => true)
      if options[:action].nil? then options.update(:action => 'index') end
      route = url_for(options)
    end
    query.update('_%s_%s' % [@namespace,'railsRoute'] => route)
    @params.each_pair do |k,v|
      query.update('_%s_%s' % [@namespace,k] => v)
    end
    # pack query
    uri.query = query.each_pair.map{|k,v| '%s=%s' % [k,v]}.join('&')
  end
  return '%s://%s:%i%s' % [uri.scheme, uri.host, uri.port, uri.request_uri]
end