vedeu 0.6.7 → 0.6.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/docs/dsl.md +4 -4
  4. data/lib/vedeu/all.rb +6 -18
  5. data/lib/vedeu/api.rb +14 -13
  6. data/lib/vedeu/bindings/system.rb +5 -4
  7. data/lib/vedeu/buffers/virtual_buffer.rb +13 -11
  8. data/lib/vedeu/configuration/api.rb +4 -3
  9. data/lib/vedeu/cursors/cursor.rb +23 -18
  10. data/lib/vedeu/distributed/client.rb +11 -6
  11. data/lib/vedeu/distributed/server.rb +4 -3
  12. data/lib/vedeu/dsl/keymap.rb +6 -6
  13. data/lib/vedeu/editor/all.rb +19 -0
  14. data/lib/vedeu/{input/editor → editor}/capture.rb +1 -1
  15. data/lib/vedeu/{input/editor → editor}/cropper.rb +0 -0
  16. data/lib/vedeu/{input/editor → editor}/cursor.rb +0 -0
  17. data/lib/vedeu/{input/editor → editor}/document.rb +0 -0
  18. data/lib/vedeu/{input/editor → editor}/documents.rb +0 -0
  19. data/lib/vedeu/{input/editor → editor}/editor.rb +0 -0
  20. data/lib/vedeu/{input/editor → editor}/insert.rb +0 -0
  21. data/lib/vedeu/{input/editor → editor}/line.rb +0 -0
  22. data/lib/vedeu/{input/editor → editor}/lines.rb +0 -0
  23. data/lib/vedeu/error.rb +21 -18
  24. data/lib/vedeu/esc/borders.rb +6 -4
  25. data/lib/vedeu/esc/colours.rb +13 -12
  26. data/lib/vedeu/esc/esc.rb +11 -10
  27. data/lib/vedeu/input/all.rb +15 -0
  28. data/lib/vedeu/input/input.rb +55 -52
  29. data/lib/vedeu/input/key.rb +36 -30
  30. data/lib/vedeu/input/keymap.rb +101 -92
  31. data/lib/vedeu/input/keymaps.rb +10 -6
  32. data/lib/vedeu/input/keys.rb +8 -4
  33. data/lib/vedeu/input/mapper.rb +125 -121
  34. data/lib/vedeu/input/translator.rb +159 -0
  35. data/lib/vedeu/internal_api.rb +16 -15
  36. data/lib/vedeu/logging/all.rb +13 -0
  37. data/lib/vedeu/logging/debug.rb +84 -0
  38. data/lib/vedeu/logging/lockless_log_device.rb +65 -0
  39. data/lib/vedeu/logging/log.rb +179 -0
  40. data/lib/vedeu/logging/mono_logger.rb +26 -0
  41. data/lib/vedeu/logging/timer.rb +68 -0
  42. data/lib/vedeu/menus/all.rb +12 -0
  43. data/lib/vedeu/{dsl/menu.rb → menus/dsl.rb} +19 -18
  44. data/lib/vedeu/menus/menu.rb +234 -0
  45. data/lib/vedeu/{null/menu.rb → menus/null.rb} +6 -6
  46. data/lib/vedeu/menus/repository.rb +18 -0
  47. data/lib/vedeu/models/cell.rb +62 -55
  48. data/lib/vedeu/models/escape.rb +55 -50
  49. data/lib/vedeu/models/page.rb +74 -69
  50. data/lib/vedeu/models/row.rb +55 -51
  51. data/lib/vedeu/models/views/all.rb +1 -0
  52. data/lib/vedeu/models/views/char.rb +1 -1
  53. data/lib/vedeu/models/views/html_char.rb +165 -0
  54. data/lib/vedeu/output/renderers/html.rb +5 -4
  55. data/lib/vedeu/repositories/model.rb +2 -0
  56. data/lib/vedeu/runtime/application.rb +110 -103
  57. data/lib/vedeu/runtime/bootstrap.rb +109 -103
  58. data/lib/vedeu/runtime/flags.rb +45 -41
  59. data/lib/vedeu/runtime/launcher.rb +1 -1
  60. data/lib/vedeu/runtime/main_loop.rb +51 -46
  61. data/lib/vedeu/runtime/traps.rb +20 -16
  62. data/lib/vedeu/version.rb +1 -1
  63. data/lib/vedeu.rb +2 -2
  64. data/test/lib/vedeu/buffers/virtual_buffer_test.rb +1 -1
  65. data/test/lib/vedeu/cursors/cursor_test.rb +11 -5
  66. data/test/lib/vedeu/dsl/interface_test.rb +1 -1
  67. data/test/lib/vedeu/dsl/keymap_test.rb +2 -2
  68. data/test/lib/vedeu/{input/editor → editor}/capture_test.rb +0 -0
  69. data/test/lib/vedeu/{input/editor → editor}/cropper_test.rb +0 -0
  70. data/test/lib/vedeu/{input/editor → editor}/cursor_test.rb +0 -0
  71. data/test/lib/vedeu/{input/editor → editor}/document_test.rb +0 -0
  72. data/test/lib/vedeu/{input/editor → editor}/documents_test.rb +0 -0
  73. data/test/lib/vedeu/{input/editor → editor}/editor_test.rb +0 -0
  74. data/test/lib/vedeu/{input/editor → editor}/insert_test.rb +0 -0
  75. data/test/lib/vedeu/{input/editor → editor}/line_test.rb +0 -0
  76. data/test/lib/vedeu/{input/editor → editor}/lines_test.rb +0 -0
  77. data/test/lib/vedeu/input/input_test.rb +58 -54
  78. data/test/lib/vedeu/input/key_test.rb +29 -25
  79. data/test/lib/vedeu/input/keymap_test.rb +74 -70
  80. data/test/lib/vedeu/input/keymaps_test.rb +8 -4
  81. data/test/lib/vedeu/input/keys_test.rb +12 -8
  82. data/test/lib/vedeu/input/mapper_test.rb +64 -56
  83. data/test/lib/vedeu/input/translator_test.rb +36 -0
  84. data/test/lib/vedeu/logging/debug_test.rb +39 -0
  85. data/test/lib/vedeu/logging/lockless_log_device_test.rb +42 -0
  86. data/test/lib/vedeu/logging/log_test.rb +52 -0
  87. data/test/lib/vedeu/logging/mono_logger_test.rb +43 -0
  88. data/test/lib/vedeu/logging/timer_test.rb +44 -0
  89. data/test/lib/vedeu/{dsl/menu_test.rb → menus/dsl_test.rb} +6 -6
  90. data/test/lib/vedeu/menus/menu_test.rb +305 -0
  91. data/test/lib/vedeu/{null/menu_test.rb → menus/null_test.rb} +5 -5
  92. data/test/lib/vedeu/menus/repository_test.rb +17 -0
  93. data/test/lib/vedeu/models/cell_test.rb +54 -50
  94. data/test/lib/vedeu/models/escape_test.rb +49 -45
  95. data/test/lib/vedeu/models/page_test.rb +167 -160
  96. data/test/lib/vedeu/models/row_test.rb +71 -67
  97. data/test/lib/vedeu/models/views/html_char_test.rb +110 -0
  98. data/test/lib/vedeu/output/compressor_test.rb +44 -22
  99. data/test/lib/vedeu/output/renderers_test.rb +4 -2
  100. data/test/lib/vedeu/runtime/application_test.rb +36 -32
  101. data/test/lib/vedeu/runtime/bootstrap_test.rb +31 -26
  102. data/test/lib/vedeu/runtime/flags_test.rb +33 -29
  103. data/test/lib/vedeu/runtime/launcher_test.rb +4 -2
  104. data/test/lib/vedeu/runtime/main_loop_test.rb +28 -24
  105. data/test/lib/vedeu/runtime/traps_test.rb +8 -4
  106. data/test/test_helper.rb +4 -2
  107. metadata +66 -63
  108. data/lib/vedeu/input/editor/all.rb +0 -19
  109. data/lib/vedeu/input/input_translator.rb +0 -155
  110. data/lib/vedeu/log/debug.rb +0 -79
  111. data/lib/vedeu/log/lockless_log_device.rb +0 -61
  112. data/lib/vedeu/log/log.rb +0 -172
  113. data/lib/vedeu/log/mono_logger.rb +0 -21
  114. data/lib/vedeu/log/timer.rb +0 -63
  115. data/lib/vedeu/models/menu.rb +0 -217
  116. data/lib/vedeu/models/menus.rb +0 -14
  117. data/lib/vedeu/output/html_char.rb +0 -161
  118. data/test/lib/vedeu/input/input_translator_test.rb +0 -32
  119. data/test/lib/vedeu/log/debug_test.rb +0 -35
  120. data/test/lib/vedeu/log/lockless_log_device_test.rb +0 -29
  121. data/test/lib/vedeu/log/log_test.rb +0 -48
  122. data/test/lib/vedeu/log/mono_logger_test.rb +0 -31
  123. data/test/lib/vedeu/log/timer_test.rb +0 -40
  124. data/test/lib/vedeu/models/menu_test.rb +0 -301
  125. data/test/lib/vedeu/models/menus_test.rb +0 -13
  126. data/test/lib/vedeu/output/html_char_test.rb +0 -106
