vedeu 0.0.24 → 0.0.25
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/README.md +75 -2
- data/bin/composition +3 -1
- data/examples/single_interface_app.rb +46 -0
- data/lib/vedeu.rb +16 -4
- data/lib/vedeu/application.rb +34 -3
- data/lib/vedeu/configuration.rb +31 -0
- data/lib/vedeu/launcher.rb +11 -1
- data/lib/vedeu/output/colour.rb +3 -7
- data/lib/vedeu/output/cursor.rb +2 -6
- data/lib/vedeu/output/esc.rb +0 -1
- data/lib/vedeu/output/geometry.rb +0 -4
- data/lib/vedeu/output/menu.rb +26 -0
- data/lib/vedeu/process/process.rb +1 -1
- data/lib/vedeu/repository/command.rb +5 -4
- data/lib/vedeu/repository/command_repository.rb +5 -6
- data/lib/vedeu/repository/storage.rb +3 -1
- data/lib/vedeu/support/options.rb +4 -0
- data/lib/vedeu/support/queue.rb +0 -1
- data/lib/vedeu/support/terminal.rb +2 -2
- data/lib/vedeu/version.rb +1 -1
- data/logs/.gitkeep +0 -0
- data/test/lib/vedeu/application_test.rb +18 -3
- data/test/lib/vedeu/configuration_test.rb +38 -0
- data/test/lib/vedeu/output/compositor_test.rb +1 -1
- data/test/lib/vedeu/output/cursor_test.rb +4 -4
- data/test/lib/vedeu/output/menu_test.rb +13 -0
- data/test/lib/vedeu/process/process_test.rb +2 -2
- data/test/lib/vedeu/repository/command_test.rb +11 -4
- data/test/lib/vedeu/support/json_parser_test.rb +2 -3
- data/test/test_helper.rb +1 -0
- data/vedeu.gemspec +1 -1
- metadata +12 -10
- data/.rubocop.yml +0 -2
- data/lib/vedeu/output/renderer.rb +0 -6
- data/lib/vedeu/support/event_loop.rb +0 -33
- data/test/lib/vedeu/output/renderer_test.rb +0 -13
- data/test/lib/vedeu/support/event_loop_test.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a6b5d80f3321da207ef185b7437f50b5e31aaaf
|
4
|
+
data.tar.gz: b6ca2fdd18c9912f54bfcf5629d293e9dd2e5468
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6411a9e56a0eb82187442214a9fe95cbde95cdba99370e94888ce60f23dfa1383d9d966d9d3114fcf5e52f769044a6430e69ad7fd4f95d15f6dd13fb83700fe2
|
7
|
+
data.tar.gz: db041a47634fbe157be6f23c4ddb920a6b853aa1be20b4bb6528229e64bc3abdcd535deb9b0965ce3a8191c3673b089c8c94d9ecdf6a4b3d6526a8941676e2c9
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Vedeu
|
4
4
|
|
5
|
-
Vedeu is my attempt at creating a terminal based application framework without the need for Ncurses.
|
5
|
+
Vedeu is my attempt at creating a terminal based application framework without the need for Ncurses. I've tried to make Vedeu as simple and flexible as possible.
|
6
6
|
|
7
7
|
|
8
8
|
## Installation
|
@@ -17,7 +17,80 @@ And then execute:
|
|
17
17
|
|
18
18
|
## Usage
|
19
19
|
|
20
|
-
Expect documentation soon!
|
20
|
+
Expect proper documentation soon!
|
21
|
+
|
22
|
+
### Getting Started
|
23
|
+
|
24
|
+
require 'vedeu'
|
25
|
+
|
26
|
+
class MyApp
|
27
|
+
include Vedeu
|
28
|
+
|
29
|
+
interface :main, { }
|
30
|
+
|
31
|
+
command :exit, { entity: SomeClass,
|
32
|
+
keypress: 'q',
|
33
|
+
keyword: 'quit' }
|
34
|
+
end
|
35
|
+
|
36
|
+
### On Defining Interfaces
|
37
|
+
|
38
|
+
interface :main, {
|
39
|
+
y: 1,
|
40
|
+
x: 1,
|
41
|
+
width: :auto, # will set to terminal width
|
42
|
+
height: 10, # also accepts :auto
|
43
|
+
foreground: :white,
|
44
|
+
background: :black,
|
45
|
+
cursor: false,
|
46
|
+
layer: 0 }
|
47
|
+
|
48
|
+
Referring to the above example, interfaces have a name, and various default attributes.
|
49
|
+
|
50
|
+
`:y` sets the starting row point. (See Geometry)
|
51
|
+
`:x` sets the starting column point.
|
52
|
+
`:width` sets how many characters wide the interface will be.
|
53
|
+
`:height` sets how many characters tall the interface will be.
|
54
|
+
|
55
|
+
`:foreground` sets the default foreground colour. (See Colours)
|
56
|
+
`:background` sets the default background colour.
|
57
|
+
|
58
|
+
`:cursor` a boolean specifying whether the cursor should show.
|
59
|
+
|
60
|
+
`:layer` an integer specifying the z-index of the interface.
|
61
|
+
(See Layers)
|
62
|
+
|
63
|
+
### On Defining Commands
|
64
|
+
|
65
|
+
command :do_something, {
|
66
|
+
entity: SomeClass,
|
67
|
+
keypress: 's',
|
68
|
+
keyword: 'start',
|
69
|
+
arguments: [:some, { :values => :here }, "etc"] }
|
70
|
+
|
71
|
+
As above, commands have a name, a class which performs the action
|
72
|
+
(you define this), and they can be invoked with a keypress or a keyword. At this time, Vedeu will call the `.dispatch` method on your class, passing any arguments you originally defined in the command. In the future, both the method called and the arguments could be dynamic.
|
73
|
+
|
74
|
+
|
75
|
+
### Geometry
|
76
|
+
|
77
|
+
Geometry for Vedeu, as the same for ANSI terminals, is set top-left, which is point 1, 1. Interfaces have internal geometry which is handled automatically. Unless you are doing something special, you will probably only set it on a per-interface basis.
|
78
|
+
|
79
|
+
|
80
|
+
### Colours
|
81
|
+
|
82
|
+
Vedeu uses the standard ANSI terminal colours, though you can also set arbitrary colours using HTML/CSS style notation (i.e. '#aadd00').
|
83
|
+
|
84
|
+
:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white, :default
|
85
|
+
|
86
|
+
|
87
|
+
### Layers
|
88
|
+
|
89
|
+
Vedeu allows the overlaying of interfaces. To render these correctly,
|
90
|
+
Vedeu uses two rules.
|
91
|
+
|
92
|
+
1) The :layer value. 0 would be default, or bottom. 1 would be placed on top of 0. 2 on top of 1, and so on.
|
93
|
+
2) If two interfaces occupy the same 'space', the interface which was defined last, wins.
|
21
94
|
|
22
95
|
|
23
96
|
## Contributing
|
data/bin/composition
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
lib_dir = File.dirname(__FILE__) + '/../lib'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
3
5
|
|
4
6
|
-> { its -> { a } }
|
5
7
|
trap('INT') { exit! }
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'vedeu'
|
4
|
+
|
5
|
+
class SingleInterfaceApp
|
6
|
+
include Vedeu
|
7
|
+
|
8
|
+
interface :main, {
|
9
|
+
y: 1,
|
10
|
+
x: 1,
|
11
|
+
width: :auto,
|
12
|
+
height: :auto,
|
13
|
+
foreground: :white,
|
14
|
+
background: :black,
|
15
|
+
cursor: true,
|
16
|
+
layer: 0 }
|
17
|
+
|
18
|
+
command :refresh, {
|
19
|
+
entity: SingleInterfaceApp,
|
20
|
+
keyword: 'refresh',
|
21
|
+
keypress: 'r',
|
22
|
+
arguments: [] }
|
23
|
+
command :exit, {
|
24
|
+
entity: Vedeu::Exit,
|
25
|
+
keyword: 'exit',
|
26
|
+
keypress: 'q',
|
27
|
+
arguments: [] }
|
28
|
+
|
29
|
+
def self.start
|
30
|
+
Vedeu::Launcher.new(ARGV.dup).execute!
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.dispatch
|
34
|
+
{
|
35
|
+
'main' => [
|
36
|
+
[
|
37
|
+
{
|
38
|
+
:text => "The time is: #{Time.now}.",
|
39
|
+
}
|
40
|
+
]
|
41
|
+
]
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
SingleInterfaceApp.start
|
data/lib/vedeu.rb
CHANGED
@@ -2,11 +2,11 @@ require 'date'
|
|
2
2
|
require 'logger'
|
3
3
|
require 'io/console'
|
4
4
|
require 'oj'
|
5
|
+
require 'optparse'
|
5
6
|
require 'virtus'
|
6
7
|
|
7
8
|
require_relative 'vedeu/input/input'
|
8
9
|
|
9
|
-
require_relative 'vedeu/support/event_loop'
|
10
10
|
require_relative 'vedeu/support/exit'
|
11
11
|
require_relative 'vedeu/support/json_parser'
|
12
12
|
require_relative 'vedeu/support/queue'
|
@@ -27,11 +27,11 @@ require_relative 'vedeu/output/directive'
|
|
27
27
|
require_relative 'vedeu/output/foreground'
|
28
28
|
require_relative 'vedeu/output/geometry'
|
29
29
|
require_relative 'vedeu/output/layer'
|
30
|
+
require_relative 'vedeu/output/menu'
|
30
31
|
require_relative 'vedeu/output/esc'
|
31
32
|
require_relative 'vedeu/output/colour'
|
32
33
|
require_relative 'vedeu/output/output'
|
33
34
|
require_relative 'vedeu/output/position'
|
34
|
-
require_relative 'vedeu/output/renderer'
|
35
35
|
require_relative 'vedeu/output/style'
|
36
36
|
require_relative 'vedeu/output/translator'
|
37
37
|
require_relative 'vedeu/output/wordwrap'
|
@@ -48,6 +48,7 @@ require_relative 'vedeu/repository/dummy_interface'
|
|
48
48
|
require_relative 'vedeu/repository/dummy_command'
|
49
49
|
|
50
50
|
require_relative 'vedeu/application'
|
51
|
+
require_relative 'vedeu/configuration'
|
51
52
|
require_relative 'vedeu/launcher'
|
52
53
|
require_relative 'vedeu/version'
|
53
54
|
|
@@ -60,9 +61,20 @@ module Vedeu
|
|
60
61
|
end
|
61
62
|
end
|
62
63
|
end
|
63
|
-
# :nocov:
|
64
64
|
|
65
|
-
|
65
|
+
def self.debug(filename = 'profile.html', &block)
|
66
|
+
RubyProf.start
|
67
|
+
|
68
|
+
yield
|
69
|
+
|
70
|
+
result = RubyProf.stop
|
71
|
+
result.eliminate_methods!([/^Array/, /^Hash/])
|
72
|
+
|
73
|
+
File.open(Vedeu.root_path + '/tmp/' + filename, 'w') do |file|
|
74
|
+
RubyProf::CallStackPrinter.new(result).print(file)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
66
78
|
def self.included(receiver)
|
67
79
|
receiver.extend(ClassMethods)
|
68
80
|
end
|
data/lib/vedeu/application.rb
CHANGED
@@ -7,14 +7,14 @@ module Vedeu
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def initialize(options = {})
|
10
|
-
@options = options
|
10
|
+
@options = options || {}
|
11
11
|
end
|
12
12
|
|
13
13
|
def start
|
14
14
|
Terminal.open(options) do
|
15
15
|
Output.render
|
16
16
|
|
17
|
-
|
17
|
+
runner { main_sequence }
|
18
18
|
end
|
19
19
|
ensure
|
20
20
|
Terminal.close
|
@@ -24,12 +24,43 @@ module Vedeu
|
|
24
24
|
|
25
25
|
attr_reader :options
|
26
26
|
|
27
|
+
def runner
|
28
|
+
if interactive?
|
29
|
+
interactive { yield }
|
30
|
+
else
|
31
|
+
run_once { yield }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def main_sequence
|
36
|
+
Input.capture
|
37
|
+
|
38
|
+
Process.evaluate
|
39
|
+
|
40
|
+
Output.render
|
41
|
+
end
|
42
|
+
|
43
|
+
def interactive?
|
44
|
+
options.fetch(:interactive)
|
45
|
+
end
|
46
|
+
|
47
|
+
def interactive
|
48
|
+
loop { yield }
|
49
|
+
rescue StopIteration
|
50
|
+
end
|
51
|
+
|
52
|
+
def run_once
|
53
|
+
yield
|
54
|
+
end
|
55
|
+
|
27
56
|
def options
|
28
57
|
defaults.merge!(@options)
|
29
58
|
end
|
30
59
|
|
31
60
|
def defaults
|
32
|
-
{
|
61
|
+
{
|
62
|
+
interactive: true
|
63
|
+
}
|
33
64
|
end
|
34
65
|
end
|
35
66
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Configuration
|
3
|
+
class << self
|
4
|
+
def configure(args = [])
|
5
|
+
new(args).configure
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(args = [])
|
10
|
+
@args = args || []
|
11
|
+
@options = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def configure
|
15
|
+
parser = OptionParser.new do |opts|
|
16
|
+
opts.banner = "Usage: #{$PROGRAM_NAME} [options]"
|
17
|
+
|
18
|
+
opts.on("-1", "--run-once", "Run application once.") do
|
19
|
+
@options[:interactive] = false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
parser.parse!(args)
|
23
|
+
|
24
|
+
options
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_accessor :args, :options
|
30
|
+
end
|
31
|
+
end
|
data/lib/vedeu/launcher.rb
CHANGED
@@ -16,7 +16,7 @@ module Vedeu
|
|
16
16
|
def execute!
|
17
17
|
$stdin, $stdout, $stderr = @stdin, @stdout, @stderr
|
18
18
|
|
19
|
-
Application.start
|
19
|
+
Application.start(configuration)
|
20
20
|
|
21
21
|
@exit_code = 0
|
22
22
|
ensure
|
@@ -24,5 +24,15 @@ module Vedeu
|
|
24
24
|
@kernel.exit(@exit_code)
|
25
25
|
end
|
26
26
|
# :nocov:
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :argv
|
31
|
+
|
32
|
+
# :nocov:
|
33
|
+
def configuration
|
34
|
+
Configuration.configure(argv)
|
35
|
+
end
|
36
|
+
# :nocov:
|
27
37
|
end
|
28
38
|
end
|
data/lib/vedeu/output/colour.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
module Vedeu
|
2
2
|
class Colour
|
3
3
|
class << self
|
4
|
-
def
|
4
|
+
def set(pair = [])
|
5
5
|
return '' if pair.empty?
|
6
6
|
|
7
|
-
new(pair).
|
7
|
+
new(pair).set
|
8
8
|
end
|
9
|
-
alias_method :set, :define
|
10
9
|
|
11
10
|
def reset
|
12
11
|
new.reset
|
@@ -17,10 +16,9 @@ module Vedeu
|
|
17
16
|
@pair = pair || []
|
18
17
|
end
|
19
18
|
|
20
|
-
def
|
19
|
+
def set
|
21
20
|
[foreground, background].join
|
22
21
|
end
|
23
|
-
alias_method :set, :define
|
24
22
|
|
25
23
|
def reset
|
26
24
|
[foreground(:default), background(:default)].join
|
@@ -29,12 +27,10 @@ module Vedeu
|
|
29
27
|
def foreground(value = pair[0])
|
30
28
|
@foreground ||= Foreground.escape_sequence(value)
|
31
29
|
end
|
32
|
-
alias_method :fg, :foreground
|
33
30
|
|
34
31
|
def background(value = pair[1])
|
35
32
|
@background ||= Background.escape_sequence(value)
|
36
33
|
end
|
37
|
-
alias_method :bg, :background
|
38
34
|
|
39
35
|
private
|
40
36
|
|
data/lib/vedeu/output/cursor.rb
CHANGED
@@ -25,29 +25,25 @@ module Vedeu
|
|
25
25
|
def right(count = 1)
|
26
26
|
[Esc.esc, "#{count || 1}", 'C'].join
|
27
27
|
end
|
28
|
-
alias_method :forward, :right
|
29
28
|
|
30
29
|
def left(count = 1)
|
31
30
|
[Esc.esc, "#{count || 1}", 'D'].join
|
32
31
|
end
|
33
|
-
alias_method :backward, :left
|
34
32
|
|
35
33
|
def save
|
36
34
|
[Esc.esc, 's'].join
|
37
35
|
end
|
38
36
|
|
39
|
-
def
|
37
|
+
def restore
|
40
38
|
[Esc.esc, 'u'].join
|
41
39
|
end
|
42
|
-
alias_method :restore, :unsave
|
43
40
|
|
44
41
|
def save_all
|
45
42
|
[Esc.esc, '7'].join
|
46
43
|
end
|
47
44
|
|
48
|
-
def
|
45
|
+
def restore_all
|
49
46
|
[Esc.esc, '8'].join
|
50
47
|
end
|
51
|
-
alias_method :restore_all, :unsave_all
|
52
48
|
end
|
53
49
|
end
|
data/lib/vedeu/output/esc.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Vedeu
|
2
|
+
class Menu
|
3
|
+
attr_accessor :label, :value
|
4
|
+
|
5
|
+
def initialize(attributes = {})
|
6
|
+
@attributes = attributes || {}
|
7
|
+
end
|
8
|
+
|
9
|
+
def label
|
10
|
+
attributes[:label] || defaults[:label]
|
11
|
+
end
|
12
|
+
|
13
|
+
def value
|
14
|
+
attributes[:value] || defaults[:value]
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def defaults
|
20
|
+
{
|
21
|
+
label: '',
|
22
|
+
value: ''
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -2,10 +2,11 @@ module Vedeu
|
|
2
2
|
class Command
|
3
3
|
include Virtus.model
|
4
4
|
|
5
|
-
attribute :name,
|
6
|
-
attribute :entity,
|
7
|
-
attribute :keyword,
|
8
|
-
attribute :keypress,
|
5
|
+
attribute :name, String
|
6
|
+
attribute :entity, Class
|
7
|
+
attribute :keyword, String, default: ''
|
8
|
+
attribute :keypress, String, default: ''
|
9
|
+
attribute :arguments, Array, default: []
|
9
10
|
|
10
11
|
def execute(args = [])
|
11
12
|
executable.call(*args)
|
@@ -22,13 +22,12 @@ module Vedeu
|
|
22
22
|
|
23
23
|
# :nocov:
|
24
24
|
module ClassMethods
|
25
|
-
def command(name,
|
25
|
+
def command(name, options = {})
|
26
|
+
command_name = name.is_a?(Symbol) ? name.to_s : name
|
27
|
+
|
26
28
|
CommandRepository.create({
|
27
|
-
name:
|
28
|
-
|
29
|
-
keypress: keypress,
|
30
|
-
keyword: keyword
|
31
|
-
})
|
29
|
+
name: command_name
|
30
|
+
}.merge!(options))
|
32
31
|
end
|
33
32
|
end
|
34
33
|
# :nocov:
|
data/lib/vedeu/support/queue.rb
CHANGED
@@ -43,7 +43,6 @@ module Vedeu
|
|
43
43
|
yield instance
|
44
44
|
end if block_given?
|
45
45
|
end
|
46
|
-
alias_method :open_cooked, :cooked
|
47
46
|
|
48
47
|
def raw(instance, &block)
|
49
48
|
console.raw do
|
@@ -52,7 +51,6 @@ module Vedeu
|
|
52
51
|
yield instance
|
53
52
|
end if block_given?
|
54
53
|
end
|
55
|
-
alias_method :open_raw, :raw
|
56
54
|
# :nocov:
|
57
55
|
|
58
56
|
def console
|
@@ -81,6 +79,8 @@ module Vedeu
|
|
81
79
|
end
|
82
80
|
|
83
81
|
def reset_position
|
82
|
+
puts
|
83
|
+
|
84
84
|
clear_line(height - 1)
|
85
85
|
end
|
86
86
|
end
|
data/lib/vedeu/version.rb
CHANGED
data/logs/.gitkeep
ADDED
File without changes
|
@@ -16,12 +16,27 @@ module Vedeu
|
|
16
16
|
before do
|
17
17
|
Terminal.stubs(:open).yields(self)
|
18
18
|
Output.stubs(:render)
|
19
|
-
|
19
|
+
Input.stubs(:capture)
|
20
|
+
Process.stubs(:evaluate)
|
20
21
|
Terminal.stubs(:close)
|
21
22
|
end
|
22
23
|
|
23
|
-
|
24
|
-
|
24
|
+
context 'when the application should run interactively' do
|
25
|
+
let(:options) { { interactive: true } }
|
26
|
+
|
27
|
+
before { Process.stubs(:evaluate).raises(StopIteration) }
|
28
|
+
|
29
|
+
it 'returns a NilClass' do
|
30
|
+
subject.must_be_instance_of(NilClass)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when the application should run once' do
|
35
|
+
let(:options) { { interactive: false } }
|
36
|
+
|
37
|
+
it 'returns a NilClass' do
|
38
|
+
subject.must_be_instance_of(NilClass)
|
39
|
+
end
|
25
40
|
end
|
26
41
|
end
|
27
42
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
describe Configuration do
|
5
|
+
let(:described_class) { Configuration }
|
6
|
+
let(:described_instance) { described_class.new(args) }
|
7
|
+
let(:args) { [] }
|
8
|
+
let(:subject) { described_instance }
|
9
|
+
|
10
|
+
it 'returns a Configuration instance' do
|
11
|
+
subject.must_be_instance_of(Configuration)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'sets an instance variable' do
|
15
|
+
subject.instance_variable_get('@args').must_equal([])
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'sets an instance variable' do
|
19
|
+
subject.instance_variable_get('@options').must_equal({})
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#configure' do
|
23
|
+
let(:subject) { described_class.configure(args) }
|
24
|
+
|
25
|
+
it 'returns a Hash' do
|
26
|
+
subject.must_be_instance_of(Hash)
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when the option is --run-once' do
|
30
|
+
let(:args) { ['--run-once'] }
|
31
|
+
|
32
|
+
it 'returns the options which instructs Vedeu to run once' do
|
33
|
+
subject.must_equal({ interactive: false })
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -136,8 +136,8 @@ module Vedeu
|
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
|
-
describe '.
|
140
|
-
let(:subject) { described_class.
|
139
|
+
describe '.restore' do
|
140
|
+
let(:subject) { described_class.restore }
|
141
141
|
|
142
142
|
it 'returns a String' do
|
143
143
|
subject.must_be_instance_of(String)
|
@@ -160,8 +160,8 @@ module Vedeu
|
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
|
-
describe '.
|
164
|
-
let(:subject) { described_class.
|
163
|
+
describe '.restore_all' do
|
164
|
+
let(:subject) { described_class.restore_all }
|
165
165
|
|
166
166
|
it 'returns a String' do
|
167
167
|
subject.must_be_instance_of(String)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
describe Menu do
|
5
|
+
let(:described_class) { Menu }
|
6
|
+
let(:described_instance) { described_class.new(index) }
|
7
|
+
let(:index) {}
|
8
|
+
|
9
|
+
it 'returns a Menu instance' do
|
10
|
+
described_instance.must_be_instance_of(Menu)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -48,7 +48,7 @@ module Vedeu
|
|
48
48
|
let(:result) { :stop }
|
49
49
|
|
50
50
|
it 'raises an exception' do
|
51
|
-
proc { subject }.must_raise(
|
51
|
+
proc { subject }.must_raise(StopIteration)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -74,7 +74,7 @@ module Vedeu
|
|
74
74
|
let(:result) { :stop }
|
75
75
|
|
76
76
|
it 'raises an exception' do
|
77
|
-
proc { subject }.must_raise(
|
77
|
+
proc { subject }.must_raise(StopIteration)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -7,10 +7,11 @@ module Vedeu
|
|
7
7
|
let(:subject) { described_instance }
|
8
8
|
let(:attributes) {
|
9
9
|
{
|
10
|
-
name:
|
11
|
-
entity:
|
12
|
-
keyword:
|
13
|
-
keypress:
|
10
|
+
name: 'dummy',
|
11
|
+
entity: DummyCommand,
|
12
|
+
keyword: "dummy",
|
13
|
+
keypress: "d",
|
14
|
+
arguments: []
|
14
15
|
}
|
15
16
|
}
|
16
17
|
|
@@ -42,6 +43,12 @@ module Vedeu
|
|
42
43
|
subject.keyword.must_equal('dummy')
|
43
44
|
end
|
44
45
|
|
46
|
+
it 'has an arguments attribute' do
|
47
|
+
subject.arguments.must_be_instance_of(Array)
|
48
|
+
|
49
|
+
subject.arguments.must_equal([])
|
50
|
+
end
|
51
|
+
|
45
52
|
describe '#execute' do
|
46
53
|
let(:subject) { described_instance.execute(args) }
|
47
54
|
let(:args) { [] }
|
@@ -3,8 +3,7 @@ require_relative '../../../test_helper'
|
|
3
3
|
module Vedeu
|
4
4
|
describe JSONParser do
|
5
5
|
let(:described_class) { JSONParser }
|
6
|
-
let(:
|
7
|
-
let(:subject) { described_instance }
|
6
|
+
let(:subject) { described_class.new(json) }
|
8
7
|
let(:json) { "[]" }
|
9
8
|
|
10
9
|
it 'returns a JSONParser instance' do
|
@@ -24,7 +23,7 @@ module Vedeu
|
|
24
23
|
end
|
25
24
|
|
26
25
|
describe '#parse' do
|
27
|
-
let(:subject) {
|
26
|
+
let(:subject) { described_class.parse(json) }
|
28
27
|
|
29
28
|
context 'when the JSON contains a single interface' do
|
30
29
|
let(:json) { File.read('test/support/single_interface.json') }
|
data/test/test_helper.rb
CHANGED
data/vedeu.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency 'mocha', '1.1.0'
|
29
29
|
spec.add_development_dependency 'pry', '0.10.0'
|
30
30
|
spec.add_development_dependency 'rake', '10.3.2'
|
31
|
-
spec.add_development_dependency '
|
31
|
+
spec.add_development_dependency 'ruby-prof'
|
32
32
|
spec.add_development_dependency 'simplecov', '0.8.2'
|
33
33
|
|
34
34
|
spec.add_dependency "oj"
|
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.25
|
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-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aruba
|
@@ -165,7 +165,7 @@ dependencies:
|
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 10.3.2
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
168
|
+
name: ruby-prof
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - ">="
|
@@ -230,7 +230,6 @@ extensions: []
|
|
230
230
|
extra_rdoc_files: []
|
231
231
|
files:
|
232
232
|
- ".gitignore"
|
233
|
-
- ".rubocop.yml"
|
234
233
|
- ".ruby-version"
|
235
234
|
- Gemfile
|
236
235
|
- Guardfile
|
@@ -250,11 +249,13 @@ files:
|
|
250
249
|
- documentation/diagram/StyleDirective.png
|
251
250
|
- documentation/diagram/rr-1.35.837.png
|
252
251
|
- documentation/index.html
|
252
|
+
- examples/single_interface_app.rb
|
253
253
|
- features/getting_started.feature
|
254
254
|
- features/step_definitions/vedeu_steps.rb
|
255
255
|
- features/support/env.rb
|
256
256
|
- lib/vedeu.rb
|
257
257
|
- lib/vedeu/application.rb
|
258
|
+
- lib/vedeu/configuration.rb
|
258
259
|
- lib/vedeu/input/input.rb
|
259
260
|
- lib/vedeu/launcher.rb
|
260
261
|
- lib/vedeu/output/background.rb
|
@@ -273,9 +274,9 @@ files:
|
|
273
274
|
- lib/vedeu/output/foreground.rb
|
274
275
|
- lib/vedeu/output/geometry.rb
|
275
276
|
- lib/vedeu/output/layer.rb
|
277
|
+
- lib/vedeu/output/menu.rb
|
276
278
|
- lib/vedeu/output/output.rb
|
277
279
|
- lib/vedeu/output/position.rb
|
278
|
-
- lib/vedeu/output/renderer.rb
|
279
280
|
- lib/vedeu/output/style.rb
|
280
281
|
- lib/vedeu/output/translator.rb
|
281
282
|
- lib/vedeu/output/wordwrap.rb
|
@@ -288,13 +289,15 @@ files:
|
|
288
289
|
- lib/vedeu/repository/interface_repository.rb
|
289
290
|
- lib/vedeu/repository/repository.rb
|
290
291
|
- lib/vedeu/repository/storage.rb
|
291
|
-
- lib/vedeu/support/event_loop.rb
|
292
292
|
- lib/vedeu/support/exit.rb
|
293
293
|
- lib/vedeu/support/json_parser.rb
|
294
|
+
- lib/vedeu/support/options.rb
|
294
295
|
- lib/vedeu/support/queue.rb
|
295
296
|
- lib/vedeu/support/terminal.rb
|
296
297
|
- lib/vedeu/version.rb
|
298
|
+
- logs/.gitkeep
|
297
299
|
- test/lib/vedeu/application_test.rb
|
300
|
+
- test/lib/vedeu/configuration_test.rb
|
298
301
|
- test/lib/vedeu/input/input_test.rb
|
299
302
|
- test/lib/vedeu/launcher_test.rb
|
300
303
|
- test/lib/vedeu/output/background_test.rb
|
@@ -313,9 +316,9 @@ files:
|
|
313
316
|
- test/lib/vedeu/output/foreground_test.rb
|
314
317
|
- test/lib/vedeu/output/geometry_test.rb
|
315
318
|
- test/lib/vedeu/output/layer_test.rb
|
319
|
+
- test/lib/vedeu/output/menu_test.rb
|
316
320
|
- test/lib/vedeu/output/output_test.rb
|
317
321
|
- test/lib/vedeu/output/position_test.rb
|
318
|
-
- test/lib/vedeu/output/renderer_test.rb
|
319
322
|
- test/lib/vedeu/output/style_test.rb
|
320
323
|
- test/lib/vedeu/output/translator_test.rb
|
321
324
|
- test/lib/vedeu/output/wordwrap_test.rb
|
@@ -328,7 +331,6 @@ files:
|
|
328
331
|
- test/lib/vedeu/repository/interface_test.rb
|
329
332
|
- test/lib/vedeu/repository/repository_test.rb
|
330
333
|
- test/lib/vedeu/repository/storage_test.rb
|
331
|
-
- test/lib/vedeu/support/event_loop_test.rb
|
332
334
|
- test/lib/vedeu/support/exit_test.rb
|
333
335
|
- test/lib/vedeu/support/json_parser_test.rb
|
334
336
|
- test/lib/vedeu/support/queue_test.rb
|
@@ -372,6 +374,7 @@ test_files:
|
|
372
374
|
- features/step_definitions/vedeu_steps.rb
|
373
375
|
- features/support/env.rb
|
374
376
|
- test/lib/vedeu/application_test.rb
|
377
|
+
- test/lib/vedeu/configuration_test.rb
|
375
378
|
- test/lib/vedeu/input/input_test.rb
|
376
379
|
- test/lib/vedeu/launcher_test.rb
|
377
380
|
- test/lib/vedeu/output/background_test.rb
|
@@ -390,9 +393,9 @@ test_files:
|
|
390
393
|
- test/lib/vedeu/output/foreground_test.rb
|
391
394
|
- test/lib/vedeu/output/geometry_test.rb
|
392
395
|
- test/lib/vedeu/output/layer_test.rb
|
396
|
+
- test/lib/vedeu/output/menu_test.rb
|
393
397
|
- test/lib/vedeu/output/output_test.rb
|
394
398
|
- test/lib/vedeu/output/position_test.rb
|
395
|
-
- test/lib/vedeu/output/renderer_test.rb
|
396
399
|
- test/lib/vedeu/output/style_test.rb
|
397
400
|
- test/lib/vedeu/output/translator_test.rb
|
398
401
|
- test/lib/vedeu/output/wordwrap_test.rb
|
@@ -405,7 +408,6 @@ test_files:
|
|
405
408
|
- test/lib/vedeu/repository/interface_test.rb
|
406
409
|
- test/lib/vedeu/repository/repository_test.rb
|
407
410
|
- test/lib/vedeu/repository/storage_test.rb
|
408
|
-
- test/lib/vedeu/support/event_loop_test.rb
|
409
411
|
- test/lib/vedeu/support/exit_test.rb
|
410
412
|
- test/lib/vedeu/support/json_parser_test.rb
|
411
413
|
- test/lib/vedeu/support/queue_test.rb
|
data/.rubocop.yml
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
class Collapse < StandardError; end
|
3
|
-
|
4
|
-
class EventLoop
|
5
|
-
class << self
|
6
|
-
def main_sequence
|
7
|
-
new.main_sequence
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@running = true
|
13
|
-
end
|
14
|
-
|
15
|
-
# :nocov:
|
16
|
-
def main_sequence
|
17
|
-
while @running do
|
18
|
-
Input.capture
|
19
|
-
|
20
|
-
Process.evaluate
|
21
|
-
|
22
|
-
Output.render
|
23
|
-
end
|
24
|
-
rescue Collapse
|
25
|
-
stop
|
26
|
-
end
|
27
|
-
# :nocov:
|
28
|
-
|
29
|
-
def stop
|
30
|
-
@running = false
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
describe Renderer do
|
5
|
-
let(:described_class) { Renderer }
|
6
|
-
let(:described_instance) { described_class.new }
|
7
|
-
let(:subject) { described_instance }
|
8
|
-
|
9
|
-
it 'returns a Renderer instance' do
|
10
|
-
subject.must_be_instance_of(Renderer)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require_relative '../../../test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
describe EventLoop do
|
5
|
-
let(:described_class) { EventLoop }
|
6
|
-
let(:defined) { mock }
|
7
|
-
let(:subject) { described_class.new }
|
8
|
-
|
9
|
-
before do
|
10
|
-
Input.stubs(:capture)
|
11
|
-
Process.stubs(:evaluate).raises(Collapse)
|
12
|
-
Output.stubs(:render)
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'returns an EventLoop instance' do
|
16
|
-
subject.must_be_instance_of(EventLoop)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'sets an instance variable' do
|
20
|
-
subject.instance_variable_get('@running').must_equal(true)
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '.main_sequence' do
|
24
|
-
let(:subject) { described_class.main_sequence }
|
25
|
-
|
26
|
-
it 'returns a FalseClass' do
|
27
|
-
subject.must_be_instance_of(FalseClass)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#stop' do
|
32
|
-
let(:subject) { described_class.new.stop }
|
33
|
-
|
34
|
-
it 'returns a FalseClass' do
|
35
|
-
subject.must_be_instance_of(FalseClass)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|