vedeu 0.4.61 → 0.4.62

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/all.rb +2 -0
  3. data/lib/vedeu/application/controller.rb +41 -9
  4. data/lib/vedeu/bindings.rb +4 -1
  5. data/lib/vedeu/bindings/application.rb +36 -0
  6. data/lib/vedeu/bootstrap.rb +6 -1
  7. data/lib/vedeu/cli/generator/templates/application/app/controllers/name.erb +10 -4
  8. data/lib/vedeu/colours/colour.rb +6 -9
  9. data/lib/vedeu/repositories/model.rb +1 -1
  10. data/lib/vedeu/router.rb +117 -0
  11. data/lib/vedeu/version.rb +1 -1
  12. data/test/lib/vedeu/application/application_controller_test.rb +1 -1
  13. data/test/lib/vedeu/application/application_helper_test.rb +1 -1
  14. data/test/lib/vedeu/application/controller_test.rb +35 -11
  15. data/test/lib/vedeu/application/helper_test.rb +1 -1
  16. data/test/lib/vedeu/bindings/application_test.rb +38 -0
  17. data/test/lib/vedeu/bindings_test.rb +45 -0
  18. data/test/lib/vedeu/borders/render_border_test.rb +1 -1
  19. data/test/lib/vedeu/buffers/buffer_test.rb +1 -1
  20. data/test/lib/vedeu/buffers/display_buffer_test.rb +2 -2
  21. data/test/lib/vedeu/cli/generator/application_test.rb +1 -1
  22. data/test/lib/vedeu/cli/generator/helpers_test.rb +1 -1
  23. data/test/lib/vedeu/colours/colour_test.rb +9 -1
  24. data/test/lib/vedeu/configuration/api_test.rb +3 -3
  25. data/test/lib/vedeu/cursor/move_test.rb +5 -5
  26. data/test/lib/vedeu/cursor/refresh_cursor_test.rb +4 -0
  27. data/test/lib/vedeu/distributed/client_test.rb +4 -4
  28. data/test/lib/vedeu/distributed/server_test.rb +9 -9
  29. data/test/lib/vedeu/dsl/use_test.rb +4 -4
  30. data/test/lib/vedeu/launcher_test.rb +2 -2
  31. data/test/lib/vedeu/main_loop_test.rb +2 -2
  32. data/test/lib/vedeu/output/refresh_group_test.rb +1 -1
  33. data/test/lib/vedeu/output/refresh_test.rb +1 -1
  34. data/test/lib/vedeu/output/renderers/html_test.rb +1 -1
  35. data/test/lib/vedeu/output/renderers/renderer_options_test.rb +1 -1
  36. data/test/lib/vedeu/output/renderers_test.rb +2 -2
  37. data/test/lib/vedeu/output/text_test.rb +2 -2
  38. data/test/lib/vedeu/plugins/plugin_test.rb +1 -1
  39. data/test/lib/vedeu/plugins_test.rb +2 -2
  40. data/test/lib/vedeu/repositories/collection_test.rb +1 -1
  41. data/test/lib/vedeu/repositories/model_test.rb +18 -3
  42. data/test/lib/vedeu/{repositories/all_test.rb → repositories_test.rb} +0 -0
  43. data/test/lib/vedeu/router_test.rb +192 -0
  44. data/test/lib/vedeu/traps_test.rb +1 -1
  45. data/test/lib/vedeu_test.rb +1 -1
  46. data/test/support/coverage.rb +42 -0
  47. data/vedeu.gemspec +2 -2
  48. metadata +14 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ceb6ac3ef4df98a7535ceeb37ae65a39d5a6645
4
- data.tar.gz: 21bc34bf6d44e123fe9895603bef26832738b892
3
+ metadata.gz: 30927938a72729c5f3bae9a255a5c8b7602360f9
4
+ data.tar.gz: eeb3240c0d98fd5450ddf9f4a9cdf5f5e81ac1b3
5
5
  SHA512:
6
- metadata.gz: 879388bbd80aff90f21b262568bda67262c509efaccda7570968bf3080a1951c2be6452fb46ef4f5fb7e36ab63e15c4e56c440effd6bea59775dfcf0e020c13d
7
- data.tar.gz: 4b2e7aefea725739b77497a3133ae74efa074add21b67ee0c4591c1d646b9764fe15e13a74b8f697f620883ae0ab0168023b3d0612ada31c740192828bf64297
6
+ metadata.gz: 645204564d7353b20bd33141221af4a2fa1bca84da5990a4a0280041b304985ce5391809239fd3e08235deab9f87933ea38ead859e4653a494a2e70d49be64c4
7
+ data.tar.gz: 04ae7389a57c38d513a7f7a8f2af5d1910d8f5fe4881668453a6d2b7eb426450d997c0c7b2c6e938cd50d6c446f8c08f0f6b0bd168b4ea14e1fbc9c302f1b67d
data/lib/vedeu/all.rb CHANGED
@@ -7,6 +7,7 @@ require 'vedeu/debug'
7
7
  require 'vedeu/traps'