@@ -0,0 +1,165 @@
1
+ module Vedeu
2
+
3
+ module Views
4
+
5
+ # Represents a {Vedeu::Views::Char} as a HTML tag with value. By
6
+ # default, a table cell is used.
7
+ #
8
+ class HTMLChar
9
+
10
+ include Vedeu::Common
11
+
12
+ # @param char [Vedeu::Views::Char]
13
+ # @param options [Hash<Symbol => String>]
14
+ # @option options start_tag [String]
15
+ # @option options end_tag [String]
16
+ # @return [String]
17
+ def self.render(char, options = {})
18
+ new(char, options).render
19
+ end
20
+
21
+ # Returns a new instance of Vedeu::Views::HTMLChar.
22
+ #
23
+ # @param char [Vedeu::Views::Char]
24
+ # @param options [Hash<Symbol => String>]
25
+ # @option options start_tag [String]
26
+ # @option options end_tag [String]
27
+ # @return [Vedeu::Views::HTMLChar]
28
+ def initialize(char, options = {})
29
+ @char = char
30
+ @options = options
31
+ end
32
+
33
+ # @return [String]
34
+ def render
35
+ "#{start_tag}#{tag_style}>#{tag_value}#{end_tag}"
36
+ end
37
+
38
+ protected
39
+
40
+ # @!attribute [r] char
41
+ # @return [Vedeu::Views::Char]
42
+ attr_reader :char
43
+
44
+ private
45
+
46
+ # @return [String]
47
+ def tag_style
48
+ return '' unless border || present?(value)
49
+
50
+ out = " style='"
51
+ out << tag_style_background unless char.background.empty?
52
+ out << tag_style_foreground unless char.foreground.empty?
53
+ out << "'"
54
+ end
55
+
56
+ # @return [String]
57
+ def tag_style_background
58
+ "border:1px #{char.background.to_html} solid;" \
59
+ "background:#{char.background.to_html};"
60
+ end
61
+
62
+ # @return [String]
63
+ def tag_style_foreground
64
+ "color:#{char.foreground.to_html};#{border_style}"
65
+ end
66
+
67
+ # @return [String]
68
+ def tag_value
69
+ return '&nbsp;' if border || !present?(value)
70
+
71
+ value
72
+ end
73
+
74
+ # @return [String]
75
+ def border_style
76
+ case border
77
+ when :top_horizontal then css('top')
78
+ when :left_vertical then css('left')
79
+ when :right_vertical then css('right')
80
+ when :bottom_horizontal then css('bottom')
81
+ when :top_left then "#{css('top')}#{css('left')}"
82
+ when :top_right then "#{css('top')}#{css('right')}"
83
+ when :bottom_left then "#{css('bottom')}#{css('left')}"
84
+ when :bottom_right then "#{css('bottom')}#{css('right')}"
85
+ else
86
+ ''
87
+ end
88
+ end
89
+
90
+ # @return [String]
91
+ def css(direction = '')
92
+ "border-#{direction}:1px #{char.foreground.to_html} solid;"
93
+ end
94
+
95
+ # # @return [String]
96
+ # def fg
97
+ # @fg ||= colour(char, 'foreground', '#222')
98
+ # end
99
+
100
+ # # @return [String]
101
+ # def bg
102
+ # @bg ||= colour(char, 'background', '#000')
103
+ # end
104
+
105
+ # @param char [Vedeu::Views::Char]
106
+ # @param type [String] 'background' or 'foreground'
107
+ # @param default [String] A default colour (CSS style; e.g. '#b2adf2')
108
+ # @return [String]
109
+ # def colour(char, type, default)
110
+ # parent_type = char.send(:parent).send(type).send(:to_html)
111
+ # #parent_type = ('parent_' + type).to_sym
112
+ # type_to_html = char.send(type).send(:to_html)
113
+ # #parent_type_to_html = char.send(parent_type).send(:to_html)
114
+
115
+ # if present?(type_to_html)
116
+ # type_to_html
117
+
118
+ # elsif char.parent
119
+ # parent_type
120
+ # #char.parent.send(type).send(:to_html)
121
+
122
+ # else
123
+ # default
124
+
125
+ # end
126
+ # end
127
+
128
+ # @return [Symbol|NilClass]
129
+ def border
130
+ char.border
131
+ end
132
+
133
+ # @return [String]
134
+ def value
135
+ char.value
136
+ end
137
+
138
+ # @return [String]
139
+ def start_tag
140
+ options[:start_tag]
141
+ end
142
+
143
+ # @return [String]
144
+ def end_tag
145
+ options[:end_tag]
146
+ end
147
+
148
+ # @return [Hash<Symbol => String>]
149
+ def options
150
+ defaults.merge!(@options)
151
+ end
152
+
153
+ # @return [Hash<Symbol => String>]
154
+ def defaults
155
+ {
156
+ start_tag: '<td',
157
+ end_tag: '</td>',
158
+ }
159
+ end
160
+
161
+ end # HTMLChar
162
+
163
+ end # Views
164
+
165
+ end # Vedeu
@@ -2,8 +2,8 @@ module Vedeu
2
2
 
