vedeu 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f6d179b45a82d00d57376efe3683b168f9184554
4
- data.tar.gz: 6ba43f5ff413f4165fda160cd425e410e62b57f7
3
+ metadata.gz: 059ea4a8cd87f17bcbb219ef8301a54ff5eb10a4
4
+ data.tar.gz: 9b88929ff9edc741c3fcc3f10545c2d7c1cfe724
5
5
  SHA512:
6
- metadata.gz: 6d7d5f0548a15c0df95506edbde7600242c6c16e9963028eb0dda37160f73d96fc066e20f293093a06d428100d88b055e59cef0788856fc2c23d27dc5e3e99e8
7
- data.tar.gz: 4e8d42728d9dfb365402aac29cb6fb737f7af73c9fb4310c03ffbf0d7c778f7a39ebe6f73877d434abd74fc9b3152ad854198b2791d285d63f09ac8027d88c9d
6
+ metadata.gz: 7c54668ab83878f567eddf5585cd8d09f9da674b864b72bcbeae3d3e55b7bd4cc7e5378615f72056b9419507efe127d6967a1f6febccadc2d9f41d66cb843be4
7
+ data.tar.gz: 26d4bdfb02800408c9621666e93f7558457b9c538cc764d2a14ced69ae3eb62073144a1d6e345ab6228f5a666c8d16d5ca00e9db312e327fb581df95e8bfe060
data/docs/api.md CHANGED
@@ -29,8 +29,10 @@ Note: Nesting indicates where an API method is allowed/supposed to be used.
29
29
  ### Events
30
30
 
31
31
  - Vedeu.bind
32
+ - Vedeu.bind_alias
32
33
  - Vedeu.trigger
33
34
  - Vedeu.unbind
35
+ - Vedeu.unbind_alias
34
36
 
35
37
  ### Geometry
36
38
 
data/lib/vedeu/all.rb CHANGED
@@ -79,6 +79,7 @@ require 'vedeu/output/renderers/terminal'
79
79
  require 'vedeu/output/renderers/text'
80
80
  require 'vedeu/output/renderers'
81
81
 
82
+ require 'vedeu/events/event_aliases'
82
83
  require 'vedeu/events/trigger'
83
84
  require 'vedeu/events/events'
84
85
  require 'vedeu/events/event'
data/lib/vedeu/api.rb CHANGED
@@ -101,9 +101,9 @@ module Vedeu
101
101
  def_delegators Vedeu::DSL::View, :interface, :renders, :render, :views
102
102
 
103
103
  # @example
104
- # Vedeu.bind
105
- # Vedeu.bound?
106
- # Vedeu.unbind
104
+ # Vedeu.bind(name) { }
105
+ # Vedeu.bound?(name)
106
+ # Vedeu.unbind(name)
107
107
  #
108
108
  # @!method bind
109
109
  # @see Vedeu::Event.bind
@@ -113,6 +113,16 @@ module Vedeu
113
113
  # @see Vedeu::Event.unbind
114
114
  def_delegators Vedeu::Event, :bind, :bound?, :unbind
115
115
 
116
+ # @example
117
+ # Vedeu.bind_alias(alias_name, event_name)
118
+ # Vedeu.unbind_alias(alias_name)
119
+ #
120
+ # @!method bind_alias
121
+ # @see Vedeu::EventAliases.bind_alias
122
+ # @!method unbind_alias
123
+ # @see Vedeu::EventAliases.unbind_alias
124
+ def_delegators Vedeu::EventAliases, :bind_alias, :unbind_alias
125
+
116
126
  # @example
117
127
  # Vedeu.focus
118
128
  # Vedeu.focus_by_name
@@ -67,9 +67,8 @@ module Vedeu
67
67
  Vedeu.bind(:_cursor_origin_) do |name|
68
68
  Vedeu::Move.by_name(Vedeu::Cursor, :origin, name)
69
69
  end
70
- Vedeu.bind(:_cursor_reset_) do |name|
71
- Vedeu.trigger(:_cursor_origin_, name)
72
- end
70
+
71
+ Vedeu.bind_alias(:_cursor_reset_, :_cursor_origin_)
73
72
  end
74
73
 
75
74
  # When triggered will return the current position of the cursor.
@@ -130,6 +129,7 @@ module Vedeu
130
129
  #
131
130
  # @example
132
131
  # Vedeu.trigger(:_geometry_down_, name)
132
+ # Vedeu.trigger(:_view_down_, name)
133
133
  #
134
134
  # @return [TrueClass]
135
135
  # @see Vedeu::Move
@@ -137,12 +137,15 @@ module Vedeu
137
137
  Vedeu.bind(:_geometry_down_) do |name|
138
138
  Vedeu::Move.by_name(Vedeu::Geometry, :down, name)
139
139
  end
140
+
141
+ Vedeu.bind_alias(:_view_down_, :_geometry_down_)
140
142
  end
141
143
 
142
144
  # Move the geometry left by one character.
143
145
  #
144
146
  # @example
145
147
  # Vedeu.trigger(:_geometry_left_, name)
148
+ # Vedeu.trigger(:_view_left_, name)
146
149
  #
147
150
  # @return [TrueClass]
148
151
  # @see Vedeu::Move
@@ -150,12 +153,15 @@ module Vedeu
150
153
  Vedeu.bind(:_geometry_left_) do |name|
151
154
  Vedeu::Move.by_name(Vedeu::Geometry, :left, name)
152
155
  end
156
+
157
+ Vedeu.bind_alias(:_view_left_, :_geometry_left_)
153
158
  end
154
159
 
155
160
  # Move the geometry right by one character.
156
161
  #
