vedeu 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/vedeu.rb +4 -0
- data/lib/vedeu/output/compositor.rb +18 -23
- data/lib/vedeu/output/esc.rb +19 -2
- data/lib/vedeu/output/output.rb +1 -1
- data/lib/vedeu/output/style.rb +6 -0
- data/lib/vedeu/repository/command.rb +2 -0
- data/lib/vedeu/repository/interface.rb +7 -3
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/output/compositor_test.rb +128 -90
- data/test/lib/vedeu/output/esc_test.rb +48 -0
- data/test/lib/vedeu/output/output_test.rb +1 -5
- data/test/lib/vedeu/output/style_test.rb +40 -0
- data/test/lib/vedeu/repository/interface_repository_test.rb +4 -4
- data/test/lib/vedeu/repository/interface_test.rb +6 -5
- data/test/lib/vedeu/support/queue_test.rb +2 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 66de5c561798d7f28dc0aa984dd6e3017bf724ca
         | 
| 4 | 
            +
              data.tar.gz: 5b1c164ab6fb207d0443b7d309563654c99132e8
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 018e9a0652410c0f0fb70e35ee06ba1d4a76557270fd3407a95b90bb4635658d7c739fe62a09950f4b955297b0eb804dc70a60619c8a2772885774925613e892
         | 
| 7 | 
            +
              data.tar.gz: 601298baf82a2205887b9e78dcb997270ca502697768c96d7b975cbc607ac703984c0323949156fecf048678a0a24d8df3a9a940de83f098048c861a5f2e9a35
         | 
    
        data/lib/vedeu.rb
    CHANGED
    
    | @@ -40,6 +40,7 @@ require_relative 'vedeu/launcher' | |
| 40 40 | 
             
            require_relative 'vedeu/version'
         | 
| 41 41 |  | 
| 42 42 | 
             
            module Vedeu
         | 
| 43 | 
            +
              # :nocov:
         | 
| 43 44 | 
             
              def self.logger
         | 
| 44 45 | 
             
                @logger ||= Logger.new(root_path + '/logs/vedeu.log').tap do |log|
         | 
| 45 46 | 
             
                  log.formatter = proc do |_, time, _, msg|
         | 
| @@ -47,10 +48,13 @@ module Vedeu | |
| 47 48 | 
             
                  end
         | 
| 48 49 | 
             
                end
         | 
| 49 50 | 
             
              end
         | 
| 51 | 
            +
              # :nocov:
         | 
| 50 52 |  | 
| 51 53 | 
             
              private
         | 
| 52 54 |  | 
| 55 | 
            +
              # :nocov:
         | 
| 53 56 | 
             
              def self.root_path
         | 
| 54 57 | 
             
                File.expand_path('../..', __FILE__)
         | 
| 55 58 | 
             
              end
         | 
| 59 | 
            +
              # :nocov:
         | 
| 56 60 | 
             
            end
         | 
| @@ -3,20 +3,17 @@ module Vedeu | |
| 3 3 |  | 
| 4 4 | 
             
              class Compositor
         | 
| 5 5 | 
             
                class << self
         | 
