Class: Apricot::Namespace
Instance Attribute Summary collapse
-
#aliases ⇒ Object
readonly
Returns the value of attribute aliases.
-
#fns ⇒ Object
readonly
Returns the value of attribute fns.
-
#vars ⇒ Object
readonly
Returns the value of attribute vars.
Class Method Summary collapse
Instance Method Summary collapse
- #add_alias(name, ns) ⇒ Object
- #get_var(name) ⇒ Object
- #has_var?(name) ⇒ Boolean
-
#initialize ⇒ Namespace
constructor
A new instance of Namespace.
- #set_var(name, val) ⇒ Object
Constructor Details
Instance Attribute Details
#aliases ⇒ Object (readonly)
Returns the value of attribute aliases.
19 20 21 |
# File 'lib/apricot/namespace.rb', line 19 def aliases @aliases end |
#fns ⇒ Object (readonly)
Returns the value of attribute fns.
19 20 21 |
# File 'lib/apricot/namespace.rb', line 19 def fns @fns end |
#vars ⇒ Object (readonly)
Returns the value of attribute vars.
19 20 21 |
# File 'lib/apricot/namespace.rb', line 19 def vars @vars end |
Class Method Details
.find_or_create(constant) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/apricot/namespace.rb', line 3 def self.find_or_create(constant) ns = constant.const_names.reduce(Object) do |mod, name| if mod.const_defined? name next_mod = mod.const_get name raise TypeError, "#{mod}::#{name} (#{next_mod}) is not a Module" unless next_mod.is_a? Module next_mod else mod.const_set(name, Namespace.new) end end raise TypeError, "#{constant.name} is not a Namespace" unless ns.is_a? Namespace ns end |
Instance Method Details
#add_alias(name, ns) ⇒ Object
58 59 60 |
# File 'lib/apricot/namespace.rb', line 58 def add_alias(name, ns) @aliases[name] = ns end |
#get_var(name) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/apricot/namespace.rb', line 43 def get_var(name) # raise may be a function defined on the namespace so we need to # explicitly call the Ruby raise method. Kernel.raise NameError, "Undefined variable '#{name}' on #{self}" unless has_var? name if var = @vars[name] var elsif ns = @aliases[name] ns.get_var(name) else nil end end |
#has_var?(name) ⇒ Boolean
62 63 64 |
# File 'lib/apricot/namespace.rb', line 62 def has_var?(name) @vars.has_key?(name) || @aliases.has_key?(name) end |
#set_var(name, val) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/apricot/namespace.rb', line 27 def set_var(name, val) @vars[name] = val val = val.to_proc if val.is_a? Method if val.is_a?(Proc) && (@fns.include?(name) || !self.respond_to?(name)) @fns.add name define_singleton_method(name, val) elsif @fns.include?(name) @fns.delete name singleton_class.send(:undef_method, name) end val end |