vedeu 0.2.9 → 0.2.10

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: fd5bd7cd569896aed34eadea8a2bb15312c99d4a
4
- data.tar.gz: ea45bf2468c2ce0d22250da6f2b903ada4ed5028
3
+ metadata.gz: bff39cd80bb0bca7448d6cf083f2115665e55054
4
+ data.tar.gz: 93bc4d77d71b14632868a4389f150c7a48b15e31
5
5
  SHA512:
6
- metadata.gz: 796459529347814e7644f0d9c4903c74dd197c93c548f50b06eb2c8fe5fc13c783f93bb8a09e02de6668da7b739310ee0f428521c2a5bf68eb5addc0f3cb32b9
7
- data.tar.gz: 18c57141d04b4a2f2034ebdbe0384ba05d29a2f6e3ccf64166192c999b55ca6123264da5cfaabd26d3a22d8aee28e5d6f20309caa56131a13270b00bf00639d0
6
+ metadata.gz: 8c51486199b28763e4fee45eb2dcf7404bc4cd35c308237ad475dbd051d2ddbe826b8d3201e2abe5716eb24149cb14ffcde30512f0732c89e4c10d604d49146b
7
+ data.tar.gz: 1b4d18498d51ed6653501b017ecefd09e42daaaffd797c3e5a6f66ee204784938de563df224700624ffd22a786396c81c65e62c27365680f77eadec734383e2b
data/LICENSE.txt CHANGED
@@ -1,7 +1,4 @@
1
1
  Copyright (c) 2014 Gavin Laking