157
162
  # @example
158
163
  # Vedeu.trigger(:_geometry_right_, name)
164
+ # Vedeu.trigger(:_view_right_, name)
159
165
  #
160
166
  # @return [TrueClass]
161
167
  # @see Vedeu::Move
@@ -163,12 +169,15 @@ module Vedeu
163
169
  Vedeu.bind(:_geometry_right_) do |name|
164
170
  Vedeu::Move.by_name(Vedeu::Geometry, :right, name)
165
171
  end
172
+
173
+ Vedeu.bind_alias(:_view_right_, :_geometry_right_)
166
174
  end
167
175
 
168
176
  # Move the geometry up by one character.
169
177
  #
170
178
  # @example
171
179
  # Vedeu.trigger(:_geometry_up_, name)
180
+ # Vedeu.trigger(:_view_up_, name)
172
181
  #
173
182
  # @return [TrueClass]
174
183
  # @see Vedeu::Move
@@ -176,6 +185,8 @@ module Vedeu
176
185
  Vedeu.bind(:_geometry_up_) do |name|
177
186
  Vedeu::Move.by_name(Vedeu::Geometry, :up, name)
178
187
  end
188
+
189
+ Vedeu.bind_alias(:_view_up_, :_geometry_up_)
179
190
  end
180
191
 
181
192
  end # Movement
@@ -55,17 +55,12 @@ module Vedeu
55
55
  Vedeu::Cursor.hide_cursor(name)
56
56
  end
57
57
 
58
- # @todo Remove this aliasing event. (GL 2015-07-26)
59
- Vedeu.bind(:_cursor_hide_) do |name|
60
- Vedeu.trigger(:_hide_cursor_, name)
61
- end
58
+ Vedeu.bind_alias(:_cursor_hide_, :_hide_cursor_)
62
59
  end
63
60
 
64
61
  # @see Vedeu::Group#hide
65
62
  def hide_group!
66
- Vedeu.bind(:_hide_group_) do |name|
67
- Vedeu::Group.hide_group(name)
68
- end
63
+ Vedeu.bind(:_hide_group_) { |name| Vedeu::Group.hide_group(name) }
69
64
  end
70
65
 
71
66
  # Hiding an interface.
@@ -95,17 +90,12 @@ module Vedeu
95
90
  Vedeu::Cursor.show_cursor(name)
96
91
  end
97
92
 
98
- # @todo Remove this aliasing event. (GL 2015-07-26)
99
- Vedeu.bind(:_cursor_show_) do |name|
100
- Vedeu.trigger(:_show_cursor_, name)
101
- end
93
+ Vedeu.bind_alias(:_cursor_show_, :_show_cursor_)
102
94
  end
103
95
 
104
96
  # @see Vedeu::Group#show
105
97
  def show_group!
106
- Vedeu.bind(:_show_group_) do |name|
107
- Vedeu::Group.show_group(name)
108
- end
98
+ Vedeu.bind(:_show_group_) { |name| Vedeu::Group.show_group(name) }
109
99
  end
110
100
 
111
101
  # Showing an interface.
@@ -15,6 +15,8 @@ module Vedeu
15
15
  #
16
16
  # @return [TrueClass]
17
17
  def setup!
18
+ Vedeu::Events.reset!
19
+
18
20
  Vedeu::Bindings::Application.setup!
19
21
  Vedeu::Bindings::Visibility.setup!
20
22
  Vedeu::Bindings::Movement.setup!
@@ -99,7 +99,7 @@ module Vedeu
99
99
  def hide
100
100
  super
101
101
 
102
- visibility
102
+ Vedeu::Output.render(visibility)
103
103
  end
104
104
 
105
105
  # Return the position of this cursor.
@@ -119,7 +119,7 @@ module Vedeu
119
119
  def show
120
120
  super
121
121
 
122
- visibility
122
+ Vedeu::Output.render(visibility)
123
123
  end
124
124
 
125
125
  private
@@ -93,7 +93,7 @@ module Vedeu
93
93
  # @param name [Symbol]
94
94
  # @return [Boolean]
95
95
  def bound?(name)
96
- Vedeu.events.registered?(name)
96
+ Vedeu.events.registered?(name) || Vedeu::EventAliases.registered?(name)
97
97
  end
98
98
 
99
99
  # Unbind events from a named handler.