8
8
  require 'vedeu/common'
9
9
  require 'vedeu/terminal_mode'
10
+ require 'vedeu/router'
10
11
 
11
12
  require 'vedeu/configuration/cli'
12
13
  require 'vedeu/configuration/api'
@@ -172,6 +173,7 @@ require 'vedeu/output/wordwrap'
172
173
 
173
174
  require 'vedeu/api'
174
175
 
176
+ require 'vedeu/bindings/application'
175
177
  require 'vedeu/bindings/drb'
176
178
  require 'vedeu/bindings/menus'
177
179
  require 'vedeu/bindings/movement'
@@ -5,26 +5,58 @@ module Vedeu
5
5
  module Controller
6
6
 
7
7
  # When included, provide these methods as class methods.
8
+ #
8
9
  module ClassMethods
9
10
 
10
- # Specifying the controller name in your controller provides a Vedeu event
11
- # which will trigger the loading of the controller.
11
+ attr_accessor :controller_name
12
+
13
+ # Specifying the controller name in your controller provides Vedeu with
14
+ # the means to route requests to different parts of your application.
12
15
  #
13
16
  # @example
14
17
  # class YourController
18
+ #
19
+ # controller :your_controller
20
+ # # or...
15
21
  # controller_name :your_controller
16
- # # ...
22
+ #
23
+ # # ... some code
24
+ #
25
+ # end
26
+ #
27
+ # @param controller_name [Symbol] The name of the controller.
28
+ # @return [void]
29
+ def controller(controller_name = nil)
30
+ @controller_name = controller_name
31
+
32
+ Vedeu::Router.add_controller(controller_name, ancestors.first.to_s)
33
+ end
34
+ alias_method :controller_name, :controller
35
+
36
+ # Specifying the action names in your controller provides Vedeu with the
37
+ # means to route requests to different parts of your application.
38
+ #
39
+ # @example
40
+ # class YourController
41
+ #
42
+ # controller :your_controller
43
+ #
44
+ # action :show
45
+ # # or...
46
+ # action_name :show
47
+ #
48
+ # # ... some code
49
+ #
17
50
  # end
18
51
  #
19
- # Vedeu.trigger(:show_your_controller) # this event is now available to
20
- # # trigger.
52
+ # Vedeu.trigger(:_action_, :your_controller, :show, { some: :args })
21
53
  #
22
- # @param name [Symbol] The name of the controller.
54
+ # @param action_name [Symbol] THe name of the action.
23
55
  # @return [void]
24
- # @todo This event binding should be: `Vedeu.bind(:show_view, name)`.
25
- def controller_name(name)
26
- Vedeu.bind("show_#{name}".to_sym) { new }
56
+ def action(action_name = nil)
57
+ Vedeu::Router.add_action(@controller_name, action_name)
27
58
  end
59
+ alias_method :action_name, :action
28
60
 
29
61
  end # ClassMethods
30
62
 
@@ -9,10 +9,13 @@ module Vedeu
9
9
  #
10
10
  module Bindings
11
11
 
12
+ extend self
13
+
12
14
  # Setup events for running Vedeu. This method is called by Vedeu.
13
15
  #
14
16
  # @return [void]
15
- def self.setup!
17
+ def setup!
18
+ Vedeu::Bindings::Application.setup!
16
19
  Vedeu::Bindings::Visibility.setup!
17
20
  Vedeu::Bindings::Movement.setup!
18
21
  Vedeu::Bindings::Menus.setup!
@@ -0,0 +1,36 @@
1
+ module Vedeu
2
+
3
+ module Bindings
4
+
5
+ # System events relating to movement of cursors or interfaces.
6
+ #
7
+ # :nocov:
8
+ module Application
9
+
10
+ extend self
11
+
12
+ # Setup events relating to client applications. This method is called by
13
+ # Vedeu.
14
+ #
15
+ # @return [void]
16
+ def setup!
17
+ action!
18
+ end
19
+
20
+ private
21
+
22
+ # @example
23
+ # Vedeu.trigger(:_action_, :your_controller, :some_action, { id: 7 })
24
+ #
25
+ # @return [void]
26
+ def action!
27
+ Vedeu.bind(:_action_) do |controller, action, **args|
28
+ Vedeu::Router.goto(controller, action, **args)
29
+ end
30
+ end
31
+
32
+ end # Application
33
+
34
+ end # Bindings
35
+
36
+ end # Vedeu
@@ -82,7 +82,7 @@ module Vedeu
82
82
 
