Class: YARD::Serializers::FileSystemSerializer
- Defined in:
- lib/yard/serializers/file_system_serializer.rb
Overview
Implements a serializer that reads from and writes to the filesystem.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#basepath ⇒ String
The base path to write data to.
-
#extension ⇒ String
The extension of the filename (defaults to
html
).
Attributes inherited from Base
Instance Method Summary collapse
-
#exists?(object) ⇒ Boolean
Checks the disk for an object and returns whether it was serialized.
-
#initialize(opts = {}) ⇒ FileSystemSerializer
constructor
Creates a new FileSystemSerializer with options.
-
#serialize(object, data) ⇒ String
Serializes object with data to its serialized path (prefixed by the
#basepath
). -
#serialized_path(object) ⇒ String
Implements the serialized path of a code object.
Methods inherited from Base
#after_serialize, #before_serialize
Constructor Details
#initialize(opts = {}) ⇒ FileSystemSerializer
Creates a new FileSystemSerializer with options
27 28 29 30 31 |
# File 'lib/yard/serializers/file_system_serializer.rb', line 27 def initialize(opts = {}) super @basepath = ([:basepath] || 'doc').to_s @extension = (.has_key?(:extension) ? [:extension] : 'html').to_s end |
Instance Attribute Details
#basepath ⇒ String
The base path to write data to.
7 8 9 |
# File 'lib/yard/serializers/file_system_serializer.rb', line 7 def basepath @basepath end |
#extension ⇒ String
The extension of the filename (defaults to html
)
16 17 18 |
# File 'lib/yard/serializers/file_system_serializer.rb', line 16 def extension @extension end |
Instance Method Details
#exists?(object) ⇒ Boolean
Checks the disk for an object and returns whether it was serialized.
87 88 89 |
# File 'lib/yard/serializers/file_system_serializer.rb', line 87 def exists?(object) File.exist?(File.join(basepath, serialized_path(object))) end |
#serialize(object, data) ⇒ String
Serializes object with data to its serialized path (prefixed by the #basepath
).
36 37 38 39 40 |
# File 'lib/yard/serializers/file_system_serializer.rb', line 36 def serialize(object, data) path = File.join(basepath, *serialized_path(object)) log.debug "Serializing to #{path}" File.open!(path, "wb") {|f| f.write data } end |
#serialized_path(object) ⇒ String
Implements the serialized path of a code object.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/yard/serializers/file_system_serializer.rb', line 48 def serialized_path(object) return object if object.is_a?(String) if object.is_a?(CodeObjects::ExtraFileObject) fspath = ['file.' + object.name + (extension.empty? ? '' : ".#{extension}")] else objname = object != YARD::Registry.root ? object.name.to_s : "top-level-namespace" objname += '_' + object.scope.to_s[0,1] if object.is_a?(CodeObjects::MethodObject) fspath = [objname + (extension.empty? ? '' : ".#{extension}")] if object.namespace && object.namespace.path != "" fspath.unshift(*object.namespace.path.split(CodeObjects::NSEP)) end end # Don't change the filenames, it just makes it more complicated # to figure out the original name. #fspath.map! do |p| # p.gsub(/([a-z])([A-Z])/, '\1_\2').downcase #end # Remove special chars from filenames. # Windows disallows \ / : * ? " < > | but we will just remove any # non alphanumeric (plus period, underscore and dash). fspath.map! do |p| p.gsub(/[^\w\.-]/) do |x| encoded = '_' x.each_byte { |b| encoded << ("%X" % b) } encoded end end File.join(fspath) end |