@@ -0,0 +1,87 @@
1
+ module Vedeu
2
+
3
+ # Allows the storing of event aliases. Each alias can contain multiple event
4
+ # names.
5
+ #
6
+ module EventAliases
7
+
8
+ extend self
9
+
10
+ # @param alias_name [Symbol]
11
+ # @param event_name [Symbol]
12
+ # @return [Hash<Symbol => Array<Symbol>>]
13
+ def add(alias_name, event_name)
14
+ storage[alias_name] << event_name
15
+ end
16
+ alias_method :bind_alias, :add
17
+
18
+ # Return a boolean indicating whether the storage is empty.
19
+ #
20
+ # @return [Boolean]
21
+ def empty?
22
+ storage.empty?
23
+ end
24
+
25
+ # @param alias_name [Symbol]
26
+ # @return [Array<Symbol>]
27
+ def find(alias_name)
28
+ storage[alias_name]
29
+ end
30
+
31
+ # Returns a boolean indicating whether the alias is registered.
32
+ #
33
+ # @param alias_name [Symbol]
34
+ # @return [Boolean]
35
+ def registered?(alias_name)
36
+ return false if alias_name.nil? || alias_name.empty?
37
+ return false if empty?
38
+
39
+ storage.include?(alias_name)
40
+ end
41
+
42
+ # @param alias_name [Symbol]
43
+ # @return [FalseClass|Hash<Symbol => Array<Symbol>>]
44
+ def remove(alias_name)
45
+ return false if empty?
46
+ return false unless registered?(alias_name)
47
+
48
+ storage.delete(alias_name)
49
+ storage
50
+ end
51
+ alias_method :unbind_alias, :remove
52
+
53
+ # @return [Hash<Symbol => Array<Symbol>>]
54
+ def reset
55
+ @storage = in_memory
56
+ end
57
+ alias_method :reset!, :reset
58
+
59
+ # Access to the storage for this repository.
60
+ #
61
+ # @return [Hash<Symbol => Array<Symbol>>]
62
+ def storage
63
+ @storage ||= in_memory
64
+ end
65
+
66
+ # @param alias_name [Symbol]
67
+ # @param args [void]
68
+ # @return [FalseClass|Array<void>|void]
69
+ def trigger(alias_name, *args)
70
+ return [] unless registered?(alias_name)
71
+
72
+ storage[alias_name].map do |event_name|
73
+ Vedeu.log(type: :debug, message: "#{event_name}")
74
+ Vedeu::Trigger.trigger(event_name, *args)
75
+ end
76
+ end
77
+
78
+ private
79
+
80
+ # @return [Hash<Symbol => Array<Symbol>>]
81
+ def in_memory
82
+ Hash.new { |hash, key| hash[key] = [] }
83
+ end
84
+
85
+ end # EventAliases
86
+
87
+ end # Vedeu
@@ -66,9 +66,17 @@ module Vedeu
66
66
  #
67
67
  # @return [Array|Array<Vedeu::Event>]
68
68
  def registered_events
69
- return [] unless repository.registered?(name)
69
+ if repository.registered?(name)
70
+ repository.find(name)
70
71
 
71
- repository.find(name)
72
+ else
73
+ Vedeu::EventAliases.find(name).map do |event_name|
74
+ Vedeu::Trigger.trigger(event_name, *args)
75
+ end
76
+
77
+ []
78
+
79
+ end
72
80
  end
73
81
 
74
82
  end # Trigger
@@ -0,0 +1,118 @@
1
+ module Vedeu
2
+
3
+ module Presentation
4
+
5
+ # Provides colour related presentation behaviour.
6
+ #
7
+ module Colour
8
+
9
+ # When the background colour for the model exists, return it, otherwise
10
+ # returns the parent background colour, or an empty Vedeu::Background.
11
+ #
12
+ # @return [Vedeu::Background]
13
+ def background
14
+ @background ||= if colour
15
+ colour.background
16
+
17
+ else
18
+ parent_background
19
+
20
+ end
21
+ end
22
+
23
+ # Allows the setting of the background colour by coercing the given value
24
+ # into a Vedeu::Background colour.
25
+ #
26
+ # @return [Vedeu::Background]
27
+ def background=(value)
28
+ self.colour = Vedeu::Colour.coerce(
29
+ background: Vedeu::Background.coerce(value),
30
+ foreground: colour.foreground)
31
+ end
32
+
33
+ # @return [Vedeu::Colour]
34
+ def colour
35
+ @colour ||= if attributes[:colour]
36
+ Vedeu::Colour.coerce(attributes[:colour])
37
+
38
+ elsif parent_colour
39
+ Vedeu::Colour.coerce(parent_colour)
40
+
41
+ else
42
+ Vedeu::Colour.new
43
+
44
+ end
45
+ end
46
+
47
+ # Allows the setting of the model's colour by coercing the given value
48
+ # into a Vedeu::Colour.
49
+ #
50
+ # @return [Vedeu::Colour]
51
+ def colour=(value)
52
+ @colour = attributes[:colour] = Vedeu::Colour.coerce(value)
53
+ end
54
+
55
+ # When the foreground colour for the model exists, return it, otherwise
56
+ # returns the parent foreground colour, or an empty Vedeu::Foreground.
57
+ #
58
+ # @return [Vedeu::Foreground]
59
+ def foreground
60
+ @foreground ||= if colour
61
+ colour.foreground
62
+
63
+ else
64
+ parent_foreground
65
+
66
+ end
67
+ end
68
+
69
+ # Allows the setting of the foreground colour by coercing the given value
70
+ # into a Vedeu::Foreground colour.
71
+ #
72
+ # @return [Vedeu::Foreground]
73
+ def foreground=(value)
74
+ self.colour = Vedeu::Colour.coerce(
75
+ foreground: Vedeu::Foreground.coerce(value),
76
+ background: colour.background)
77
+ end
78
+
79
+ # When a parent colour is available, returns the parent background colour,
80
+ # otherwise an empty Vedeu::Background.
81
+ #
82
+ # @return [Vedeu::Background]
83
+ def parent_background
84
+ if parent_colour
85
+ parent_colour.background
86
+
87
+ else
88
+ Vedeu::Background.new
89
+
90
+ end
91
+ end
92
+
93
+ # Returns the parent colour when available or NilClass.
94
+ #
95
+ # @return [String|NilClass]
96
+ def parent_colour
97
+ parent.colour if parent
98
+ end
99
+
100
+ # When a parent colour is available, returns the parent foreground colour,
101
+ # otherwise an empty Vedeu::Foreground.
102
+ #
103
+ # @return [Vedeu::Foreground]
104
+ def parent_foreground
105
+ if parent_colour
106
+ parent_colour.foreground
107
+
108
+ else
109
+ Vedeu::Foreground.new
110
+
111
+ end
112
+ end
113
+
114
+ end # Colour
115
+
116
+ end # Presentation
117
+
118
+ end # Vedeu
@@ -0,0 +1,45 @@
1
+ module Vedeu
2
+
3
+ module Presentation
4
+
5
+ # Provides style related presentation behaviour.
6
+ #
7
+ module Style
8
+
9
+ # Returns the parent style when available or NilClass.
10
+ #
11
+ # @return [String|NilClass]
12
+ def parent_style
13
+ if parent
14
+ parent.style
15
+
16
+ else
17
+ Vedeu::Style.new
18
+
19
+ end
20
+ end
21
+
22
+ # @return [Vedeu::Style]
23
+ def style
24
+ @style ||= if attributes[:style]
25
+ Vedeu::Style.coerce(attributes[:style])
26
+
27
+ elsif parent_style
28
+ Vedeu::Style.coerce(parent_style)
29
+
30
+ else
31
+ Vedeu::Style.new
32
+
33
+ end
34
+ end
35
+
36
+ # @return [Vedeu::Style]
37
+ def style=(value)
38
+ @style = Vedeu::Style.coerce(value)
39
+ end
40
+
41
+ end # Style
42
+
43
+ end # Presentation
44
+
45
+ end # Vedeu
@@ -1,3 +1,6 @@
1
+ require 'vedeu/output/presentation/colour'
2
+ require 'vedeu/output/presentation/style'
3
+
1
4
  module Vedeu