3
3
  module Renderers
4
4
 
5
- # Renders a {Vedeu::VirtualBuffer} or {Vedeu::Output} as a HTML snippet;
6
- # a table by default.
5
+ # Renders a {Vedeu::VirtualBuffer} or {Vedeu::Output} as a HTML
6
+ # snippet; a table by default.
7
7
  #
8
8
  class HTML < Vedeu::Renderers::File
9
9
 
@@ -29,7 +29,7 @@ module Vedeu
29
29
 
30
30
  # @return [String]
31
31
  def html_body
32
- return '' if content.is_a?(Vedeu::Escape)
32
+ return '' if content.is_a?(Vedeu::Models::Escape)
33
33
 
34
34
  out = ''
35
35
 
@@ -68,7 +68,8 @@ module Vedeu
68
68
  options[:template]
69
69
  end
70
70
 
71
- # Combines the options provided at instantiation with the default values.
71
+ # Combines the options provided at instantiation with the
72
+ # default values.
72
73
  #
73
74
  # @return [Hash<Symbol => void>]
74
75
  def options
@@ -115,6 +115,8 @@ module Vedeu
115
115
  'Vedeu::Buffers::DSL'
116
116
  elsif demodulize(self.class.name) == 'Geometry'
117
117
  'Vedeu::Geometry::DSL'
