Class: Vedeu::Editor::Document Private

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Repositories::Defaults, Repositories::Model
Defined in:
lib/vedeu/editor/document.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

A collection of keypresses ordered by input.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#attributesHash<Symbol => String|Symbol| Vedeu::Repositories::Repository> (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



26
27
28
# File 'lib/vedeu/editor/document.rb', line 26

def attributes
  @attributes
end

#dataString

Returns:

  • (String)


30
31
32
# File 'lib/vedeu/editor/document.rb', line 30

def data
  @data
end

#nameString|Symbol

Returns:

  • (String|Symbol)


34
35
36
# File 'lib/vedeu/editor/document.rb', line 34

def name
  @name
end

#repositoryVedeu::Repositories::Repository Originally defined in module Repositories::Model

Instance Method Details

#absent?(variable) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether a variable is nil or empty.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

#become(klass, attributes) ⇒ Class Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Converts one class into another.

Parameters:

  • klass (Class)

    The class to become an instance of.

  • attributes (Hash)

    The attributes of klass.

Returns:

  • (Class)

    Returns a new instance of klass.

#boolean(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the value was a boolean.

Parameters:

  • value (void)

Returns:

#boolean?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Boolean.

Parameters:

Returns:

#cursorVedeu::Editor::Cursor (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return a virtual cursor to track the cursor position within the document.



215
216
217
# File 'lib/vedeu/editor/document.rb', line 215

def cursor
  @cursor ||= Vedeu::Editor::Cursor.new(name: name)
end

#defaultsHash<Symbol => void|Symbol] (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the default options/attributes for this class.

Returns:

  • (Hash<Symbol => void|Symbol])

    Hash<Symbol => void|Symbol]



222
223
224
225
226
227
228
# File 'lib/vedeu/editor/document.rb', line 222

def defaults
  {
    data:       Vedeu::Editor::Lines.new([Vedeu::Editor::Line.new]),
    name:       nil,
    repository: Vedeu.documents,
  }
end

#delete_characterVedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Deletes the character from the line where the cursor is currently positioned.



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/vedeu/editor/document.rb', line 56

def delete_character
  return self if document_start?

  if first_char? && y > 0
    delete_line

    return

  else
    @lines = lines.delete_character(y, x - 1)

    left

  end

  refresh
end

#delete_lineVedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Delete a line.



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/vedeu/editor/document.rb', line 77

def delete_line
  @lines = lines.delete_line(y)

  up

  cursor.x = line.size

  cursor.refresh

  refresh
end

#document_start?Boolean (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



207
208
209
# File 'lib/vedeu/editor/document.rb', line 207

def document_start?
  first_char? && first_line?
end

#downVedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Move the virtual cursor down.



196
197
198
199
200
201
202
# File 'lib/vedeu/editor/document.rb', line 196

def down
  return self if last_line?

  cursor.down(next_line_size).refresh

  self
end

#escape?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is an escape sequence object (e.g. Vedeu::Cells::Escape.)

Returns:

#executeString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the document as a string with line breaks if there is more than one line.

Returns:

  • (String)


40
41
42
43
44
45
46
47
48
49
50
# File 'lib/vedeu/editor/document.rb', line 40

def execute
  command = lines.map(&:to_s).join("\n")

  reset!

  Vedeu.trigger(:_clear_view_content_, name)

  Vedeu.trigger(:_command_, command)

  command
end

#falsy?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value should be considered false.

Parameters:

  • value (void)

Returns:

#first_char?Boolean (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



231
232
233
# File 'lib/vedeu/editor/document.rb', line 231

def first_char?
  x - 1 < 0
end

#first_line?Boolean (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



236
237
238
# File 'lib/vedeu/editor/document.rb', line 236

def first_line?
  y - 1 < 0
end

#hash?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Hash.

Parameters:

  • value (Hash|void)

Returns:

#initialize(attributes = {}) ⇒ void Originally defined in module Repositories::Defaults

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Note:

If a particular key is missing from the attributes parameter, then it is added with the respective value from #defaults.

Returns a new instance of the class including this module.

Parameters:

  • attributes (Hash) (defaults to: {})

#insert_character(character) ⇒ Vedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Inserts the given character in to the line where the cursor is currently positioned.

Parameters:

  • character (String|Symbol)

Returns:



94
95
96
97
98
99
100
101
102
# File 'lib/vedeu/editor/document.rb', line 94

def insert_character(character)
  return self if character.is_a?(Symbol)

  @lines = lines.insert_character(character, y, x)

  right

  refresh
end

#insert_lineVedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Insert an empty line.