2
5
 
3
6
  # This module allows the sharing of presentation concerns between the models:
@@ -5,142 +8,8 @@ module Vedeu
5
8
  #
6
9
  module Presentation
7
10
 
8
- # When the background colour for the model exists, return it, otherwise
9
- # returns the parent background colour, or an empty Vedeu::Background.
10
- #
11
- # @return [Vedeu::Background]
12
- def background
13
- @background ||= if colour
14
- colour.background
15
-
16
- else
17
- parent_background
18
-
19
- end
20
- end
21
-
22
- # Allows the setting of the background colour by coercing the given value
23
- # into a Vedeu::Background colour.
24
- #
25
- # @return [Vedeu::Background]
26
- def background=(value)
27
- self.colour = Vedeu::Colour.coerce(
28
- background: Vedeu::Background.coerce(value),
29
- foreground: colour.foreground)
30
- end
31
-
32
- # @return [Vedeu::Colour]
33
- def colour
34
- @colour ||= if attributes[:colour]
35
- Vedeu::Colour.coerce(attributes[:colour])
36
-
37
- elsif parent_colour
38
- Vedeu::Colour.coerce(parent_colour)
39
-
40
- else
41
- Vedeu::Colour.new
42
-
43
- end
44
- end
45
-
46
- # Allows the setting of the model's colour by coercing the given value into
47
- # a Vedeu::Colour.
48
- #
49
- # @return [Vedeu::Colour]
50
- def colour=(value)
51
- @colour = attributes[:colour] = Vedeu::Colour.coerce(value)
52
- end
53
-
54
- # When the foreground colour for the model exists, return it, otherwise
55
- # returns the parent foreground colour, or an empty Vedeu::Foreground.
56
- #
57
- # @return [Vedeu::Foreground]
58
- def foreground
59
- @foreground ||= if colour
60
- colour.foreground
61
-
62
- else
63
- parent_foreground
64
-
65
- end
66
- end
67
-
68
- # Allows the setting of the foreground colour by coercing the given value
69
- # into a Vedeu::Foreground colour.
70
- #
71
- # @return [Vedeu::Foreground]
72
- def foreground=(value)
73
- self.colour = Vedeu::Colour.coerce(
74
- foreground: Vedeu::Foreground.coerce(value),
75
- background: colour.background)
76
- end
77
-
78
- # When a parent colour is available, returns the parent background colour,
79
- # otherwise an empty Vedeu::Background.
80
- #
81
- # @return [Vedeu::Background]
82
- def parent_background
83
- if parent_colour
84
- parent_colour.background
85
-
86
- else
87
- Vedeu::Background.new
88
-
89
- end
90
- end
91
-
92
- # Returns the parent colour when available or NilClass.
93
- #
94
- # @return [String|NilClass]
95
- def parent_colour
96
- parent.colour if parent
97
- end
98
-
99
- # When a parent colour is available, returns the parent foreground colour,
100
- # otherwise an empty Vedeu::Foreground.
101
- #
102
- # @return [Vedeu::Foreground]
103
- def parent_foreground
104
- if parent_colour
105
- parent_colour.foreground
106
-
107
- else
108
- Vedeu::Foreground.new
109
-
110
- end
111
- end
112
-
113
- # Returns the parent style when available or NilClass.
114
- #
115
- # @return [String|NilClass]
116
- def parent_style
117
- if parent
118
- parent.style
119
-
120
- else
121
- Vedeu::Style.new
122
-
123
- end
124
- end
125
-
126
- # @return [Vedeu::Style]
127
- def style
128
- @style ||= if attributes[:style]
129
- Vedeu::Style.coerce(attributes[:style])
130
-
131
- elsif parent_style
132
- Vedeu::Style.coerce(parent_style)
133
-
134
- else
135
- Vedeu::Style.new
136
-
137
- end
138
- end
139
-
140
- # @return [Vedeu::Style]
141
- def style=(value)
142
- @style = Vedeu::Style.coerce(value)
143
- end
11
+ include Vedeu::Presentation::Colour
12
+ include Vedeu::Presentation::Style
144
13
 
145
14
  # Converts the colours and styles to escape sequences, and when the parent
146
15
  # model has previously set the colour and style, reverts back to that for
@@ -34,6 +34,8 @@ module Vedeu
34
34
  end
35
35
  end
36
36
  threads.each(&:join)
37
+
38
+ output
37
39
  end