118
+ elsif demodulize(self.class.name) == 'Menu'
119
+ 'Vedeu::Menus::DSL'
118
120
  else
119
121
  'Vedeu::DSL::' + demodulize(self.class.name)
120
122
  end
@@ -1,132 +1,139 @@
1
1
  module Vedeu
2
2
 
3
- # Orchestrates the running of the main application loop.
4
- #
5
- class Application
3
+ module Runtime
6
4
 
7
- class << self
8
-
9
- # @param (see #initialize)
10
- def start(configuration)
11
- new(configuration).start
12
- end
13
-
14
- # @param (see #initialize)
15
- def restart(configuration)
16
- new(configuration).start
5
+ # Orchestrates the running of the main application loop.
6
+ #
7
+ class Application
8
+
9
+ class << self
10
+
11
+ # @param (see #initialize)
12
+ def start(configuration)
13
+ new(configuration).start
14
+ end
15
+
16
+ # @param (see #initialize)
17
+ def restart(configuration)
18
+ new(configuration).start
19
+ end
20
+
21
+ # Stops the application! - The `:_cleanup_` event is
22
+ # triggered, which in turn triggers the client event
23
+ # `:cleanup`; the client application may treat this event as
24
+ # Vedeu signalling that it is about to terminate. Client
25
+ # applications are encouraged to use this event to close any
26
+ # open buffers, save files, empty trash, etc.
27
+ #
28
+ # @example
29
+ # Vedeu.exit
30
+ #
31
+ # @return [void]
32
+ def stop
33
+ Vedeu.trigger(:_cleanup_)
34
+
35
+ Vedeu::Runtime::MainLoop.stop!
36
+ end
37
+ alias_method :exit, :stop
38
+
39
+ end # Eigenclass
40
+
41
+ # :nocov:
42
+
43
+ # Returns a new instance of Vedeu::Runtime::Application.
44
+ #
45
+ # @param configuration [Vedeu::Configuration]
46
+ # @return [Vedeu::Runtime::Application]
47
+ def initialize(configuration)
48
+ @configuration = configuration
17
49
  end