107
108
109
110
111
112
113
# File 'lib/vedeu/editor/document.rb', line 107

def insert_line
  @lines = lines.insert_line(y + 1)

  down

  refresh
end

#last_char?Boolean (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



241
242
243
# File 'lib/vedeu/editor/document.rb', line 241

def last_char?
  x + 1 > line.size
end

#last_line?Boolean (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:



246
247
248
# File 'lib/vedeu/editor/document.rb', line 246

def last_line?
  y + 1 >= lines.size
end

#leftVedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Move the virtual cursor left.



163
164
165
166
167
168
169
# File 'lib/vedeu/editor/document.rb', line 163

def left
  return self if first_char?

  cursor.left.refresh

  self
end

#line(index = y) ⇒ Array<String|void>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the current line from the collection of lines.

Parameters:

  • index (Fixnum) (defaults to: y)

Returns:

  • (Array<String|void>)


119
120
121
# File 'lib/vedeu/editor/document.rb', line 119

def line(index = y)
  lines.line(index)
end

#line_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::Line.

Returns:

#linesArray<String|void>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns the collection of lines which constitutes the document content.

Returns:

  • (Array<String|void>)


127
128
129
# File 'lib/vedeu/editor/document.rb', line 127

def lines
  @lines ||= Vedeu::Editor::Lines.coerce(data)
end

#next_line_sizeFixnum (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Fixnum)


251
252
253
# File 'lib/vedeu/editor/document.rb', line 251

def next_line_size
  line(y + 1).size
end

#numeric?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Fixnum.

Parameters:

  • value (Fixnum|void)

Returns:

#outputArray<Vedeu::Cells::Char> (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the data needed to render the document, based on the current virtual cursor position. This output may be a cropped representation of the full document depending on the size of the interface.

Returns:



261
262
263
264
265
266
# File 'lib/vedeu/editor/document.rb', line 261

def output
  Vedeu::Editor::Cropper.new(lines: lines,
                             name:  name,
                             ox:    ox,
                             oy:    oy).viewport
end

#present?(variable) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether a variable has a useful value.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

#prev_line_sizeFixnum (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Fixnum)


269
270
271
# File 'lib/vedeu/editor/document.rb', line 269

def prev_line_size
  line(y - 1).size
end

#refreshVedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Store the document in the documents repository, clear and send the content to the terminal.



148
149
150
151
152
153
154
155
156
157
158
# File 'lib/vedeu/editor/document.rb', line 148

def refresh
  store

  Vedeu.trigger(:_clear_view_content_, name)

  Vedeu.buffer_update(output)

  Vedeu.direct_write(output.map(&:to_s).join)

  self
end

#reset!Vedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Reset the document to the empty state.



134
135
136
137
138
139
140
141
142
# File 'lib/vedeu/editor/document.rb', line 134

def reset!
  @cursor = cursor.reset!

  @lines = defaults[:data]

  cursor.refresh

  refresh
end

#rightVedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Move the virtual cursor right.



174
175
176
177
178
179
180
# File 'lib/vedeu/editor/document.rb', line 174

def right
  return self if last_char?

  cursor.right.refresh

  self
end

#snake_case(klass) ⇒ String Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Converts a class name to a lowercase snake case string.

Examples:

snake_case(MyClassName) # => "my_class_name"
snake_case(NameSpaced::ClassName)
# => "name_spaced/class_name"

snake_case('MyClassName') # => "my_class_name"
snake_case(NameSpaced::ClassName)
# => "name_spaced/class_name"

Parameters:

  • klass (Module|Class|String)

Returns:

  • (String)

#store(&block) ⇒ void Originally defined in module Repositories::Model

TODO:

Perhaps some validation could be added here?

Note:

If a block is given, store the model, return the model after yielding.

This method returns an undefined value.

Returns The model instance stored in the repository.

#stream_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::Stream.

Returns:

#string?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Fixnum.

Parameters:

  • value (String|void)

Returns:

#truthy?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value should be considered true.

Parameters:

  • value (void)

Returns:

#upVedeu::Editor::Document

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Move the virtual cursor up.



185
186
187
188
189
190
191
# File 'lib/vedeu/editor/document.rb', line 185

def up
  return self if first_line?

  cursor.up(prev_line_size).refresh

  self
end

#validate(attributes) ⇒ Hash (private) Originally defined in module Repositories::Defaults

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Parameters:

  • attributes (Hash)

Returns:

  • (Hash)

Raises:

  • (Vedeu::Error::InvalidSyntax)

    When the value given for an argument or parameter cannot be used because it is not valid for the use case, unsupported or the method expects a different type.

#view_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::View.

Returns: