vedeu 0.6.7 → 0.6.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/docs/dsl.md +4 -4
- data/lib/vedeu/all.rb +6 -18
- data/lib/vedeu/api.rb +14 -13
- data/lib/vedeu/bindings/system.rb +5 -4
- data/lib/vedeu/buffers/virtual_buffer.rb +13 -11
- data/lib/vedeu/configuration/api.rb +4 -3
- data/lib/vedeu/cursors/cursor.rb +23 -18
- data/lib/vedeu/distributed/client.rb +11 -6
- data/lib/vedeu/distributed/server.rb +4 -3
- data/lib/vedeu/dsl/keymap.rb +6 -6
- data/lib/vedeu/editor/all.rb +19 -0
- data/lib/vedeu/{input/editor → editor}/capture.rb +1 -1
- data/lib/vedeu/{input/editor → editor}/cropper.rb +0 -0
- data/lib/vedeu/{input/editor → editor}/cursor.rb +0 -0
- data/lib/vedeu/{input/editor → editor}/document.rb +0 -0
- data/lib/vedeu/{input/editor → editor}/documents.rb +0 -0
- data/lib/vedeu/{input/editor → editor}/editor.rb +0 -0
- data/lib/vedeu/{input/editor → editor}/insert.rb +0 -0
- data/lib/vedeu/{input/editor → editor}/line.rb +0 -0
- data/lib/vedeu/{input/editor → editor}/lines.rb +0 -0
- data/lib/vedeu/error.rb +21 -18
- data/lib/vedeu/esc/borders.rb +6 -4
- data/lib/vedeu/esc/colours.rb +13 -12
- data/lib/vedeu/esc/esc.rb +11 -10
- data/lib/vedeu/input/all.rb +15 -0
- data/lib/vedeu/input/input.rb +55 -52
- data/lib/vedeu/input/key.rb +36 -30
- data/lib/vedeu/input/keymap.rb +101 -92
- data/lib/vedeu/input/keymaps.rb +10 -6
- data/lib/vedeu/input/keys.rb +8 -4
- data/lib/vedeu/input/mapper.rb +125 -121
- data/lib/vedeu/input/translator.rb +159 -0
- data/lib/vedeu/internal_api.rb +16 -15
- data/lib/vedeu/logging/all.rb +13 -0
- data/lib/vedeu/logging/debug.rb +84 -0
- data/lib/vedeu/logging/lockless_log_device.rb +65 -0
- data/lib/vedeu/logging/log.rb +179 -0
- data/lib/vedeu/logging/mono_logger.rb +26 -0
- data/lib/vedeu/logging/timer.rb +68 -0
- data/lib/vedeu/menus/all.rb +12 -0
- data/lib/vedeu/{dsl/menu.rb → menus/dsl.rb} +19 -18
- data/lib/vedeu/menus/menu.rb +234 -0
- data/lib/vedeu/{null/menu.rb → menus/null.rb} +6 -6
- data/lib/vedeu/menus/repository.rb +18 -0
- data/lib/vedeu/models/cell.rb +62 -55
- data/lib/vedeu/models/escape.rb +55 -50
- data/lib/vedeu/models/page.rb +74 -69
- data/lib/vedeu/models/row.rb +55 -51
- data/lib/vedeu/models/views/all.rb +1 -0
- data/lib/vedeu/models/views/char.rb +1 -1
- data/lib/vedeu/models/views/html_char.rb +165 -0
- data/lib/vedeu/output/renderers/html.rb +5 -4
- data/lib/vedeu/repositories/model.rb +2 -0
- data/lib/vedeu/runtime/application.rb +110 -103
- data/lib/vedeu/runtime/bootstrap.rb +109 -103
- data/lib/vedeu/runtime/flags.rb +45 -41
- data/lib/vedeu/runtime/launcher.rb +1 -1
- data/lib/vedeu/runtime/main_loop.rb +51 -46
- data/lib/vedeu/runtime/traps.rb +20 -16
- data/lib/vedeu/version.rb +1 -1
- data/lib/vedeu.rb +2 -2
- data/test/lib/vedeu/buffers/virtual_buffer_test.rb +1 -1
- data/test/lib/vedeu/cursors/cursor_test.rb +11 -5
- data/test/lib/vedeu/dsl/interface_test.rb +1 -1
- data/test/lib/vedeu/dsl/keymap_test.rb +2 -2
- data/test/lib/vedeu/{input/editor → editor}/capture_test.rb +0 -0
- data/test/lib/vedeu/{input/editor → editor}/cropper_test.rb +0 -0
- data/test/lib/vedeu/{input/editor → editor}/cursor_test.rb +0 -0
- data/test/lib/vedeu/{input/editor → editor}/document_test.rb +0 -0
- data/test/lib/vedeu/{input/editor → editor}/documents_test.rb +0 -0
- data/test/lib/vedeu/{input/editor → editor}/editor_test.rb +0 -0
- data/test/lib/vedeu/{input/editor → editor}/insert_test.rb +0 -0
- data/test/lib/vedeu/{input/editor → editor}/line_test.rb +0 -0
- data/test/lib/vedeu/{input/editor → editor}/lines_test.rb +0 -0
- data/test/lib/vedeu/input/input_test.rb +58 -54
- data/test/lib/vedeu/input/key_test.rb +29 -25
- data/test/lib/vedeu/input/keymap_test.rb +74 -70
- data/test/lib/vedeu/input/keymaps_test.rb +8 -4
- data/test/lib/vedeu/input/keys_test.rb +12 -8
- data/test/lib/vedeu/input/mapper_test.rb +64 -56
- data/test/lib/vedeu/input/translator_test.rb +36 -0
- data/test/lib/vedeu/logging/debug_test.rb +39 -0
- data/test/lib/vedeu/logging/lockless_log_device_test.rb +42 -0
- data/test/lib/vedeu/logging/log_test.rb +52 -0
- data/test/lib/vedeu/logging/mono_logger_test.rb +43 -0
- data/test/lib/vedeu/logging/timer_test.rb +44 -0
- data/test/lib/vedeu/{dsl/menu_test.rb → menus/dsl_test.rb} +6 -6
- data/test/lib/vedeu/menus/menu_test.rb +305 -0
- data/test/lib/vedeu/{null/menu_test.rb → menus/null_test.rb} +5 -5
- data/test/lib/vedeu/menus/repository_test.rb +17 -0
- data/test/lib/vedeu/models/cell_test.rb +54 -50
- data/test/lib/vedeu/models/escape_test.rb +49 -45
- data/test/lib/vedeu/models/page_test.rb +167 -160
- data/test/lib/vedeu/models/row_test.rb +71 -67
- data/test/lib/vedeu/models/views/html_char_test.rb +110 -0
- data/test/lib/vedeu/output/compressor_test.rb +44 -22
- data/test/lib/vedeu/output/renderers_test.rb +4 -2
- data/test/lib/vedeu/runtime/application_test.rb +36 -32
- data/test/lib/vedeu/runtime/bootstrap_test.rb +31 -26
- data/test/lib/vedeu/runtime/flags_test.rb +33 -29
- data/test/lib/vedeu/runtime/launcher_test.rb +4 -2
- data/test/lib/vedeu/runtime/main_loop_test.rb +28 -24
- data/test/lib/vedeu/runtime/traps_test.rb +8 -4
- data/test/test_helper.rb +4 -2
- metadata +66 -63
- data/lib/vedeu/input/editor/all.rb +0 -19
- data/lib/vedeu/input/input_translator.rb +0 -155
- data/lib/vedeu/log/debug.rb +0 -79
- data/lib/vedeu/log/lockless_log_device.rb +0 -61
- data/lib/vedeu/log/log.rb +0 -172
- data/lib/vedeu/log/mono_logger.rb +0 -21
- data/lib/vedeu/log/timer.rb +0 -63
- data/lib/vedeu/models/menu.rb +0 -217
- data/lib/vedeu/models/menus.rb +0 -14
- data/lib/vedeu/output/html_char.rb +0 -161
- data/test/lib/vedeu/input/input_translator_test.rb +0 -32
- data/test/lib/vedeu/log/debug_test.rb +0 -35
- data/test/lib/vedeu/log/lockless_log_device_test.rb +0 -29
- data/test/lib/vedeu/log/log_test.rb +0 -48
- data/test/lib/vedeu/log/mono_logger_test.rb +0 -31
- data/test/lib/vedeu/log/timer_test.rb +0 -40
- data/test/lib/vedeu/models/menu_test.rb +0 -301
- data/test/lib/vedeu/models/menus_test.rb +0 -13
- data/test/lib/vedeu/output/html_char_test.rb +0 -106
data/lib/vedeu/log/log.rb
DELETED
@@ -1,172 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Provides the ability to log anything to the Vedeu log file.
|
4
|
-
#
|
5
|
-
class Log
|
6
|
-
|
7
|
-
class << self
|
8
|
-
|
9
|
-
# Write a message to the Vedeu log file.
|
10
|
-
#
|
11
|
-
# @example
|
12
|
-
# Vedeu.log(type: :debug, message: 'A useful debugging message: Error!')
|
13
|
-
#
|
14
|
-
# @param message [String] The message you wish to emit to the log file,
|
15
|
-
# useful for debugging.
|
16
|
-
# @param force [Boolean] When evaluates to true will attempt to write to
|
17
|
-
# the log file regardless of the Configuration setting.
|
18
|
-
# @param type [Symbol] Colour code messages in the log file depending
|
19
|
-
# on their source. See {message_types}
|
20
|
-
#
|
21
|
-
# @return [TrueClass]
|
22
|
-
def log(message:, force: false, type: :info)
|
23
|
-
output = log_entry(type, message)
|
24
|
-
|
25
|
-
if (enabled? || force) && (Vedeu::Configuration.log_only.empty? ||
|
26
|
-
Vedeu::Configuration.log_only.include?(type))
|
27
|
-
logger.debug(output)
|
28
|
-
end
|
29
|
-
|
30
|
-
output
|
31
|
-
end
|
32
|
-
|
33
|
-
# Write a message to STDOUT.
|
34
|
-
#
|
35
|
-
# @example
|
36
|
-
# Vedeu.log_stdout
|
37
|
-
#
|
38
|
-
# @return [TrueClass]
|
39
|
-
def log_stdout(type: :info, message:)
|
40
|
-
$stdout.puts log_entry(type, message)
|
41
|
-
end
|
42
|
-
|
43
|
-
# Write a message to STDERR.
|
44
|
-
#
|
45
|
-
# @example
|
46
|
-
# Vedeu.log_stderr
|
47
|
-
#
|
48
|
-
# @return [TrueClass]
|
49
|
-
def log_stderr(type: :info, message:)
|
50
|
-
$stderr.puts log_entry(type, message)
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
# @return [TrueClass]
|
56
|
-
def logger
|
57
|
-
MonoLogger.new(log_file).tap do |log|
|
58
|
-
log.formatter = proc do |_, _, _, message|
|
59
|
-
formatted_message(message)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# Returns the message with timestamp.
|
65
|
-
#
|
66
|
-
# [ 0.0987] [debug] Something happened.
|
67
|
-
#
|
68
|
-
# @param message [String] The message type and message coloured and
|
69
|
-
# combined.
|
70
|
-
# @return [String]
|
71
|
-
def formatted_message(message)
|
72
|
-
"#{timestamp}#{message}\n" if message
|
73
|
-
end
|
74
|
-
|
75
|
-
# Returns the message:
|
76
|
-
#
|
77
|
-
# [type] message
|
78
|
-
#
|
79
|
-
# @param type [Symbol] The type of log message.
|
80
|
-
# @param message [String] The message you wish to emit to the log file,
|
81
|
-
# useful for debugging.
|
82
|
-
# @return [String]
|
83
|
-
def log_entry(type, message)
|
84
|
-
"#{message_type(type)}#{message_body(type, message)}"
|
85
|
-
end
|
86
|
-
|
87
|
-
# Fetches the filename from the configuration.
|
88
|
-
#
|
89
|
-
# @return [String]
|
90
|
-
def log_file
|
91
|
-
Vedeu::Configuration.log
|
92
|
-
end
|
93
|
-
alias_method :enabled?, :log_file
|
94
|
-
|
95
|
-
# Displays the message body using the colour specified in the last element
|
96
|
-
# of {message_types}.
|
97
|
-
#
|
98
|
-
# @param type [Symbol] The type of log message.
|
99
|
-
# @param body [String] The log message itself.
|
100
|
-
# @return [String]
|
101
|
-
def message_body(type, body)
|
102
|
-
Vedeu::Esc.send(message_types.fetch(type, :default)[-1]) do
|
103
|
-
body
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
# Displays the message type using the colour specified in the first
|
108
|
-
# element of {message_types}.
|
109
|
-
#
|
110
|
-
# @param type [Symbol] The type of log message.
|
111
|
-
# @return [String]
|
112
|
-
def message_type(type)
|
113
|
-
Vedeu::Esc.send(message_types.fetch(type, :default)[0]) do
|
114
|
-
"[#{type}]".ljust(9)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
# The defined message types for Vedeu with their respective colours.
|
119
|
-
# When used, produces a log entry of the format:
|
120
|
-
#
|
121
|
-
# [type] message
|
122
|
-
#
|
123
|
-
# The 'type' will be shown as the first colour defined in the value
|
124
|
-
# array, whilst the 'message' will be shown using the last colour.
|
125
|
-
#
|
126
|
-
# Valid types available:
|
127
|
-
#
|
128
|
-
# :config, :create, :debug, :error, :drb, :event, :info, :input,
|
129
|
-
# :output, :reset, :store, :test, :timer, :update
|
130
|
-
#
|
131
|
-
# @return [Hash<Symbol => Array<Symbol>>]
|
132
|
-
def message_types
|
133
|
-
{
|
134
|
-
config: [:light_yellow, :yellow],
|
135
|
-
create: [:light_green, :green],
|
136
|
-
debug: [:light_red, :red],
|
137
|
-
error: [:light_red, :red],
|
138
|
-
drb: [:light_blue, :blue],
|
139
|
-
event: [:light_magenta, :magenta],
|
140
|
-
info: [:white, :default],
|
141
|
-
input: [:light_yellow, :yellow],
|
142
|
-
output: [:light_green, :green],
|
143
|
-
reset: [:light_cyan, :cyan],
|
144
|
-
store: [:light_cyan, :cyan],
|
145
|
-
test: [:light_white, :white],
|
146
|
-
timer: [:light_yellow, :yellow],
|
147
|
-
update: [:light_cyan, :cyan],
|
148
|
-
}
|
149
|
-
end
|
150
|
-
|
151
|
-
# Returns a formatted timestamp.
|
152
|
-
# eg. [137.7824]
|
153
|
-
#
|
154
|
-
# @return [String]
|
155
|
-
def timestamp
|
156
|
-
@now = Time.now.to_f
|
157
|
-
@time = 0.0 unless @time
|
158
|
-
@last = @now unless @last
|
159
|
-
|
160
|
-
unless @last == @time
|
161
|
-
@time += (@now - @last).round(4)
|
162
|
-
@last = @now
|
163
|
-
end
|
164
|
-
|
165
|
-
"[#{format('%7.4f', @time.to_s)}] ".rjust(7)
|
166
|
-
end
|
167
|
-
|
168
|
-
end # Eigenclass
|
169
|
-
|
170
|
-
end # Log
|
171
|
-
|
172
|
-
end # Vedeu
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Allows the creation of a lock-less log device.
|
4
|
-
#
|
5
|
-
class MonoLogger < Logger
|
6
|
-
|
7
|
-
# Create a trappable Logger instance.
|
8
|
-
#
|
9
|
-
# @param logdev [String|IO] The filename (String) or IO object (typically
|
10
|
-
# STDOUT, STDERR or an open file).
|
11
|
-
# @return [Vedeu::MonoLogger]
|
12
|
-
def initialize(logdev)
|
13
|
-
@level = Logger::DEBUG
|
14
|
-
@default_formatter = Logger::Formatter.new
|
15
|
-
@formatter = nil
|
16
|
-
@logdev = Vedeu::LocklessLogDevice.new(logdev) if logdev
|
17
|
-
end
|
18
|
-
|
19
|
-
end # MonoLogger
|
20
|
-
|
21
|
-
end # Vedeu
|
data/lib/vedeu/log/timer.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Measure the duration. Used for debugging.
|
4
|
-
#
|
5
|
-
class Timer
|
6
|
-
|
7
|
-
class << self
|
8
|
-
|
9
|
-
# @example
|
10
|
-
# Vedeu.timer 'message' do
|
11
|
-
# # ... code to be measured
|
12
|
-
# end
|
13
|
-
#
|
14
|
-
# @param message [String]
|
15
|
-
# @param block [Proc]
|
16
|
-
# @return [void] The return value of the executed block.
|
17
|
-
def timer(message = '', &block)
|
18
|
-
new(message).measure(&block)
|
19
|
-
end
|
20
|
-
|
21
|
-
end # Eigenclass
|
22
|
-
|
23
|
-
# Returns a new instance of Vedeu::Timer.
|
24
|
-
#
|
25
|
-
# @param message [String]
|
26
|
-
# @return [Vedeu::Timer]
|
27
|
-
def initialize(message = '')
|
28
|
-
@message = message
|
29
|
-
@started = Time.now.to_f
|
30
|
-
end
|
31
|
-
|
32
|
-
# Write an entry to the log file stating how long a section of code took in
|
33
|
-
# milliseconds. Useful for debugging performance.
|
34
|
-
#
|
35
|
-
# @return [void] The return value of the executed block.
|
36
|
-
def measure
|
37
|
-
work = yield
|
38
|
-
|
39
|
-
Vedeu.log(type: :timer, message: "#{message} took #{elapsed}ms.")
|
40
|
-
|
41
|
-
work
|
42
|
-
end
|
43
|
-
|
44
|
-
protected
|
45
|
-
|
46
|
-
# @!attribute [r] started
|
47
|
-
# @return [Time]
|
48
|
-
attr_reader :started
|
49
|
-
|
50
|
-
# @!attribute [r] message
|
51
|
-
# @return [String]
|
52
|
-
attr_reader :message
|
53
|
-
|
54
|
-
# Returns the elapsed time in milliseconds with 3 decimal places.
|
55
|
-
#
|
56
|
-
# @return [Float]
|
57
|
-
def elapsed
|
58
|
-
((Time.now.to_f - started) * 1000).round(3)
|
59
|
-
end
|
60
|
-
|
61
|
-
end # Timer
|
62
|
-
|
63
|
-
end # Vedeu
|
data/lib/vedeu/models/menu.rb
DELETED
@@ -1,217 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Converts the collection passed into a list of menu items which can be
|
4
|
-
# navigated using the instance methods or events provided.
|
5
|
-
#
|
6
|
-
class Menu
|
7
|
-
|
8
|
-
include Vedeu::Model
|
9
|
-
|
10
|
-
# @!attribute [rw] collection
|
11
|
-
# @return [Array]
|
12
|
-
attr_accessor :collection
|
13
|
-
|
14
|
-
# Returns the index of the value in the collection which is current.
|
15
|
-
#
|
16
|
-
# @!attribute [rw] current
|
17
|
-
# @return [Fixnum]
|
18
|
-
attr_accessor :current
|
19
|
-
|
20
|
-
# The name of the menu. Used to reference the menu throughout the
|
21
|
-
# application's execution lifetime.
|
22
|
-
#
|
23
|
-
# @!attribute [rw] name
|
24
|
-
# @return [String]
|
25
|
-
attr_accessor :name
|
26
|
-
|
27
|
-
# Returns the index of the value in the collection which is selected.
|
28
|
-
#
|
29
|
-
# @!attribute [rw] selected
|
30
|
-
# @return [Fixnum]
|
31
|
-
attr_accessor :selected
|
32
|
-
|
33
|
-
# Register a menu by name which will display a collection of items for
|
34
|
-
# your users to select; and provide interactivity within your application.
|
35
|
-
#
|
36
|
-
# @param name [String]
|
37
|
-
# @param block [Proc] A set of attributes which define the features of the
|
38
|
-
# menu. See {Vedeu::DSL::Menu#items} and {Vedeu::DSL::Menu#name}.
|
39
|
-
#
|
40
|
-
# @example
|
41
|
-
# Vedeu.menu 'my_interface' do
|
42
|
-
# items [:item_1, :item_2, :item_3]
|
43
|
-
# # ...
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# Vedeu.menu do
|
47
|
-
# name 'menus_must_have_a_name'
|
48
|
-
# items Track.all_my_favourites
|
49
|
-
# # ...
|
50
|
-
# end
|
51
|
-
#
|
52
|
-
# @raise [Vedeu::Error::InvalidSyntax] The required block was not given.
|
53
|
-
# @return [API::Menu]
|
54
|
-
def self.menu(name = '', &block)
|
55
|
-
fail Vedeu::Error::InvalidSyntax, 'block not given' unless block_given?
|
56
|
-
|
57
|
-
build(name: name, &block).store
|
58
|
-
end
|
59
|
-
|
60
|
-
# Returns a new instance of Vedeu::Menu.
|
61
|
-
#
|
62
|
-
# @param attributes [Hash]
|
63
|
-
# @option attributes collection [Array]
|
64
|
-
# @option attributes name [String]
|
65
|
-
# @option attributes current [Fixnum]
|
66
|
-
# @option attributes selected [Fixnum|NilClass]
|
67
|
-
# @return [Vedeu::Menu]
|
68
|
-
def initialize(attributes = {})
|
69
|
-
@attributes = defaults.merge!(attributes)
|
70
|
-
|
71
|
-
@attributes.each { |key, value| instance_variable_set("@#{key}", value) }
|
72
|
-
end
|
73
|
-
|
74
|
-
# Returns the item from the collection which shares the same index as the
|
75
|
-
# value of {Vedeu::Menu#current}.
|
76
|
-
#
|
77
|
-
# @return [void]
|
78
|
-
def current_item
|
79
|
-
@collection[@current]
|
80
|
-
end
|
81
|
-
|
82
|
-
# Returns the item from the collection which shares the same index as the
|
83
|
-
# value of {Vedeu::Menu#selected}.
|
84
|
-
#
|
85
|
-
# @return [|NilClass]
|
86
|
-
def selected_item
|
87
|
-
return nil unless @selected
|
88
|
-
|
89
|
-
@collection[@selected]
|
90
|
-
end
|
91
|
-
|
92
|
-
# Returns a new collection of items.
|
93
|
-
# Each element of the collection is of the format:
|
94
|
-
#
|
95
|
-
# [selected, current, item]
|
96
|
-
#
|
97
|
-
# `selected` is a boolean indicating whether the item is selected.
|
98
|
-
# `current` is a boolean indicating whether the item is current.
|
99
|
-
# `item` is the item itself.
|
100
|
-
#
|
101
|
-
# @return [Array]
|
102
|
-
def items
|
103
|
-
items = []
|
104
|
-
@collection.each_with_index do |item, index|
|
105
|
-
if index == @current && index == @selected
|
106
|
-
items << [true, true, item]
|
107
|
-
|
108
|
-
elsif index == @current
|
109
|
-
items << [false, true, item]
|
110
|
-
|
111
|
-
elsif index == @selected
|
112
|
-
items << [true, false, item]
|
113
|
-
|
114
|
-
else
|
115
|
-
items << [false, false, item]
|
116
|
-
|
117
|
-
end
|
118
|
-
end
|
119
|
-
items
|
120
|
-
end
|
121
|
-
|
122
|
-
# Returns a subset of all the items.
|
123
|
-
#
|
124
|
-
# @return [Array]
|
125
|
-
def view
|
126
|
-
items[@current, @collection.size]
|
127
|
-
end
|
128
|
-
|
129
|
-
# Sets the value of current to be the first item of the collection.
|
130
|
-
#
|
131
|
-
# @return [Array]
|
132
|
-
def top_item
|
133
|
-
@current = 0
|
134
|
-
|
135
|
-
items
|
136
|
-
end
|
137
|
-
|
138
|
-
# Sets the value of current to be the last item of the collection.
|
139
|
-
#
|
140
|
-
# @return [Array]
|
141
|
-
def bottom_item
|
142
|
-
@current = last
|
143
|
-
|
144
|
-
items
|
145
|
-
end
|
146
|
-
|
147
|
-
# Sets the value of current to be the next item in the collection until we
|
148
|
-
# reach the last.
|
149
|
-
#
|
150
|
-
# @return [Array]
|
151
|
-
def next_item
|
152
|
-
@current += 1 if @current < last
|
153
|
-
|
154
|
-
items
|
155
|
-
end
|
156
|
-
|
157
|
-
# Sets the value of current to be the previous item in the collection until
|
158
|
-
# we reach the first.
|
159
|
-
#
|
160
|
-
# @return [Array]
|
161
|
-
def prev_item
|
162
|
-
@current -= 1 if @current > 0
|
163
|
-
|
164
|
-
items
|
165
|
-
end
|
166
|
-
|
167
|
-
# Sets the selected item to be the same value as the current item.
|
168
|
-
#
|
169
|
-
# @return [Array]
|
170
|
-
def select_item
|
171
|
-
@selected = @current
|
172
|
-
|
173
|
-
items
|
174
|
-
end
|
175
|
-
|
176
|
-
# Removes the value of `selected`, meaning no items are selected.
|
177
|
-
#
|
178
|
-
# @return [Array]
|
179
|
-
def deselect_item
|
180
|
-
@selected = nil
|
181
|
-
|
182
|
-
items
|
183
|
-
end
|
184
|
-
|
185
|
-
# Returns the last index of the collection.
|
186
|
-
#
|
187
|
-
# @return [Fixnum]
|
188
|
-
def last
|
189
|
-
@collection.size - 1
|
190
|
-
end
|
191
|
-
|
192
|
-
# Returns the size of the collection.
|
193
|
-
#
|
194
|
-
# @return [Fixnum]
|
195
|
-
def size
|
196
|
-
@collection.size
|
197
|
-
end
|
198
|
-
|
199
|
-
private
|
200
|
-
|
201
|
-
# The default values for a new instance of this class.
|
202
|
-
#
|
203
|
-
# @return [Hash]
|
204
|
-
def defaults
|
205
|
-
{
|
206
|
-
client: nil,
|
207
|
-
collection: [],
|
208
|
-
current: 0,
|
209
|
-
name: '',
|
210
|
-
repository: Vedeu.menus,
|
211
|
-
selected: nil,
|
212
|
-
}
|
213
|
-
end
|
214
|
-
|
215
|
-
end # Menu
|
216
|
-
|
217
|
-
end # Vedeu
|
data/lib/vedeu/models/menus.rb
DELETED
@@ -1,161 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
# Represents a {Vedeu::Views::Char} as a HTML tag with value. By default, a
|
4
|
-
# table cell is used.
|
5
|
-
#
|
6
|
-
class HTMLChar
|
7
|
-
|
8
|
-
include Vedeu::Common
|
9
|
-
|
10
|
-
# @param char [Vedeu::Views::Char]
|
11
|
-
# @param options [Hash<Symbol => String>]
|
12
|
-
# @option options start_tag [String]
|
13
|
-
# @option options end_tag [String]
|
14
|
-
# @return [String]
|
15
|
-
def self.render(char, options = {})
|
16
|
-
new(char, options).render
|
17
|
-
end
|
18
|
-
|
19
|
-
# Returns a new instance of Vedeu::HTMLChar.
|
20
|
-
#
|
21
|
-
# @param char [Vedeu::Views::Char]
|
22
|
-
# @param options [Hash<Symbol => String>]
|
23
|
-
# @option options start_tag [String]
|
24
|
-
# @option options end_tag [String]
|
25
|
-
# @return [Vedeu::HTMLChar]
|
26
|
-
def initialize(char, options = {})
|
27
|
-
@char = char
|
28
|
-
@options = options
|
29
|
-
end
|
30
|
-
|
31
|
-
# @return [String]
|
32
|
-
def render
|
33
|
-
"#{start_tag}#{tag_style}>#{tag_value}#{end_tag}"
|
34
|
-
end
|
35
|
-
|
36
|
-
protected
|
37
|
-
|
38
|
-
# @!attribute [r] char
|
39
|
-
# @return [Vedeu::Views::Char]
|
40
|
-
attr_reader :char
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
# @return [String]
|
45
|
-
def tag_style
|
46
|
-
return '' unless border || present?(value)
|
47
|
-
|
48
|
-
out = " style='"
|
49
|
-
out << tag_style_background unless char.background.empty?
|
50
|
-
out << tag_style_foreground unless char.foreground.empty?
|
51
|
-
out << "'"
|
52
|
-
end
|
53
|
-
|
54
|
-
# @return [String]
|
55
|
-
def tag_style_background
|
56
|
-
"border:1px #{char.background.to_html} solid;" \
|
57
|
-
"background:#{char.background.to_html};"
|
58
|
-
end
|
59
|
-
|
60
|
-
# @return [String]
|
61
|
-
def tag_style_foreground
|
62
|
-
"color:#{char.foreground.to_html};#{border_style}"
|
63
|
-
end
|
64
|
-
|
65
|
-
# @return [String]
|
66
|
-
def tag_value
|
67
|
-
return ' ' if border || !present?(value)
|
68
|
-
|
69
|
-
value
|
70
|
-
end
|
71
|
-
|
72
|
-
# @return [String]
|
73
|
-
def border_style
|
74
|
-
case border
|
75
|
-
when :top_horizontal then css('top')
|
76
|
-
when :left_vertical then css('left')
|
77
|
-
when :right_vertical then css('right')
|
78
|
-
when :bottom_horizontal then css('bottom')
|
79
|
-
when :top_left then "#{css('top')}#{css('left')}"
|
80
|
-
when :top_right then "#{css('top')}#{css('right')}"
|
81
|
-
when :bottom_left then "#{css('bottom')}#{css('left')}"
|
82
|
-
when :bottom_right then "#{css('bottom')}#{css('right')}"
|
83
|
-
else
|
84
|
-
''
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# @return [String]
|
89
|
-
def css(direction = '')
|
90
|
-
"border-#{direction}:1px #{char.foreground.to_html} solid;"
|
91
|
-
end
|
92
|
-
|
93
|
-
# # @return [String]
|
94
|
-
# def fg
|
95
|
-
# @fg ||= colour(char, 'foreground', '#222')
|
96
|
-
# end
|
97
|
-
|
98
|
-
# # @return [String]
|
99
|
-
# def bg
|
100
|
-
# @bg ||= colour(char, 'background', '#000')
|
101
|
-
# end
|
102
|
-
|
103
|
-
# @param char [Vedeu::Views::Char]
|
104
|
-
# @param type [String] 'background' or 'foreground'
|
105
|
-
# @param default [String] A default colour (CSS style; e.g. '#b2adf2')
|
106
|
-
# @return [String]
|
107
|
-
# def colour(char, type, default)
|
108
|
-
# parent_type = char.send(:parent).send(type).send(:to_html)
|
109
|
-
# #parent_type = ('parent_' + type).to_sym
|
110
|
-
# type_to_html = char.send(type).send(:to_html)
|
111
|
-
# #parent_type_to_html = char.send(parent_type).send(:to_html)
|
112
|
-
|
113
|
-
# if present?(type_to_html)
|
114
|
-
# type_to_html
|
115
|
-
|
116
|
-
# elsif char.parent
|
117
|
-
# parent_type
|
118
|
-
# #char.parent.send(type).send(:to_html)
|
119
|
-
|
120
|
-
# else
|
121
|
-
# default
|
122
|
-
|
123
|
-
# end
|
124
|
-
# end
|
125
|
-
|
126
|
-
# @return [Symbol|NilClass]
|
127
|
-
def border
|
128
|
-
char.border
|
129
|
-
end
|
130
|
-
|
131
|
-
# @return [String]
|
132
|
-
def value
|
133
|
-
char.value
|
134
|
-
end
|
135
|
-
|
136
|
-
# @return [String]
|
137
|
-
def start_tag
|
138
|
-
options[:start_tag]
|
139
|
-
end
|
140
|
-
|
141
|
-
# @return [String]
|
142
|
-
def end_tag
|
143
|
-
options[:end_tag]
|
144
|
-
end
|
145
|
-
|
146
|
-
# @return [Hash<Symbol => String>]
|
147
|
-
def options
|
148
|
-
defaults.merge!(@options)
|
149
|
-
end
|
150
|
-
|
151
|
-
# @return [Hash<Symbol => String>]
|
152
|
-
def defaults
|
153
|
-
{
|
154
|
-
start_tag: '<td',
|
155
|
-
end_tag: '</td>',
|
156
|
-
}
|
157
|
-
end
|
158
|
-
|
159
|
-
end # HTMLChar
|
160
|
-
|
161
|
-
end # Vedeu
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
|
5
|
-
describe InputTranslator do
|
6
|
-
|
7
|
-
let(:described) { Vedeu::InputTranslator }
|
8
|
-
let(:instance) { described.new(code) }
|
9
|
-
let(:code) {}
|
10
|
-
|
11
|
-
describe '#initialize' do
|
12
|
-
it { instance.must_be_instance_of(described) }
|
13
|
-
it { instance.instance_variable_get('@code').must_equal(code) }
|
14
|
-
end
|
15
|
-
|
16
|
-
describe '.translate' do
|
17
|
-
context 'when the code is not recognised' do
|
18
|
-
it { described.translate('a').must_equal('a') }
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'when the code is recognised' do
|
22
|
-
it { described.translate("\e[H").must_equal(:home) }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#translate' do
|
27
|
-
it { instance.must_respond_to(:translate) }
|
28
|
-
end
|
29
|
-
|
30
|
-
end # InputTranslator
|
31
|
-
|
32
|
-
end # Vedeu
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
|
5
|
-
describe Debug do
|
6
|
-
|
7
|
-
let(:described) { Vedeu::Debug }
|
8
|
-
|
9
|
-
before do
|
10
|
-
File.stubs(:open).with('/tmp/profile.html', 'w').returns(:some_code)
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '.debug' do
|
14
|
-
let(:filename) { 'profile.html' }
|
15
|
-
let(:some_code) { :some_code }
|
16
|
-
|
17
|
-
context 'when the block is not given' do
|
18
|
-
subject { described.debug(filename) }
|
19
|
-
|
20
|
-
it { subject.must_equal(nil) }
|
21
|
-
end
|
22
|
-
|
23
|
-
context 'when the block is given' do
|
24
|
-
subject { described.debug(filename) { some_code } }
|
25
|
-
|
26
|
-
it {
|
27
|
-
::File.expects(:open).with('/tmp/profile.html', 'w')
|
28
|
-
subject
|
29
|
-
}
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end # Debug
|
34
|
-
|
35
|
-
end # Vedeu
|