Class: Nydp::Namespace
Instance Method Summary
collapse
Methods included from Helper
#cons, #list, #literal?, #pair?, #sig, #sym, #sym?
Methods included from Converter
#n2r, #r2n, #rubify
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
5
6
7
8
9
10
11
12
13
14
15
|
# File 'lib/nydp/namespace.rb', line 5
def method_missing name, *args
if name.to_s =~ /^ns_/
attr = name.to_s.gsub(/=$/, '').to_sym
singleton_class.instance_eval do
attr_accessor attr
end
send name, *args
else
super
end
end
|
Instance Method Details
#apply(name, *args) ⇒ Object
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/nydp/namespace.rb', line 37
def apply name, *args
fn = if name.is_a?(String) || name.is_a?(::Symbol)
fetch name
elsif name.respond_to? :call
name
end
raise "can't apply #{name.inspect} : not a function" unless fn && fn.respond_to?(:call)
fn.call *(args.map { |a| r2n a })
rescue StandardError => e
raise Nydp::Error.new("Invoking #{name}\nwith args (#{args.map(&:_nydp_compact_inspect).join(' ')})")
end
|
#assign(name, value) ⇒ Object
29
30
31
|
# File 'lib/nydp/namespace.rb', line 29
def assign name, value
send "ns_#{ruby_name name}=", value
end
|
#fetch(name) ⇒ Object
33
34
35
|
# File 'lib/nydp/namespace.rb', line 33
def fetch name
send "ns_#{ruby_name name}"
end
|
17
18
19
|
# File 'lib/nydp/namespace.rb', line 17
def names
mm = methods.select { |m| m.to_s =~ /^ns_.*[^=]$/ }.map { |m| nydp_name(m).to_sym }
end
|
#nydp_name(n) ⇒ Object
21
22
23
|
# File 'lib/nydp/namespace.rb', line 21
def nydp_name n
n.to_s.gsub(/^ns_/, '').gsub(/_../) { |ch| ch[1,2].to_i(16).chr }
end
|
#ruby_name(n) ⇒ Object
25
26
27
|
# File 'lib/nydp/namespace.rb', line 25
def ruby_name n
n.to_s._nydp_name_to_rb_name
end
|