18
50
 
19
- # Stops the application!
20
- # - The `:_cleanup_` event is triggered, which in turn triggers the client
21
- # event `:cleanup`; the client application may treat this event as Vedeu
22
- # signalling that it is about to terminate. Client applications are
23
- # encouraged to use this event to close any open buffers, save files,
24
- # empty trash, etc.
51
+ # Starts the application!
25
52
  #
26
- # @example
27
- # Vedeu.exit
53
+ # - A new terminal screen is opened (or rather the current
54
+ # terminal is requested into either :raw or :cooked mode).
55
+ # - The cursor visibility is then set dependent on this mode.
56
+ # In :raw mode, the cursor is hidden.
57
+ # - The `:_initialize_` event is triggered. The client
58
+ # application is may treat this event as Vedeu signalling that
59
+ # it is now ready.
60
+ # - We enter into the main sequence where the application will
61
+ # either run once or continuous, interactively or standalone.
28
62
  #
29
- # @return [void]
30
- def stop
31
- Vedeu.trigger(:_cleanup_)
32
-
33
- Vedeu::MainLoop.stop!
34
- end
35
- alias_method :exit, :stop
36
-
37
- end # Eigenclass
38
-
39
- # :nocov:
40
-
41
- # Returns a new instance of Vedeu::Application.
42
- #
43
- # @param configuration [Vedeu::Configuration]
44
- # @return [Vedeu::Application]
45
- def initialize(configuration)
46
- @configuration = configuration
47
- end
48
-
49
- # Starts the application!
50
- # - A new terminal screen is opened (or rather the current terminal is
51
- # requested into either :raw or :cooked mode).
52
- # - The cursor visibility is then set dependent on this mode. In :raw mode,
53
- # the cursor is hidden.
54
- # - The `:_initialize_` event is triggered. The client application is
55
- # may treat this event as Vedeu signalling that it is now ready.
56
- # - We enter into the main sequence where the application will either run
57
- # once or continuous, interactively or standalone.
58
- #
59
- # @return [Array] The last output sent to the terminal.
60
- def start
61
- Vedeu.trigger(:_drb_start_)
63
+ # @return [Array] The last output sent to the terminal.
64
+ def start
65
+ Vedeu.trigger(:_drb_start_)
62
66
 
