vedeu 0.4.37 → 0.4.38
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/examples/borders_app.rb +3 -0
- data/examples/material_colours_app.rb +1 -1
- data/lib/vedeu/bindings.rb +12 -0
- data/lib/vedeu/cursor/all.rb +1 -0
- data/lib/vedeu/cursor/cursor.rb +8 -8
- data/lib/vedeu/cursor/reposition.rb +95 -0
- data/lib/vedeu/generator/application.rb +18 -16
- data/lib/vedeu/generator/helpers.rb +26 -1
- data/lib/vedeu/generator/templates/application/{application.rb → application.erb} +1 -1
- data/lib/vedeu/generator/templates/application/bin/name +1 -1
- data/lib/vedeu/generator/view.rb +1 -1
- data/lib/vedeu/models/focus.rb +40 -5
- data/lib/vedeu/output/colour.rb +0 -1
- data/lib/vedeu/support/all.rb +0 -1
- data/lib/vedeu/support/log.rb +8 -5
- data/lib/vedeu/support/timer.rb +10 -2
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/bindings_test.rb +2 -0
- data/test/lib/vedeu/bootstrap_test.rb +4 -1
- data/test/lib/vedeu/cursor/cursor_test.rb +16 -0
- data/test/lib/vedeu/cursor/reposition_test.rb +47 -0
- data/test/lib/vedeu/generator/application_test.rb +2 -22
- data/test/lib/vedeu/generator/helpers_test.rb +39 -8
- data/test/lib/vedeu/generator/view_test.rb +2 -2
- data/test/lib/vedeu/models/focus_test.rb +60 -3
- data/test/lib/vedeu/output/colour_test.rb +12 -0
- data/test/lib/vedeu/support/log_test.rb +6 -22
- data/vedeu.gemspec +1 -1
- metadata +8 -8
- data/lib/vedeu/support/colour_coercer.rb +0 -97
- data/test/lib/vedeu/support/colour_coercer_test.rb +0 -85
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eba167b2296986a617d87379d671da43b1fdfde5
|
|
4
|
+
data.tar.gz: f680e8ca3c7fc1cf653a331b06f6b254069f1549
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 62dfe9eec435c85f18d7b0556ae6d1f0549d4d442144a13dd816c80370b046e03566b0bc2f972a2e6f556832c9e4eb9cb807103f38cb25e77e9a09b4ca0cbbeb
|
|
7
|
+
data.tar.gz: aa1b63928e5bd9eed88413945780f5ba202a7f211d9abb96c71432d02cebaf8362c0617a69078af61d900a0c82868793531540824106560c6a063f60da02f6f8
|
data/examples/borders_app.rb
CHANGED
|
@@ -74,7 +74,7 @@ class VedeuMaterialColoursApp
|
|
|
74
74
|
key('k') { Vedeu.trigger(:_view_up_, 'other_interface') }
|
|
75
75
|
key('l') { Vedeu.trigger(:_view_right_, 'other_interface') }
|
|
76
76
|
|
|
77
|
-
key('t')
|
|
77
|
+
key('t') do
|
|
78
78
|
Vedeu.trigger(:_toggle_interface_, 'main_interface')
|
|
79
79
|
Vedeu.trigger(:_toggle_interface_, 'other_interface')
|
|
80
80
|
end
|
data/lib/vedeu/bindings.rb
CHANGED
|
@@ -125,6 +125,18 @@ module Vedeu
|
|
|
125
125
|
Vedeu::Position.new(cursor.y, cursor.x) if cursor
|
|
126
126
|
end
|
|
127
127
|
|
|
128
|
+
# Move the cursor to a relative position inside the interface.
|
|
129
|
+
#
|
|
130
|
+
# @todo
|
|
131
|
+
# - The content of the interface needs to be a consideration.
|
|
132
|
+
# - If the screen size changes, what should happen to the cursor.
|
|
133
|
+
# - How do we represent cursors which are deliberately positioned outside
|
|
134
|
+
# of the viewable area?
|
|
135
|
+
#
|
|
136
|
+
Vedeu.bind(:_cursor_reposition_) do |name, y, x|
|
|
137
|
+
Vedeu::Reposition.to(Vedeu::Cursor, name, y, x)
|
|
138
|
+
end
|
|
139
|
+
|
|
128
140
|
# @see {Vedeu::Move}
|
|
129
141
|
Vedeu.bind(:_cursor_reset_) { |name| Vedeu.trigger(:_cursor_origin_, name) }
|
|
130
142
|
|
data/lib/vedeu/cursor/all.rb
CHANGED
data/lib/vedeu/cursor/cursor.rb
CHANGED
|
@@ -16,13 +16,13 @@ module Vedeu
|
|
|
16
16
|
# @return [String]
|
|
17
17
|
attr_reader :name
|
|
18
18
|
|
|
19
|
-
# @!attribute [
|
|
19
|
+
# @!attribute [rw] ox
|
|
20
20
|
# @return [Fixnum]
|
|
21
|
-
|
|
21
|
+
attr_accessor :ox
|
|
22
22
|
|
|
23
|
-
# @!attribute [
|
|
23
|
+
# @!attribute [rw] oy
|
|
24
24
|
# @return [Fixnum]
|
|
25
|
-
|
|
25
|
+
attr_accessor :oy
|
|
26
26
|
|
|
27
27
|
# @!attribute [r] state
|
|
28
28
|
# @return [Boolean|Symbol]
|
|
@@ -33,13 +33,13 @@ module Vedeu
|
|
|
33
33
|
attr_reader :visible
|
|
34
34
|
alias_method :visible?, :visible
|
|
35
35
|
|
|
36
|
-
# @!attribute [
|
|
36
|
+
# @!attribute [rw] x
|
|
37
37
|
# @return [Fixnum]
|
|
38
|
-
|
|
38
|
+
attr_accessor :x
|
|
39
39
|
|
|
40
|
-
# @!attribute [
|
|
40
|
+
# @!attribute [rw] y
|
|
41
41
|
# @return [Fixnum]
|
|
42
|
-
|
|
42
|
+
attr_accessor :y
|
|
43
43
|
|
|
44
44
|
# Returns a new instance of Vedeu::Cursor.
|
|
45
45
|
#
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
module Vedeu
|
|
2
|
+
|
|
3
|
+
# @api private
|
|
4
|
+
class Reposition
|
|
5
|
+
|
|
6
|
+
# @return [Vedeu::Cursor]
|
|
7
|
+
# @see Vedeu::Reposition.new
|
|
8
|
+
def self.to(entity, name, y, x)
|
|
9
|
+
new(entity, name, y, x).to
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# @param entity []
|
|
13
|
+
# @param name [String]]
|
|
14
|
+
# @param y [Fixnum]
|
|
15
|
+
# @param x [Fixnum]
|
|
16
|
+
# @return [Vedeu::Reposition]
|
|
17
|
+
def initialize(entity, name, y, x)
|
|
18
|
+
@entity = entity
|
|
19
|
+
@name = name
|
|
20
|
+
@y = y
|
|
21
|
+
@x = x
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @return [Vedeu::Cursor]
|
|
25
|
+
def to
|
|
26
|
+
result = @entity.new(name: name,
|
|
27
|
+
y: y_position,
|
|
28
|
+
x: x_position,
|
|
29
|
+
oy: y,
|
|
30
|
+
ox: x).store
|
|
31
|
+
|
|
32
|
+
Vedeu.trigger(:_clear_, name)
|
|
33
|
+
Vedeu.trigger(:_refresh_, name)
|
|
34
|
+
Vedeu.trigger(:_refresh_cursor_, name)
|
|
35
|
+
|
|
36
|
+
result
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
protected
|
|
40
|
+
|
|
41
|
+
# @!attribute [r] entity
|
|
42
|
+
# @return [String]
|
|
43
|
+
attr_reader :entity
|
|
44
|
+
|
|
45
|
+
# @!attribute [r] name
|
|
46
|
+
# @return [String]
|
|
47
|
+
attr_reader :name
|
|
48
|
+
|
|
49
|
+
# @!attribute [r] x
|
|
50
|
+
# @return [Fixnum]
|
|
51
|
+
attr_reader :x
|
|
52
|
+
|
|
53
|
+
# @!attribute [r] y
|
|
54
|
+
# @return [Fixnum]
|
|
55
|
+
attr_reader :y
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
# @return [Coordinate]
|
|
60
|
+
def coordinate
|
|
61
|
+
@coordinate ||= Vedeu::Coordinate.new(name)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# @return [Vedeu::Cursor]
|
|
65
|
+
def entity
|
|
66
|
+
@_entity ||= @entity.new
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# @return [Vedeu::Cursor]
|
|
70
|
+
def model
|
|
71
|
+
@model ||= repository.by_name(name)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# @return [Vedeu::Cursors]
|
|
75
|
+
def repository
|
|
76
|
+
entity.repository
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Returns the cursors x position based on the desired x position.
|
|
80
|
+
#
|
|
81
|
+
# @return [Fixnum]
|
|
82
|
+
def x_position
|
|
83
|
+
coordinate.x_position(x)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Returns the cursors y position based on the desired y position.
|
|
87
|
+
#
|
|
88
|
+
# @return [Fixnum]
|
|
89
|
+
def y_position
|
|
90
|
+
coordinate.y_position(y)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end # Reposition
|
|
94
|
+
|
|
95
|
+
end # Vedeu
|
|
@@ -23,6 +23,7 @@ module Vedeu
|
|
|
23
23
|
make_directory_structure
|
|
24
24
|
|
|
25
25
|
copy_gemfile
|
|
26
|
+
copy_application_bootstrapper
|
|
26
27
|
copy_application_controller
|
|
27
28
|
copy_application_helper
|
|
28
29
|
copy_global_keymap
|
|
@@ -37,9 +38,11 @@ module Vedeu
|
|
|
37
38
|
|
|
38
39
|
# @return [void]
|
|
39
40
|
def make_directory_structure
|
|
40
|
-
directories.each
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
directories.each { |directory| make_directory(name + directory) }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def copy_application_bootstrapper
|
|
45
|
+
make_file(source + '/application.erb', "#{name}/application.rb")
|
|
43
46
|
end
|
|
44
47
|
|
|
45
48
|
# @return [void]
|
|
@@ -49,21 +52,20 @@ module Vedeu
|
|
|
49
52
|
end
|
|
50
53
|
|
|
51
54
|
# @return [void]
|
|
52
|
-
def
|
|
53
|
-
|
|
54
|
-
name + '/app/helpers/application_helper.rb')
|
|
55
|
+
def copy_application_executable
|
|
56
|
+
copy_file(source + '/bin/name', "#{name}/bin/#{name}")
|
|
55
57
|
end
|
|
56
58
|
|
|
57
59
|
# @return [void]
|
|
58
|
-
def
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
def copy_application_helper
|
|
61
|
+
make_file(source + '/app/helpers/application_helper.erb',
|
|
62
|
+
name + '/app/helpers/application_helper.rb')
|
|
61
63
|
end
|
|
62
64
|
|
|
63
65
|
# @return [void]
|
|
64
66
|
def copy_configuration
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
copy_file(source + '/config/configuration.rb',
|
|
68
|
+
"#{name}/config/configuration.rb")
|
|
67
69
|
end
|
|
68
70
|
|
|
69
71
|
# @return [void]
|
|
@@ -74,7 +76,7 @@ module Vedeu
|
|
|
74
76
|
|
|
75
77
|
# @return [void]
|
|
76
78
|
def copy_gemfile
|
|
77
|
-
|
|
79
|
+
copy_file(source + '/Gemfile', "#{name}/Gemfile")
|
|
78
80
|
end
|
|
79
81
|
|
|
80
82
|
# @return [void]
|
|
@@ -84,14 +86,14 @@ module Vedeu
|
|
|
84
86
|
|
|
85
87
|
# @return [void]
|
|
86
88
|
def copy_global_keymap
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
copy_file(source + '/app/models/keymaps/_global_.rb',
|
|
90
|
+
"#{name}/app/models/keymaps/_global_.rb")
|
|
89
91
|
end
|
|
90
92
|
|
|
91
93
|
# @return [void]
|
|
92
94
|
def copy_system_keymap
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
copy_file(source + '/app/models/keymaps/_system_.rb',
|
|
96
|
+
"#{name}/app/models/keymaps/_system_.rb")
|
|
95
97
|
end
|
|
96
98
|
|
|
97
99
|
# @return [Array<String>]
|
|
@@ -20,15 +20,40 @@ module Vedeu
|
|
|
20
20
|
name
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
# @param destination [String]
|
|
24
|
+
# @return [void]
|
|
25
|
+
def make_directory(destination)
|
|
26
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
|
27
|
+
|
|
28
|
+
FileUtils.mkdir_p(destination)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @param source [String]
|
|
32
|
+
# @param destination [String]
|
|
33
|
+
# @return [void]
|
|
34
|
+
def copy_file(source, destination)
|
|
35
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
|
36
|
+
|
|
37
|
+
FileUtils.cp(source, destination)
|
|
38
|
+
end
|
|
39
|
+
|
|
23
40
|
# @param source [String]
|
|
24
41
|
# @param destination [String]
|
|
25
42
|
# @return [void]
|
|
26
43
|
def make_file(source, destination)
|
|
27
|
-
Vedeu.log_stdout(type: :create, message: "
|
|
44
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
|
28
45
|
|
|
29
46
|
File.write(destination, parse(source))
|
|
30
47
|
end
|
|
31
48
|
|
|
49
|
+
# @param destination [String]
|
|
50
|
+
# @return [void]
|
|
51
|
+
def touch_file(destination)
|
|
52
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
|
53
|
+
|
|
54
|
+
FileUtils.touch(destination)
|
|
55
|
+
end
|
|
56
|
+
|
|
32
57
|
# @return [String]
|
|
33
58
|
def name
|
|
34
59
|
@_name ||= @name.downcase
|
data/lib/vedeu/generator/view.rb
CHANGED
data/lib/vedeu/models/focus.rb
CHANGED
|
@@ -95,8 +95,23 @@ module Vedeu
|
|
|
95
95
|
|
|
96
96
|
update
|
|
97
97
|
end
|
|
98
|
-
alias_method :next,
|
|
99
|
-
|
|
98
|
+
alias_method :next, :next_item
|
|
99
|
+
|
|
100
|
+
# Put the next visible interface relative to the current interfaces in
|
|
101
|
+
# focus.
|
|
102
|
+
#
|
|
103
|
+
# @return [String]
|
|
104
|
+
def next_visible_item
|
|
105
|
+
return update unless visible_items?
|
|
106
|
+
|
|
107
|
+
loop do
|
|
108
|
+
storage.rotate!
|
|
109
|
+
break if Vedeu.interfaces.by_name(current).visible?
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
update
|
|
113
|
+
end
|
|
114
|
+
alias_method :focus_next, :next_visible_item
|
|
100
115
|
|
|
101
116
|
# Put the previous interface relative to the current interface in focus.
|
|
102
117
|
#
|
|
@@ -109,9 +124,24 @@ module Vedeu
|
|
|
109
124
|
|
|
110
125
|
update
|
|
111
126
|
end
|
|
112
|
-
alias_method :prev,
|
|
113
|
-
alias_method :previous,
|
|
114
|
-
|
|
127
|
+
alias_method :prev, :prev_item
|
|
128
|
+
alias_method :previous, :prev_item
|
|
129
|
+
|
|
130
|
+
# Put the previous visible interface relative to the current interfaces in
|
|
131
|
+
# focus.
|
|
132
|
+
#
|
|
133
|
+
# @return [String]
|
|
134
|
+
def prev_visible_item
|
|
135
|
+
return update unless visible_items?
|
|
136
|
+
|
|
137
|
+
loop do
|
|
138
|
+
storage.rotate!(-1)
|
|
139
|
+
break if Vedeu.interfaces.by_name(current).visible?
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
update
|
|
143
|
+
end
|
|
144
|
+
alias_method :focus_previous, :prev_visible_item
|
|
115
145
|
|
|
116
146
|
# Refresh the interface in focus.
|
|
117
147
|
#
|
|
@@ -176,6 +206,11 @@ module Vedeu
|
|
|
176
206
|
[]
|
|
177
207
|
end
|
|
178
208
|
|
|
209
|
+
# @return [Boolean]
|
|
210
|
+
def visible_items?
|
|
211
|
+
storage.any? { |name| Vedeu.interfaces.by_name(name).visible? }
|
|
212
|
+
end
|
|
213
|
+
|
|
179
214
|
end # Focus
|
|
180
215
|
|
|
181
216
|
end # Vedeu
|
data/lib/vedeu/output/colour.rb
CHANGED
data/lib/vedeu/support/all.rb
CHANGED
data/lib/vedeu/support/log.rb
CHANGED
|
@@ -97,8 +97,11 @@ module Vedeu
|
|
|
97
97
|
#
|
|
98
98
|
# @return [TrueClass]
|
|
99
99
|
def log(message:, force: false, type: :info)
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
output = [message_type(type), message_body(type, message)]
|
|
101
|
+
|
|
102
|
+
logger.debug(output) if enabled? || force
|
|
103
|
+
|
|
104
|
+
output
|
|
102
105
|
end
|
|
103
106
|
|
|
104
107
|
# @return [TrueClass]
|
|
@@ -111,6 +114,8 @@ module Vedeu
|
|
|
111
114
|
$stderr.puts [message_type(type), message_body(type, message)].join
|
|
112
115
|
end
|
|
113
116
|
|
|
117
|
+
private
|
|
118
|
+
|
|
114
119
|
# @return [TrueClass]
|
|
115
120
|
def logger
|
|
116
121
|
MonoLogger.new(log_file).tap do |log|
|
|
@@ -120,8 +125,6 @@ module Vedeu
|
|
|
120
125
|
end
|
|
121
126
|
end
|
|
122
127
|
|
|
123
|
-
private
|
|
124
|
-
|
|
125
128
|
# @param message [String]
|
|
126
129
|
# @return [String]
|
|
127
130
|
def formatted_message(message)
|
|
@@ -183,7 +186,7 @@ module Vedeu
|
|
|
183
186
|
@last = @now
|
|
184
187
|
end
|
|
185
188
|
|
|
186
|
-
"[#{format(
|
|
189
|
+
"[#{format('%7.4f', @time.to_s)}] ".rjust(7)
|
|
187
190
|
end
|
|
188
191
|
|
|
189
192
|
end # Log eigenclass
|
data/lib/vedeu/support/timer.rb
CHANGED
|
@@ -28,12 +28,13 @@ module Vedeu
|
|
|
28
28
|
@started = Time.now.to_f
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
# Write an entry to the log file stating how long a section of code took in
|
|
32
|
+
# milliseconds. Useful for debugging performance.
|
|
33
|
+
#
|
|
31
34
|
# @return [void]
|
|
32
35
|
def measure
|
|
33
36
|
work = yield
|
|
34
37
|
|
|
35
|
-
elapsed = ((Time.now.to_f - started) * 1000).round(3)
|
|
36
|
-
|
|
37
38
|
Vedeu.log(type: :timer, message: "#{message} took #{elapsed}ms.")
|
|
38
39
|
|
|
39
40
|
work
|
|
@@ -49,6 +50,13 @@ module Vedeu
|
|
|
49
50
|
# @return [String]
|
|
50
51
|
attr_reader :message
|
|
51
52
|
|
|
53
|
+
# Returns the elapsed time in milliseconds with 3 decimal places.
|
|
54
|
+
#
|
|
55
|
+
# @return [Float]
|
|
56
|
+
def elapsed
|
|
57
|
+
((Time.now.to_f - started) * 1000).round(3)
|
|
58
|
+
end
|
|
59
|
+
|
|
52
60
|
end # Timer
|
|
53
61
|
|
|
54
62
|
end # Vedeu
|
data/lib/vedeu/version.rb
CHANGED
|
@@ -30,6 +30,8 @@ module Vedeu
|
|
|
30
30
|
it { Vedeu.events.registered?(:_cursor_right_).must_equal(true) }
|
|
31
31
|
it { Vedeu.events.registered?(:_cursor_up_).must_equal(true) }
|
|
32
32
|
it { Vedeu.events.registered?(:_cursor_origin_).must_equal(true) }
|
|
33
|
+
it { Vedeu.events.registered?(:_cursor_position_).must_equal(true) }
|
|
34
|
+
it { Vedeu.events.registered?(:_cursor_reposition_).must_equal(true) }
|
|
33
35
|
it { Vedeu.events.registered?(:_cursor_reset_).must_equal(true) }
|
|
34
36
|
end
|
|
35
37
|
|
|
@@ -51,10 +51,18 @@ module Vedeu
|
|
|
51
51
|
it { instance.must_respond_to(:ox) }
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
+
describe '#ox=' do
|
|
55
|
+
it { instance.must_respond_to(:ox=) }
|
|
56
|
+
end
|
|
57
|
+
|
|
54
58
|
describe '#oy' do
|
|
55
59
|
it { instance.must_respond_to(:oy) }
|
|
56
60
|
end
|
|
57
61
|
|
|
62
|
+
describe '#oy=' do
|
|
63
|
+
it { instance.must_respond_to(:oy=) }
|
|
64
|
+
end
|
|
65
|
+
|
|
58
66
|
describe '#state' do
|
|
59
67
|
it { instance.must_respond_to(:state) }
|
|
60
68
|
end
|
|
@@ -68,10 +76,18 @@ module Vedeu
|
|
|
68
76
|
it { instance.must_respond_to(:x) }
|
|
69
77
|
end
|
|
70
78
|
|
|
79
|
+
describe '#x=' do
|
|
80
|
+
it { instance.must_respond_to(:x=) }
|
|
81
|
+
end
|
|
82
|
+
|
|
71
83
|
describe '#y' do
|
|
72
84
|
it { instance.must_respond_to(:y) }
|
|
73
85
|
end
|
|
74
86
|
|
|
87
|
+
describe '#y=' do
|
|
88
|
+
it { instance.must_respond_to(:y=) }
|
|
89
|
+
end
|
|
90
|
+
|
|
75
91
|
describe '#hide_cursor' do
|
|
76
92
|
subject { instance.hide_cursor }
|
|
77
93
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Vedeu
|
|
4
|
+
|
|
5
|
+
describe Reposition do
|
|
6
|
+
|
|
7
|
+
let(:described) { Vedeu::Reposition }
|
|
8
|
+
let(:instance) { described.new(entity, _name, y, x) }
|
|
9
|
+
let(:entity) { Vedeu::Cursor }
|
|
10
|
+
let(:_name) { 'reposition' }
|
|
11
|
+
let(:x) { 4 }
|
|
12
|
+
let(:y) { 7 }
|
|
13
|
+
|
|
14
|
+
before do
|
|
15
|
+
Vedeu::Cursor.new(name: _name, x: 1, y: 1, ox: 1, oy: 1)
|
|
16
|
+
Vedeu.stubs(:trigger)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
after { Vedeu.cursors.reset }
|
|
20
|
+
|
|
21
|
+
describe '#initialize' do
|
|
22
|
+
subject { instance }
|
|
23
|
+
|
|
24
|
+
it { instance.must_be_instance_of(Vedeu::Reposition) }
|
|
25
|
+
it { instance.instance_variable_get('@entity').must_equal(entity) }
|
|
26
|
+
it { instance.instance_variable_get('@name').must_equal(_name) }
|
|
27
|
+
it { instance.instance_variable_get('@x').must_equal(x) }
|
|
28
|
+
it { instance.instance_variable_get('@y').must_equal(y) }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe '.to' do
|
|
32
|
+
it { described.must_respond_to(:to) }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe '#to' do
|
|
36
|
+
subject { instance.to }
|
|
37
|
+
|
|
38
|
+
it { subject.must_be_instance_of(entity) }
|
|
39
|
+
it { subject.x.must_equal(5) }
|
|
40
|
+
it { subject.y.must_equal(8) }
|
|
41
|
+
it { subject.ox.must_equal(4) }
|
|
42
|
+
it { subject.oy.must_equal(7) }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end # Reposition
|
|
46
|
+
|
|
47
|
+
end # Vedeu
|
|
@@ -21,31 +21,11 @@ module Vedeu
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
describe '.generate' do
|
|
24
|
-
|
|
24
|
+
it { described.must_respond_to(:generate) }
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
describe '#generate' do
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
describe '#name_as_class' do
|
|
32
|
-
subject { instance.name_as_class }
|
|
33
|
-
|
|
34
|
-
context 'when the name is a single value' do
|
|
35
|
-
let(:_name) { 'VEDEU' }
|
|
36
|
-
|
|
37
|
-
it { subject.must_equal('Vedeu') }
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
context 'when the name is an underscored value' do
|
|
41
|
-
it { subject.must_equal('MyFirstApp') }
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
context 'when the name contains hyphens' do
|
|
45
|
-
let(:_name) { 'hyphenated-APP' }
|
|
46
|
-
|
|
47
|
-
it { subject.must_equal('HyphenatedApp')}
|
|
48
|
-
end
|
|
28
|
+
subject { instance.generate }
|
|
49
29
|
end
|
|
50
30
|
|
|
51
31
|
end # Application
|
|
@@ -20,11 +20,11 @@ module Vedeu
|
|
|
20
20
|
let(:instance) { Vedeu::Generator::HelpersTestClass.new(_name) }
|
|
21
21
|
let(:_name) { 'my_first_app' }
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
describe '#app_name' do
|
|
24
|
+
subject { instance.app_name }
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
# it { subject.must_equal('MyFirstApp') }
|
|
27
|
+
end
|
|
28
28
|
|
|
29
29
|
describe '#app_name_as_snake_case' do
|
|
30
30
|
let(:_name) { 'MyFirstApp' }
|
|
@@ -34,6 +34,19 @@ module Vedeu
|
|
|
34
34
|
it { subject.must_equal('my_first_app') }
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
describe '#make_directory' do
|
|
38
|
+
let(:destination) {}
|
|
39
|
+
|
|
40
|
+
subject { instance.make_directory(destination) }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe '#copy_file' do
|
|
44
|
+
let(:source) {}
|
|
45
|
+
let(:destination) {}
|
|
46
|
+
|
|
47
|
+
subject { instance.copy_file(source, destination) }
|
|
48
|
+
end
|
|
49
|
+
|
|
37
50
|
describe '#make_file' do
|
|
38
51
|
let(:source) {}
|
|
39
52
|
let(:destination) {}
|
|
@@ -41,6 +54,12 @@ module Vedeu
|
|
|
41
54
|
subject { instance.make_file(source, destination) }
|
|
42
55
|
end
|
|
43
56
|
|
|
57
|
+
describe '#touch_file' do
|
|
58
|
+
let(:destination) {}
|
|
59
|
+
|
|
60
|
+
subject { instance.touch_file(destination) }
|
|
61
|
+
end
|
|
62
|
+
|
|
44
63
|
describe '#name' do
|
|
45
64
|
let(:_name) { 'My_First_APP' }
|
|
46
65
|
|
|
@@ -54,15 +73,27 @@ module Vedeu
|
|
|
54
73
|
describe '#name_as_class' do
|
|
55
74
|
subject { instance.name_as_class }
|
|
56
75
|
|
|
57
|
-
|
|
76
|
+
context 'when the name is a single value' do
|
|
77
|
+
let(:_name) { 'VEDEU' }
|
|
78
|
+
|
|
79
|
+
it { subject.must_equal('Vedeu') }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context 'when the name is an underscored value' do
|
|
83
|
+
it { subject.must_equal('MyFirstApp') }
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context 'when the name contains hyphens' do
|
|
87
|
+
let(:_name) { 'hyphenated-APP' }
|
|
58
88
|
|
|
59
|
-
|
|
89
|
+
it { subject.must_equal('HyphenatedApp')}
|
|
90
|
+
end
|
|
60
91
|
end
|
|
61
92
|
|
|
62
|
-
describe '#
|
|
93
|
+
describe '#parse' do
|
|
63
94
|
let(:source) {}
|
|
64
95
|
|
|
65
|
-
subject { instance.
|
|
96
|
+
subject { instance.parse(source) }
|
|
66
97
|
end
|
|
67
98
|
|
|
68
99
|
describe '#source' do
|
|
@@ -21,11 +21,11 @@ module Vedeu
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
describe '.generate' do
|
|
24
|
-
|
|
24
|
+
it { described.must_respond_to(:generate) }
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
describe '#generate' do
|
|
28
|
-
|
|
28
|
+
subject { instance.generate }
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
end # View
|
|
@@ -9,9 +9,6 @@ module Vedeu
|
|
|
9
9
|
before do
|
|
10
10
|
Focus.reset
|
|
11
11
|
Vedeu.interfaces.reset
|
|
12
|
-
Vedeu.interface('thallium') {}
|
|
13
|
-
Vedeu.interface('lead') {}
|
|
14
|
-
Vedeu.interface('bismuth') {}
|
|
15
12
|
end
|
|
16
13
|
after do
|
|
17
14
|
Vedeu::Focus.reset
|
|
@@ -163,6 +160,36 @@ module Vedeu
|
|
|
163
160
|
end
|
|
164
161
|
end
|
|
165
162
|
|
|
163
|
+
describe '#next_visible_item' do
|
|
164
|
+
before do
|
|
165
|
+
Vedeu.interface('gold') { visible true }
|
|
166
|
+
Vedeu.interface('silver') { visible true }
|
|
167
|
+
Vedeu.interface('platinum') { visible false }
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it 'the next visible interface is focussed when the method is called' do
|
|
171
|
+
Focus.next_visible_item.must_equal('silver')
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
context 'when there are no visible interfaces' do
|
|
175
|
+
before do
|
|
176
|
+
Vedeu.interface('gold') { visible false }
|
|
177
|
+
Vedeu.interface('silver') { visible false }
|
|
178
|
+
Vedeu.interface('platinum') { visible false }
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it 'puts the first interface defined in focus' do
|
|
182
|
+
Focus.next_visible_item.must_equal('gold')
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
context 'when there are no interfaces' do
|
|
187
|
+
before { Vedeu::Focus.reset }
|
|
188
|
+
|
|
189
|
+
it { Focus.next_visible_item.must_equal(false) }
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
166
193
|
describe '#prev_item' do
|
|
167
194
|
it 'the previous interface is focussed when the method is called' do
|
|
168
195
|
Focus.add('thallium')
|
|
@@ -178,6 +205,36 @@ module Vedeu
|
|
|
178
205
|
end
|
|
179
206
|
end
|
|
180
207
|
|
|
208
|
+
describe '#prev_visible_item' do
|
|
209
|
+
before do
|
|
210
|
+
Vedeu.interface('gold') { visible true }
|
|
211
|
+
Vedeu.interface('silver') { visible true }
|
|
212
|
+
Vedeu.interface('platinum') { visible false }
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it 'the previous visible interface is focussed when the method is called' do
|
|
216
|
+
Focus.prev_visible_item.must_equal('silver')
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
context 'when there are no visible interfaces' do
|
|
220
|
+
before do
|
|
221
|
+
Vedeu.interface('gold') { visible false }
|
|
222
|
+
Vedeu.interface('silver') { visible false }
|
|
223
|
+
Vedeu.interface('platinum') { visible false }
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it 'puts the first interface defined in focus' do
|
|
227
|
+
Focus.prev_visible_item.must_equal('gold')
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
context 'when there are no interfaces' do
|
|
232
|
+
before { Vedeu::Focus.reset }
|
|
233
|
+
|
|
234
|
+
it { Focus.prev_visible_item.must_equal(false) }
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
181
238
|
describe '#refresh' do
|
|
182
239
|
before do
|
|
183
240
|
Focus.add('thallium')
|
|
@@ -43,6 +43,7 @@ module Vedeu
|
|
|
43
43
|
|
|
44
44
|
it { subject.must_be_instance_of(described) }
|
|
45
45
|
it { subject.attributes.must_equal(attributes) }
|
|
46
|
+
it { subject.to_s.must_equal("\e[38;2;34;0;34m\e[48;2;255;0;255m") }
|
|
46
47
|
end
|
|
47
48
|
|
|
48
49
|
context 'when the value is a Hash' do
|
|
@@ -62,6 +63,7 @@ module Vedeu
|
|
|
62
63
|
|
|
63
64
|
it { subject.must_be_instance_of(described) }
|
|
64
65
|
it { subject.attributes.must_equal(attributes) }
|
|
66
|
+
it { subject.to_s.must_equal("\e[38;2;0;255;0m\e[48;2;0;34;0m") }
|
|
65
67
|
end
|
|
66
68
|
|
|
67
69
|
context 'when the value of :colour is a Hash' do
|
|
@@ -79,6 +81,9 @@ module Vedeu
|
|
|
79
81
|
background: '#7700ff',
|
|
80
82
|
foreground: '',
|
|
81
83
|
}) }
|
|
84
|
+
it {
|
|
85
|
+
subject.to_s.must_equal("\e[48;2;119;0;255m")
|
|
86
|
+
}
|
|
82
87
|
end
|
|
83
88
|
|
|
84
89
|
context 'and a :foreground is defined' do
|
|
@@ -95,6 +100,9 @@ module Vedeu
|
|
|
95
100
|
background: '',
|
|
96
101
|
foreground: '#220077',
|
|
97
102
|
}) }
|
|
103
|
+
it {
|
|
104
|
+
subject.to_s.must_equal("\e[38;2;34;0;119m")
|
|
105
|
+
}
|
|
98
106
|
end
|
|
99
107
|
|
|
100
108
|
context 'and neither a :background or :foreground is defined' do
|
|
@@ -109,6 +117,7 @@ module Vedeu
|
|
|
109
117
|
background: '',
|
|
110
118
|
foreground: '',
|
|
111
119
|
}) }
|
|
120
|
+
it { subject.to_s.must_equal('') }
|
|
112
121
|
end
|
|
113
122
|
end
|
|
114
123
|
end
|
|
@@ -126,6 +135,7 @@ module Vedeu
|
|
|
126
135
|
background: '#000022',
|
|
127
136
|
foreground: '',
|
|
128
137
|
}) }
|
|
138
|
+
it { subject.to_s.must_equal("\e[48;2;0;0;34m") }
|
|
129
139
|
end
|
|
130
140
|
|
|
131
141
|
context 'when the hash has a :foreground defined' do
|
|
@@ -140,6 +150,7 @@ module Vedeu
|
|
|
140
150
|
background: '',
|
|
141
151
|
foreground: '#aadd00',
|
|
142
152
|
}) }
|
|
153
|
+
it { subject.to_s.must_equal("\e[38;2;170;221;0m") }
|
|
143
154
|
end
|
|
144
155
|
|
|
145
156
|
context 'when neither a :background or :foreground is defined' do
|
|
@@ -154,6 +165,7 @@ module Vedeu
|
|
|
154
165
|
background: '',
|
|
155
166
|
foreground: '',
|
|
156
167
|
}) }
|
|
168
|
+
it { subject.to_s.must_equal('') }
|
|
157
169
|
end
|
|
158
170
|
end
|
|
159
171
|
end
|
|
@@ -5,26 +5,16 @@ module Vedeu
|
|
|
5
5
|
describe Log do
|
|
6
6
|
|
|
7
7
|
let(:described) { Vedeu::Log }
|
|
8
|
-
let(:_message)
|
|
9
|
-
let(:force)
|
|
10
|
-
let(:type)
|
|
8
|
+
let(:_message) { 'Some message...' }
|
|
9
|
+
let(:force) { false }
|
|
10
|
+
let(:type) { :info }
|
|
11
11
|
|
|
12
12
|
describe '.log' do
|
|
13
13
|
subject { described.log(message: _message, force: force, type: type) }
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
context 'when logging has not been forced' do
|
|
20
|
-
context 'when the configuration requests logging' do
|
|
21
|
-
# it { skip }
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
context 'when the configuration does not request logging' do
|
|
25
|
-
# it { skip }
|
|
26
|
-
end
|
|
27
|
-
end
|
|
15
|
+
it { subject.must_equal(
|
|
16
|
+
["\e[97m[info] \e[39m", "\e[39mSome message...\e[39m"]
|
|
17
|
+
) }
|
|
28
18
|
end
|
|
29
19
|
|
|
30
20
|
describe '.log_stdout' do
|
|
@@ -53,12 +43,6 @@ module Vedeu
|
|
|
53
43
|
}
|
|
54
44
|
end
|
|
55
45
|
|
|
56
|
-
describe '.logger' do
|
|
57
|
-
subject { described.logger }
|
|
58
|
-
|
|
59
|
-
# it { skip }
|
|
60
|
-
end
|
|
61
|
-
|
|
62
46
|
end # Log
|
|
63
47
|
|
|
64
48
|
end # Vedeu
|
data/vedeu.gemspec
CHANGED
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
|
|
23
23
|
spec.add_development_dependency 'aruba', '0.6.2'
|
|
24
24
|
spec.add_development_dependency 'cucumber', '2.0.0'
|
|
25
|
-
spec.add_development_dependency 'guard', '2.12.
|
|
25
|
+
spec.add_development_dependency 'guard', '2.12.7'
|
|
26
26
|
spec.add_development_dependency 'guard-bundler', '2.1.0'
|
|
27
27
|
spec.add_development_dependency 'guard-minitest', '2.4.4'
|
|
28
28
|
spec.add_development_dependency 'inch', '0.6.3'
|
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.4.
|
|
4
|
+
version: 0.4.38
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gavin Laking
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-06-
|
|
11
|
+
date: 2015-06-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: aruba
|
|
@@ -44,14 +44,14 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - '='
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 2.12.
|
|
47
|
+
version: 2.12.7
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - '='
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 2.12.
|
|
54
|
+
version: 2.12.7
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: guard-bundler
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -340,6 +340,7 @@ files:
|
|
|
340
340
|
- lib/vedeu/cursor/cursor.rb
|
|
341
341
|
- lib/vedeu/cursor/move.rb
|
|
342
342
|
- lib/vedeu/cursor/refresh_cursor.rb
|
|
343
|
+
- lib/vedeu/cursor/reposition.rb
|
|
343
344
|
- lib/vedeu/debug.rb
|
|
344
345
|
- lib/vedeu/distributed/all.rb
|
|
345
346
|
- lib/vedeu/distributed/client.rb
|
|
@@ -386,7 +387,7 @@ files:
|
|
|
386
387
|
- lib/vedeu/generator/templates/application/app/views/interfaces/name.erb
|
|
387
388
|
- lib/vedeu/generator/templates/application/app/views/name.erb
|
|
388
389
|
- lib/vedeu/generator/templates/application/app/views/templates/name.erb
|
|
389
|
-
- lib/vedeu/generator/templates/application/application.
|
|
390
|
+
- lib/vedeu/generator/templates/application/application.erb
|
|
390
391
|
- lib/vedeu/generator/templates/application/bin/name
|
|
391
392
|
- lib/vedeu/generator/templates/application/config/app_name.erb
|
|
392
393
|
- lib/vedeu/generator/templates/application/config/configuration.rb
|
|
@@ -484,7 +485,6 @@ files:
|
|
|
484
485
|
- lib/vedeu/storage/fifo_store.rb
|
|
485
486
|
- lib/vedeu/storage/store.rb
|
|
486
487
|
- lib/vedeu/support/all.rb
|
|
487
|
-
- lib/vedeu/support/colour_coercer.rb
|
|
488
488
|
- lib/vedeu/support/common.rb
|
|
489
489
|
- lib/vedeu/support/log.rb
|
|
490
490
|
- lib/vedeu/support/options.rb
|
|
@@ -515,6 +515,7 @@ files:
|
|
|
515
515
|
- test/lib/vedeu/cursor/cursor_test.rb
|
|
516
516
|
- test/lib/vedeu/cursor/move_test.rb
|
|
517
517
|
- test/lib/vedeu/cursor/refresh_cursor_test.rb
|
|
518
|
+
- test/lib/vedeu/cursor/reposition_test.rb
|
|
518
519
|
- test/lib/vedeu/distributed/client_test.rb
|
|
519
520
|
- test/lib/vedeu/distributed/server_test.rb
|
|
520
521
|
- test/lib/vedeu/distributed/subprocess_test.rb
|
|
@@ -617,7 +618,6 @@ files:
|
|
|
617
618
|
- test/lib/vedeu/storage/conveyor_store_test.rb
|
|
618
619
|
- test/lib/vedeu/storage/fifo_store_test.rb
|
|
619
620
|
- test/lib/vedeu/storage/store_test.rb
|
|
620
|
-
- test/lib/vedeu/support/colour_coercer_test.rb
|
|
621
621
|
- test/lib/vedeu/support/common_test.rb
|
|
622
622
|
- test/lib/vedeu/support/log_test.rb
|
|
623
623
|
- test/lib/vedeu/support/options_test.rb
|
|
@@ -679,6 +679,7 @@ test_files:
|
|
|
679
679
|
- test/lib/vedeu/cursor/cursor_test.rb
|
|
680
680
|
- test/lib/vedeu/cursor/move_test.rb
|
|
681
681
|
- test/lib/vedeu/cursor/refresh_cursor_test.rb
|
|
682
|
+
- test/lib/vedeu/cursor/reposition_test.rb
|
|
682
683
|
- test/lib/vedeu/distributed/client_test.rb
|
|
683
684
|
- test/lib/vedeu/distributed/server_test.rb
|
|
684
685
|
- test/lib/vedeu/distributed/subprocess_test.rb
|
|
@@ -781,7 +782,6 @@ test_files:
|
|
|
781
782
|
- test/lib/vedeu/storage/conveyor_store_test.rb
|
|
782
783
|
- test/lib/vedeu/storage/fifo_store_test.rb
|
|
783
784
|
- test/lib/vedeu/storage/store_test.rb
|
|
784
|
-
- test/lib/vedeu/support/colour_coercer_test.rb
|
|
785
785
|
- test/lib/vedeu/support/common_test.rb
|
|
786
786
|
- test/lib/vedeu/support/log_test.rb
|
|
787
787
|
- test/lib/vedeu/support/options_test.rb
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
module Vedeu
|
|
2
|
-
|
|
3
|
-
class ColourCoercer
|
|
4
|
-
|
|
5
|
-
# @param value [Vedeu::Colour|Hash<Symbol => Fixnum|String|Symbol>]
|
|
6
|
-
# @return [Vedeu::Colour]
|
|
7
|
-
def self.coerce(value)
|
|
8
|
-
new(value).coerce
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# @param value [Hash<Symbol => Fixnum|String|Symbol>]
|
|
12
|
-
def self.from_hash(value)
|
|
13
|
-
new(value).from_hash
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# @param value [Vedeu::Colour|Hash<Symbol => Fixnum|String|Symbol]
|
|
17
|
-
# @return [Vedeu::ColourCoercer]
|
|
18
|
-
def initialize(value)
|
|
19
|
-
@value = value
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# @return [Vedeu::Colour]
|
|
23
|
-
def coerce
|
|
24
|
-
return value if colour?
|
|
25
|
-
|
|
26
|
-
if hash?
|
|
27
|
-
Vedeu::ColourCoercer.from_hash(value)
|
|
28
|
-
|
|
29
|
-
else
|
|
30
|
-
build
|
|
31
|
-
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# @return [Vedeu::Colour]
|
|
36
|
-
def from_hash
|
|
37
|
-
return build unless value
|
|
38
|
-
|
|
39
|
-
if colour_key?
|
|
40
|
-
Vedeu::ColourCoercer.coerce(value[:colour])
|
|
41
|
-
|
|
42
|
-
elsif background? || foreground?
|
|
43
|
-
build_from_hash(value)
|
|
44
|
-
|
|
45
|
-
else
|
|
46
|
-
build
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
protected
|
|
52
|
-
|
|
53
|
-
# @!attribute [r] colour
|
|
54
|
-
# @return [void]
|
|
55
|
-
attr_reader :value
|
|
56
|
-
|
|
57
|
-
private
|
|
58
|
-
|
|
59
|
-
# @return [Vedeu::Colour]
|
|
60
|
-
def build
|
|
61
|
-
Vedeu::Colour.new
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# @param value [Hash<Symbol => Fixnum|String|Symbol>]
|
|
65
|
-
# @return [Vedeu::Colour]
|
|
66
|
-
def build_from_hash(value)
|
|
67
|
-
Vedeu::Colour.new(value)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# @return [Boolean]
|
|
71
|
-
def colour?
|
|
72
|
-
value.is_a?(Vedeu::Colour)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# @return [Boolean]
|
|
76
|
-
def hash?
|
|
77
|
-
value.is_a?(Hash)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# @return [Boolean]
|
|
81
|
-
def background?
|
|
82
|
-
value.key?(:background)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# @return [Boolean]
|
|
86
|
-
def colour_key?
|
|
87
|
-
value.key?(:colour)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# @return [Boolean]
|
|
91
|
-
def foreground?
|
|
92
|
-
value.key?(:foreground)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
end # ColourCoercer
|
|
96
|
-
|
|
97
|
-
end # Vedeu
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
module Vedeu
|
|
4
|
-
|
|
5
|
-
describe ColourCoercer do
|
|
6
|
-
|
|
7
|
-
let(:described) { Vedeu::ColourCoercer }
|
|
8
|
-
let(:instance) { described.new(_value) }
|
|
9
|
-
let(:_value) { }
|
|
10
|
-
|
|
11
|
-
describe '#initialize' do
|
|
12
|
-
subject { instance }
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
describe '.coerce' do
|
|
16
|
-
it { described.must_respond_to(:coerce) }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
describe '.from_hash' do
|
|
20
|
-
it { described.must_respond_to(:from_hash) }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe '#coerce' do
|
|
24
|
-
subject { instance.coerce }
|
|
25
|
-
|
|
26
|
-
context 'when no value is given' do
|
|
27
|
-
it { subject.must_be_instance_of(Vedeu::Colour) }
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context 'when a value is given' do
|
|
31
|
-
context 'when the value is a Vedeu::Colour' do
|
|
32
|
-
let(:_value) { Vedeu::Colour.new }
|
|
33
|
-
|
|
34
|
-
it { subject.must_equal(_value) }
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
context 'when the value is a Hash' do
|
|
38
|
-
let(:_value) { { } }
|
|
39
|
-
|
|
40
|
-
it {
|
|
41
|
-
Vedeu::ColourCoercer.expects(:from_hash).with(_value)
|
|
42
|
-
subject
|
|
43
|
-
}
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
describe '#from_hash' do
|
|
49
|
-
subject { instance.from_hash }
|
|
50
|
-
|
|
51
|
-
context 'when no value is given' do
|
|
52
|
-
it { subject.must_be_instance_of(Vedeu::Colour) }
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
context 'when a value is given' do
|
|
56
|
-
context 'when the value has a :colour key' do
|
|
57
|
-
let(:_value) { { colour: colour_value } }
|
|
58
|
-
let(:colour_value) { Vedeu::Colour.new }
|
|
59
|
-
|
|
60
|
-
it {
|
|
61
|
-
Vedeu::ColourCoercer.expects(:coerce).with(colour_value)
|
|
62
|
-
subject
|
|
63
|
-
}
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
context 'when the value has a :background or :foreground key' do
|
|
67
|
-
let(:_value) { { background: '#000000', foreground: '#ffffff' } }
|
|
68
|
-
|
|
69
|
-
it {
|
|
70
|
-
Vedeu::Colour.expects(:new).with(_value)
|
|
71
|
-
subject
|
|
72
|
-
}
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
context 'when the value is empty or has unhandled keys' do
|
|
76
|
-
let(:_value) { { unhandled: :some_value } }
|
|
77
|
-
|
|
78
|
-
it { subject.must_be_instance_of(Vedeu::Colour) }
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
end # ColourCoercer
|
|
84
|
-
|
|
85
|
-
end # Vedeu
|