Class: Wukong::DocHelpers::FieldHandler

Inherits:
YARD::Handlers::Ruby::ClassHandler
  • Object
show all
Defined in:
lib/wukong/doc_helpers/field_handler.rb

Overview

Handles the syntax

class Foo
  include Gorillib::Model
  field :bar, Integer, :default => 3
end

Instance Method Summary collapse

Instance Method Details

#field_defaultObject



84
85
86
# File 'lib/wukong/doc_helpers/field_handler.rb', line 84

def field_default
  field_options[:default]
end

#field_docObject



80
81
82
# File 'lib/wukong/doc_helpers/field_handler.rb', line 80

def field_doc
  field_options[:doc]
end

#field_nameObject



47
48
49
# File 'lib/wukong/doc_helpers/field_handler.rb', line 47

def field_name
  statement.parameters.first.jump(:tstring_content, :ident).source
end

#field_optionsObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/wukong/doc_helpers/field_handler.rb', line 55

def field_options
  return @field_options if @field_options
  @field_options = {}
  field_options_obj = statement.parameters[2]
  if field_options_obj
    keys_and_values = field_options_obj.jump(:assoc)
    until keys_and_values.empty?
      obj = keys_and_values.shift
      if obj.type == :symbol_literal
        key   = obj.source.to_s.gsub(/^:/,'').to_sym
        value_obj = keys_and_values.shift
        if value_obj
          value = case key
                  when :doc then value_obj.source.to_s.gsub(/^"/,'').gsub(/"$/,'')
                  else
                    value_obj.source
                  end
          @field_options[key] = value
        end
      end
    end
  end
  @field_options
end

#field_typeObject



51
52
53
# File 'lib/wukong/doc_helpers/field_handler.rb', line 51

def field_type
  statement.parameters[1].jump(:string_content, :ident).source
end

#getterObject



21
22
23
24
25
# File 'lib/wukong/doc_helpers/field_handler.rb', line 21

def getter
  @getter ||= YARD::CodeObjects::MethodObject.new(namespace, field_name, :instance).tap do |method|
    method.docstring = getter_docstring
  end
end

#getter_docstringObject



33
34
35
36
37
38
# File 'lib/wukong/doc_helpers/field_handler.rb', line 33

def getter_docstring
  doc = "@return [#{field_type}]"
  doc += " #{field_doc}"                if field_doc
  doc += " [Default: #{field_default}]" if field_default
  doc
end

#processObject



15
16
17
18
19
# File 'lib/wukong/doc_helpers/field_handler.rb', line 15

def process
  register(getter)
  register(setter)
  namespace.attributes[:instance][field_name] = { :read => getter, :write => setter }
end

#setterObject



27
28
29
30
31
# File 'lib/wukong/doc_helpers/field_handler.rb', line 27

def setter
  @setter ||= YARD::CodeObjects::MethodObject.new(namespace, field_name + '=', :instance).tap do |method|
    method.docstring = setter_docstring
  end
end

#setter_docstringObject



40
41
42
43
44
45
# File 'lib/wukong/doc_helpers/field_handler.rb', line 40

def setter_docstring
  doc = "@return [#{field_type}]"
  doc += " #{field_doc}"                if field_doc
  doc += " [Default: #{field_default}]" if field_default
  doc
end