Class: Prosereflect::CodeBlock

Inherits:
Node
  • Object
show all
Defined in:
lib/prosereflect/code_block.rb

Overview

CodeBlock class represents a code block in ProseMirror.

Constant Summary collapse

PM_TYPE =
'code_block'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Node

#add_child, #find_all, #find_children, #find_first, #marks, #marks=, #parse_content, #process_attrs_data, #raw_marks, #to_yaml

Constructor Details

#initialize(attributes = {}) ⇒ CodeBlock

Returns a new instance of CodeBlock.



21
22
23
24
25
26
27
# File 'lib/prosereflect/code_block.rb', line 21

def initialize(attributes = {})
  attributes[:attrs] ||= {
    'content' => nil,
    'language' => nil
  }
  super
end

Instance Attribute Details

#highlight_lines_strObject (readonly)

Returns the value of attribute highlight_lines_str.



63
64
65
# File 'lib/prosereflect/code_block.rb', line 63

def highlight_lines_str
  @highlight_lines_str
end

Class Method Details

.create(attrs = nil) ⇒ Object



29
30
31
# File 'lib/prosereflect/code_block.rb', line 29

def self.create(attrs = nil)
  new(attrs: attrs)
end

Instance Method Details

#add_line(text) ⇒ Object

Add a line of code



104
105
106
107
# File 'lib/prosereflect/code_block.rb', line 104

def add_line(text)
  text_node = Text.new(text: text)
  add_child(text_node)
end

#add_lines(lines) ⇒ Object

Add multiple lines of code



110
111
112
# File 'lib/prosereflect/code_block.rb', line 110

def add_lines(lines)
  lines.each { |line| add_line(line) }
end

#attributesObject

Get code block attributes as a hash



95
96
97
98
99
100
101
# File 'lib/prosereflect/code_block.rb', line 95

def attributes
  {
    language: language,
    line_numbers: line_numbers,
    highlight_lines: highlight_lines
  }.compact
end

#contentObject



59
60
61
# File 'lib/prosereflect/code_block.rb', line 59

def content
  @content || attrs&.[]('content')
end

#content=(value) ⇒ Object



53
54
55
56
57
# File 'lib/prosereflect/code_block.rb', line 53

def content=(value)
  @content = value
  self.attrs ||= {}
  attrs['content'] = value
end

#highlight_linesObject



73
74
75
76
77
# File 'lib/prosereflect/code_block.rb', line 73

def highlight_lines
  return [] unless @highlight_lines_str

  @highlight_lines_str.split(',').map(&:to_i)
end

#highlight_lines=(lines) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/prosereflect/code_block.rb', line 65

def highlight_lines=(lines)
  @highlight_lines_str = if lines.is_a?(Array)
                           lines.join(',')
                         else
                           lines.to_s
                         end
end

#languageObject



39
40
41
# File 'lib/prosereflect/code_block.rb', line 39

def language
  @language || attrs&.[]('language')
end

#language=(value) ⇒ Object



33
34
35
36
37
# File 'lib/prosereflect/code_block.rb', line 33

def language=(value)
  @language = value
  self.attrs ||= {}
  attrs['language'] = value
end

#line_numbersObject



49
50
51
# File 'lib/prosereflect/code_block.rb', line 49

def line_numbers
  @line_numbers || attrs&.[]('line_numbers') || false
end

#line_numbers=(value) ⇒ Object



43
44
45
46
47
# File 'lib/prosereflect/code_block.rb', line 43

def line_numbers=(value)
  @line_numbers = value
  self.attrs ||= {}
  attrs['line_numbers'] = value
end

#text_contentObject



79
80
81
# File 'lib/prosereflect/code_block.rb', line 79

def text_content
  content.to_s
end

#to_hObject



83
84
85
86
87
88
89
90
91
92
# File 'lib/prosereflect/code_block.rb', line 83

def to_h
  hash = super
  hash['attrs'] = {
    'content' => content,
    'language' => language
  }
  hash['attrs']['line_numbers'] = line_numbers if line_numbers
  hash.delete('content')
  hash
end