63
- Vedeu::Terminal.open do
64
- Vedeu::Terminal.set_cursor_mode
67
+ Vedeu::Terminal.open do
68
+ Vedeu::Terminal.set_cursor_mode
65
69
 
66
- Vedeu.trigger(:_initialize_)
70
+ Vedeu.trigger(:_initialize_)
67
71
 
68
- runner { main_sequence }
72
+ runner { main_sequence }
73
+ end
69
74
  end
70
- end
71
75
 
72
- protected
76
+ protected
73
77
 
74
- # @!attribute [r] configuration
75
- # @return [Vedeu::Configuration]
76
- attr_reader :configuration
78
+ # @!attribute [r] configuration
79
+ # @return [Vedeu::Configuration]
80
+ attr_reader :configuration
77
81
 
78
- private
82
+ private
79
83
 
80
- # Runs the application loop either once, or forever (exceptions and signals
81
- # permitting).
82
- #
83
- # @return [void]
84
- def runner
85
- if configuration.once?
86
- yield
84
+ # Runs the application loop either once, or forever (exceptions
85
+ # and signals permitting).
86
+ #
87
+ # @return [void]
88
+ def runner
89
+ if configuration.once?
90
+ yield
87
91
 
88
- else
89
- run_many { yield }
92
+ else
93
+ run_many { yield }
90
94
 
95
+ end
91
96
  end
92
- end
93
-
94
- # For an interactive application we capture input, (usually from the user),
95
- # and continue the main loop. If the client application does not require
96
- # user input then Vedeu triggers the `:_standalone_` event for each run of
97
- # the main loop. The client application is expected to respond to this event
98
- # and 'do something useful'. When the client application has finished, it
99
- # should trigger the `:_exit_` event.
100
- #
101
- # @return [void]
102
- def main_sequence
103
- if configuration.interactive?
104
- Vedeu::Input.capture(Terminal)
105
97
 
106
- else
107
- Vedeu.trigger(:_standalone_)
98
+ # For an interactive application we capture input, (usually from
99
+ # the user), and continue the main loop. If the client
100
+ # application does not require user input then Vedeu triggers
101
+ # the `:_standalone_` event for each run of the main loop. The
102
+ # client application is expected to respond to this event and
103
+ # 'do something useful'. When the client application has
104
+ # finished, it should trigger the `:_exit_` event.
105
+ #
106
+ # @return [void]
107
+ def main_sequence
108
+ if configuration.interactive?
109
+ Vedeu::Input::Input.capture(Terminal)
110
+
111
+ else
112
+ Vedeu.trigger(:_standalone_)
108
113
 
114
+ end
109
115
  end
110
- end
111
116
 
112
- # Runs the application in a continuous loop. This loop is stopped when an
113
- # uncaught exception occurs or when either the `:_mode_switch_` or `:_exit_`
114
- # event is triggered.
115
- #
116
- # @return [void]
117
- def run_many
118
- Vedeu::MainLoop.start! { yield }
117
+ # Runs the application in a continuous loop. This loop is
118
+ # stopped when an uncaught exception occurs or when either the
119
+ # `:_mode_switch_` or `:_exit_` event is triggered.
120
+ #
121
+ # @return [void]
122
+ def run_many
123
+ Vedeu::Runtime::MainLoop.start! { yield }
124
+
125
+ rescue Vedeu::Error::ModeSwitch
126
+ Vedeu::Terminal.switch_mode!
119
127
 
120
- rescue Vedeu::Error::ModeSwitch
121
- Vedeu::Terminal.switch_mode!
128
+ Vedeu.trigger(:_drb_restart_)
122
129
 
