Class: Mattock::YARDExtensions::SettingHandler
- Inherits:
-
YARD::Handlers::Ruby::Base
- Object
- YARD::Handlers::Ruby::Base
- Mattock::YARDExtensions::SettingHandler
- Includes:
- YARD::Parser::Ruby
- Defined in:
- lib/mattock/yard_extensions.rb
Direct Known Subclasses
Instance Method Summary (collapse)
- - (Object) append_name(sexp, name)
- - (Object) extract_name(obj)
- - (Boolean) mattock_configurable?(obj)
- - (Object) process
- - (Object) synthetic_setting(name, value = nil)
Instance Method Details
- (Object) append_name(sexp, name)
53 54 55 56 57 58 59 60 |
# File 'lib/mattock/yard_extensions.rb', line 53 def append_name(sexp, name) prefix = sexp.jump(:ident, :tstring_content) if prefix == sexp raise YARD::Parser::UndocumentableError, sexp.source end "#{prefix[0]}.#{name}" end |
- (Object) extract_name(obj)
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/mattock/yard_extensions.rb', line 42 def extract_name(obj) case obj.type when :symbol_literal obj.jump(:ident, :op, :kw, :const)[0] when :string_literal obj.jump(:tstring_content)[0] else raise YARD::Parser::UndocumentableError, obj.source end end |
- (Boolean) mattock_configurable?(obj)
32 33 34 35 36 37 38 39 40 |
# File 'lib/mattock/yard_extensions.rb', line 32 def mattock_configurable?(obj) check_list = obj.inheritance_tree until check_list.empty? check_list.each do |co| return true if [:CascadingDefinition, :Configurable, :Task, :Tasklib, :TaskLib].include? co.name end check_list = check_list.find_all{|co| co.respond_to?(:mixins)}.map{|co| co.mixins}.flatten end end |
- (Object) process
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/mattock/yard_extensions.rb', line 76 def process return unless mattock_configurable?(namespace) #filter further based on NS === Configurable... name = extract_name(statement.parameters.first) value = statement.parameters(false)[1] if !value.nil? and value.type == :fcall and value.jump(:ident)[0] == "nested" remapped = value.parameters(false).first.map do |assoc| new_name = append_name(statement.parameters[0], extract_name(assoc[0])) synthetic_setting(new_name, assoc[1]) end parser.process(remapped) return end setting = YARD::CodeObjects::MethodObject.new(namespace, name) do |set| unless value.nil? set['default_value'] = statement.parameters(false)[1].source end set.signature = "def #{name}" if statement.comments.to_s.empty? set.docstring = "The value of setting #{name}" else set.docstring = statement.comments end set.dynamic = true end register setting (namespace[:settings] ||= []) << setting end |
- (Object) synthetic_setting(name, value = nil)
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/mattock/yard_extensions.rb', line 62 def synthetic_setting(name, value=nil) args = s( s(:string_literal, s(:string_content, s(:tstring_content, name)))) args << value unless value.nil? args << false new_call = s(:fcall, s(:ident, "setting"), s(:arg_paren, args)) new_call.line_range = (1..1) new_call.traverse do |node| node.full_source ||= "" end new_call.full_source = "setting('#{name}'#{value.nil? ? "" : ", #{value.source}"})" new_call end |