class SlateSerializer::Plain
Text de- and serializer
Public Class Methods
deserializer(text)
click to toggle source
Convert text to a Slate document
@param text format [String] the text return [Hash] Slate document
# File lib/slate_serializer/plain.rb, line 9 def deserializer(text) text = '' if text.nil? lines = split_text_into_lines(text) { document: { object: 'document', nodes: convert_lines_into_nodes(lines) } } end
serializer(value, options = {})
click to toggle source
Convert a Slate Document to plain text
@param value format [Hash] the Slate document @param options format [Hash] options for the serializer, delimitter defaults to ānā @return [String] plain text version of the Slate documnent
# File lib/slate_serializer/plain.rb, line 26 def serializer(value, options = {}) return '' unless value.key?(:document) options[:delimiter] = "\n" unless options.key?(:delimiter) serialize_node(value[:document], options) end
Private Class Methods
convert_lines_into_nodes(lines)
click to toggle source
# File lib/slate_serializer/plain.rb, line 53 def convert_lines_into_nodes(lines) lines.map do |line| { object: 'block', type: 'paragraph', data: {}, nodes: [ object: 'text', text: line, marks: [] ] } end end
serialize_node(node, options)
click to toggle source
# File lib/slate_serializer/plain.rb, line 68 def serialize_node(node, options) if node[:object] == 'document' || node[:object] == 'block' node[:nodes].map { |n| serialize_node(n, options) }.join(options[:delimiter]) else node[:text] end end
split_text_into_lines(text)
click to toggle source
# File lib/slate_serializer/plain.rb, line 35 def split_text_into_lines(text) lines = text.strip.split("\n").map(&:strip) blocks = [] loop do index = lines.find_index('') if index.nil? blocks << lines.join("\n") break end blocks << lines[0...index].join("\n") lines.shift(index + 1) end blocks.length == 1 ? blocks : blocks.reject { |block| block == '' } end