123
- Vedeu.trigger(:_drb_restart_)
130
+ Vedeu::Runtime::Application.restart(configuration)
131
+ end
124
132
 
125
- Vedeu::Application.restart(configuration)
126
- end
133
+ # :nocov:
127
134
 
128
- # :nocov:
135
+ end # Application
129
136
 
130
- end # Application
137
+ end # Runtime
131
138
 
132
139
  end # Vedeu
@@ -1,123 +1,129 @@
1
1
  module Vedeu
2
2
 
3
- # Provides the mechanism to start up a generated application.
4
- #
5
- # This class loads all necessary client application files and initializes
6
- # Vedeu with this data, then starts the client application.
7
- #
8
- class Bootstrap
9
-
10
- # @param argv [Array<String>]
11
- # @return [void]
12
- def self.start(argv = ARGV)
13
- new(argv).start
14
- end
15
-
16
- # Returns a new instance of Vedeu::Bootstrap.
3
+ module Runtime
4
+
5
+ # Provides the mechanism to start up a generated application.
17
6
  #
18
- # @param argv [Array<String>]
19
- # @return [Vedeu::Bootstrap]
20
- def initialize(argv)
21
- @argv = argv
22
- end
23
-
24
- # Loads all of the client application files so that Vedeu has access to
25
- # them, then launches the client application.
7
+ # This class loads all necessary client application files and initializes
8
+ # Vedeu with this data, then starts the client application.
26
9
  #
27
- # @return [void]
28
- def start
29
- configure_log!
30
- client_configuration!
31
- client_application!
32
- client_initialize!
10
+ class Bootstrap
11
+
12
+ # @param argv [Array<String>]
13
+ # @return [void]
14
+ def self.start(argv = ARGV)
15
+ new(argv).start
16
+ end
17
+
18
+ # Returns a new instance of Vedeu::Runtime::Bootstrap.
19
+ #
20
+ # @param argv [Array<String>]
21
+ # @return [Vedeu::Runtime::Bootstrap]
22
+ def initialize(argv)
23
+ @argv = argv
24
+ end
33
25
 
34
- Vedeu::Launcher.execute!(argv)
35
- end
26
+ # Loads all of the client application files so that Vedeu has access to
27
+ # them, then launches the client application.
28
+ #
29
+ # @return [void]
30
+ def start
31
+ configure_log!
32
+ client_configuration!
33
+ client_application!
34
+ client_initialize!
35
+
36
+ Vedeu::Launcher.execute!(argv)
37
+ end
36
38
 
37
- protected
39
+ protected
38
40
 
39
- # @!attribute [r] argv
40
- # @return [Array<String>]
41
- attr_reader :argv
41
+ # @!attribute [r] argv
42
+ # @return [Array<String>]
43
+ attr_reader :argv
42
44
 
43
- private
45
+ private
44
46
 
45
- # @return [String]
46
- def base_path
47
- Vedeu::Configuration.base_path
48
- end
47
+ # @return [String]
48
+ def base_path
49
+ Vedeu::Configuration.base_path
50
+ end
49
51
 
50
- # @note
51
- # config/configuration.rb is already loaded so don't load it twice
52
- # @return [void]
53
- def client_configuration!
54
- Dir[File.join(base_path, 'config/**/*')].each do |path|
55
- next if path =~ %r{config/configuration\.rb}
52
+ # @note
53
+ # config/configuration.rb is already loaded so don't load it twice
54
+ # @return [void]
55
+ def client_configuration!
56
+ Dir[File.join(base_path, 'config/**/*')].each do |path|
57
+ next if path =~ %r{config/configuration\.rb}
56
58
 
57
- load(path)
59
+ load(path)
60
+ end
58
61
  end