38
40
 
39
41
  # Adds the given renderer class(es) to the list of renderers.
@@ -172,11 +172,6 @@ module Vedeu
172
172
 
173
173
  private
174
174
 
175
- # @return [Hash]
176
- def in_memory
177
- {}
178
- end
179
-
180
175
  # @return [String]
181
176
  def log_store(model)
182
177
  type = registered?(model.name) ? :update : :create
@@ -69,6 +69,11 @@ module Vedeu
69
69
  end
70
70
  alias_method :all, :storage
71
71
 
72
+ # @return [Hash]
73
+ def in_memory
74
+ {}
75
+ end
76
+
72
77
  end # Store
73
78
 
74
79
  end # Vedeu
data/lib/vedeu/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Vedeu
2
2
 
3
3
  # The current version of Vedeu.
4
- VERSION = '0.5.1'
4
+ VERSION = '0.5.2'
5
5
 
6
6
  end
@@ -20,8 +20,11 @@ module Vedeu
20
20
  it { Vedeu.must_respond_to(:render) }
21
21
  it { Vedeu.must_respond_to(:views) }
22
22
  it { Vedeu.must_respond_to(:bind) }
23
+ it { Vedeu.must_respond_to(:bind_alias) }
23
24
  it { Vedeu.must_respond_to(:bound?) }
24
25
  it { Vedeu.must_respond_to(:unbind) }
26
+ it { Vedeu.must_respond_to(:unbind_alias) }
27
+ it { Vedeu.must_respond_to(:events) }
25
28
  it { Vedeu.must_respond_to(:focus) }
26
29
  it { Vedeu.must_respond_to(:focus_by_name) }
27
30
  it { Vedeu.must_respond_to(:focussed?) }
