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


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

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


26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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) }

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

  return URI(front) if hash.empty?

  query = hash.map{|k, v| "#{escape[k]}=#{escape[v]}" }.join(';')
  URI("#{front}?#{query}")
end

#route_location(klass) ⇒ Object



42
43
44
45
46
# File 'lib/innate/helper/link.rb', line 42

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.

See Also:

  • Ramaze::Helper::Link#route


59
60
61
# File 'lib/innate/helper/link.rb', line 59

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