59
- end
60
-
61
- # @return [void]
62
- def client_application!
63
- [
64
- 'app/views/templates/**/*',
65
- 'app/views/interfaces/**/*',
66
- 'app/controllers/**/*',
67
- 'app/helpers/**/*',
68
- 'app/views/**/*',
69
- 'app/models/keymaps/**/*',
70
- ].each { |path| load(File.join(base_path, path)) }
71
- end
72
-
73
- # @return [void]
74
- def client_initialize!
75
- if Vedeu::Configuration.root
76
- Vedeu.trigger(:_goto_, *Vedeu::Configuration.root)
77
-
78
- else
79
- Vedeu.log_stderr(type: :debug, message: client_initialize_error)
80
62
 
63
+ # @return [void]
64
+ def client_application!
65
+ [
66
+ 'app/views/templates/**/*',
67
+ 'app/views/interfaces/**/*',
68
+ 'app/controllers/**/*',
69
+ 'app/helpers/**/*',
70
+ 'app/views/**/*',
71
+ 'app/models/keymaps/**/*',
72
+ ].each { |path| load(File.join(base_path, path)) }
81
73
  end
82
- end
83
74
 
84
- # Load each of the loadable files.
85
- #
86
- # @param path [String]
87
- # @return [String]
88
- def load(path)
89
- loadables(path).each { |file| Kernel.load(file) }
75
+ # @return [void]
76
+ def client_initialize!
77
+ if Vedeu::Configuration.root
78
+ Vedeu.trigger(:_goto_, *Vedeu::Configuration.root)
90
79
 
91
- path
92
- end
80
+ else
81
+ Vedeu.log_stderr(type: :debug, message: client_initialize_error)
93
82
 
94
- # Collect each of the files from the client application directories by path
95
- # excluding '.' and '..' and only loading files with the '.rb' extension.
96
- #
97
- # @param path [String]
98
- # @return [Array<String>]
99
- def loadables(path)
100
- Dir.glob(path).select do |file|
101
- File.file?(file) && File.extname(file) == '.rb'
83
+ end
84
+ end
85
+
86
+ # Load each of the loadable files.
87
+ #
88
+ # @param path [String]
89
+ # @return [String]
90
+ def load(path)
91
+ loadables(path).each { |file| Kernel.load(file) }
92
+
93
+ path
94
+ end
95
+
96
+ # Collect each of the files from the client application
97
+ # directories by path excluding '.' and '..' and only loading
98
+ # files with the '.rb' extension.
99
+ #
100
+ # @param path [String]
101
+ # @return [Array<String>]
102
+ def loadables(path)
103
+ Dir.glob(path).select do |file|
104
+ File.file?(file) && File.extname(file) == '.rb'
105
+ end
106
+ end
107
+
108
+ # @return [void]
109
+ def configure_log!
110
+ Vedeu.configure do
111
+ log('/tmp/vedeu_bootstrap.log')
112
+ end unless Vedeu::Configuration.log?
113
+ end
114
+
115
+ # @return [String]
116
+ def client_initialize_error
117
+ "Please update the 'root' setting in " \
118
+ "'config/configuration.rb' to start Vedeu using this " \
119
+ "controller and action: (args are optional)\n\n" \
120
+ "Vedeu.configure do\n" \
121
+ " root :some_controller, :show, *args\n" \
122
+ "end\n\n"
102
123
  end
103
- end
104
-
105
- # @return [void]
106
- def configure_log!
107
- Vedeu.configure do
108
- log('/tmp/vedeu_bootstrap.log')
109
- end unless Vedeu::Configuration.log?
110
- end
111
-
112
- # @return [String]
113
- def client_initialize_error
114
- "Please update the 'root' setting in 'config/configuration.rb' to " \
115
- "start Vedeu using this controller and action: (args are optional)\n\n" \
116
- "Vedeu.configure do\n" \
117
- " root :some_controller, :show, *args\n" \
118
- "end\n\n"
119
- end
120
-
121
- end # Bootstrap
124
+
125
+ end # Bootstrap
126
+
127
+ end # Runtime
122
128
 
123
129
  end # Vedeu