@@ -0,0 +1,118 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe EventAliases do
6
+
7
+ let(:described) { Vedeu::EventAliases }
8
+
9
+ before do
10
+ Vedeu::EventAliases.reset
11
+ end
12
+ after do
13
+ Vedeu::Bindings.setup!
14
+ end
15
+
16
+ describe '.add' do
17
+ let(:alias_name) { :alias_test }
18
+ let(:event_name) { :event_test }
19
+
20
+ subject { described.add(alias_name, event_name) }
21
+
22
+ it { described.must_respond_to(:bind_alias) }
23
+
24
+ context 'when the alias is already registered' do
25
+ before { Vedeu::EventAliases.add(:alias_test, :event_test) }
26
+
27
+ it { subject.must_equal([:event_test, :event_test]) }
28
+ end
29
+
30
+ context 'when the alias is not already registered' do
31
+ it { subject.must_equal([:event_test]) }
32
+ end
33
+ end
34
+
35
+ describe '.empty?' do
36
+ subject { described.empty? }
37
+
38
+ context 'when no aliases are registered' do
39
+ before { Vedeu::EventAliases.reset }
40
+
41
+ it { subject.must_equal(true) }
42
+ end
43
+
44
+ context 'when aliases are registered' do
45
+ before { Vedeu::EventAliases.add(:alias_test, :event_test) }
46
+
47
+ it { subject.must_equal(false) }
48
+ end
49
+ end
50
+
51
+ describe '.registered?' do
52
+ let(:alias_name) { :alias_test }
53
+
54
+ subject { described.registered?(alias_name) }
55
+
56
+ context 'when the alias is registered' do
57
+ before { Vedeu::EventAliases.add(:alias_test, :event_test) }
58
+
59
+ it { subject.must_equal(true) }
60
+ end
61
+
62
+ context 'when the alias is not registered' do
63
+ it { subject.must_equal(false) }
64
+ end
65
+ end
66
+
67
+ describe '.remove' do
68
+ let(:alias_name) { :alias_test }
69
+
70
+ before { Vedeu::EventAliases.reset }
71
+
72
+ subject { described.remove(alias_name) }
73
+
74
+ it { described.must_respond_to(:unbind_alias) }
75
+
76
+ context 'when no aliases are registered' do
77
+ it { subject.must_equal(false) }
78
+ end
79
+
80
+ context 'when the alias is not registered' do
81
+ before { Vedeu::EventAliases.add(:other_alias_test, :event_test) }
82
+
83
+ it { subject.must_equal(false) }
84
+ end
85
+
86
+ context 'when the alias is registered' do
87
+ before { Vedeu::EventAliases.add(:alias_test, :event_test) }
88
+
89
+ it { subject.must_equal({}) }
90
+ end
91
+ end
92
+
93
+ describe '.reset' do
94
+ subject { described.reset }
95
+
96
+ it { described.must_respond_to(:reset!) }
97
+
98
+ it { subject.must_equal({}) }
99
+ end
100
+
101
+ describe '.storage' do
102
+ before { Vedeu::EventAliases.reset }
103
+
104
+ subject { described.storage }
105
+
106
+ it { subject.must_equal({}) }
107
+ end
108
+
109
+ describe '.trigger' do
110
+ let(:alias_name) {}
111
+ let(:args) {}
112
+
113
+ subject { described.trigger(alias_name, *args) }
114
+ end
115
+
116
+ end # EventAliases
117
+
118
+ end # Vedeu
@@ -0,0 +1,165 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ class ParentPresentationTestClass
6
+ include Vedeu::Presentation
7
+
8
+ def parent
9
+ nil
10
+ end
11
+
12
+ def attributes
13
+ {
14
+ colour: { background: '#330000', foreground: '#00aadd' },
15
+ style: ['bold']
16
+ }
17
+ end
18
+ end
19
+
20
+ class PresentationTestClass
21
+ include Vedeu::Presentation
22
+
23
+ attr_reader :attributes
24
+
25
+ def initialize(attributes = {})
26
+ @attributes = attributes
27
+ end
28
+
29
+ def parent
30
+ Vedeu::ParentPresentationTestClass.new
31
+ end
32
+
33
+ end # PresentationTestClass
34
+
35
+ module Presentation
36
+
37
+ describe Colour do
38
+
39
+ let(:includer) { Vedeu::PresentationTestClass.new(attributes) }
40
+ let(:attributes) {
41
+ {
42
+ colour: { background: background, foreground: foreground },
43
+ style: ['bold']
44
+ }
45
+ }
46
+ let(:background) { '#000033' }
47
+ let(:foreground) { '#aadd00' }
48
+
49
+ describe '#background' do
50
+ subject { includer.background }
51
+
52
+ it { subject.must_be_instance_of(Vedeu::Background) }
53
+ it { subject.colour.must_equal('#000033') }
54
+
55
+ context 'no background value' do
56
+ let(:attributes) { {} }
57
+ let(:background) {}
58
+
59
+ it { subject.must_be_instance_of(Vedeu::Background) }
60
+ it { subject.colour.must_equal('#330000') }
61
+ end
62
+ end
63
+
64
+ describe '#background=' do
65
+ subject { includer.background = '#987654' }
66
+
67
+ it {
68
+ includer.colour.background.colour.must_equal('#000033')
69
+ subject
70
+ includer.colour.background.colour.must_equal('#987654')
71
+ }
72
+
73
+ it { subject.must_equal('#987654') }
74
+ end
75
+
76
+ describe '#foreground' do
77
+ subject { includer.foreground }
78
+
79
+ it { subject.must_be_instance_of(Vedeu::Foreground) }
80
+ it { subject.colour.must_equal('#aadd00') }
81
+
82
+ context 'no foreground value' do
83
+ let(:attributes) { {} }
84
+ let(:foreground) {}
85
+
86
+ it { subject.must_be_instance_of(Vedeu::Foreground) }
87
+ it { subject.colour.must_equal('#00aadd') }
88
+ end
89
+ end
90
+
91
+ describe '#foreground=' do
92
+ subject { includer.foreground = '#123456' }
93
+
94
+ it {
95
+ includer.colour.foreground.colour.must_equal('#aadd00')
96
+ subject
97
+ includer.colour.foreground.colour.must_equal('#123456')
98
+ }
99
+
100
+ it { subject.must_equal('#123456') }
101
+ end
102
+
103
+ describe '#parent_background' do
104
+ subject { includer.parent_background }
105
+
106
+ it { subject.must_be_instance_of(Vedeu::Background) }
107
+ it { subject.colour.must_equal('#330000') }
108
+
109
+ context 'when no parent colour is set' do
110
+ before { includer.stubs(:parent).returns(nil) }
111
+
112
+ it { subject.colour.must_equal('') }
113
+ end
114
+ end
115
+
116
+ describe '#parent_colour' do
117
+ subject { includer.parent_colour }
118
+
119
+ context 'when a parent is available' do
120
+ it { subject.must_be_instance_of(Vedeu::Colour) }
121
+ it { subject.background.must_be_instance_of(Vedeu::Background) }
122
+ it { subject.foreground.must_be_instance_of(Vedeu::Foreground) }
123
+ end
124
+
125
+ context 'when a parent is not available' do
126
+ before { includer.stubs(:parent).returns(nil) }
127
+
128
+ it { subject.must_equal(nil) }
129
+ end
130
+ end
131
+
132
+ describe '#parent_foreground' do
133
+ subject { includer.parent_foreground }
134
+
135
+ it { subject.must_be_instance_of(Vedeu::Foreground) }
136
+ it { subject.colour.must_equal('#00aadd') }
137
+
138
+ context 'when no parent colour is set' do
139
+ before { includer.stubs(:parent).returns(nil) }
140
+
141
+ it { subject.colour.must_equal('') }
142
+ end
143
+ end
144
+
145
+ describe '#colour' do
146
+ subject { includer.colour }
147
+
148
+ it { subject.must_be_instance_of(Vedeu::Colour) }
149
+ end
150
+
151
+ describe '#colour=' do
152
+ let(:colour) {
153
+ Vedeu::Colour.new(foreground: '#00ff00', background: '#000000')
154
+ }
155
+
156
+ subject { includer.colour = (colour) }
157
+
158
+ it { subject.must_be_instance_of(Vedeu::Colour) }
159
+ end
160
+
161
+ end # Colour
162
+
163
+ end # Presentation
164
+
165
+ end # Vedeu
@@ -0,0 +1,83 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ class ParentPresentationTestClass
6
+ include Vedeu::Presentation
7
+
8
+ def parent
9
+ nil
10
+ end
11
+
12
+ def attributes
13
+ {
14
+ colour: { background: '#330000', foreground: '#00aadd' },
15
+ style: ['bold']
16
+ }
17
+ end
18
+ end
19
+
20
+ class PresentationTestClass
21
+ include Vedeu::Presentation
22
+
23
+ attr_reader :attributes
24
+
25
+ def initialize(attributes = {})
26
+ @attributes = attributes
27
+ end
28
+
29
+ def parent
30
+ Vedeu::ParentPresentationTestClass.new
31
+ end
32
+
33
+ end # PresentationTestClass
34
+
35
+ module Presentation
36
+
37
+ describe Style do
38
+
39
+ let(:includer) { Vedeu::PresentationTestClass.new(attributes) }
40
+ let(:attributes) {
41
+ {
42
+ colour: { background: background, foreground: foreground },
43
+ style: ['bold']
44
+ }
45
+ }
46
+ let(:background) { '#000033' }
47
+ let(:foreground) { '#aadd00' }
48
+
49
+ describe '#parent_style' do
50
+ subject { includer.parent_style }
51
+
52
+ it { subject.must_be_instance_of(Vedeu::Style) }
53
+
54
+ context 'when a parent is available' do
55
+ it { subject.value.must_equal(['bold']) }
56
+ end
57
+
58
+ context 'when a parent is not available' do
59
+ before { includer.stubs(:parent).returns(nil) }
60
+
61
+ it { subject.value.must_equal(nil) }
62
+ end
63
+ end
64
+
65
+ describe '#style' do
66
+ subject { includer.style }
67
+
68
+ it { subject.must_be_instance_of(Vedeu::Style) }
69
+ end
70
+
71
+ describe '#style=' do
72
+ let(:style) { Vedeu::Style.new('normal') }
73
+
74
+ subject { includer.style = (style) }
75
+
76
+ it { subject.must_be_instance_of(Vedeu::Style) }
77
+ end
78
+
79
+ end # Style
80
+
81
+ end # Presentation
82
+
83
+ end # Vedeu
@@ -44,167 +44,27 @@ module Vedeu
44
44
  let(:background) { '#000033' }
