Sha256: 9cc7b2d5a31ea94f048df8d07cd9311fdc8f1894861926af9ddfc992746af79f

Contents?: true

Size: 1.82 KB

Versions: 22

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

module Vedeu

  module Editor

    # Manipulate a single line of an Vedeu::Editor::Document.
    #
    # @api private
    #
    class Line

      include Vedeu::Editor::Collection

      # @!attribute [rw] collection
      # @return [String]
      attr_accessor :collection
      alias line collection
      alias to_s collection

      class << self

        extend Forwardable

        def_delegators Vedeu::Coercers::EditorLine,
                       :coerce

      end # Eigenclass

      # Returns a new instance of Vedeu::Editor::Line.
      #
      # @param collection [String|NilClass]
      # @return [Vedeu::Editor::Line]
      def initialize(collection = nil)
        @collection = collection || ''
      end

      # Return the character at the given index.
      #
      # @param index [Fixnum|NilClass]
      # @return [String|NilClass]
      def character(index = nil)
        return ''             if collection && collection.empty?
        return collection[-1] unless index

        by_index(index)
      end

      # Delete the character from the line positioned at the given
      # index.
      #
      # @param index [Fixnum|NilClass]
      # @return [String]
      def delete_character(index = nil)
        Vedeu::Editor::Line.coerce(Vedeu::Editor::Delete
                                   .from(line, index, size))
      end

      # Insert the character on the line positioned at the given
      # index.
      #
      # @param character [String]
      # @param index [Fixnum|NilClass]
      # @return [Vedeu::Editor::Line]
      def insert_character(character, index = nil)
        return self unless character

        Vedeu::Editor::Line.coerce(Vedeu::Editor::Insert
                                   .into(collection, character, index, size))
      end

    end # Line

  end # Editor

end # Vedeu

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
vedeu-0.8.32 lib/vedeu/editor/line.rb
vedeu-0.8.31 lib/vedeu/editor/line.rb
vedeu-0.8.30 lib/vedeu/editor/line.rb
vedeu-0.8.29 lib/vedeu/editor/line.rb
vedeu-0.8.28 lib/vedeu/editor/line.rb
vedeu-0.8.27 lib/vedeu/editor/line.rb
vedeu-0.8.26 lib/vedeu/editor/line.rb
vedeu-0.8.25 lib/vedeu/editor/line.rb
vedeu-0.8.24 lib/vedeu/editor/line.rb
vedeu-0.8.23 lib/vedeu/editor/line.rb
vedeu-0.8.22 lib/vedeu/editor/line.rb
vedeu-0.8.21 lib/vedeu/editor/line.rb
vedeu-0.8.20 lib/vedeu/editor/line.rb
vedeu-0.8.19 lib/vedeu/editor/line.rb
vedeu-0.8.18 lib/vedeu/editor/line.rb
vedeu-0.8.17 lib/vedeu/editor/line.rb
vedeu-0.8.16 lib/vedeu/editor/line.rb
vedeu-0.8.15 lib/vedeu/editor/line.rb
vedeu-0.8.14 lib/vedeu/editor/line.rb
vedeu-0.8.13 lib/vedeu/editor/line.rb