| 6 | 
            -
                  def arrange(output =  | 
| 7 | 
            -
                     | 
| 8 | 
            -
             | 
| 9 | 
            -
                    if output.is_a?(Array)
         | 
| 10 | 
            -
                      new(output, interface).arrange
         | 
| 11 | 
            -
                    elsif output.is_a?(Hash)
         | 
| 12 | 
            -
                      output.map { |i, o| new(o, i).arrange }
         | 
| 6 | 
            +
                  def arrange(output = {})
         | 
| 7 | 
            +
                    output.map do |interface, stream|
         | 
| 8 | 
            +
                      new({ interface: interface, stream: stream }).arrange
         | 
| 13 9 | 
             
                    end
         | 
| 14 10 | 
             
                  end
         | 
| 15 11 | 
             
                end
         | 
| 16 12 |  | 
| 17 | 
            -
                def initialize( | 
| 18 | 
            -
                  @ | 
| 19 | 
            -
                  @interface | 
| 13 | 
            +
                def initialize(attributes = {})
         | 
| 14 | 
            +
                  @attributes = attributes || {}
         | 
| 15 | 
            +
                  @interface  = attributes[:interface]
         | 
| 16 | 
            +
                  @stream     = attributes[:stream]
         | 
| 20 17 | 
             
                end
         | 
| 21 18 |  | 
| 22 19 | 
             
                def arrange
         | 
| @@ -25,21 +22,24 @@ module Vedeu | |
| 25 22 |  | 
| 26 23 | 
             
                private
         | 
| 27 24 |  | 
| 25 | 
            +
                attr_reader :attributes, :stream
         | 
| 26 | 
            +
             | 
| 28 27 | 
             
                def composition
         | 
| 29 28 | 
             
                  container = []
         | 
| 30 29 | 
             
                  streams   = []
         | 
| 31 30 |  | 
| 32 31 | 
             
                  container << colour.set
         | 
| 33 32 |  | 
| 34 | 
            -
                   | 
| 35 | 
            -
                     | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
                    end
         | 
| 33 | 
            +
                  if stream.size < height
         | 
| 34 | 
            +
                    remaining = height - stream.size
         | 
| 35 | 
            +
                    remaining.times { |i| stream << [''] }
         | 
| 36 | 
            +
                  end
         | 
| 39 37 |  | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 38 | 
            +
                  stream.each_with_index do |lines, index|
         | 
| 39 | 
            +
                    streams << clear(index)
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    lines.each do |data|
         | 
| 42 | 
            +
                      streams << Directive.enact(interface, data)
         | 
| 43 43 | 
             
                    end
         | 
| 44 44 |  | 
| 45 45 | 
             
                    container << streams.join
         | 
| @@ -80,11 +80,6 @@ module Vedeu | |
| 80 80 | 
             
                  interface.cursor
         | 
| 81 81 | 
             
                end
         | 
| 82 82 |  | 
| 83 | 
            -
                def output
         | 
| 84 | 
            -
                  return @output.split if @output.is_a?(String)
         | 
| 85 | 
            -
                  @output
         | 
| 86 | 
            -
                end
         | 
| 87 | 
            -
             | 
| 88 83 | 
             
                def interface
         | 
| 89 84 | 
             
                  @_interface ||= InterfaceRepository.find_by_name(@interface)
         | 
| 90 85 | 
             
                end
         | 
    
        data/lib/vedeu/output/esc.rb
    CHANGED
    
    | @@ -6,11 +6,19 @@ module Vedeu | |
| 6 6 | 
             
                  [esc, '5m'].join
         | 
| 7 7 | 
             
                end
         | 
| 8 8 |  | 
| 9 | 
            +
                def blink_off
         | 
| 10 | 
            +
                  [esc, '25m'].join
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 9 13 | 
             
                def bold
         | 
| 10 14 | 
             
                  [esc, '1m'].join
         | 
| 11 15 | 
             
                end
         | 
| 12 16 | 
             
                alias_method :bright, :bold
         | 
| 13 17 |  | 
| 18 | 
            +
                def bold_off
         | 
| 19 | 
            +
                  [esc, '21m'].join
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 14 22 | 
             
                def clear
         | 
| 15 23 | 
             
                  [esc, '2J'].join
         | 
| 16 24 | 
             
                end
         | 
| @@ -23,10 +31,15 @@ module Vedeu | |
| 23 31 | 
             
                  [27.chr, '['].join
         | 
| 24 32 | 
             
                end
         | 
| 25 33 |  | 
| 26 | 
            -
                def  | 
| 34 | 
            +
                def negative
         | 
| 27 35 | 
             
                  [esc, '7m'].join
         | 
| 28 36 | 
             
                end
         | 
| 29 | 
            -
                alias_method :reverse, : | 
| 37 | 
            +
                alias_method :reverse, :negative
         | 
| 38 | 
            +
                alias_method :inverse, :negative
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def positive
         | 
| 41 | 
            +
                  [esc, '27m'].join
         | 
| 42 | 
            +
                end
         | 
| 30 43 |  | 
| 31 44 | 
             
                def normal
         | 
| 32 45 | 
             
                  [esc, '2m'].join
         | 
| @@ -40,5 +53,9 @@ module Vedeu | |
| 40 53 | 
             
                def underline
         | 
| 41 54 | 
             
                  [esc, '4m'].join
         | 
| 42 55 | 
             
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                def underline_off
         | 
| 58 | 
            +
                  [esc, '24m'].join
         | 
| 59 | 
            +
                end
         | 
| 43 60 | 
             
              end
         | 
| 44 61 | 
             
            end
         | 
    
        data/lib/vedeu/output/output.rb
    CHANGED
    
    
    
        data/lib/vedeu/output/style.rb
    CHANGED
    
    | @@ -12,14 +12,20 @@ module Vedeu | |
| 12 12 |  | 
| 13 13 | 
             
                def set
         | 
| 14 14 | 
             
                  case style
         | 
| 15 | 
            +
                  when :blink       then Esc.blink
         | 
| 16 | 
            +
                  when :blink_off   then Esc.blink_off
         | 
| 15 17 | 
             
                  when :bold        then Esc.bold
         | 
| 18 | 
            +
                  when :bold_off    then Esc.bold_off
         | 
| 16 19 | 
             
                  when :clear       then Esc.clear
         | 
| 17 20 | 
             
                  when :hide_cursor then Cursor.hide
         | 
| 18 21 | 
             
                  when :inverse     then Esc.inverse
         | 
| 22 | 
            +
                  when :negative    then Esc.negative
         | 
| 23 | 
            +
                  when :positive    then Esc.positive
         | 
| 19 24 | 
             
                  when :reset       then Esc.reset
         | 
| 20 25 | 
             
                  when :normal      then Esc.reset
         | 
| 21 26 | 
             
                  when :show_cursor then Cursor.show
         | 
| 22 27 | 
             
                  when :underline   then Esc.underline
         | 
| 28 | 
            +
                  when :underline_off then Esc.underline_off
         | 
| 23 29 | 
             
                  else
         | 
| 24 30 | 
             
                    ''
         | 
| 25 31 | 
             
                  end
         | 
| @@ -30,6 +30,7 @@ module Vedeu | |
| 30 30 | 
             
                end
         | 
| 31 31 | 
             
              end
         | 
| 32 32 |  | 
| 33 | 
            +
              # :nocov:
         | 
| 33 34 | 
             
              module ClassMethods
         | 
| 34 35 | 
             
                def command(name, klass, options = {})
         | 
| 35 36 | 
             
                  command_name = name.is_a?(Symbol) ? name.to_s : name
         | 
| @@ -41,4 +42,5 @@ module Vedeu | |
| 41 42 | 
             
              def self.included(receiver)
         | 
| 42 43 | 
             
                receiver.extend(ClassMethods)
         | 
| 43 44 | 
             
              end
         | 
| 45 | 
            +
              # :nocov:
         | 
| 44 46 | 
             
            end
         | 
| @@ -22,13 +22,15 @@ module Vedeu | |
| 22 22 | 
             
                def create
         | 
| 23 23 | 
             
                  InterfaceRepository.create(self)
         | 
| 24 24 |  | 
| 25 | 
            -
                  Compositor.arrange(initial_state)
         | 
| 26 | 
            -
             | 
| 27 25 | 
             
                  self
         | 
| 28 26 | 
             
                end
         | 
| 29 27 |  | 
| 30 28 | 
             
                def update
         | 
| 31 29 | 
             
                  if enqueued?
         | 
| 30 | 
            +
                    @current = dequeue
         | 
| 31 | 
            +
                  elsif @current.empty?
         | 
| 32 | 
            +
                    Compositor.arrange(initial_state)
         | 
| 33 | 
            +
             | 
| 32 34 | 
             
                    @current = dequeue
         | 
| 33 35 | 
             
                  else
         | 
| 34 36 | 
             
                    @current
         | 
| @@ -50,7 +52,7 @@ module Vedeu | |
| 50 52 | 
             
                private
         | 
| 51 53 |  | 
| 52 54 | 
             
                def initial_state
         | 
| 53 | 
            -
                  { name =>  | 
| 55 | 
            +
                  { name => Array.new(geometry.height) { [""] } }
         | 
| 54 56 | 
             
                end
         | 
| 55 57 |  | 
| 56 58 | 
             
                def foreground
         | 
| @@ -62,6 +64,7 @@ module Vedeu | |
| 62 64 | 
             
                end
         | 
| 63 65 | 
             
              end
         | 
| 64 66 |  | 
| 67 | 
            +
              # :nocov:
         | 
| 65 68 | 
             
              module ClassMethods
         | 
| 66 69 | 
             
                def interface(name, options = {})
         | 
| 67 70 | 
             
                  interface_name = name.is_a?(Symbol) ? name.to_s : name
         | 
| @@ -73,4 +76,5 @@ module Vedeu | |
| 73 76 | 
             
              def self.included(receiver)
         | 
| 74 77 | 
             
                receiver.extend(ClassMethods)
         | 
| 75 78 | 
             
              end
         | 
| 79 | 
            +
              # :nocov:
         | 
| 76 80 | 
             
            end
         | 
    
        data/lib/vedeu/version.rb
    CHANGED
    
    
| @@ -3,15 +3,14 @@ require_relative '../../../test_helper' | |
| 3 3 | 
             
            module Vedeu
         | 
| 4 4 | 
             
              describe Compositor do
         | 
| 5 5 | 
             
                let(:described_class)    { Compositor }
         | 
| 6 | 
            -
                let(:described_instance) { described_class.new( | 
| 6 | 
            +
                let(:described_instance) { described_class.new(attributes) }
         | 
| 7 7 | 
             
                let(:subject)            { described_instance }
         | 
| 8 | 
            -
                let(: | 
| 9 | 
            -
                let(:stream)             { [] }
         | 
| 10 | 
            -
                let(: | 
| 8 | 
            +
                let(:attributes)         { { interface: 'dummy', stream: stream } }
         | 
| 9 | 
            +
                let(:stream)             { [[]] }
         | 
| 10 | 
            +
                let(:composition)        {}
         | 
| 11 11 |  | 
| 12 12 | 
             
                before do
         | 
| 13 13 | 
             
                  Interface.create({ name: 'dummy', width: 15, height: 2 })
         | 
| 14 | 
            -
                  Interface.create({ name: 'test_interface', width: 15, height: 2 })
         | 
| 15 14 | 
             
                end
         | 
| 16 15 |  | 
| 17 16 | 
             
                after do
         | 
| @@ -23,34 +22,37 @@ module Vedeu | |
| 23 22 | 
             
                end
         | 
| 24 23 |  | 
| 25 24 | 
             
                it 'sets an instance variable' do
         | 
| 26 | 
            -
                  subject.instance_variable_get('@ | 
| 25 | 
            +
                  subject.instance_variable_get('@attributes').must_equal(attributes)
         | 
| 27 26 | 
             
                end
         | 
| 28 27 |  | 
| 29 28 | 
             
                it 'sets an instance variable' do
         | 
| 30 | 
            -
                  subject.instance_variable_get('@interface').must_equal( | 
| 29 | 
            +
                  subject.instance_variable_get('@interface').must_equal(attributes[:interface])
         | 
| 31 30 | 
             
                end
         | 
| 32 31 |  | 
| 33 | 
            -
                 | 
| 34 | 
            -
                   | 
| 32 | 
            +
                it 'sets an instance variable' do
         | 
| 33 | 
            +
                  subject.instance_variable_get('@stream').must_equal(attributes[:stream])
         | 
| 34 | 
            +
                end
         | 
| 35 35 |  | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 36 | 
            +
                describe '#arrange' do
         | 
| 37 | 
            +
                  let(:subject)    { described_class.new(attributes).arrange }
         | 
| 38 38 |  | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 39 | 
            +
                  context 'when empty' do
         | 
| 40 | 
            +
                    let(:stream)      { [[]] }
         | 
| 41 | 
            +
                    let(:composition) {
         | 
| 42 | 
            +
                      [
         | 
| 43 | 
            +
                        [
         | 
| 44 | 
            +
                          "\e[38;2;39m\e[48;2;49m",
         | 
| 45 | 
            +
                          "\e[1;1H               \e[1;1H",
         | 
| 46 | 
            +
                          "\e[2;1H               \e[2;1H",
         | 
| 47 | 
            +
                          "\e[38;2;39m\e[48;2;49m",
         | 
| 48 | 
            +
                          "\e[?25h"
         | 
| 49 | 
            +
                        ]
         | 
| 50 | 
            +
                      ]
         | 
| 51 | 
            +
                    }
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    it 'returns the initial state of the interface' do
         | 
| 54 | 
            +
                      subject.must_equal(composition)
         | 
| 41 55 | 
             
                    end
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                  context 'when an array (single interface)' do
         | 
| 45 | 
            -
                    let(:output) { [[]] }
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                    it 'returns an Array' do
         | 
| 48 | 
            -
                      subject.must_be_instance_of(Array)
         | 
| 49 | 
            -
                    end
         | 
| 50 | 
            -
                  end
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                  context 'when a hash (multiple interfaces)' do
         | 
| 53 | 
            -
                    let(:output) { { 'test_interface' => [] } }
         | 
| 54 56 |  | 
| 55 57 | 
             
                    it 'returns an Array' do
         | 
| 56 58 | 
             
                      subject.must_be_instance_of(Array)
         | 
| @@ -59,31 +61,45 @@ module Vedeu | |
| 59 61 |  | 
| 60 62 | 
             
                  context 'when unstyled' do
         | 
| 61 63 | 
             
                    context 'and a single line' do
         | 
| 62 | 
            -
                      let(: | 
| 63 | 
            -
                      let(: | 
| 64 | 
            -
                        [ | 
| 64 | 
            +
                      let(:stream)      { [['Some text...']] }
         | 
| 65 | 
            +
                      let(:composition) {
         | 
| 66 | 
            +
                        [
         | 
| 67 | 
            +
                          [
         | 
| 68 | 
            +
                            "\e[38;2;39m\e[48;2;49m",
         | 
| 69 | 
            +
                            "\e[1;1H               \e[1;1HSome text...",
         | 
| 70 | 
            +
                            "\e[2;1H               \e[2;1H",
         | 
| 71 | 
            +
                            "\e[38;2;39m\e[48;2;49m",
         | 
| 72 | 
            +
                            "\e[?25h"
         | 
| 73 | 
            +
                          ]
         | 
| 74 | 
            +
                        ]
         | 
| 65 75 | 
             
                      }
         | 
| 66 76 |  | 
| 67 | 
            -
                      it 'returns the  | 
| 68 | 
            -
                        subject.must_equal( | 
| 77 | 
            +
                      it 'returns the enqueued composition' do
         | 
| 78 | 
            +
                        subject.must_equal(composition)
         | 
| 69 79 | 
             
                      end
         | 
| 70 80 | 
             
                    end
         | 
| 71 81 |  | 
| 72 82 | 
             
                    context 'and multi-line' do
         | 
| 73 | 
            -
                      let(:output) {
         | 
| 74 | 
            -
                        {
         | 
| 75 | 
            -
                          'dummy' => [
         | 
| 76 | 
            -
                            ['Some text...'],
         | 
| 77 | 
            -
                            ['Some more text...']
         | 
| 78 | 
            -
                          ]
         | 
| 79 | 
            -
                        }
         | 
| 80 | 
            -
                      }
         | 
| 81 83 | 
             
                      let(:stream) {
         | 
| 82 | 
            -
                        [ | 
| 84 | 
            +
                        [
         | 
| 85 | 
            +
                          ['Some text...'],
         | 
| 86 | 
            +
                          ['Some more text...']
         | 
| 87 | 
            +
                        ]
         | 
| 88 | 
            +
                      }
         | 
| 89 | 
            +
                      let(:composition) {
         | 
| 90 | 
            +
                        [
         | 
| 91 | 
            +
                          [
         | 
| 92 | 
            +
                            "\e[38;2;39m\e[48;2;49m",
         | 
| 93 | 
            +
                            "\e[1;1H               \e[1;1HSome text...",
         | 
| 94 | 
            +
                            "\e[2;1H               \e[2;1HSome more tex...\e[0m",
         | 
| 95 | 
            +
                            "\e[38;2;39m\e[48;2;49m",
         | 
| 96 | 
            +
                            "\e[?25h"
         | 
| 97 | 
            +
                          ]
         | 
| 98 | 
            +
                        ]
         | 
| 83 99 | 
             
                      }
         | 
| 84 100 |  | 
| 85 | 
            -
                      it 'returns  | 
| 86 | 
            -
                        subject.must_equal( | 
| 101 | 
            +
                      it 'returns the enqueued composition' do
         | 
| 102 | 
            +
                        subject.must_equal(composition)
         | 
| 87 103 | 
             
                      end
         | 
| 88 104 | 
             
                    end
         | 
| 89 105 | 
             
                  end
         | 
| @@ -91,92 +107,114 @@ module Vedeu | |
| 91 107 | 
             
                  context 'when styled' do
         | 
| 92 108 | 
             
                    context 'with colour pair' do
         | 
| 93 109 | 
             
                      context 'and a single line' do
         | 
| 94 | 
            -
                        let(:output) {
         | 
| 95 | 
            -
                          {
         | 
| 96 | 
            -
                            'dummy' => [
         | 
| 97 | 
            -
                              [{ colour: [:red, :white] }, 'Some text...']
         | 
| 98 | 
            -
                            ]
         | 
| 99 | 
            -
                          }
         | 
| 100 | 
            -
                        }
         | 
| 101 110 | 
             
                        let(:stream) {
         | 
| 102 | 
            -
                          [ | 
| 111 | 
            +
                          [
         | 
| 112 | 
            +
                            [{ colour: [:red, :white] }, 'Some text...', { colour: :default }]
         | 
| 113 | 
            +
                          ]
         | 
| 114 | 
            +
                        }
         | 
| 115 | 
            +
                        let(:composition) {
         | 
| 116 | 
            +
                          [
         | 
| 117 | 
            +
                            [
         | 
| 118 | 
            +
                              "\e[38;2;39m\e[48;2;49m",
         | 
| 119 | 
            +
                              "\e[1;1H               \e[1;1H\e[38;2;31m\e[48;2;47mSome text...\e[38;5;39m\e[48;5;49m",
         | 
| 120 | 
            +
                              "\e[2;1H               \e[2;1H",
         | 
| 121 | 
            +
                              "\e[38;2;39m\e[48;2;49m",
         | 
| 122 | 
            +
                              "\e[?25h"
         | 
| 123 | 
            +
                            ]
         | 
| 124 | 
            +
                          ]
         | 
| 103 125 | 
             
                        }
         | 
| 104 126 |  | 
| 105 | 
            -
                        it 'returns  | 
| 106 | 
            -
                          subject.must_equal( | 
| 127 | 
            +
                        it 'returns the enqueued composition' do
         | 
| 128 | 
            +
                          subject.must_equal(composition)
         | 
| 107 129 | 
             
                        end
         | 
| 108 130 | 
             
                      end
         | 
| 109 131 |  | 
| 110 132 | 
             
                      context 'and multi-line' do
         | 
| 111 | 
            -
                        let(:output) {
         | 
| 112 | 
            -
                          {
         | 
| 113 | 
            -
                            'dummy' => [
         | 
| 114 | 
            -
                              [{ colour: [:red, :white] },   'Some text...'],
         | 
| 115 | 
            -
                              [{ colour: [:blue, :yellow] }, 'Some more text...']
         | 
| 116 | 
            -
                            ]
         | 
| 117 | 
            -
                          }
         | 
| 118 | 
            -
                        }
         | 
| 119 133 | 
             
                        let(:stream) {
         | 
| 120 | 
            -
                          [ | 
| 134 | 
            +
                          [
         | 
| 135 | 
            +
                            [{ colour: [:red, :white] },   'Some text...'],
         | 
| 136 | 
            +
                            [{ colour: [:blue, :yellow] }, 'Some more text...']
         | 
| 137 | 
            +
                          ]
         | 
| 138 | 
            +
                        }
         | 
| 139 | 
            +
                        let(:composition) {
         | 
| 140 | 
            +
                          [
         | 
| 141 | 
            +
                            [
         | 
| 142 | 
            +
                              "\e[38;2;39m\e[48;2;49m",
         | 
| 143 | 
            +
                              "\e[1;1H               \e[1;1H\e[38;2;31m\e[48;2;47mSome text...",
         | 
| 144 | 
            +
                              "\e[2;1H               \e[2;1H\e[38;2;34m\e[48;2;43mSome more tex...\e[0m",
         | 
| 145 | 
            +
                              "\e[38;2;39m\e[48;2;49m",
         | 
| 146 | 
            +
                              "\e[?25h"
         | 
| 147 | 
            +
                            ]
         | 
| 148 | 
            +
                          ]
         | 
| 121 149 | 
             
                        }
         | 
| 122 150 |  | 
| 123 | 
            -
                        it 'returns  | 
| 124 | 
            -
                          subject.must_equal( | 
| 151 | 
            +
                        it 'returns the enqueued composition' do
         | 
| 152 | 
            +
                          subject.must_equal(composition)
         | 
| 125 153 | 
             
                        end
         | 
| 126 154 | 
             
                      end
         | 
| 127 155 | 
             
                    end
         | 
| 128 156 |  | 
| 129 157 | 
             
                    context 'with a style' do
         | 
| 130 158 | 
             
                      context 'and a single line' do
         | 
| 131 | 
            -
                        let(: | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 159 | 
            +
                        let(:stream)      { [[{ style: :bold }, 'Some text...', { style: :bold_off }]] }
         | 
| 160 | 
            +
                        let(:composition) {
         | 
| 161 | 
            +
                          [
         | 
| 162 | 
            +
                            [
         | 
| 163 | 
            +
                              "\e[38;2;39m\e[48;2;49m",
         | 
| 164 | 
            +
                              "\e[1;1H               \e[1;1H\e[1mSome text...\e[21m",
         | 
| 165 | 
            +
                              "\e[2;1H               \e[2;1H",
         | 
| 166 | 
            +
                              "\e[38;2;39m\e[48;2;49m",
         | 
| 167 | 
            +
                              "\e[?25h"
         | 
| 135 168 | 
             
                            ]
         | 
| 136 | 
            -
                           | 
| 137 | 
            -
                        }
         | 
| 138 | 
            -
                        let(:stream) {
         | 
| 139 | 
            -
                          [[["\e[38;2;39m\e[48;2;49m", "\e[1;1H               \e[1;1H\e[1m\e[2;1H               \e[2;1HSome text...", "\e[38;2;39m\e[48;2;49m", "\e[?25h"], ["\e[38;2;39m\e[48;2;49m", "\e[1;1H               \e[1;1H\e[2;1H               \e[2;1H", "\e[38;2;39m\e[48;2;49m", "\e[?25h"]]]
         | 
| 169 | 
            +
                          ]
         | 
| 140 170 | 
             
                        }
         | 
| 141 171 |  | 
| 142 | 
            -
                        it 'returns  | 
| 143 | 
            -
                          subject.must_equal( | 
| 172 | 
            +
                        it 'returns the enqueued composition' do
         | 
| 173 | 
            +
                          subject.must_equal(composition)
         | 
| 144 174 | 
             
                        end
         | 
| 145 175 | 
             
                      end
         | 
| 146 176 |  | 
| 147 177 | 
             
                      context 'and multi-line' do
         | 
| 148 | 
            -
                        let(: | 
| 149 | 
            -
             | 
| 150 | 
            -
                            'dummy' => [
         | 
| 178 | 
            +
                        let(:stream) {
         | 
| 179 | 
            +
                            [
         | 
| 151 180 | 
             
                              [{ style: :inverse },   'Some text...'],
         | 
| 152 181 | 
             
                              [{ style: :underline }, 'Some more text...']
         | 
| 153 182 | 
             
                            ]
         | 
| 154 | 
            -
                          }
         | 
| 155 183 | 
             
                        }
         | 
| 156 | 
            -
                        let(: | 
| 157 | 
            -
                          [ | 
| 184 | 
            +
                        let(:composition) {
         | 
| 185 | 
            +
                          [
         | 
| 186 | 
            +
                            [
         | 
| 187 | 
            +
                              "\e[38;2;39m\e[48;2;49m",
         | 
| 188 | 
            +
                              "\e[1;1H               \e[1;1H\e[7mSome text...",
         | 
| 189 | 
            +
                              "\e[2;1H               \e[2;1H\e[4mSome more tex...\e[0m",
         | 
| 190 | 
            +
                              "\e[38;2;39m\e[48;2;49m",
         | 
| 191 | 
            +
                              "\e[?25h"
         | 
| 192 | 
            +
                            ]
         | 
| 193 | 
            +
                          ]
         | 
| 158 194 | 
             
                        }
         | 
| 159 195 |  | 
| 160 | 
            -
                        it 'returns  | 
| 161 | 
            -
                          subject.must_equal( | 
| 196 | 
            +
                        it 'returns the enqueued composition' do
         | 
| 197 | 
            +
                          subject.must_equal(composition)
         | 
| 162 198 | 
             
                        end
         | 
| 163 199 | 
             
                      end
         | 
| 164 200 | 
             
                    end
         | 
| 165 201 |  | 
| 166 202 | 
             
                    context 'with an unknown style' do
         | 
| 167 | 
            -
                      let(: | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
             | 
| 203 | 
            +
                      let(:stream)      { [[{ style: :unknown }, 'Some text...']] }
         | 
| 204 | 
            +
                      let(:composition) {
         | 
| 205 | 
            +
                        [
         | 
| 206 | 
            +
                          [
         | 
| 207 | 
            +
                            "\e[38;2;39m\e[48;2;49m",
         | 
| 208 | 
            +
                            "\e[1;1H               \e[1;1HSome text...",
         | 
| 209 | 
            +
                            "\e[2;1H               \e[2;1H",
         | 
| 210 | 
            +
                            "\e[38;2;39m\e[48;2;49m",
         | 
| 211 | 
            +
                            "\e[?25h"
         | 
| 171 212 | 
             
                          ]
         | 
| 172 | 
            -
                         | 
| 173 | 
            -
                      }
         | 
| 174 | 
            -
                      let(:stream) {
         | 
| 175 | 
            -
                        [[["\e[38;2;39m\e[48;2;49m", "\e[1;1H               \e[1;1H\e[2;1H               \e[2;1HSome text...", "\e[38;2;39m\e[48;2;49m", "\e[?25h"], ["\e[38;2;39m\e[48;2;49m", "\e[1;1H               \e[1;1H\e[2;1H               \e[2;1H", "\e[38;2;39m\e[48;2;49m", "\e[?25h"]]]
         | 
| 213 | 
            +
                        ]
         | 
| 176 214 | 
             
                      }
         | 
| 177 215 |  | 
| 178 | 
            -
                      it ' | 
| 179 | 
            -
                        subject.must_equal( | 
| 216 | 
            +
                      it 'returns the enqueued composition' do
         | 
| 217 | 
            +
                        subject.must_equal(composition)
         | 
| 180 218 | 
             
                      end
         | 
| 181 219 | 
             
                    end
         | 
| 182 220 | 
             
                  end
         | 
| @@ -16,6 +16,18 @@ module Vedeu | |
| 16 16 | 
             
                  end
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| 19 | 
            +
                describe '.blink_off' do
         | 
| 20 | 
            +
                  let(:subject) { described_class.blink_off }
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  it 'returns a String' do
         | 
| 23 | 
            +
                    subject.must_be_instance_of(String)
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  it 'returns an escape sequence' do
         | 
| 27 | 
            +
                    subject.must_equal("\e[25m")
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 19 31 | 
             
                describe '.bold' do
         | 
| 20 32 | 
             
                  let(:subject) { described_class.bold }
         | 
| 21 33 |  | 
| @@ -28,6 +40,18 @@ module Vedeu | |
| 28 40 | 
             
                  end
         | 
| 29 41 | 
             
                end
         | 
| 30 42 |  | 
| 43 | 
            +
                describe '.bold_off' do
         | 
| 44 | 
            +
                  let(:subject) { described_class.bold_off }
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  it 'returns a String' do
         | 
| 47 | 
            +
                    subject.must_be_instance_of(String)
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  it 'returns an escape sequence' do
         | 
| 51 | 
            +
                    subject.must_equal("\e[21m")
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 31 55 | 
             
                describe '.clear' do
         | 
| 32 56 | 
             
                  let(:subject) { described_class.clear }
         | 
| 33 57 |  | 
| @@ -76,6 +100,18 @@ module Vedeu | |
| 76 100 | 
             
                  end
         | 
| 77 101 | 
             
                end
         | 
| 78 102 |  | 
| 103 | 
            +
                describe '.positive' do
         | 
| 104 | 
            +
                  let(:subject) { described_class.positive }
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  it 'returns a String' do
         | 
| 107 | 
            +
                    subject.must_be_instance_of(String)
         | 
| 108 | 
            +
                  end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                  it 'returns an escape sequence' do
         | 
| 111 | 
            +
                    subject.must_equal("\e[27m")
         | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
                end
         | 
| 114 | 
            +
             | 
| 79 115 | 
             
                describe '.normal' do
         | 
| 80 116 | 
             
                  let(:subject) { described_class.normal }
         | 
| 81 117 |  | 
| @@ -111,5 +147,17 @@ module Vedeu | |
| 111 147 | 
             
                    subject.must_equal("\e[4m")
         | 
| 112 148 | 
             
                  end
         | 
| 113 149 | 
             
                end
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                describe '.underline_off' do
         | 
| 152 | 
            +
                  let(:subject) { described_class.underline_off }
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                  it 'returns a String' do
         | 
| 155 | 
            +
                    subject.must_be_instance_of(String)
         | 
| 156 | 
            +
                  end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                  it 'returns an escape sequence' do
         | 
| 159 | 
            +
                    subject.must_equal("\e[24m")
         | 
| 160 | 
            +
                  end
         | 
| 161 | 
            +
                end
         | 
| 114 162 | 
             
              end
         | 
| 115 163 | 
             
            end
         | 
| @@ -4,16 +4,12 @@ module Vedeu | |
| 4 4 | 
             
              describe Output do
         | 
| 5 5 | 
             
                let(:described_class) { Output }
         | 
| 6 6 | 
             
                let(:subject)         { described_class.new }
         | 
| 7 | 
            -
                let(:result)          {}
         | 
| 8 | 
            -
                let(:queued_result)   { { 'dummy' => [['queued...']] } }
         | 
| 9 7 |  | 
| 10 8 | 
             
                before do
         | 
| 11 9 | 
             
                  Interface.create({ name: 'dummy', width: 10, height: 2, cursor: true })
         | 
| 12 10 | 
             
                end
         | 
| 13 11 |  | 
| 14 | 
            -
                after  | 
| 15 | 
            -
                  InterfaceRepository.reset
         | 
| 16 | 
            -
                end
         | 
| 12 | 
            +
                after { InterfaceRepository.reset }
         | 
| 17 13 |  | 
| 18 14 | 
             
                it 'returns an Output instance' do
         | 
| 19 15 | 
             
                  subject.must_be_instance_of(Output)
         | 
| @@ -16,6 +16,22 @@ module Vedeu | |
| 16 16 | 
             
                    subject.must_equal('')
         | 
| 17 17 | 
             
                  end
         | 
| 18 18 |  | 
| 19 | 
            +
                  context 'when the style is blink' do
         | 
| 20 | 
            +
                    let(:style) { :blink }
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    it 'returns an escape sequence' do
         | 
| 23 | 
            +
                      subject.must_equal("\e[5m")
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  context 'when the style is blink off' do
         | 
| 28 | 
            +
                    let(:style) { :blink_off }
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    it 'returns an escape sequence' do
         | 
| 31 | 
            +
                      subject.must_equal("\e[25m")
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 19 35 | 
             
                  context 'when the style is bold' do
         | 
| 20 36 | 
             
                    let(:style) { :bold }
         | 
| 21 37 |  | 
| @@ -24,6 +40,14 @@ module Vedeu | |
| 24 40 | 
             
                    end
         | 
| 25 41 | 
             
                  end
         | 
| 26 42 |  | 
| 43 | 
            +
                  context 'when the style is bold off' do
         | 
| 44 | 
            +
                    let(:style) { :bold_off }
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    it 'returns an escape sequence' do
         | 
| 47 | 
            +
                      subject.must_equal("\e[21m")
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 27 51 | 
             
                  context 'when the style is clear' do
         | 
| 28 52 | 
             
                    let(:style) { :clear }
         | 
| 29 53 |  | 
| @@ -48,6 +72,14 @@ module Vedeu | |
| 48 72 | 
             
                    end
         | 
| 49 73 | 
             
                  end
         | 
| 50 74 |  | 
| 75 | 
            +
                  context 'when the style is positive' do
         | 
| 76 | 
            +
                    let(:style) { :positive }
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                    it 'returns an escape sequence' do
         | 
| 79 | 
            +
                      subject.must_equal("\e[27m")
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
             | 
| 51 83 | 
             
                  context 'when the style is reset' do
         | 
| 52 84 | 
             
                    let(:style) { :reset }
         | 
| 53 85 |  | 
| @@ -79,6 +111,14 @@ module Vedeu | |
| 79 111 | 
             
                      subject.must_equal("\e[4m")
         | 
| 80 112 | 
             
                    end
         | 
| 81 113 | 
             
                  end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                  context 'when the style is underline off' do
         | 
| 116 | 
            +
                    let(:style) { :underline_off }
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                    it 'returns an escape sequence' do
         | 
| 119 | 
            +
                      subject.must_equal("\e[24m")
         | 
| 120 | 
            +
                    end
         | 
| 121 | 
            +
                  end
         | 
| 82 122 | 
             
                end
         | 
| 83 123 | 
             
              end
         | 
| 84 124 | 
             
            end
         | 
| @@ -3,15 +3,14 @@ require_relative '../../../test_helper' | |
| 3 3 | 
             
            module Vedeu
         | 
| 4 4 | 
             
              describe InterfaceRepository do
         | 
| 5 5 | 
             
                let(:described_class) { InterfaceRepository }
         | 
| 6 | 
            -
                let(:interface)       { 'dummy' }
         | 
| 7 | 
            -
                let(:value)           { 'dummy' }
         | 
| 8 6 |  | 
| 9 7 | 
             
                before { Interface.create({ name: 'dummy' }) }
         | 
| 10 8 |  | 
| 11 | 
            -
                after | 
| 9 | 
            +
                after  { InterfaceRepository.reset }
         | 
| 12 10 |  | 
| 13 11 | 
             
                describe '.activate' do
         | 
| 14 | 
            -
                  let(:subject) | 
| 12 | 
            +
                  let(:subject)   { described_class.activate(interface) }
         | 
| 13 | 
            +
                  let(:interface) { 'dummy' }
         | 
| 15 14 |  | 
| 16 15 | 
             
                  it 'returns an Array' do
         | 
| 17 16 | 
             
                    subject.must_be_instance_of(Array)
         | 
| @@ -36,6 +35,7 @@ module Vedeu | |
| 36 35 |  | 
| 37 36 | 
             
                describe '.find_by_name' do
         | 
| 38 37 | 
             
                  let(:subject) { described_class.find_by_name(value) }
         | 
| 38 | 
            +
                  let(:value)   { 'dummy' }
         | 
| 39 39 |  | 
| 40 40 | 
             
                  it 'returns an Interface' do
         | 
| 41 41 | 
             
                    subject.must_be_instance_of(Interface)
         | 
| @@ -8,7 +8,7 @@ module Vedeu | |
| 8 8 | 
             
                let(:attributes)         {
         | 
| 9 9 | 
             
                  {
         | 
| 10 10 | 
             
                    name:   'dummy',
         | 
| 11 | 
            -
                    width:   | 
| 11 | 
            +
                    width:  10,
         | 
| 12 12 | 
             
                    height: 5,
         | 
| 13 13 | 
             
                    x:      1,
         | 
| 14 14 | 
             
                    y:      1,
         | 
| @@ -19,7 +19,8 @@ module Vedeu | |
| 19 19 | 
             
                }
         | 
| 20 20 | 
             
                let(:result)             {}
         | 
| 21 21 |  | 
| 22 | 
            -
                 | 
| 22 | 
            +
                before { Interface.create(attributes) }
         | 
| 23 | 
            +
                after  { InterfaceRepository.reset }
         | 
| 23 24 |  | 
| 24 25 | 
             
                it 'returns an Interface instance' do
         | 
| 25 26 | 
             
                  subject.must_be_instance_of(Interface)
         | 
| @@ -48,9 +49,9 @@ module Vedeu | |
| 48 49 | 
             
                describe '#update' do
         | 
| 49 50 | 
             
                  let(:subject) { described_instance.update }
         | 
| 50 51 |  | 
| 51 | 
            -
                  it 'returns a Array' do
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                  end
         | 
| 52 | 
            +
                  # it 'returns a Array' do
         | 
| 53 | 
            +
                  #   subject.must_be_instance_of(Array)
         | 
| 54 | 
            +
                  # end
         | 
| 54 55 | 
             
                end
         | 
| 55 56 |  | 
| 56 57 | 
             
                describe '#geometry' do
         | 
| @@ -26,7 +26,8 @@ module Vedeu | |
| 26 26 | 
             
                describe '.enqueue' do
         | 
| 27 27 | 
             
                  let(:subject) { described_class.enqueue(:result) }
         | 
| 28 28 |  | 
| 29 | 
            -
                   | 
| 29 | 
            +
                  before { described_class.clear }
         | 
| 30 | 
            +
                  after  { described_class.clear }
         | 
| 30 31 |  | 
| 31 32 | 
             
                  it 'returns an Array' do
         | 
| 32 33 | 
             
                    subject.must_be_instance_of(Array)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: vedeu
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.20
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Gavin Laking
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-06- | 
| 11 | 
            +
            date: 2014-06-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: aruba
         |