45
45
  let(:foreground) { '#aadd00' }
46
46
 
47
- describe '#background' do
48
- subject { includer.background }
49
-
50
- it { subject.must_be_instance_of(Vedeu::Background) }
51
- it { subject.colour.must_equal('#000033') }
52
-
53
- context 'no background value' do
54
- let(:attributes) { {} }
55
- let(:background) {}
56
-
57
- it { subject.must_be_instance_of(Vedeu::Background) }
58
- it { subject.colour.must_equal('#330000') }
59
- end
60
- end
61
-
62
- describe '#background=' do
63
- subject { includer.background = '#987654' }
64
-
65
- it {
66
- includer.colour.background.colour.must_equal('#000033')
67
- subject
68
- includer.colour.background.colour.must_equal('#987654')
69
- }
70
-
71
- it { subject.must_equal('#987654') }
72
- end
73
-
74
- describe '#foreground' do
75
- subject { includer.foreground }
76
-
77
- it { subject.must_be_instance_of(Vedeu::Foreground) }
78
- it { subject.colour.must_equal('#aadd00') }
79
-
80
- context 'no foreground value' do
81
- let(:attributes) { {} }
82
- let(:foreground) {}
83
-
84
- it { subject.must_be_instance_of(Vedeu::Foreground) }
85
- it { subject.colour.must_equal('#00aadd') }
86
- end
87
- end
88
-
89
- describe '#foreground=' do
90
- subject { includer.foreground = '#123456' }
91
-
92
- it {
93
- includer.colour.foreground.colour.must_equal('#aadd00')
94
- subject
95
- includer.colour.foreground.colour.must_equal('#123456')
96
- }
97
-
98
- it { subject.must_equal('#123456') }
99
- end
100
-
101
- describe '#parent_background' do
102
- subject { includer.parent_background }
103
-
104
- it { subject.must_be_instance_of(Vedeu::Background) }
105
- it { subject.colour.must_equal('#330000') }
106
-
107
- context 'when no parent colour is set' do
108
- before { includer.stubs(:parent).returns(nil) }
109
-
110
- it { subject.colour.must_equal('') }
111
- end
112
- end
113
-
114
- describe '#parent_colour' do
115
- subject { includer.parent_colour }
116
-
117
- context 'when a parent is available' do
118
- it { subject.must_be_instance_of(Vedeu::Colour) }
119
- it { subject.background.must_be_instance_of(Vedeu::Background) }
120
- it { subject.foreground.must_be_instance_of(Vedeu::Foreground) }
121
- end
122
-
123
- context 'when a parent is not available' do
124
- before { includer.stubs(:parent).returns(nil) }
125
-
126
- it { subject.must_equal(nil) }
127
- end
128
- end
129
-
130
- describe '#parent_foreground' do
131
- subject { includer.parent_foreground }
132
-
133
- it { subject.must_be_instance_of(Vedeu::Foreground) }
134
- it { subject.colour.must_equal('#00aadd') }
135
-
136
- context 'when no parent colour is set' do
137
- before { includer.stubs(:parent).returns(nil) }
138
-
139
- it { subject.colour.must_equal('') }
140
- end
141
- end
142
-
143
- describe '#colour' do
144
- subject { includer.colour }
145
-
146
- it { subject.must_be_instance_of(Vedeu::Colour) }
147
- end
148
-
149
- describe '#colour=' do
150
- let(:colour) { Colour.new(foreground: '#00ff00', background: '#000000') }
151
-
152
- subject { includer.colour = (colour) }
153
-
154
- it { subject.must_be_instance_of(Colour) }
155
- end
156
-
157
- describe '#parent_style' do
158
- subject { includer.parent_style }
159
-
160
- it { subject.must_be_instance_of(Vedeu::Style) }
161
-
162
- context 'when a parent is available' do
163
- it { subject.value.must_equal(['bold']) }
164
- end
165
-
166
- context 'when a parent is not available' do
167
- before { includer.stubs(:parent).returns(nil) }
168
-
169
- it { subject.value.must_equal(nil) }
170
- end
171
- end
172
-
173
- describe '#style' do
174
- subject { includer.style }
175
-
176
- it { subject.must_be_instance_of(Vedeu::Style) }
177
- end
178
-
179
- describe '#style=' do
180
- let(:style) { Style.new('normal') }
181
-
182
- subject { includer.style = (style) }
183
-
184
- it { subject.must_be_instance_of(Style) }
185
- end
186
-
187
47
  describe '#to_s' do