83
83
  # @return [void]
84
84
  def client_initialize!
85
- entry_point || eval(Vedeu::Configuration.root)
85
+ entry_point || root
86
86
  end
87
87
 
88
88
  # Load each of the loadable files.
@@ -113,6 +113,11 @@ module Vedeu
113
113
  end unless Vedeu::Configuration.log?
114
114
  end
115
115
 
116
+ # @return [Class]
117
+ def root
118
+ Object.const_get(Vedeu::Configuration.root) if Vedeu::Configuration.root
119
+ end
120
+
116
121
  end # Bootstrap
117
122
 
118
123
  end # Vedeu
@@ -5,17 +5,23 @@ module <%= object.app_name %>
5
5
 
6
6
  class <%= object.name_as_class %>Controller < <%= object.app_name -%>::ApplicationController
7
7
 
8
- controller_name :<%= object.name %>
8
+ controller :<%= object.name %>
9
+ action :list
10
+ action :show
11
+ # add more actions and implement or remove existing actions
9
12
 
10
13
  def initialize
11
- <%= object.app_name %>::<%= object.name_as_class %>View.render(*args)
12
14
  end
13
15
 
14
- private
16
+ def list
17
+ end
15
18
 
16
- def args
19
+ def show(*args)
20
+ <%= object.app_name %>::<%= object.name_as_class %>View.render(*args)
17
21
  end
18
22
 
23
+ private
24
+
19
25
  def object
20
26
  nil
21
27
  end
@@ -40,19 +40,16 @@ module Vedeu
40
40
  # @return [Vedeu::Foreground]
41
41
  attr_reader :foreground
42
42
 
43
- # @param value [Vedeu::Colour|Fixnum|Hash|String]
43
+ # @param value [Vedeu::Colour|Hash<Symbol => void>]
44
44
  # @return [Object]
45
45
  def self.coerce(value)
46
- return value if value.is_a?(self)
47
- return new unless value.is_a?(Hash)
46
+ return value if value.is_a?(Vedeu::Colour)
47
+ return new unless value.is_a?(Hash)
48
48
 
49
- if value[:colour] && value[:colour].is_a?(self)
50
- value[:colour]
49
+ if value.key?(:colour)
50
+ coerce(value[:colour])
51
51
 
52
- elsif value[:colour] && value[:colour].is_a?(Hash)
53
- new(value[:colour])
54
-
55
- elsif value[:background] || value[:foreground]
52
+ elsif value.key?(:background) || value.key?(:foreground)
56
53
  new(value)
57
54
 
58
55
  else
@@ -40,7 +40,7 @@ module Vedeu
40
40
  # @param name [String]
41
41
  # @return [void]
42
42
  def by_name(name)
43
- @repository.by_name(name)
43
+ repository.by_name(name) if repository
44
44
  end
45
45
 
46
46
  # Provide a convenient way to define the child or children of a model.
