vedeu 0.4.41 → 0.4.42

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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -6
  3. data/bin/vedeu +1 -50
  4. data/docs/applications.md +18 -2
  5. data/lib/vedeu/all.rb +3 -1
  6. data/lib/vedeu/api.rb +3 -1
  7. data/lib/vedeu/application/controller.rb +5 -0
  8. data/lib/vedeu/buffers/buffer.rb +6 -3
  9. data/lib/vedeu/cli/all.rb +1 -0
  10. data/lib/vedeu/{generator → cli/generator}/all.rb +3 -3
  11. data/lib/vedeu/{generator → cli/generator}/application.rb +0 -0
  12. data/lib/vedeu/{generator → cli/generator}/helpers.rb +4 -11
  13. data/lib/vedeu/{generator → cli/generator}/templates/application/Gemfile +0 -0
  14. data/lib/vedeu/{generator → cli/generator}/templates/application/app/controllers/application_controller.erb +0 -0
  15. data/lib/vedeu/{generator → cli/generator}/templates/application/app/controllers/name.erb +2 -0
  16. data/lib/vedeu/{generator → cli/generator}/templates/application/app/helpers/application_helper.erb +0 -0
  17. data/lib/vedeu/{generator → cli/generator}/templates/application/app/helpers/name.erb +0 -0
  18. data/lib/vedeu/{generator → cli/generator}/templates/application/app/models/keymaps/_global_.rb +0 -0
  19. data/lib/vedeu/{generator → cli/generator}/templates/application/app/models/keymaps/name.erb +0 -0
  20. data/lib/vedeu/{generator → cli/generator}/templates/application/app/views/interfaces/name.erb +6 -0
  21. data/lib/vedeu/{generator → cli/generator}/templates/application/app/views/name.erb +0 -0
  22. data/lib/vedeu/{generator → cli/generator}/templates/application/app/views/templates/name.erb +0 -0
  23. data/lib/vedeu/{generator → cli/generator}/templates/application/application.erb +0 -0
  24. data/lib/vedeu/{generator → cli/generator}/templates/application/bin/name +0 -0
  25. data/lib/vedeu/{generator → cli/generator}/templates/application/config/app_name.erb +0 -0
  26. data/lib/vedeu/{generator → cli/generator}/templates/application/config/configuration.erb +0 -0
  27. data/lib/vedeu/{generator → cli/generator}/templates/application/lib/.gitkeep +0 -0
  28. data/lib/vedeu/{generator → cli/generator}/templates/application/test/.gitkeep +0 -0
  29. data/lib/vedeu/{generator → cli/generator}/templates/application/vendor/.gitkeep +0 -0
  30. data/lib/vedeu/{generator → cli/generator}/view.rb +1 -2
  31. data/lib/vedeu/cli/main.rb +29 -0
  32. data/lib/vedeu/dsl/presentation.rb +6 -2
  33. data/lib/vedeu/dsl/view.rb +2 -1
  34. data/lib/vedeu/geometry/area.rb +4 -4
  35. data/lib/vedeu/models/interface.rb +0 -3
  36. data/lib/vedeu/output/colour.rb +16 -35
  37. data/lib/vedeu/output/presentation.rb +34 -21
  38. data/lib/vedeu/output/translator.rb +2 -5
  39. data/lib/vedeu/repositories/model.rb +4 -13
  40. data/lib/vedeu/support/common.rb +30 -0
  41. data/lib/vedeu/version.rb +1 -1
  42. data/lib/vedeu.rb +2 -0
  43. data/test/lib/vedeu/application/application_view_test.rb +2 -4
  44. data/test/lib/vedeu/application/controller_test.rb +26 -0
  45. data/test/lib/vedeu/application/helper_test.rb +26 -0
  46. data/test/lib/vedeu/application/view_test.rb +26 -0
  47. data/test/lib/vedeu/application_test.rb +2 -4
  48. data/test/lib/vedeu/bootstrap_test.rb +3 -5
  49. data/test/lib/vedeu/{generator → cli/generator}/application_test.rb +0 -0
  50. data/test/lib/vedeu/{generator → cli/generator}/helpers_test.rb +1 -9
  51. data/test/lib/vedeu/{generator → cli/generator}/view_test.rb +0 -0
  52. data/test/lib/vedeu/cli/main_test.rb +12 -0
  53. data/test/lib/vedeu/cursor/reposition_test.rb +0 -2
  54. data/test/lib/vedeu/distributed/subprocess_test.rb +3 -5
  55. data/test/lib/vedeu/distributed/uri_test.rb +3 -5
  56. data/test/lib/vedeu/dsl/border_test.rb +0 -17
  57. data/test/lib/vedeu/dsl/composition_test.rb +0 -8
  58. data/test/lib/vedeu/dsl/presentation_test.rb +34 -22
  59. data/test/lib/vedeu/dsl/view_test.rb +1 -0
  60. data/test/lib/vedeu/events/trigger_test.rb +4 -6
  61. data/test/lib/vedeu/geometry/geometry_test.rb +15 -14
  62. data/test/lib/vedeu/models/composition_test.rb +2 -4
  63. data/test/lib/vedeu/models/focus_test.rb +5 -2
  64. data/test/lib/vedeu/models/group_test.rb +5 -7
  65. data/test/lib/vedeu/models/interface_test.rb +12 -16
  66. data/test/lib/vedeu/models/menu_test.rb +8 -8
  67. data/test/lib/vedeu/output/border_test.rb +20 -21
  68. data/test/lib/vedeu/output/colour_test.rb +41 -122
  69. data/test/lib/vedeu/output/presentation_test.rb +30 -27
  70. data/test/lib/vedeu/output/translator_test.rb +12 -1
  71. data/test/lib/vedeu/support/common_test.rb +17 -2
  72. data/test/test_helper.rb +3 -1
  73. data/vedeu.gemspec +2 -1
  74. metadata +53 -31
  75. data/lib/vedeu/tasks/application.rake +0 -28
  76. data/lib/vedeu/tasks/vedeu.rake +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5bade3d3d45fdc2dd04f64bacfe2e42350b5b98
