Class: Rouge::Namespace

Inherits:
Object
  • 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

#nameObject (readonly)

Returns the value of attribute name.



11
12
13
# File 'lib/rouge/namespace.rb', line 11

def name
  @name
end

#refersObject (readonly)

Returns the value of attribute refers.



11
12
13
# File 'lib/rouge/namespace.rb', line 11

def refers
  @refers
end

#tableObject (readonly)

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

.allHash

Returns a hash of all namespaces.

Returns:

  • (Hash)


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.

Parameters:

  • ns (Symbol)

    the namespace to check for

Returns:

  • (Boolean)


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

Raises:



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
      # no-op
    end
  end

  raise VarNotFoundError, key
end

#clearObject



70
71
72
73
# File 'lib/rouge/namespace.rb', line 70

def clear
  @table = {}
  self
end

#inspectObject



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