Module: Innate::Helper::Link

Defined in:
lib/innate/helper/link.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(into) ⇒ Object



4
5
6
# File 'lib/innate/helper/link.rb', line 4

def self.included(into)
  into.extend(self)
end

Instance Method Details

#anchor(text, *args) ⇒ String Also known as: a

Create a link tag

Usage, given Wiki is mapped to ‘/wiki`:

Wiki.a(:home)                   # => '<a href="/wiki/home">home</a>'
Wiki.a('home', :home)           # => '<a href="/wiki/home">home</a>'
Wiki.a('home', :/)              # => '<a href="/wiki/">home</a>'
Wiki.a('foo', :/, :foo => :bar) # => '<a href="/wiki/?foo=bar">foo</a>'
Wiki.a('example', 'http://example.com')
# => '<a href="http://example.com">example</a>'

Returns:

  • (String)


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/innate/helper/link.rb', line 78

def anchor(text, *args)
  case first = (args.first || text)
  when URI
    href = first.to_s
  when /^\w+:\/\//
    uri = URI(first)
    uri.query = Rack::Utils.escape_html(uri.query)
    href = uri.to_s
  else
    href = args.empty? ? r(text) : r(*args)
  end

  text = Rack::Utils.escape_html(text)
  %(<a href="#{href}">#{text}</a>)
end

#route(name = '/', *args) ⇒ URI Also known as: r

Provide the path to given Node and actions. Escapes GET parameters.

Usage, mapping is Pages => ‘/’, Users => ‘/users’:

Pages.r                       # => URI('/')
Pages.r(:foo)                 # => URI('/foo')
Pages.r(:foo, :bar)           # => URI('/foo/bar')
Pages.r(:foo, :a => :b)       # => URI('/foo?a=b')
Pages.r(:foo, :bar, :a => :b) # => URI('/foo/bar?a=b')

Users.r                       # => URI('/users/')
Users.r(:foo)                 # => URI('/users/foo')
Users.r(:foo, :bar)           # => URI('/users/foo/bar')
Users.r(:foo, :a => :b)       # => URI('/users/foo?a=b')
Users.r(:foo, :bar, :a => :b) # => URI('/users/foo/bar?a=b')

Returns:

  • (URI)

    to the location



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/innate/helper/link.rb', line 26

def route(name = '/', *args)
  hash = {}
  hashes, names = args.partition{|arg| arg.respond_to?(:merge!) }
  hashes.each{|to_merge| hash.merge!(to_merge) }

  name = name.to_s.gsub(/__/, '/')

  location = route_location(self)
  front = Array[location, name, *names.map{|element|
    Rack::Utils.escape(element) }].join('/').squeeze('/')

  return URI(front) if hash.empty?

  query = Rack::Utils.build_query(hash)
  URI("#{front}?#{query}")
end

#route_location(klass) ⇒ Object



44
45
46
47
48
# File 'lib/innate/helper/link.rb', line 44

def route_location(klass)
  prefix = Innate.options.prefix
  location = Innate.to(klass) || Innate.to(klass.class)
  [prefix, location].join('/')
end

#route_self(name = '/', *args) ⇒ URI Also known as: rs

Create a route to the currently active Node.

This method is mostly here in case you include this helper elsewhere and don’t want (or can’t) type SomeNode.r all the time.

The usage is identical with #route.

Parameters:

  • name (#to_s) (defaults to: '/')

Returns:

  • (URI)

    to the location

See Also:

  • Ramaze::Helper::Link#route

Author:

  • manveru



61
62
63
# File 'lib/innate/helper/link.rb', line 61

def route_self(name = '/', *args)
  Current.action.node.route(name, *args)
end