Module: Innate::Helper::Link
- Defined in:
- lib/innate/helper/link.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#anchor(text, *args) ⇒ String
(also: #a)
Create a link tag.
-
#route(name = '/', *args) ⇒ URI
(also: #r)
Provide the path to given Node and actions.
- #route_location(klass) ⇒ Object
-
#route_self(name = '/', *args) ⇒ URI
(also: #rs)
Create a route to the currently active Node.
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>'
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')
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..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.
61 62 63 |
# File 'lib/innate/helper/link.rb', line 61 def route_self(name = '/', *args) Current.action.node.route(name, *args) end |