Class: Typedocs::Context
- Inherits:
-
Object
- Object
- Typedocs::Context
- Defined in:
- lib/typedocs/context.rb
Class Method Summary collapse
Instance Method Summary collapse
- #defined_type(name) ⇒ Object
- #defined_type!(name) ⇒ Object
-
#initialize(klass) ⇒ Context
constructor
A new instance of Context.
- #outer_defined_type(name) ⇒ Object
- #parent_defined_type(name) ⇒ Object
- #self_defined_type(name) ⇒ Object
- #typedef(name, definition) ⇒ Object
Constructor Details
#initialize(klass) ⇒ Context
Returns a new instance of Context.
6 7 8 9 10 |
# File 'lib/typedocs/context.rb', line 6 def initialize(klass) @klass = klass # udt_name => spec @specs = {} end |
Class Method Details
.valid_udt_name?(name) ⇒ Boolean
2 3 4 |
# File 'lib/typedocs/context.rb', line 2 def self.valid_udt_name?(name) /\A@[A-Z][a-zA-Z0-9]*\Z/ =~ name.to_s end |
Instance Method Details
#defined_type(name) ⇒ Object
18 19 20 |
# File 'lib/typedocs/context.rb', line 18 def defined_type(name) self_defined_type(name) || outer_defined_type(name) || parent_defined_type(name) end |
#defined_type!(name) ⇒ Object
15 16 17 |
# File 'lib/typedocs/context.rb', line 15 def defined_type!(name) self_defined_type(name) || outer_defined_type(name) || (raise Typedocs::NoSuchType, "Type not found in #{@klass.name}: #{name}") end |
#outer_defined_type(name) ⇒ Object
24 25 26 27 28 29 30 31 |
# File 'lib/typedocs/context.rb', line 24 def outer_defined_type(name) return nil unless @klass.name outer_name = @klass.name.split(/::/)[0..-2] unless outer_name.empty? outer_klass = outer_name.inject(::Object) {|ns, name| ns.const_get(name) } Typedocs.context(outer_klass).defined_type(name) end end |
#parent_defined_type(name) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/typedocs/context.rb', line 32 def parent_defined_type(name) return nil unless @kass.kind_of? ::Class superclass = @klass.superclass return nil unless superclass Typedocs.context(superclass).defined_type(name) end |
#self_defined_type(name) ⇒ Object
21 22 23 |
# File 'lib/typedocs/context.rb', line 21 def self_defined_type(name) @specs[name] end |
#typedef(name, definition) ⇒ Object
11 12 13 14 |
# File 'lib/typedocs/context.rb', line 11 def typedef(name, definition) raise ArgumentError, "Invalid user-defined type name: #{name}" unless self.class.valid_udt_name?(name) @specs[name.to_s] = Typedocs::Parser.new.parse(@klass, definition, :type) end |