Class: YARD::APIPlugin::Serializer

Inherits:
Serializers::FileSystemSerializer
  • Object
show all
Defined in:
lib/yard-api/serializer.rb

Constant Summary collapse

USNSEP =

url-safe namespace separator

'__'
FSSEP =
'/'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.topicize(str) ⇒ Object



6
7
8
# File 'lib/yard-api/serializer.rb', line 6

def self.topicize(str)
  str.lines.first.gsub(/\W+/, '_').downcase
end

Instance Method Details

#get_api_id(object) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/yard-api/serializer.rb', line 41

def get_api_id(object)
  if object[:api_id]
    object.api_id
  elsif tag = object.tag(:API)
    tag.text.lines.first.strip
  else
    object.to_s
  end
end

#serialize(object, data) ⇒ Object



10
11
12
13
# File 'lib/yard-api/serializer.rb', line 10

def serialize(object, data)
  path = File.join(basepath, serialized_path(object))
  File.open!(path, "wb") {|f| f.write data }
end

#serialized_path(object) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/yard-api/serializer.rb', line 15

def serialized_path(object)
  return object if object.is_a?(String)

  fspath = nil

  if object.is_a?(YARD::CodeObjects::ExtraFileObject)
    fspath = 'file.' + object.name + (extension.empty? ? '' : ".#{extension}")
  else
    fspath = if object == YARD::Registry.root
      "top-level-namespace"
    else
      self.class.topicize(get_api_id(object))
    end

    if object.is_a?(YARD::CodeObjects::MethodObject)
      fspath += '_' + object.scope.to_s[0,1]
    end

    unless extension.empty?
      fspath += ".#{extension}"
    end
  end

  fspath.gsub(/[^\w\.\-_\/]+/, '-')
end