Class: Rouge::Namespace
- Inherits:
-
Object
show all
- Defined in:
- lib/rouge/namespace.rb
Defined Under Namespace
Classes: RecursiveNamespaceError, Ruby, VarNotFoundError
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(name) ⇒ Namespace
Returns a new instance of Namespace.
15
16
17
18
19
20
21
22
23
|
# File 'lib/rouge/namespace.rb', line 15
def initialize(name)
unless name.is_a? Symbol
raise ArgumentError, "bad ns name"
end
@name = name
@refers = []
@table = {}
end
|
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
11
12
13
|
# File 'lib/rouge/namespace.rb', line 11
def name
@name
end
|
#refers ⇒ Object
Returns the value of attribute refers.
11
12
13
|
# File 'lib/rouge/namespace.rb', line 11
def refers
@refers
end
|
#table ⇒ Object
Returns the value of attribute table.
11
12
13
|
# File 'lib/rouge/namespace.rb', line 11
def table
@table
end
|
Class Method Details
.[](ns) ⇒ Object
95
96
97
98
99
100
101
102
|
# File 'lib/rouge/namespace.rb', line 95
def self.[](ns)
if exists?(ns)
@namespaces[ns]
else
self[ns] = new(ns)
@namespaces[ns] = new(ns)
end
end
|
.[]=(ns, value) ⇒ Object
104
105
106
|
# File 'lib/rouge/namespace.rb', line 104
def self.[]=(ns, value)
@namespaces[ns] = value
end
|
.all ⇒ Hash
Returns a hash of all namespaces.
80
81
82
|
# File 'lib/rouge/namespace.rb', line 80
def self.all
@namespaces
end
|
.destroy(ns) ⇒ Object
112
113
114
|
# File 'lib/rouge/namespace.rb', line 112
def self.destroy(ns)
@namespaces.delete ns
end
|
.exists?(ns) ⇒ Boolean
Returns true if the given namespace ns exists, false otherwise.
91
92
93
|
# File 'lib/rouge/namespace.rb', line 91
def self.exists?(ns)
@namespaces.include?(ns)
end
|
.get(ns) ⇒ Object
108
109
110
|
# File 'lib/rouge/namespace.rb', line 108
def self.get(ns)
@namespaces[ns]
end
|
Instance Method Details
#[](key) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/rouge/namespace.rb', line 42
def [](key)
if @table.include? key
return @table[key]
end
@refers.each do |ns|
begin
return ns[key]
rescue VarNotFoundError
end
end
raise VarNotFoundError, key
end
|
#clear ⇒ Object
70
71
72
73
|
# File 'lib/rouge/namespace.rb', line 70
def clear
@table = {}
self
end
|
#inspect ⇒ Object
25
26
27
28
|
# File 'lib/rouge/namespace.rb', line 25
def inspect
"#<Rouge::Namespace: @name=#{@name.inspect}, " \
"@refers=[#{@refers.map(&:inspect).join(", ")}]>"
end
|
#intern(key) ⇒ Object
62
63
64
|
# File 'lib/rouge/namespace.rb', line 62
def intern(key)
@table[key] ||= Rouge::Var.new(@name, key)
end
|
#read(input) ⇒ Object
66
67
68
|
# File 'lib/rouge/namespace.rb', line 66
def read(input)
Rouge::Reader.new(self, input).lex
end
|
#refer(ns) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/rouge/namespace.rb', line 30
def refer(ns)
if ns.name == @name
raise RecursiveNamespaceError, "#@name will not refer #{ns.name}"
end
unless @refers.include?(ns)
@refers << ns
end
self
end
|
#set_here(key, value) ⇒ Object
58
59
60
|
# File 'lib/rouge/namespace.rb', line 58
def set_here(key, value)
@table[key] = Rouge::Var.new(@name, key, value)
end
|