@@ -0,0 +1,117 @@
1
+ module Vedeu
2
+
3
+ # Stores all client application controllers with their respective actions.
4
+ #
5
+ module Router
6
+
7
+ include Vedeu::Common
8
+
9
+ extend self
10
+
11
+ # @param controller_name [Symbol]
12
+ # @param klass [String]
13
+ # @return [void]
14
+ def add_controller(controller_name, klass)
15
+ unless present?(controller_name)
16
+ fail Vedeu::MissingRequired,
17
+ 'Cannot store controller without a name attribute.'
18
+ end
19
+
20
+ if registered?(controller_name)
21
+ storage[controller_name].merge!(klass: klass)
22
+
23
+ else
24
+ storage.store(controller_name, klass: klass, actions: [])
25
+
26
+ end
27
+
28
+ storage
29
+ end
30
+
31
+ # @param controller_name [Symbol]
32
+ # @param action_name [Symbol]
33
+ # @return [void]
34
+ def add_action(controller_name, action_name)
35
+ if present?(controller_name) && present?(action_name)
36
+ if registered?(controller_name)
37
+ storage[controller_name][:actions] << action_name
38
+
39
+ else
40
+ add_controller(controller_name, '')
41
+ add_action(controller_name, action_name)
42
+
43
+ end
44
+
45
+ storage
46
+
47
+ else
48
+ fail Vedeu::MissingRequired,
49
+ 'Cannot store action without a controller or name attribute.'
50
+
51
+ end
52
+ end
53
+
54
+ # @param controller_name [Symbol]
55
+ # @param action_name [Symbol]
56
+ # @param args [void]
57
+ # @return [void]
58
+ def goto(controller_name, action_name, **args)
59
+ unless registered?(controller_name)
60
+ fail Vedeu::ModelNotFound, "#{controller_name} is not registered."
61
+ end
62
+
63
+ controller_with(controller_name).send(action_name, args)
64
+ end
65
+
66
+ # @param controller_name [Symbol]
67
+ # @return [Boolean]
68
+ def registered?(controller_name)
69
+ storage.key?(controller_name)
70
+ end
71
+
72
+ # @return [Hash<void>]
73
+ def reset!
74
+ @storage = in_memory
75
+ end
76
+ alias_method :reset, :reset!
77
+
78
+ private
79
+
80
+ # @param controller_name [Symbol]
81
+ # @return [void]
82
+ def controller_with(controller_name)
83
+ Object.const_get(klass_for(controller_name)).new
84
+ end
85
+
86
+ # @param controller_name [Symbol]
87
+ # @return [String]
88
+ def klass_for(controller_name)
89
+ if registered?(controller_name) && klass_defined?(controller_name)
90
+ storage[controller_name][:klass]
91
+
92
+ else
93
+ fail Vedeu::MissingRequired,
94
+ "Cannot route to #{controller_name} as no class defined."
95
+
96
+ end
97
+ end
98
+
99
+ # @param controller_name [Symbol]
100
+ # @return [Boolean]
101
+ def klass_defined?(controller_name)
102
+ present?(storage[controller_name][:klass])
103
+ end
104
+
105
+ # @return [Hash<Symbol => Hash<Symbol => String|Array<Symbol>>>]
106
+ def storage
107
+ @storage ||= in_memory
108
+ end
109
+
110
+ # @return [Hash<void>]
111
+ def in_memory
112
+ {}
113
+ end
114
+
115
+ end # Router
116
+
117
+ 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.4.61'
4
+ VERSION = '0.4.62'
5
5
 
6
6
  end
@@ -7,7 +7,7 @@ module Vedeu
7
7
  let(:described) { Vedeu::ApplicationController }
8
8
  let(:instance) { described.new }
9
9
 
10
- # @todo
10
+ # @todo Add more tests.
11
11
 
12
12
  end # ApplicationController
13
13
 
@@ -13,7 +13,7 @@ module Vedeu
13
13
  let(:described) { Vedeu::ApplicationHelper }
14
14
  let(:instance) { Vedeu::ApplicationHelperTestClass.new }
15
15
 
16
- # @todo
16
+ # @todo Add more tests.
17
17
 
18
18
  end # Application
19
19
 
@@ -2,27 +2,51 @@ require 'test_helper'
2
2
 
3
3
  module Vedeu
4
4
 
5
- class ControllerTestClass
5
+ class ControllerTestKlass
6
6
 
7
7
  include Vedeu::Controller
8
8
 
9
+ controller :some_controller
10
+ action :some_action
11
+
9
12
  end # ControllerTestClass
10
13
 
11
14
  describe Controller do
12
15
 
13
- let(:described) { Vedeu::ControllerTestClass }
14
- let(:instance) { described.new }
16
+ let(:described) { Vedeu::Controller }
17
+
18
+ let(:described_model) { Vedeu::ControllerTestKlass }
19
+ let(:instance_model) { described.new }
20
+
21
+ describe 'ClassMethods' do
22
+ let(:described) { Vedeu::Controller::ClassMethods }
23
+
24
+ it { described_model.must_respond_to(:controller_name) }
25
+ it { described_model.must_respond_to(:action_name) }
26
+ it { described_model.must_respond_to(:controller) }
27
+ it { described_model.must_respond_to(:action) }
28
+
29
+ describe '.controller' do
30
+ subject { described_model.controller(:some_controller) }
31
+
32
+ it {
33
+ Vedeu::Router.expects(:add_controller).
34
+ with(:some_controller, 'Vedeu::ControllerTestKlass')
35
+ subject
36
+ }
37
+ end
15
38
 
16
- context 'ClassMethods' do
17
- let(:_name) { :vedeu_controller_test }
39
+ describe '.action' do
40
+ subject { described_model.action(:some_action) }
18
41
 
19
- subject { ControllerTestClass.controller_name(_name) }
42
+ it {
43
+ Vedeu::Router.expects(:add_action).
44
+ with(:some_controller, :some_action)
45
+ subject
46
+ }
47
+ end
20
48
 
21
- it {
22
- Vedeu.expects(:bind).with(:show_vedeu_controller_test)
23
- subject
24
- }
25
- end
49
+ end # ClassMethods
26
50
 
27
51
  end # Controller
28
52