Class: Utopia::Content::Link
- Inherits:
-
Object
- Object
- Utopia::Content::Link
- Defined in:
- lib/utopia/content/link.rb
Overview
Represents a link to some content with associated metadata.
Instance Attribute Summary collapse
-
#info ⇒ Object
readonly
Returns the value of attribute info.
-
#kind ⇒ Object
readonly
Returns the value of attribute kind.
-
#locale ⇒ Object
readonly
Returns the value of attribute locale.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
Instance Method Summary collapse
-
#==(other) ⇒ Object
-
#[](key) ⇒ Object
Look up from the
links.yaml
metadata with a given symbolic key. -
#default_locale? ⇒ Boolean
-
#eql?(other) ⇒ Boolean
-
#href ⇒ Object
-
#href? ⇒ Boolean
-
#initialize(kind, path, info = nil) ⇒ Link
constructor
A new instance of Link.
-
#relative_href(base = nil) ⇒ Object
-
#title ⇒ Object
-
#to_anchor(**options) ⇒ Object
(also: #to_href)
-
#to_s ⇒ Object
Constructor Details
#initialize(kind, path, info = nil) ⇒ Link
Returns a new instance of Link
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/utopia/content/link.rb', line 33 def initialize(kind, path, info = nil) path = Path.create(path) @info = info || {} @kind = kind case @kind when :file @name, @locale = path.last.split('.', 2) @path = path when :directory @name = path.basename if @name == INDEX @name = path.dirname.basename end @locale = path.extension @path = path when :virtual @name, @locale = path.to_s.split('.', 2) @path = @info[:path] ? Path.create(@info[:path]) : nil else raise ArgumentError.new("Unknown link kind #{@kind} with path #{path}") end @title = Trenni::Strings.to_title(@name) end |
Instance Attribute Details
#info ⇒ Object (readonly)
Returns the value of attribute info
76 77 78 |
# File 'lib/utopia/content/link.rb', line 76 def info @info end |
#kind ⇒ Object (readonly)
Returns the value of attribute kind
73 74 75 |
# File 'lib/utopia/content/link.rb', line 73 def kind @kind end |
#locale ⇒ Object (readonly)
Returns the value of attribute locale
77 78 79 |
# File 'lib/utopia/content/link.rb', line 77 def locale @locale end |
#name ⇒ Object (readonly)
Returns the value of attribute name
74 75 76 |
# File 'lib/utopia/content/link.rb', line 74 def name @name end |
#path ⇒ Object (readonly)
Returns the value of attribute path
75 76 77 |
# File 'lib/utopia/content/link.rb', line 75 def path @path end |
Instance Method Details
#==(other) ⇒ Object
125 126 127 |
# File 'lib/utopia/content/link.rb', line 125 def == other other and kind == other.kind and name == other.name and path == other.path end |
#[](key) ⇒ Object
Look up from the links.yaml
metadata with a given symbolic key.
69 70 71 |
# File 'lib/utopia/content/link.rb', line 69 def [] key @info[key] end |
#default_locale? ⇒ Boolean
129 130 131 |
# File 'lib/utopia/content/link.rb', line 129 def default_locale? @locale == nil end |
#eql?(other) ⇒ Boolean
121 122 123 |
# File 'lib/utopia/content/link.rb', line 121 def eql? other self.class.eql?(other.class) and kind.eql?(other.kind) and name.eql?(other.name) and path.eql?(other.path) and info.eql?(other.info) end |
#href ⇒ Object
62 63 64 65 66 |
# File 'lib/utopia/content/link.rb', line 62 def href @href ||= @info.fetch(:uri) do (@path.dirname + @path.basename).to_s if @path end end |
#href? ⇒ Boolean
79 80 81 |
# File 'lib/utopia/content/link.rb', line 79 def href? !!href end |
#relative_href(base = nil) ⇒ Object
83 84 85 86 87 88 89 |
# File 'lib/utopia/content/link.rb', line 83 def relative_href(base = nil) if base and href.start_with? '/' Path.shortest_path(href, base) else href end end |
#title ⇒ Object
91 92 93 |
# File 'lib/utopia/content/link.rb', line 91 def title @info.fetch(:title, @title) end |
#to_anchor(**options) ⇒ Object Also known as: to_href
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/utopia/content/link.rb', line 95 def to_anchor(**) Trenni::Builder.fragment([:builder]) do |builder| if href? a_attributes = { :class => .fetch(:class, 'link'), :href => relative_href([:base]), :target => .fetch(:target, @info[:target]) } builder.inline('a', a_attributes) do builder.text([:content] || title) end else builder.inline('span', class: .fetch(:class, 'link')) do builder.text([:content] || title) end end end end |
#to_s ⇒ Object
117 118 119 |
# File 'lib/utopia/content/link.rb', line 117 def to_s "\#<#{self.class}(#{self.kind}) title=#{title.inspect} href=#{href.inspect}>" end |