Class: YARD::Serializers::FileSystemSerializer
- Inherits:
-
Base
- Object
- Base
- 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)
-
- (String) basepath
The base path to write data to.
-
- (String) extension
The extension of the filename (defaults to html).
Attributes inherited from Base
Instance Method Summary (collapse)
-
- (Boolean) exists?(object)
Checks the disk for an object and returns whether it was serialized.
-
- (FileSystemSerializer) initialize(opts = {})
constructor
Creates a new FileSystemSerializer with options.
-
- (String) serialize(object, data)
Serializes object with data to its serialized path (prefixed by the #basepath).
-
- (String) serialized_path(object)
Implements the serialized path of a code object.
Methods inherited from Base
#after_serialize, #before_serialize
Constructor Details
- (FileSystemSerializer) initialize(opts = {})
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
- (String) basepath
The base path to write data to.
7 8 9 |
# File 'lib/yard/serializers/file_system_serializer.rb', line 7 def basepath @basepath end |
- (String) extension
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
- (Boolean) exists?(object)
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 |
- (String) serialize(object, data)
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 |
- (String) serialized_path(object)
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 |