188
48
  let(:line) {
189
49
  Vedeu::Line.new(streams: [],
190
50
  parent: Vedeu::Interface.new,
191
51
  colour: line_colour,
192
- style: Style.new('normal'))
52
+ style: Vedeu::Style.new('normal'))
193
53
  }
194
54
  let(:line_colour) {
195
- Colour.new(foreground: '#00ff00', background: '#000000')
55
+ Vedeu::Colour.new(foreground: '#00ff00', background: '#000000')
196
56
  }
197
57
  let(:stream) {
198
- Stream.new(value: stream_value,
58
+ Vedeu::Stream.new(value: stream_value,
199
59
  parent: line,
200
60
  colour: stream_colour,
201
61
  style: stream_style)
202
62
  }
203
63
  let(:stream_value) { 'Some text' }
204
64
  let(:stream_colour) {
205
- Colour.new(foreground: '#ff0000', background: '#000000')
65
+ Vedeu::Colour.new(foreground: '#ff0000', background: '#000000')
206
66
  }
207
- let(:stream_style) { Style.new(:underline) }
67
+ let(:stream_style) { Vedeu::Style.new(:underline) }
208
68
 
209
69
  it { includer.must_respond_to(:to_str) }
210
70
 
@@ -49,7 +49,7 @@ module Vedeu
49
49
  context 'when no renderers are defined' do
50
50
  let(:renderers) {}
51
51
 
52
- it { subject.must_equal([]) }
52
+ it { subject.must_equal(output) }
53
53
  end
54
54
  end
55
55
  end
@@ -64,12 +64,22 @@ module Vedeu
64
64
 
65
65
  subject { described.render(output) }
66
66
 
67
- it { subject.must_be_instance_of(Array) }
67
+ # it { subject.must_be_instance_of(Array) }
68
68
 
69
69
  it {
70
70
  DummyRenderer.expects(:render).with(output)
71
71
  subject
72
72
  }
73
+
74
+ context 'when there is content' do
75
+ let(:output) { Vedeu::Escape.new(Vedeu::Esc.hide_cursor) }
76
+
77
+ it { subject.must_be_instance_of(Vedeu::Escape) }
78
+ end
79
+
80
+ context 'when there is no content' do
81
+ it { subject.must_be_instance_of(NilClass) }
82
+ end
73
83
  end
74
84
 
75
85
  describe '.renderer' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vedeu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Laking
@@ -351,6 +351,7 @@ files:
351
351
  - lib/vedeu/dsl/use.rb
352
352
  - lib/vedeu/dsl/view.rb
353
353
  - lib/vedeu/events/event.rb
354
+ - lib/vedeu/events/event_aliases.rb
354
355
  - lib/vedeu/events/event_collection.rb
355
356
  - lib/vedeu/events/events.rb
356
357
  - lib/vedeu/events/trigger.rb
@@ -407,6 +408,8 @@ files:
407
408
  - lib/vedeu/output/html_char.rb
408
409
  - lib/vedeu/output/output.rb
409
410
  - lib/vedeu/output/presentation.rb
411
+ - lib/vedeu/output/presentation/colour.rb
412
+ - lib/vedeu/output/presentation/style.rb
410
413
  - lib/vedeu/output/refresh.rb
411
414
  - lib/vedeu/output/refresh_group.rb
412
415
  - lib/vedeu/output/renderers.rb
@@ -507,6 +510,7 @@ files:
507
510
  - test/lib/vedeu/dsl/text_test.rb
508
511
  - test/lib/vedeu/dsl/use_test.rb
509
512
  - test/lib/vedeu/dsl/view_test.rb
513
+ - test/lib/vedeu/events/event_aliases_test.rb
510
514
  - test/lib/vedeu/events/event_collection_test.rb
511
515
  - test/lib/vedeu/events/event_test.rb
512
516
  - test/lib/vedeu/events/events_test.rb
@@ -562,6 +566,8 @@ files:
562
566
  - test/lib/vedeu/output/esc_test.rb
563
567
  - test/lib/vedeu/output/html_char_test.rb
564
568
  - test/lib/vedeu/output/output_test.rb
569
+ - test/lib/vedeu/output/presentation/colour_test.rb
570
+ - test/lib/vedeu/output/presentation/style_test.rb
565
571
  - test/lib/vedeu/output/presentation_test.rb
566
572
  - test/lib/vedeu/output/refresh_group_test.rb
567
573
  - test/lib/vedeu/output/refresh_test.rb
@@ -692,6 +698,7 @@ test_files:
692
698
  - test/lib/vedeu/dsl/text_test.rb
693
699
  - test/lib/vedeu/dsl/use_test.rb
694
700
  - test/lib/vedeu/dsl/view_test.rb
701
+ - test/lib/vedeu/events/event_aliases_test.rb
695
702
  - test/lib/vedeu/events/event_collection_test.rb
696
703
  - test/lib/vedeu/events/event_test.rb
697
704
  - test/lib/vedeu/events/events_test.rb
@@ -747,6 +754,8 @@ test_files:
747
754
  - test/lib/vedeu/output/esc_test.rb
748
755
  - test/lib/vedeu/output/html_char_test.rb
749
756
  - test/lib/vedeu/output/output_test.rb
757
+ - test/lib/vedeu/output/presentation/colour_test.rb
758
+ - test/lib/vedeu/output/presentation/style_test.rb
750
759
  - test/lib/vedeu/output/presentation_test.rb
751
760
  - test/lib/vedeu/output/refresh_group_test.rb
752
761
  - test/lib/vedeu/output/refresh_test.rb