2
- Copyright (c) 2013 Steve Klabnik - Monologger
3
- (https://github.com/steveklabnik/mono_logger)
4
- Note: Code used inline in Vedeu::Log.
5
2
  Copyright (c) 2013 Michael Grosser - Ruco
6
3
  (https://github.com/grosser/ruco)
7
4
  Note: Code from ruco's Window class was used as basis of
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
+
6
+ -> { its -> { a } }
7
+ trap('INT') { exit! }
8
+
9
+ require 'vedeu'
10
+
11
+ # This example application shows how configuration works.
12
+ #
13
+ # First, we use the configuration API to switch debugging on, and set the
14
+ # logging to go to a file in the /tmp directory.
15
+ #
16
+ # By passing the arguments: --log /path/to/log_file.log when executing this
17
+ # example, we can demonstrate that the client application configuration is
18
+ # overridden by command line arguments.
19
+ #
20
+ # Use 'space' to refresh, 'q' to exit.
21
+ class VedeuConfigurationApp
22
+ include Vedeu
23
+
24
+ configure do
25
+ debug!
26
+ log '/tmp/vedeu_configuration_app.log'
27
+ end
28
+
29
+ interface 'config' do
30
+ width 40
31
+ height 2
32
+ centred!
33
+ end
34
+
35
+ render do
36
+ view 'config' do
37
+ line Configuration.log.inspect + " " + Process.pid.to_s
38
+ end
39
+ end
40
+
41
+ keys('config') do
42
+ key(' ') { Vedeu.trigger(:_refresh_config_) }
43
+ end
44
+
45
+ def self.start(argv = ARGV)
46
+ Vedeu::Launcher.new(argv).execute!
47
+ end
48
+ end
49
+
50
+ VedeuConfigurationApp.start(ARGV)
@@ -104,9 +104,14 @@ class VedeuCursorApp
104
104
 
105
105
  focus('iron') # not working right?!
106
106
 
107
- def self.start
108
- Vedeu::Launcher.new(['--debug']).execute!
107
+ Vedeu.configure do
108
+ debug!
109
+ log '/tmp/vedeu_cursor_app.log'
110
+ end
111
+
112
+ def self.start(argv = ARGV)
113
+ Vedeu::Launcher.new(argv).execute!
109
114
  end
110
115
  end
111
116
 
112
- VedeuCursorApp.start
117
+ VedeuCursorApp.start(ARGV)
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- lib_dir = File.dirname(__FILE__) + '/../../lib'
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
4
  $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
5
 
6
6
  -> { its -> { a } }
@@ -15,7 +15,7 @@ require 'vedeu'
15
15
  #
16
16
  # The focus order is: copper, aluminium, boron, dubnium, status.
17
17
  #
18
- # Use 'space' to change focus.
18
+ # Use 'space' to change focus, 'q' to exit.
19
19
  class VedeuFocusApp
20
20
  include Vedeu
21
21
 
@@ -84,9 +84,9 @@ class VedeuFocusApp
84
84
  end
85
85
  end
86
86
 
87
- def self.start
88
- Vedeu::Launcher.new(['--debug']).execute!
87
+ def self.start(argv = ARGV)
88
+ Vedeu::Launcher.new(argv).execute!
89
89
  end
90
90
  end
91
91
 
92
- VedeuFocusApp.start
92
+ VedeuFocusApp.start(ARGV)
@@ -13,7 +13,7 @@ class HelloWorldApp
13
13
 
14
14
  configure do
15
15
  debug!
16
- log '/tmp/hello_world_vedeu.log'
16
+ log '/tmp/vedeu_hello_world.log'
17
17
  end
18
18
 
19
19
  event(:_initialize_) { Vedeu.trigger(:_refresh_) }
@@ -34,9 +34,9 @@ class HelloWorldApp
34
34
  end
35
35
  end
36
36
 
37
- def self.start
38
- Vedeu::Launcher.execute!(ARGV)
37
+ def self.start(argv = ARGV)
38
+ Vedeu::Launcher.new(argv).execute!
39
39
  end
40
40
  end
41
41
 
42
- HelloWorldApp.start
42
+ HelloWorldApp.start(ARGV)
@@ -52,9 +52,14 @@ class VedeuLinesApp
52
52
 
53
53
  focus 'ruthenium'
54
54
 
55
- def self.start
56
- Vedeu::Launcher.new(['--debug']).execute!
55
+ Vedeu.configure do
56
+ debug!
57
+ log '/tmp/vedeu_lines_app.log'
58
+ end
59
+
60
+ def self.start(argv = ARGV)
61
+ Vedeu::Launcher.new(argv).execute!
57
62
  end
58
63
  end
59
64
 
60
- VedeuLinesApp.start
65
+ VedeuLinesApp.start(ARGV)
data/lib/vedeu.rb CHANGED
@@ -26,6 +26,8 @@ require 'io/console'
26
26
  require 'logger'
27
27
  require 'optparse'
28
28
  require 'set'
29
+ require 'singleton'
30
+ require 'time'
29
31
 
30
32
  require 'vedeu/support/exceptions'
31
33
  require 'vedeu/support/common'
data/lib/vedeu/api/api.rb CHANGED
@@ -133,11 +133,11 @@ module Vedeu
133
133
  Vedeu::Keymaps.use(key)
134
134
  end
135
135
 
136
- # Write a message to the Vedeu log file located at `$HOME/.vedeu/vedeu.log`
136
+ # Write a message to the Vedeu log file.
137
137
  #
138
138
  # @param message [String] The message you wish to emit to the log
139
139
  # file, useful for debugging.
140
- # @param force [Boolean] When evaluates to true will
140
+ # @param force [Boolean] When evaluates to true will attempt to
141
141
  # write to the log file regardless of the Configuration setting.
142
142
  #
143
143
  # @example
@@ -28,7 +28,7 @@ module Vedeu
28
28
  fail StopIteration
29
29
  end
30
30
 
31
- end # self
31
+ end # Application eigenclass
32
32
 
33
33
  # @return [Application]
34
34
  def initialize; end
@@ -1,6 +1,6 @@
1
1
  module Vedeu
2
2
 
3
- module Configuration
3
+ module Config
4
4
 
5
5
  # The Configuration::API class parses client application configuration into
6
6
  # options used by Vedeu to affect certain behaviours.
@@ -36,8 +36,10 @@ module Vedeu
36
36
  #
37
37
  # @return [Hash]
38
38
  def configuration
39
- if system_key_options.any?
40
- options.merge({ system_keys: system_key_options })
39
+ if system_keys.any?
40
+ options.merge({
41
+ system_keys: Configuration.default_system_keys.merge(system_keys)
42
+ })
41
43
 
42
44
  else
43
45
  options
@@ -206,6 +208,19 @@ module Vedeu
206
208
  options[:colour_mode] = value
207
209
  end
208
210
 
211
+ # Sets the location of the log file.
212
+ #
213
+ # @example
214
+ # Vedeu.configure do
215
+ # log '/var/log/vedeu.log'
216
+ # ...
217
+ #
218
+ # @param filename [String]
219
+ # @return [String]
220
+ def log(filename = '')
221
+ options[:log] = filename
222
+ end
223
+
209
224
  # Sets the key used to exit the client application. The default is `q`.
210
225
  #
211
226
  # @example
@@ -224,7 +239,7 @@ module Vedeu
224
239
 
225
240
  Vedeu.log("Configuration::API exit_key: #{value}")
226
241
 
227
- system_key_options[:exit] = value
242
+ system_keys[:exit] = value
228
243
  end
229
244
 
230
245
  # Sets the key used to switch focus to the next defined interface. The
@@ -246,7 +261,7 @@ module Vedeu
246
261
 
247
262
  Vedeu.log("Configuration::API focus_next: #{value}")
248
263
 
249
- system_key_options[:focus_next] = value
264
+ system_keys[:focus_next] = value
250
265
  end
251
266
 
252
267
  # Sets the key used to switch focus to the previous interface. The default
@@ -268,7 +283,7 @@ module Vedeu
268
283
 
269
284
  Vedeu.log("Configuration::API focus_prev: #{value}")
270
285
 
271
- system_key_options[:focus_prev] = value
286
+ system_keys[:focus_prev] = value
272
287
  end
273
288
 
274
289
  # Sets the key used to switch between raw and cooked mode in Vedeu. The
@@ -290,7 +305,7 @@ module Vedeu
290
305
 
291
306
  Vedeu.log("Configuration::API mode_switch: #{value}")
292
307
 
293
- system_key_options[:mode_switch] = value
308
+ system_keys[:mode_switch] = value
294
309
  end
295
310
 
296
311
  private
@@ -307,8 +322,8 @@ module Vedeu
307
322
  # hash if none were redefined.
308
323
  #
309
324
  # @return [Hash]
310
- def system_key_options
311
- @_system_key_options ||= Configuration.default_system_keys
325
+ def system_keys
326
+ @_system_keys ||= {}
312
327
  end
313
328
 
314
329
  # Checks that the value provided to {#colour_mode} is valid.
@@ -1,6 +1,6 @@
1
1
  module Vedeu
2
2
 
3
- module Configuration
3
+ module Config
4
4
 
5
5
  # The Configuration::CLI class parses command-line arguments using
6
6
  # OptionParser into options used by Vedeu to affect certain behaviours.
@@ -15,7 +15,7 @@ module Vedeu
15
15
  # @param args [Array]
16
16
  # @return [Hash]
17
17
  def self.configure(args = [])
18
- new(args = []).configuration
18
+ new(args).configuration
19
19
  end
20
20
 
21
21
  # Returns an instance of Configuration::CLI.
@@ -23,7 +23,8 @@ module Vedeu
23
23
  # @param args [Array]
24
24
  # @return [Configuration::CLI]
25
25
  def initialize(args = [])
26
- @args = args
26
+ @args = args
27
+ @options = {}
27
28
  end
28
29
 
29
30
  # Returns the configuration options set up by parsing the command-line
@@ -104,7 +105,15 @@ module Vedeu
104
105
 
105
106
  end
106
107
  end
108
+
109
+ opts.on('-l', '--log [FILENAME]', String,
110
+ 'Specify the path for the log file.') do |filename|
111
+ Vedeu.log("Configuration::CLI log: #{filename}")
112
+
113
+ options[:log] = filename
114
+ end
107
115
  end
116
+
108
117
  parser.parse!(args)
109
118
 
110
119
  options
@@ -112,15 +121,7 @@ module Vedeu
112
121
 
113
122
  private
114
123
 
115
- attr_reader :args
116
-
117
- # Returns the options set via command-line arguments parsed by
118
- # OptionParser, or an empty Hash if none were set or parsed.
119
- #
120
- # @return [Hash]
121
- def options
122
- @_options ||= {}
123
- end
124
+ attr_reader :args, :options
124
125
 
125
126
  end # CLI
126
127
 
@@ -2,121 +2,160 @@ module Vedeu
2
2
 
3
3
  # Allows the customisation of Vedeu's behaviour through the configuration API
4
4
  # or command-line arguments.
5
-
5
+ #
6
6
  # Provides access to Vedeu's configuration, which was set with sensible
7
7
  # defaults (influenced by environment variables), overridden by client
8
8
  # application settings (via the configuration API), or any command-line
9
9
  # arguments provided.
10
10
  #
11
11
  # @api private
12
- module Configuration
12
+ class Configuration
13
+
14
+ include Singleton
15
+
16
+ class << self
17
+
18
+ # Configure Vedeu with sensible defaults. If the client application sets
19
+ # options, override the defaults with those, and if command-line arguments
20
+ # are provided at application invocation, override any options with the
21
+ # arguments provided.
22
+ #
23
+ # @param args [Array]
24
+ # @param block [Proc]
25
+ # @return [Hash]
26
+ def configure(args = [], &block)
27
+ instance.configure(args, &block)
28
+ end
13
29
 
14
- extend self
30
+ # Returns the chosen colour mode.
31
+ #
32
+ # @return [Fixnum]
33
+ def colour_mode
34
+ instance.options[:colour_mode]
35
+ end
15
36
 
16
- # Configure Vedeu with sensible defaults. If the client application sets
17
- # options, override the defaults with those, and if command-line arguments
18
- # are provided at application invocation, override any options with the
19
- # arguments provided.
20
- #
21
- # @param args [Array]
22
- # @param block [Proc]
23
- # @return [Hash]
24
- def configure(args = [], &block)
25
- options.merge!(API.configure(&block)) if block_given?
37
+ # Returns whether debugging is enabled or disabled. Default is false;
38
+ # meaning nothing apart from warnings are written to the log file.
39
+ #
40
+ # @return [Boolean]
41
+ def debug?
42
+ instance.options[:debug]
43
+ end
44
+ alias_method :debug, :debug?
45
+
46
+ # Returns whether the application is interactive (required user input) or
47
+ # standalone (will run until terminates of natural causes.) Default is
48
+ # true; meaning the application will require user input.
49
+ #
50
+ # @return [Boolean]
51
+ def interactive?
52
+ instance.options[:interactive]
53
+ end
54
+ alias_method :interactive, :interactive?
26
55
 
27
- options.merge!(CLI.configure(args)) if args.any?
56
+ # Returns the path to the log file.
57
+ #
58
+ # @return [String]
59
+ def log
60
+ instance.options[:log]
61
+ end
28
62
 
29
- options
30
- end
63
+ # Returns whether the application will run through its main loop once or
64
+ # not. Default is false; meaning the application will loop forever or
65
+ # until terminated by the user.
66
+ #
67
+ # @return [Boolean]
68
+ def once?
69
+ instance.options[:once]
70
+ end
71
+ alias_method :once, :once?
31
72
 
32
- # Returns the chosen colour mode.
33
- #
34
- # @return [Fixnum]
35
- def colour_mode
36
- options[:colour_mode]
37
- end
73
+ # Returns
74
+ #
75
+ # @return [Hash]
76
+ def system_keys
77
+ instance.options[:system_keys]
78
+ end
38
79
 
39
- # Returns whether debugging is enabled or disabled. Default is false;
40
- # meaning nothing apart from warnings are written to the log file.
41
- #
42
- # @return [Boolean]
43
- def debug?
44
- options[:debug]
45
- end
46
- alias_method :debug, :debug?
80
+ # Returns the terminal mode for the application. Default is `:raw`.
81
+ #
82
+ # @return [Symbol]
83
+ def terminal_mode
84
+ instance.options[:terminal_mode]
85
+ end
47
86
 
48
- # Returns whether the application is interactive (required user input) or
49
- # standalone (will run until terminates of natural causes.) Default is true;
50
- # meaning the application will require user input.
51
- #
52
- # @return [Boolean]
53
- def interactive?
54
- options[:interactive]
55
- end
56
- alias_method :interactive, :interactive?
87
+ # Returns whether tracing is enabled or disabled. Tracing is very noisy in
88
+ # the log file (logging method calls and events trigger). Default is
89
+ # false; meaning tracing is disabled.
90
+ #
91
+ # @return [Boolean]
92
+ def trace?
93
+ instance.options[:trace]
94
+ end
95
+ alias_method :trace, :trace?
96
+
97
+ # Vedeu's default system keys. Use {#system_keys}.
98
+ #
99
+ # @return [Hash]
100
+ def default_system_keys
101
+ {
102
+ exit: 'q',
103
+ focus_next: :tab,
104
+ focus_prev: :shift_tab,
105
+ mode_switch: :escape,
106
+ }
107
+ end
57
108
 
58
- # Returns whether the application will run through its main loop once or
59
- # not. Default is false; meaning the application will loop forever or until
60
- # terminated by the user.
61
- #
62
- # @return [Boolean]
63
- def once?
64
- options[:once]
65
- end
66
- alias_method :once, :once?
109
+ def options=(value)
110
+ instance.options = value
111
+ end
67
112
 
68
- # Returns
69
- #
70
- # @return [Hash]
71
- def system_keys
72
- options[:system_keys]
73
- end
113
+ # Reset the configuration to the default values.
114
+ #
115
+ # @return [Hash]
116
+ def reset!
117
+ # Vedeu::Log.logger.debug('Resetting configuration.')
74
118
 
75
- # Returns the terminal mode for the application. Default is `:raw`.
76
- #
77
- # @return [Symbol]
78
- def terminal_mode
79
- options[:terminal_mode]
80
- end
119
+ instance.reset!
120
+ end
81
121
 
82
- # Returns whether tracing is enabled or disabled. Tracing is very noisy in
83
- # the log file (logging method calls and events trigger). Default is false;
84
- # meaning tracing is disabled.
85
- #
86
- # @return [Boolean]
87
- def trace?
88
- options[:trace]
89
- end
90
- alias_method :trace, :trace?
122
+ end # Configuration eigenclass
123
+
124
+ attr_reader :options
91
125
 
92
- # Resets all options to Vedeu defaults.
126
+ # Create a new singleton instance of Configuration.
93
127
  #
94
- # @return [Hash]
95
- def reset
128
+ # @return [Configuration]
129
+ def initialize
96
130
  @options = defaults
97
131
  end
98
132
 
99
- # Vedeu's default system keys. Use {#system_keys}.
133
+ # Set up default configuration and then allow the client application to
134
+ # modify it via the configuration API. After this, process any command line
135
+ # arguments as potential configuration and apply that.
100
136
  #
137
+ # @param args [Array]
138
+ # @param block [Proc]
101
139
  # @return [Hash]
102
- def default_system_keys
103
- {
104
- exit: 'q',
105
- focus_next: :tab,
106
- focus_prev: :shift_tab,
107
- mode_switch: :escape,
108
- }
109
- end
140
+ def configure(args = [], &block)
141
+ @options.merge!(Config::API.configure(&block)) if block_given?
110
142
 
111
- private
143
+ @options.merge!(Config::CLI.configure(args)) if args.any?
112
144
 
113
- # Returns all the options current configured.
145
+ @options
146
+ end
147
+
148
+ # Reset the configuration to the default values.
114
149
  #
115
150
  # @return [Hash]
116
- def options
117
- @options ||= defaults
151
+ def reset!
152
+ # Vedeu::Log.logger.debug('Resetting configuration.')
153
+
154
+ @options = defaults
118
155
  end
119
156
 
157
+ private
158
+
120
159
  # The Vedeu default options, which of course are influenced by environment
121
160
  # variables also.
122
161
  #
@@ -124,64 +163,29 @@ module Vedeu
124
163
  def defaults
125
164
  {
126
165
  colour_mode: detect_colour_mode,
127
- debug: detect_debug_mode,
166
+ debug: false,
128
167
  interactive: true,
168
+ log: '/tmp/vedeu.log',
129
169
  once: false,
130
- system_keys: default_system_keys,
170
+ system_keys: Configuration.default_system_keys,
131
171
  terminal_mode: :raw,
132
- trace: detect_trace_mode,
172
+ trace: false,
133
173
  }
134
174
  end
135
175
 
136
- # Attempt to determine the terminal colour mode via environment variables,
137
- # or be optimistic and settle for 256 colours.
176
+ # Attempt to determine the terminal colour mode via $TERM environment
177
+ # variable, or be optimistic and settle for 256 colours.
138
178
  #
139
179
  # @return [Fixnum]
140
180
  def detect_colour_mode
141
- return 16777216 if ENV['VEDEU_TESTMODE']
142
-
143
- if ENV['VEDEU_TERM']
144
- case ENV['VEDEU_TERM']
145
- when /-256color$/ then 256
146
- when /-truecolor$/ then 16777216
147
- else 256
148
- end
149
-
150
- elsif ENV['TERM']
151
- case ENV['TERM']
152
- when /-256color$/, 'xterm' then 256
153
- when /-color$/, 'rxvt' then 16
154
- else 256
155
- end
156
-
157
- else
158
- 256
159
-
181
+ case ENV['TERM']
182
+ when /-truecolor$/ then 16777216
183
+ when /-256color$/, 'xterm' then 256
184
+ when /-color$/, 'rxvt' then 16
185
+ else 256
160
186
  end
161
187
  end
162
188
 
163
- # Determine the debug mode via an environment variable.
164
- #
165
- # @return [Boolean]
166
- def detect_debug_mode
167
- return false if ENV['VEDEU_TESTMODE']
168
-
169
- return true if ENV['VEDEU_DEBUG']
170
-
171
- false
172
- end
173
-
174
- # Determine the trace mode via an environment variable.
175
- #
176
- # @return [Boolean]
177
- def detect_trace_mode
178
- return false if ENV['VEDEU_TESTMODE']
179
-
180
- return true if ENV['VEDEU_TRACE']
181
-
182
- false
183
- end
184
-
185
189
  end # Configuration
186
190
 
187
191
  end # Vedeu