Class: Utopia::Link

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

Constant Summary collapse

XNODE_EXT =
".xnode"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Link.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/utopia/link.rb', line 17

def initialize(kind, path, info = nil)
	path = Path.create(path)

	@info = info ? info.symbolize_keys : {}
	@locale = @info.delete(:locale) || path.locale(XNODE_EXT)
	@kind = kind

	case @kind
	when :file
		@name = path.basename(XNODE_EXT)
		@path = path
	when :directory
		@name = path.dirname.basename(XNODE_EXT)
		@path = path
	when :virtual
		@name = path.to_s
		@path = @info[:path] ? Path.create(@info[:path]) : nil
	end

	@components = @name.split(".")
	@title = components[0]
end

Instance Attribute Details

#componentsObject (readonly)

Returns the value of attribute components.



45
46
47
# File 'lib/utopia/link.rb', line 45

def components
  @components
end

#infoObject (readonly)

Returns the value of attribute info.



44
45
46
# File 'lib/utopia/link.rb', line 44

def info
  @info
end

#kindObject (readonly)

Returns the value of attribute kind.



40
41
42
# File 'lib/utopia/link.rb', line 40

def kind
  @kind
end

#localeObject (readonly)

Returns the value of attribute locale.



43
44
45
# File 'lib/utopia/link.rb', line 43

def locale
  @locale
end

#nameObject (readonly)

Returns the value of attribute name.



41
42
43
# File 'lib/utopia/link.rb', line 41

def name
  @name
end

#pathObject (readonly)

Returns the value of attribute path.



42
43
44
# File 'lib/utopia/link.rb', line 42

def path
  @path
end

Instance Method Details

#==(other) ⇒ Object



99
100
101
# File 'lib/utopia/link.rb', line 99

def == other
	return other && kind == other.kind && name == other.name && path == other.path
end

#[](key) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/utopia/link.rb', line 47

def [] (key)
	if key == :title
		return @title
	end
	
	return @info[key]
end

#default_localeObject



103
104
105
# File 'lib/utopia/link.rb', line 103

def default_locale
	@locale == ''
end

#eql?(other) ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
91
92
93
94
95
96
97
# File 'lib/utopia/link.rb', line 88

def eql? other
	if other && self.class == other.class
		return kind.eql?(other.kind) && 
		       name.eql?(other.name) && 
		       path.eql?(other.path) && 
		       info.eql?(other.info)
	else
		return false
	end
end

#external?Boolean

Returns:

  • (Boolean)


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

def external?
	@info.key? :uri
end

#hrefObject



55
56
57
58
59
60
61
62
63
# File 'lib/utopia/link.rb', line 55

def href
	if @info[:uri]
		return @info[:uri]
	elsif @path
		return @path.to_s
	else
		"\#"
	end
end

#href?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/utopia/link.rb', line 65

def href?
	return href != "\#"
end

#titleObject



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

def title
	@info[:title] || @title.to_title
end

#to_href(options = {}) ⇒ Object



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

def to_href(options = {})
	options[:content] ||= title
	options[:class] ||= "link"
	
	if href == "\#"
		"<span class=#{options[:class].dump}>#{options[:content].to_html}</span>"
	else
		"<a class=#{options[:class].dump} href=\"#{href.to_html}\">#{options[:content].to_html}</a>"
	end
end