Class: Utopia::Content::Link

Inherits:
Object
  • Object
show all
Defined in:
lib/utopia/content/link.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(kind, path, info = nil) ⇒ Link

Returns a new instance of Link.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/utopia/content/link.rb', line 30

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
		# raise ArgumentError unless path.last.start_with? INDEX
		
		@name = path.dirname.last
		@locale = path.last.split('.', 2)[1]
		@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

#infoObject (readonly)

Returns the value of attribute info.



70
71
72
# File 'lib/utopia/content/link.rb', line 70

def info
  @info
end

#kindObject (readonly)

Returns the value of attribute kind.



67
68
69
# File 'lib/utopia/content/link.rb', line 67

def kind
  @kind
end

#localeObject (readonly)

Returns the value of attribute locale.



71
72
73
# File 'lib/utopia/content/link.rb', line 71

def locale
  @locale
end

#nameObject (readonly)

Returns the value of attribute name.



68
69
70
# File 'lib/utopia/content/link.rb', line 68

def name
  @name
end

#pathObject (readonly)

Returns the value of attribute path.



69
70
71
# File 'lib/utopia/content/link.rb', line 69

def path
  @path
end

Instance Method Details

#==(other) ⇒ Object



113
114
115
# File 'lib/utopia/content/link.rb', line 113

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.



63
64
65
# File 'lib/utopia/content/link.rb', line 63

def [] key
	@info[key]
end

#default_locale?Boolean

Returns:

  • (Boolean)


117
118
119
# File 'lib/utopia/content/link.rb', line 117

def default_locale?
	@locale == nil
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/utopia/content/link.rb', line 109

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

#hrefObject



56
57
58
59
60
# File 'lib/utopia/content/link.rb', line 56

def href
	@href ||= @info.fetch(:uri) do
		(@path.dirname + @path.basename.parts[0]).to_s if @path
	end
end

#href?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/utopia/content/link.rb', line 73

def href?
	!!href
end

#relative_href(base = nil) ⇒ Object



77
78
79
80
81
82
83
# File 'lib/utopia/content/link.rb', line 77

def relative_href(base = nil)
	if base and href.start_with? '/'
		Path.shortest_path(href, base)
	else
		href
	end
end

#titleObject



85
86
87
# File 'lib/utopia/content/link.rb', line 85

def title
	@info.fetch(:title, @title)
end

#to_href(**options) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/utopia/content/link.rb', line 89

def to_href(**options)
	Trenni::Builder.fragment(options[:builder]) do |builder|
		if href?
			relative_href(options[:base])
			
			builder.inline('a', class: options.fetch(:class, 'link'), href: relative_href(options[:base])) do
				builder.text(options[:content] || title)
			end
		else
			builder.inline('span', class: options.fetch(:class, 'link')) do
				builder.text(options[:content] || title)
			end
		end
	end
end

#to_sObject



105
106
107
# File 'lib/utopia/content/link.rb', line 105

def to_s
	"\#<#{self.class}(#{self.kind}) title=#{title.inspect} href=#{href.inspect}>"
end