4
- data.tar.gz: a4f39d6b2625bb378ce2b84d5b7f16c3f2cd5529
3
+ metadata.gz: d52cfaf13c8adfd85fb8d7f29a66133d4d12781c
4
+ data.tar.gz: 901409d56b30fad4859b55f5b188e44a16628b08
5
5
  SHA512:
6
- metadata.gz: 43b4cf698da18c2ac3579730abcf18ad1bd9bb013048aa0a0c8542987b324196e52294e599771cd6da7bf62aa61b5d2c557dc95501576efc0f724f0a39c56ba9
7
- data.tar.gz: 5ea2e7f70d2b77fb389d94f6eba5d2c2413bd12ff158a97f8d0f62ef7fd947cc1a3ba9adee689feef3c62e34aa86f8ff7b8a7a79e41ba3681cd521fe23fc7c11
6
+ metadata.gz: 46f1892cef45301eefbea271b95a06455ce30781e4b5f793cd779adb1c81e83e2f99c833db01d97b171fbfdda163f3fe890dff977d9f6108270bd8ea229b23ba
7
+ data.tar.gz: 752fd49e4627635d187c7d8b73f1773f3be1b1d12a638ae2f0f15e1466a219ac4a16237a869138cb394138571c77b13b112c0b1dccb7b712b4a32f8a16ebeb56
data/README.md CHANGED
@@ -21,14 +21,11 @@ Note: You may have trouble running Vedeu with Windows installations. (Pull
21
21
 
22
22
  ## Installation
23
23
 
24
- Add this line to your application's Gemfile:
24
+ To install Vedeu, simply:
25
25
 
26
- gem 'vedeu'
27
-
28
- And then execute:
29
-
30
- $ bundle
26
+ gem install 'vedeu'
31
27
 
28
+ To use Vedeu's application scaffolding, see the [RubyDoc](http://www.rubydoc.info/gems/vedeu/file/docs/applications.md)
32
29
 
33
30
  ## Example
34
31
 
data/bin/vedeu CHANGED
@@ -1,57 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'rake'
4
-
5
- bundler_message = 'Bundler is required. Please install bundler with ' \
6
- "'gem install bundler'"
7
-
8
- begin
9
- require 'bundler'
10
-
11
- rescue LoadError
12
- puts bundler_message
13
-
14
- end
15
-
16
- fail bundler_message unless defined?(Bundler)
17
-
18
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
19
- # load Gem.bin_path('bundler', 'bundle')
20
-
21
- Bundler.setup
22
-
23
- Rake.application.init
24
-
25
3
  gem_dir = File.expand_path('..', File.dirname(__FILE__))
26
4
  $LOAD_PATH.unshift(gem_dir) unless $LOAD_PATH.include?(gem_dir)
27
5
 
28
- # Initialize vedeu
29
6
  require 'vedeu'
30
7
 
31
- # Load the rake tasks of vedeu
32
- load "#{gem_dir}/lib/vedeu/tasks/vedeu.rake"
33
-
34
- # Let's go!
35
- begin
36
- if ARGV.empty?
37
- print "\n\e[33mVedeu v#{Vedeu::VERSION}\e[39m\n\n"
38
- print "\e[4m\e[36mUsage:\e[39m\e[24m\n\n"
39
- print "\e[32m vedeu new [app_name]\e[39m\n"
40
- print ' Creates the skeleton file and directory structure for a new '
41
- print "Vedeu client application.\n\n"
42
- print "\e[32m vedeu view [view_name]\e[39m\n"
43
- print " Creates a new view for Vedeu.\n"
44
- print "\n\n"
45
-
46
- else
47
- Rake.application.invoke_task(ARGV.shift)
48
-
49
- end
50
-
51
- rescue RuntimeError => exception
52
- puts 'Vedeu Error: Either the task you specified failed, or the task could ' \
53
- "not be built.\n"
54
- puts "Exception: #{exception.class.name}"
55
- puts "Message: #{exception.message}"
56
-
57
- end
8
+ Vedeu::CLI::Main.start(ARGV.dup)
data/docs/applications.md CHANGED
@@ -4,8 +4,17 @@ Vedeu has basic tools to generate client application scaffolding, in a similar
4
4
  way to Ruby on Rails. Although not nearly as advanced as the Rails equivalent,
5
5
  hopefully these generators will get you off the ground.
6
6
 
7
+ ### Installing Vedeu
8
+
9
+ To install Vedeu, simply:
10
+
11
+ gem install 'vedeu'
12
+
13
+ To use Vedeu's application scaffolding, see below:
14
+
7
15
  ### Generating a new application
8
16
 
17
+ ```bash
9
18
  |
10
19
  |- app_name/
11
20
  | |
@@ -36,10 +45,13 @@ hopefully these generators will get you off the ground.
36
45
  |- vendor/
37
46
  |- application.rb
38
47
  |- Gemfile
48
+ ```
39
49
 
40
50
  To create the application structure as shown above:
41
51
 
42
- vedeu new app_name
52
+ ```bash
53
+ vedeu new app_name
54
+ ```
43
55
 
44
56
  Let's talk about each directory and its purpose.
45
57
 
@@ -120,10 +132,13 @@ might want to do something special.
120
132
  Vedeu also provides a generator to create the files needed for a view. To run
121
133
  this, use the following from within the root of the application directory:
122
134
 
123
- vedeu view view_name
135
+ ```bash
136
+ vedeu view view_name
137
+ ```
124
138
 
125
139
  Let's talk about the files it will create and populate:
126
140
 
141
+ ```bash
127
142
  |
128
143
  |- app_name/
129
144
  | |
@@ -147,5 +162,6 @@ Let's talk about the files it will create and populate:
147
162
  | |
148
163
  | |- view_name.rb
149
164
  |...
165
+ ```
150
166
 
151
167
  ####
data/lib/vedeu/all.rb CHANGED
@@ -13,7 +13,7 @@ require 'vedeu/repositories/all'
13
13
  require 'vedeu/api'
14
14
  require 'vedeu/bindings'
15
15
 
16
- require 'vedeu/generator/all'
16
+ require 'vedeu/cli/generator/all'
17
17
 
18
18
  # load order has not been fully established beyond this point
19
19
 
@@ -37,3 +37,5 @@ require 'vedeu/launcher'
37
37
  require 'vedeu/application/all'
38
38
 
39
39
  require 'vedeu/bootstrap'
40
+
41
+ require 'vedeu/cli/all'
data/lib/vedeu/api.rb CHANGED
@@ -75,11 +75,13 @@ module Vedeu
75
75
 
76
76
  # @!method interface
77
77
  # @see Vedeu::DSL::View.interface
78
+ # @!method render
79
+ # @see Vedeu::DSL::View.render
78
80
  # @!method renders
79
81
  # @see Vedeu::DSL::View.renders
80
82
  # @!method views
81
83
  # @see Vedeu::DSL::View.views
82
- def_delegators Vedeu::DSL::View, :interface, :renders, :views
84
+ def_delegators Vedeu::DSL::View, :interface, :renders, :render, :views
83
85
 
84
86
  # @!method bind
85
87
  # @see Vedeu::Event.bind
@@ -3,6 +3,11 @@ module Vedeu
3
3
  module Controller
4
4
 
5
5
  module ClassMethods
6
+
7
+ def controller_name(name)
8
+ Vedeu.bind("show_#{name}".to_sym) { self.new }
9
+ end
10
+
6
11
  end # ClassMethods
7
12
 
8
13
  module InstanceMethods
@@ -74,7 +74,7 @@ module Vedeu
74
74
  #
75
75
  # @return [Boolean] Whether the buffer targetted has content.
76
76
  def back?
77
- return false if back.nil? || back.content.empty?
77
+ return false if back.nil? || back.lines.empty?
78
78
 
79
79
  true
80
80
  end
@@ -90,7 +90,7 @@ module Vedeu
90
90
  #
91
91
  # @return [Boolean] Whether the buffer targetted has content.
92
92
  def front?
93
- return false if front.nil? || front.content.empty?
93
+ return false if front.nil? || front.lines.empty?
94
94
 
95
95
  true
96
96
  end
@@ -99,7 +99,7 @@ module Vedeu
99
99
  #
100
100
  # @return [Boolean] Whether the buffer targetted has content.
101
101
  def previous?
102
- return false if previous.nil? || previous.content.empty?
102
+ return false if previous.nil? || previous.lines.empty?
103
103
 
104
104
  true
105
105
  end
@@ -199,6 +199,9 @@ module Vedeu
199
199
  elsif previous?
200
200
  [previous.render]
201
201
 
202
+ elsif visible?
203
+ [interface.render]
204
+
202
205
  else
203
206
  []
204
207
 
@@ -0,0 +1 @@
1
+ require_relative 'main'
@@ -1,6 +1,6 @@
1
- require 'vedeu/generator/helpers'
2
- require 'vedeu/generator/application'
3
- require 'vedeu/generator/view'
1
+ require 'vedeu/cli/generator/helpers'
2
+ require 'vedeu/cli/generator/application'
3
+ require 'vedeu/cli/generator/view'
4
4
 
5
5
  module Vedeu
6
6
 
@@ -1,3 +1,5 @@
1
+ require 'vedeu/support/common'
2
+
1
3
  module Vedeu
2
4
 
3
5
  module Generator
@@ -8,22 +10,13 @@ module Vedeu
8
10
  # @api private
9
11
  module Helpers
10
12
 
13
+ include Vedeu::Common
14
+
11
15
  # @return [String]
12
16
  def app_name
13
17
  @app_name ||= File.read('./config/app_name')
14
18
  end
15
19
 
16
- # @param name [String]
17
- # @return [String]
18
- def app_name_as_snake_case(name = app_name)
19
- name.gsub!(/::/, '/')
20
- name.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
21
- name.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
22
- name.tr!('-', '_')
23
- name.downcase!
24
- name
25
- end
26
-
27
20
  # @param destination [String]
28
21
  # @return [void]
29
22
  def make_directory(destination)
@@ -5,6 +5,8 @@ module <%= object.app_name %>
5
5
 
6
6
  class <%= object.name_as_class %>Controller < <%= object.app_name -%>::ApplicationController
7
7
 
8
+ controller_name <%= object.app_name -%>
9
+
8
10
  def initialize
9
11
  <%= object.app_name %>::<%= object.name_as_class %>View.render(object)
10
12
  end
@@ -48,6 +48,12 @@ Vedeu.interface '<%= object.name %>' do
48
48
  # width 10
49
49
  # end
50
50
 
51
+ # group ''
52
+
53
+ # hide!
54
+
55
+ # show!
56
+
51
57
  # style
52
58
 
53
59
  # zindex
@@ -16,8 +16,7 @@ module Vedeu
16
16
 
17
17
  include Vedeu::Generator::Helpers
18
18
 
19
- # @param name [String] The name of the view.
20
- # @return [Vedeu::Generator::View]
19
+ # @see Vedeu::Generator::View#initialize
21
20
  def self.generate(name)
22
21
  new(name).generate
23
22
  end
@@ -0,0 +1,29 @@
1
+ module Vedeu
2
+
3
+ module CLI
4
+
5
+ class Main < Thor
6
+
7
+ desc 'new <name>', 'Create a skeleton Vedeu client application.'
8
+ def new(name)
9
+ say Vedeu::Generator::Application.generate(name)
10
+ end
11
+
12
+ # 'Specify the interface name lowercase snakecase; e.g. main_interface'
13
+ desc 'view <name>',
14
+ 'Create a new interface within the client application.'
15
+ def view(name)
16
+ Vedeu::Generator::View.generate(name)
17
+ end
18
+
19
+ desc 'version',
20
+ 'Print the version.'
21
+ def version
22
+ say "vedeu #{Vedeu::VERSION}"
23
+ end
24
+
25
+ end # Main
26
+
27
+ end # CLI
28
+
29
+ end # Vedeu
@@ -38,14 +38,18 @@ module Vedeu
38
38
  #
39
39
  # @return [String]
40
40
  def background(value = '')
41
- colour(background: value)
41
+ model.colour = Vedeu::Colour.coerce(
42
+ background: Vedeu::Background.coerce(value),
43
+ foreground: model.colour.foreground)
42
44
  end
43
45
  alias_method :bg, :background
44
46
  alias_method :bgcolor, :background
45
47
 
46
48
  # @see Vedeu::DSL::Presentation#background
47
49
  def foreground(value = '')
48
- colour(foreground: value)
50
+ model.colour = Vedeu::Colour.coerce(
51
+ foreground: Vedeu::Foreground.coerce(value),
52
+ background: model.colour.background)
49
53
  end
50
54
  alias_method :fg, :foreground
51
55
  alias_method :fgcolor, :foreground
@@ -58,11 +58,12 @@ module Vedeu
58
58
  #
59
59
  # @raise [InvalidSyntax] The required block was not given.
60
60
  # @return [Array<Interface>]
61
- def renders(&block)
61
+ def render(&block)
62
62
  fail InvalidSyntax, 'block not given' unless block_given?
63
63
 
64
64
  store(:store_immediate, &block)
65
65
  end
66
+ alias_method :renders, :render
66
67
 
67
68
  # Deferred view
68
69
  #
@@ -123,7 +123,7 @@ module Vedeu
123
123
  # Returns the row above the top by default.
124
124
  #
125
125
  # @example
126
- # `top` / `y` is 4.
126
+ # `top` or `y` is 4.
127
127
  #
128
128
  # north # => 3
129
129
  # north(2) # => 2 (positive goes north)
@@ -138,7 +138,7 @@ module Vedeu
138
138
  # Returns the column after right by default.
139
139
  #
140
140
  # @example
141
- # `right` / `xn` is 19.
141
+ # `right` or `xn` is 19.
142
142
  #
143
143
  # east # => 20
144
144
  # east(2) # => 21 (positive goes east)
@@ -153,7 +153,7 @@ module Vedeu
153
153
  # Returns the row below the bottom by default.
154
154
  #
155
155
  # @example
156
- # `bottom` / `yn` is 12.
156
+ # `bottom` or `yn` is 12.
157
157
  #
158
158
  # south # => 13
159
159
  # south(2) # => 14 (positive goes south)
@@ -168,7 +168,7 @@ module Vedeu
168
168
  # Returns the column before left by default.
169
169
  #
170
170
  # @example
171
- # `left` / `x` is 8.
171
+ # `left` or `x` is 8.
172
172
  #
173
173
  # west # => 7
174
174
  # west(2) # => 6 (positive goes west)
@@ -94,7 +94,6 @@ module Vedeu
94
94
  def lines
95
95
  collection.coerce(@lines, self)
96
96
  end
97
- alias_method :content, :lines
98
97
  alias_method :value, :lines
99
98
 
100
99
  # Returns a boolean indicating whether the interface has content.
@@ -103,8 +102,6 @@ module Vedeu
103
102
  def lines?
104
103
  lines.any?
105
104
  end
106
- alias_method :content?, :lines?
107
- alias_method :value?, :lines?
108
105
 
109
106
  # Returns a boolean indicating whether the interface belongs to a
110
107
  # group.
@@ -33,9 +33,13 @@ module Vedeu
33
33
  # @api private
34
34
  class Colour
35
35
 
36
- # @!attribute [r] attributes
37
- # @return [Hash]
38
- attr_reader :attributes
36
+ # @!attribute [r] background
37
+ # @return [Vedeu::Background]
38
+ attr_reader :background
39
+
40
+ # @!attribute [r] foreground
41
+ # @return [Vedeu::Foreground]
42
+ attr_reader :foreground
39
43
 
40
44
  # @param value []
41
45
  # @return [Object]
@@ -43,11 +47,11 @@ module Vedeu
43
47
  return value if value.is_a?(self)
44
48
  return new unless value.is_a?(Hash)
45
49
 
46
- if value[:colour]
47
- return value[:colour] if value[:colour].is_a?(self)
48
- return new unless value[:colour].is_a?(Hash)
49
- return new(value[:colour]) if value[:colour][:background] ||
50
- value[:colour][:foreground]
50
+ if value[:colour] && value[:colour].is_a?(self)
51
+ value[:colour]
52
+
53
+ elsif value[:colour] && value[:colour].is_a?(Hash)
54
+ new(value[:colour])
51
55
 
52
56
  elsif value[:background] || value[:foreground]
53
57
  new(value)
@@ -65,14 +69,8 @@ module Vedeu
65
69
  # @option attributes foreground [String]
66
70
  # @return [Vedeu::Colour]
67
71
  def initialize(attributes = {})
68
- @attributes = defaults.merge!(attributes)
69
- end
70
-
71
- # Returns the background colour as a Vedeu::Background.
72
- #
73
- # @return [Vedeu::Background]
74
- def background
75
- @background ||= Vedeu::Background.coerce(attributes[:background])
72
+ @background = Vedeu::Background.coerce(attributes[:background])
73
+ @foreground = Vedeu::Foreground.coerce(attributes[:foreground])
76
74
  end
77
75
 
78
76
  # Converts the value into a Vedeu::Background.
@@ -80,7 +78,7 @@ module Vedeu
80
78
  # @param value [String]
81
79
  # @return [String]
82
80
  def background=(value)
83
- @background = @attributes[:background] = Vedeu::Background.coerce(value)
81
+ @background = Vedeu::Background.coerce(value)
84
82
  end
85
83
 
86
84
  # An object is equal when its values are the same.
@@ -93,19 +91,12 @@ module Vedeu
93
91
  end
94
92
  alias_method :==, :eql?
95
93
 
96
- # Returns the foreground colour as a Vedeu::Foreground.
97
- #
98
- # @return [Vedeu::Foreground]
99
- def foreground
100
- @foreground ||= Vedeu::Foreground.coerce(attributes[:foreground])
101
- end
102
-
103
94
  # Converts the value into a Vedeu::Foreground.
104
95
  #
105
96
  # @param value [String]
106
97
  # @return [String]
107
98
  def foreground=(value)
108
- @foreground = @attributes[:foreground] = Vedeu::Foreground.coerce(value)
99
+ @foreground = Vedeu::Foreground.coerce(value)
109
100
  end
110
101
 
111
102
  # Returns both or either of the converted attributes into a single escape
@@ -119,16 +110,6 @@ module Vedeu
119
110
 
120
111
  private
121
112
 
122
- # The default values for a new instance of this class.
123
- #
124
- # @return [Hash<Symbol => NilClass>]
125
- def defaults
126
- {
127
- background: '',
128
- foreground: '',
129
- }
130
- end
131
-
132
113
  end # Colour
133
114
 
134
115
  end # Vedeu
@@ -19,19 +19,28 @@ module Vedeu
19
19
 
20
20
  # @return [Vedeu::Background]
21
21
  def background=(value)
22
- @attributes[:background] = value
23
- @background = colour.background = Vedeu::Background.coerce(value)
22
+ self.colour = Vedeu::Colour.coerce(
23
+ background: Vedeu::Background.coerce(value),
24
+ foreground: colour.foreground)
24
25
  end
25
26
 
26
27
  # @return [Vedeu::Colour]
27
28
  def colour
28
- @colour ||= Vedeu::Colour.coerce(_colour)
29
+ @colour ||= if attributes[:colour]
30
+ Vedeu::Colour.coerce(attributes[:colour])
31
+
32
+ elsif parent_colour
33
+ Vedeu::Colour.coerce(parent_colour)
34
+
35
+ else
36
+ Vedeu::Colour.new
37
+
38
+ end
29
39
  end
30
40
 
31
41
  # @return [Vedeu::Colour]
32
42
  def colour=(value)
33
- @attributes[:colour] = value
34
- @colour = Vedeu::Colour.coerce(value)
43
+ @colour = attributes[:colour] = Vedeu::Colour.coerce(value)
35
44
  end
36
45
 
37
46
  # @return [Vedeu::Foreground]
@@ -47,8 +56,9 @@ module Vedeu
47
56
 
48
57
  # @return [Vedeu::Foreground]
49
58
  def foreground=(value)
50
- @attributes[:foreground] = value
51
- @foreground = colour.foreground = Vedeu::Foreground.coerce(value)
59
+ self.colour = Vedeu::Colour.coerce(
60
+ foreground: Vedeu::Foreground.coerce(value),
61
+ background: colour.background)
52
62
  end
53
63
 
54
64
  # @return [Vedeu::Background]
@@ -80,12 +90,27 @@ module Vedeu
80
90
 
81
91
  # @return [String|NilClass]
82
92
  def parent_style
83
- parent.style if parent
93
+ if parent
94
+ parent.style
95
+
96
+ else
97
+ Vedeu::Style.new
98
+
99
+ end
84
100
  end
85
101
 
86
102
  # @return [Vedeu::Style]
87
103
  def style
88
- @style ||= Vedeu::Style.coerce(_style)
104
+ @style ||= if attributes[:style]
105
+ Vedeu::Style.coerce(attributes[:style])
106
+
107
+ elsif parent_style
108
+ Vedeu::Style.coerce(parent_style)
109
+
110
+ else
111
+ Vedeu::Style.new
112
+
113
+ end
89
114
  end
90
115
 
91
116
  # @return [Vedeu::Style]
@@ -105,12 +130,6 @@ module Vedeu
105
130
 
106
131
  private
107
132
 
108
- # @return [void]
109
- def _colour
110
- return attributes[:colour] if attributes[:colour]
111
- return parent_colour if parent && parent_colour
112
- end
113
-
114
133
  # Renders the colour attributes of the receiver and yields (to then render
115
134
  # the styles).
116
135
  #
@@ -138,12 +157,6 @@ module Vedeu
138
157
  [style, yield].join
139
158
  end
140
159
 
141
- # @return [void]
142
- def _style
143
- return attributes[:style] if attributes[:style]
144
- return parent_style if parent && parent_style
145
- end
146
-
147
160
  end # Presentation
148
161
 
149
162
  end # Vedeu