vedeu 0.0.3 → 0.0.4
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/.gitignore +2 -1
- data/Gemfile +0 -1
- data/Guardfile +0 -8
- data/README.md +33 -1
- data/Rakefile +0 -8
- data/bin/vedeu +9 -0
- data/lib/vedeu.rb +23 -6
- data/lib/vedeu/application.rb +47 -0
- data/lib/vedeu/interface/interface.rb +37 -0
- data/lib/vedeu/interface/interfaces.rb +49 -0
- data/lib/vedeu/output/background.rb +23 -0
- data/lib/vedeu/output/base.rb +49 -0
- data/lib/vedeu/output/colour.rb +30 -0
- data/lib/vedeu/output/compositor.rb +60 -0
- data/lib/vedeu/output/directive.rb +34 -0
- data/lib/vedeu/output/esc.rb +37 -0
- data/lib/vedeu/output/foreground.rb +23 -0
- data/lib/vedeu/output/position.rb +22 -0
- data/lib/vedeu/output/style.rb +32 -0
- data/lib/vedeu/output/translator.rb +62 -0
- data/lib/vedeu/process/command.rb +51 -0
- data/lib/vedeu/process/commands.rb +58 -0
- data/lib/vedeu/process/process.rb +31 -0
- data/lib/vedeu/support/terminal.rb +139 -0
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/application_test.rb +18 -0
- data/test/lib/vedeu/interface/interface_test.rb +76 -0
- data/test/lib/vedeu/interface/interfaces_test.rb +63 -0
- data/test/lib/vedeu/output/background_test.rb +10 -0
- data/test/lib/vedeu/output/base_test.rb +10 -0
- data/test/lib/vedeu/output/colour_test.rb +67 -0
- data/test/lib/vedeu/output/compositor_test.rb +106 -0
- data/test/lib/vedeu/output/directive_test.rb +55 -0
- data/test/lib/vedeu/output/esc_test.rb +71 -0
- data/test/lib/vedeu/output/foreground_test.rb +10 -0
- data/test/lib/vedeu/output/position_test.rb +33 -0
- data/test/lib/vedeu/output/style_test.rb +59 -0
- data/test/lib/vedeu/output/translator_test.rb +52 -0
- data/test/lib/vedeu/process/command_test.rb +54 -0
- data/test/lib/vedeu/process/commands_test.rb +62 -0
- data/test/lib/vedeu/process/process_test.rb +11 -0
- data/test/lib/vedeu/support/terminal_test.rb +140 -0
- data/test/lib/vedeu/version_test.rb +9 -0
- data/test/support/test_app/bin/testapp +32 -0
- data/test/test_helper.rb +4 -0
- data/vedeu.gemspec +0 -6
- metadata +60 -99
- data/.rubocop.yml +0 -2
- data/features/.gitkeep +0 -0
- data/lib/vedeu/buffer.rb +0 -106
- data/lib/vedeu/colour.rb +0 -98
- data/lib/vedeu/terminal.rb +0 -25
- data/test/lib/vedeu/buffer_test.rb +0 -114
- data/test/lib/vedeu/colour_test.rb +0 -57
- data/test/lib/vedeu/terminal_test.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a1399f6a76d69ccbe0719a7b5fe44e830f875df
|
4
|
+
data.tar.gz: e12da3c72a4206b001e7e4edcebf92184bf16cfa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ed55f709b264fea16d85ced18e5b39db468fa0a7e190ef0e05dd46fef640561d83f08efa634e97e498c92175aa042d21458f3609639795761892f376df16fcf
|
7
|
+
data.tar.gz: aad70ea8b6d3486cfeabebf1227b779553dcf224ffc6232e47d5b292515ea86a6eabc9b6a03a18e2433c7ef8f12ee367291beea132f264c68b2d00971eefbbe8
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -1,11 +1,3 @@
|
|
1
|
-
guard 'cucumber' do
|
2
|
-
watch(%r{^features/.+\.feature$})
|
3
|
-
watch(%r{^features/support/.+$}) { 'features' }
|
4
|
-
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) do |m|
|
5
|
-
Dir[File.join("**/#{m[1]}.feature")][0] || 'features'
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
1
|
guard :minitest, all_after_pass: true do
|
10
2
|
watch(%r{^test/(.*)_test\.rb})
|
11
3
|
watch(%r{^lib/(.+)\.rb}) do |m|
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](https://codeclimate.com/github/gavinlaking/vedeu)
|
2
|
+
|
1
3
|
# Vedeu
|
2
4
|
|
3
5
|
TODO: Write a gem description
|
@@ -18,7 +20,37 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
TODO: Write
|
23
|
+
TODO: Write detailed documentation
|
24
|
+
|
25
|
+
## Notes
|
26
|
+
|
27
|
+
Application
|
28
|
+
|-- Interfaces
|
29
|
+
| |-- Dummy < Interface
|
30
|
+
|
|
31
|
+
|-- Terminal
|
32
|
+
|-- Esc
|
33
|
+
|-- Colour
|
34
|
+
|
35
|
+
Base
|
36
|
+
|-- Translator
|
37
|
+
|-- Esc
|
38
|
+
|-- Colour
|
39
|
+
|
40
|
+
Compositor
|
41
|
+
|-- Colour
|
42
|
+
| |-- Foreground < Base
|
43
|
+
| |-- Background < Base
|
44
|
+
| |-- Translator
|
45
|
+
|
|
46
|
+
|-- Esc
|
47
|
+
|-- Colour
|
48
|
+
|
49
|
+
Interface
|
50
|
+
|-- Terminal
|
51
|
+
|-- Esc
|
52
|
+
|-- Colour
|
53
|
+
|
22
54
|
|
23
55
|
## Contributing
|
24
56
|
|
data/Rakefile
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rake/testtask"
|
3
|
-
require 'cucumber'
|
4
|
-
require 'cucumber/rake/task'
|
5
|
-
|
6
|
-
Cucumber::Rake::Task.new(:cucumber) do |t|
|
7
|
-
t.cucumber_opts = "features --format progress"
|
8
|
-
end
|
9
3
|
|
10
4
|
Rake::TestTask.new do |t|
|
11
5
|
t.libs << 'lib/vedeu'
|
@@ -15,5 +9,3 @@ Rake::TestTask.new do |t|
|
|
15
9
|
end
|
16
10
|
|
17
11
|
task :default => :test
|
18
|
-
|
19
|
-
Rake::Task['cucumber'].execute
|
data/bin/vedeu
ADDED
data/lib/vedeu.rb
CHANGED
@@ -1,8 +1,25 @@
|
|
1
1
|
require 'io/console'
|
2
|
-
require
|
3
|
-
require 'vedeu/buffer'
|
4
|
-
require 'vedeu/colour'
|
5
|
-
require 'vedeu/terminal'
|
2
|
+
require 'singleton'
|
6
3
|
|
7
|
-
|
8
|
-
|
4
|
+
require_relative 'vedeu/support/terminal'
|
5
|
+
|
6
|
+
require_relative 'vedeu/output/base'
|
7
|
+
require_relative 'vedeu/output/background'
|
8
|
+
require_relative 'vedeu/output/compositor'
|
9
|
+
require_relative 'vedeu/output/directive'
|
10
|
+
require_relative 'vedeu/output/foreground'
|
11
|
+
require_relative 'vedeu/output/esc'
|
12
|
+
require_relative 'vedeu/output/colour'
|
13
|
+
require_relative 'vedeu/output/position'
|
14
|
+
require_relative 'vedeu/output/style'
|
15
|
+
require_relative 'vedeu/output/translator'
|
16
|
+
|
17
|
+
require_relative 'vedeu/interface/interfaces'
|
18
|
+
require_relative 'vedeu/interface/interface'
|
19
|
+
|
20
|
+
require_relative 'vedeu/process/commands'
|
21
|
+
require_relative 'vedeu/process/command'
|
22
|
+
require_relative 'vedeu/process/process'
|
23
|
+
|
24
|
+
require_relative 'vedeu/application'
|
25
|
+
require_relative 'vedeu/version'
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Application
|
3
|
+
class << self
|
4
|
+
def start(interfaces = nil, options = {}, &block)
|
5
|
+
new(interfaces, options).start(&block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(interfaces = nil, options = {})
|
10
|
+
@interfaces, @options = interfaces, options
|
11
|
+
end
|
12
|
+
|
13
|
+
def start(&block)
|
14
|
+
if block_given?
|
15
|
+
|
16
|
+
else
|
17
|
+
Terminal.open(options) do
|
18
|
+
initial_state
|
19
|
+
|
20
|
+
Process.event_loop
|
21
|
+
end
|
22
|
+
end
|
23
|
+
ensure
|
24
|
+
Terminal.close
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_reader :options
|
30
|
+
|
31
|
+
def initial_state
|
32
|
+
interfaces.initial
|
33
|
+
end
|
34
|
+
|
35
|
+
def interfaces
|
36
|
+
@interfaces ||= Interfaces.default
|
37
|
+
end
|
38
|
+
|
39
|
+
def options
|
40
|
+
defaults.merge!(@options)
|
41
|
+
end
|
42
|
+
|
43
|
+
def defaults
|
44
|
+
{}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Interface
|
3
|
+
def initialize(options = {})
|
4
|
+
@options = options
|
5
|
+
end
|
6
|
+
|
7
|
+
def initial; end
|
8
|
+
|
9
|
+
def main
|
10
|
+
output
|
11
|
+
|
12
|
+
input
|
13
|
+
end
|
14
|
+
|
15
|
+
def output
|
16
|
+
Terminal.hide_cursor
|
17
|
+
end
|
18
|
+
|
19
|
+
def input
|
20
|
+
Terminal.show_cursor
|
21
|
+
end
|
22
|
+
|
23
|
+
def width
|
24
|
+
options[:width] || Terminal.width
|
25
|
+
end
|
26
|
+
|
27
|
+
def height
|
28
|
+
options[:height] || Terminal.height
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :options
|
34
|
+
end
|
35
|
+
|
36
|
+
class Dummy < Interface; end
|
37
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class UndefinedInterface < StandardError; end
|
3
|
+
|
4
|
+
class Interfaces
|
5
|
+
class << self
|
6
|
+
def default
|
7
|
+
new { |io| io.add(:dummy, Dummy) }
|
8
|
+
end
|
9
|
+
|
10
|
+
def define(&block)
|
11
|
+
new(&block)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(&block)
|
16
|
+
@interfaces ||= {}
|
17
|
+
|
18
|
+
yield self if block_given?
|
19
|
+
end
|
20
|
+
|
21
|
+
def add(name, klass, options = {})
|
22
|
+
if valid?(klass)
|
23
|
+
interfaces[name] = Proc.new { klass.new(options) }
|
24
|
+
interfaces
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def show
|
29
|
+
interfaces
|
30
|
+
end
|
31
|
+
|
32
|
+
def initial
|
33
|
+
interfaces.values.map { |io| io.call.initial }
|
34
|
+
end
|
35
|
+
|
36
|
+
def main
|
37
|
+
interfaces.values.map { |io| io.call.main }
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
attr_accessor :interfaces
|
43
|
+
|
44
|
+
def valid?(klass)
|
45
|
+
raise UndefinedInterface unless Object.const_defined?(klass.to_s)
|
46
|
+
true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Background < Base
|
3
|
+
private
|
4
|
+
|
5
|
+
def prefix
|
6
|
+
'48;5;'
|
7
|
+
end
|
8
|
+
|
9
|
+
def codes
|
10
|
+
{
|
11
|
+
black: 40,
|
12
|
+
red: 41,
|
13
|
+
green: 42,
|
14
|
+
yellow: 43,
|
15
|
+
blue: 44,
|
16
|
+
magenta: 45,
|
17
|
+
cyan: 46,
|
18
|
+
white: 47,
|
19
|
+
default: 49,
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Base
|
3
|
+
class << self
|
4
|
+
def escape_sequence(colour = nil)
|
5
|
+
new(colour).escape_sequence
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(colour = nil)
|
10
|
+
@colour = colour
|
11
|
+
end
|
12
|
+
|
13
|
+
def escape_sequence
|
14
|
+
[Esc.esc, prefix, code, suffix].join
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :colour
|
20
|
+
|
21
|
+
def code
|
22
|
+
no_colour || named || html || default
|
23
|
+
end
|
24
|
+
|
25
|
+
def no_colour
|
26
|
+
default unless colour
|
27
|
+
end
|
28
|
+
|
29
|
+
def named
|
30
|
+
codes[colour] || codes[:default] if named?
|
31
|
+
end
|
32
|
+
|
33
|
+
def named?
|
34
|
+
colour.is_a?(Symbol)
|
35
|
+
end
|
36
|
+
|
37
|
+
def html
|
38
|
+
Translator.translate(colour)
|
39
|
+
end
|
40
|
+
|
41
|
+
def default
|
42
|
+
codes[:default]
|
43
|
+
end
|
44
|
+
|
45
|
+
def suffix
|
46
|
+
'm'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Colour
|
3
|
+
class << self
|
4
|
+
def define(pair = [])
|
5
|
+
new(pair).define
|
6
|
+
end
|
7
|
+
alias_method :set, :define
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(pair = [])
|
11
|
+
@pair = pair
|
12
|
+
end
|
13
|
+
|
14
|
+
def define
|
15
|
+
[foreground, background].join
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
attr_reader :pair
|
21
|
+
|
22
|
+
def foreground
|
23
|
+
Foreground.escape_sequence(pair[0])
|
24
|
+
end
|
25
|
+
|
26
|
+
def background
|
27
|
+
Background.escape_sequence(pair[1])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Compositor
|
3
|
+
class << self
|
4
|
+
def write(output = [], options = {})
|
5
|
+
return if output.nil? || output.empty?
|
6
|
+
|
7
|
+
new(output, options).write
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(output = [], options = {})
|
12
|
+
@output, @options = output, options
|
13
|
+
end
|
14
|
+
|
15
|
+
def write
|
16
|
+
parsed.each_with_index do |data, index|
|
17
|
+
clear_line(index)
|
18
|
+
|
19
|
+
write_line(data)
|
20
|
+
end.join("\n")
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :output
|
26
|
+
|
27
|
+
def parsed
|
28
|
+
container = []
|
29
|
+
streams = []
|
30
|
+
output.map do |line|
|
31
|
+
line.map do |stream|
|
32
|
+
if stream.is_a?(String)
|
33
|
+
streams << stream
|
34
|
+
else
|
35
|
+
streams << Directive.enact(stream)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
container << streams.join
|
39
|
+
streams = []
|
40
|
+
end
|
41
|
+
container
|
42
|
+
end
|
43
|
+
|
44
|
+
def clear_line(index)
|
45
|
+
Terminal.clear_line(index)
|
46
|
+
end
|
47
|
+
|
48
|
+
def write_line(data)
|
49
|
+
Terminal.output(data)
|
50
|
+
end
|
51
|
+
|
52
|
+
def options
|
53
|
+
defaults.merge!(@options)
|
54
|
+
end
|
55
|
+
|
56
|
+
def defaults
|
57
|
+
{}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|