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>'
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..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.
59 60 61 |
# File 'lib/innate/helper/link.rb', line 59 def route_self(name = '/', *args) Current.action.node.route(name, *args) end |