easy_app_helper 0.0.9 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +376 -172
- data/lib/easy_app_helper/core/base.rb +123 -0
- data/lib/easy_app_helper/core/config.rb +203 -0
- data/lib/easy_app_helper/core/logger.rb +101 -0
- data/lib/easy_app_helper/core/merge_policies.rb +37 -0
- data/lib/easy_app_helper/core/places.rb +52 -0
- data/lib/easy_app_helper/module_manager.rb +61 -0
- data/lib/easy_app_helper/version.rb +1 -2
- data/lib/easy_app_helper.rb +8 -13
- data/test/test.yml +7 -0
- data/test/test2_app.rb +33 -0
- data/test/test3_app.rb +90 -0
- data/test/test4_app.rb +36 -0
- data/test/test_app.rb +56 -0
- metadata +19 -8
- data/lib/easy_app_helper/base.rb +0 -211
- data/lib/easy_app_helper/common.rb +0 -88
- data/lib/easy_app_helper/config.rb +0 -129
- data/lib/easy_app_helper/logger.rb +0 -104
- data/lib/easy_app_helper/places.rb +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e26f7e3e20c41919179c83e8afbef9e91f80686
|
4
|
+
data.tar.gz: b76f54662fb9ef9146724ce1721b430d0c6c1a14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6f59da41828b98e70e5bfbc27805a74efa8c8a8c63481c135dc74726a1792edb102dbc73868b52fbaefe49e3e6e99badea4fbb686c3c34ccf7de2f9bdcf2075
|
7
|
+
data.tar.gz: 44385236b44fcb4b3b928a7cc81fb13ef59168f35bfd538ee7e8834b2cfaf6c773aed7f5e1d052ebf911bfa006989d059f584f001708ee009f173b0f30dcb9c1
|
data/README.md
CHANGED
@@ -1,12 +1,38 @@
|
|
1
1
|
# EasyAppHelper
|
2
2
|
|
3
|
+
**This [gem][EAP] aims at providing useful helpers for command line applications.**
|
4
|
+
|
5
|
+
This is a complete rewrite of the initial easy_app_helper gem. **It is not compatible with
|
6
|
+
apps designed for easy_app_helper prior to version 1.0.0**, although they could be very easily adapted.
|
7
|
+
But anyway you always specify your gem dependencies using the [pessimistic version operator]
|
8
|
+
(http://docs.rubygems.org/read/chapter/16#page74), don't you ? Older applications should do it to tell your application
|
9
|
+
to use the latest version of the 0.x.x series instead.
|
10
|
+
|
11
|
+
The new **EasyAppHelper** module prodides:
|
12
|
+
|
13
|
+
* A **super charged Config class** that:
|
14
|
+
* Manages **multiple sources of configuration**(command line, multiple config files...) in a **layered config**.
|
15
|
+
* Provides an **easy to customize merge mechanism** for the different **config layers** that exposes a "live view"
|
16
|
+
of the merged configuration, while keeping a way to access or modify independently any of them.
|
17
|
+
* Allows **flexibility** when dealing with modification and provides a way to roll back modifications done to config
|
18
|
+
anytime, fully reload it, blast it... Export feature could be very easily added and will probably.
|
19
|
+
* A **Logger tightly coupled with the Config** class, that will behave correctly regarding options specified be it from
|
20
|
+
command line or from any source of the config object...
|
21
|
+
* Embeds [Slop][slop] to handle **command line parameters** and keeps any parameter defined in a **separated layer of
|
22
|
+
the global config object**.
|
23
|
+
* A mechanism that ensures that as soon as you access any of the objects or methods exposed by EasyAppHelper,
|
24
|
+
all of them are **fully configured and ready to be used**.
|
25
|
+
|
26
|
+
If you are writing command line applications, I hope you will like because it's very easy to use, and as unobtrusive as
|
27
|
+
possible (you choose when you want to include or use as a module) while providing a ready-for-prod config, logger
|
28
|
+
and command line management.
|
29
|
+
|
30
|
+
|
31
|
+
Currently the only runtime dependency is the cool [Slop gem][slop] which is used to process the command line options.
|
3
32
|
|
4
|
-
|
5
|
-
The goal is to be as transparent as possible for the application whilst providing consistent helpers that add dedidacted behaviours to your application.
|
33
|
+
[Why this gem][4] ?
|
6
34
|
|
7
|
-
Currently the only runtime dependency is on the [Slop gem] [2].
|
8
35
|
|
9
|
-
[Why this gem][4] ?
|
10
36
|
|
11
37
|
## Installation
|
12
38
|
|
@@ -22,234 +48,417 @@ Or install it yourself as:
|
|
22
48
|
|
23
49
|
$ gem install easy_app_helper
|
24
50
|
|
25
|
-
## Usage
|
26
|
-
|
27
|
-
### Including the basic module
|
28
51
|
|
29
|
-
To benefit from the different helpers. Once you installed the gem, you just need to require it:
|
30
|
-
|
31
|
-
```ruby
|
32
|
-
require 'easy_app_helper'
|
33
|
-
```
|
34
52
|
|
35
|
-
And then in the "main class" of your application, include the modules you want to use and call init_app_helper in the initialize method. Then what you can do with each module is defined by each module itself.
|
36
53
|
|
37
|
-
|
54
|
+
## Usage
|
38
55
|
|
39
|
-
|
56
|
+
To use it, once you installed them, you just need to require it:
|
40
57
|
|
41
58
|
```ruby
|
42
59
|
require 'easy_app_helper'
|
43
|
-
|
44
|
-
class MyApp
|
45
|
-
include EasyAppHelper
|
46
|
-
def initialize
|
47
|
-
init_app_helper "my_app"
|
48
|
-
end
|
49
|
-
end
|
50
60
|
```
|
51
61
|
|
52
|
-
|
53
|
-
|
54
|
-
You could then do something like:
|
62
|
+
Then can can immediately access the logger or the config objects. Here under a first example:
|
55
63
|
|
56
64
|
```ruby
|
57
65
|
require 'easy_app_helper'
|
58
66
|
|
59
|
-
|
67
|
+
# You can directly access the config or the logger through the **EasyAppHelper** module
|
68
|
+
puts "The application verbose flag is #{EasyAppHelper.config[:verbose]}"
|
69
|
+
|
70
|
+
# You can directly use the logger according to the command line flags
|
71
|
+
# This will do nothing unless --debug is set and --log-level is set to the correct level
|
72
|
+
EasyAppHelper.logger.info "Hi guys!"
|
73
|
+
|
74
|
+
# Fed up with the **EasyAppHelper** prefix ? Just include the module where you want
|
75
|
+
include EasyAppHelper
|
76
|
+
|
77
|
+
# You can override programmatically any part of the config
|
78
|
+
config[:debug] = true
|
79
|
+
logger.level = 1
|
80
|
+
config[:test] = 'Groovy'
|
81
|
+
EasyAppHelper.logger.info "Hi guys!... again"
|
82
|
+
|
83
|
+
# You can see the internals of the config
|
84
|
+
puts config.internal_configs.to_yaml
|
85
|
+
# Which will output
|
86
|
+
#:modified:
|
87
|
+
# :content:
|
88
|
+
# :log-level: 1
|
89
|
+
# :debug: true
|
90
|
+
# :test: cool
|
91
|
+
# :source: Changed by code
|
92
|
+
#:command_line:
|
93
|
+
# :content:
|
94
|
+
# :auto:
|
95
|
+
# :simulate:
|
96
|
+
# :verbose: true
|
97
|
+
# :help:
|
98
|
+
# :config-file:
|
99
|
+
# :config-override:
|
100
|
+
# :debug:
|
101
|
+
# :debug-on-err:
|
102
|
+
# :log-level:
|
103
|
+
# :log-file:
|
104
|
+
# :source: Command line
|
105
|
+
#:system:
|
106
|
+
# :content: {}
|
107
|
+
# :source:
|
108
|
+
# :origin: EasyAppHelper
|
109
|
+
#:global:
|
110
|
+
# :content: {}
|
111
|
+
# :source:
|
112
|
+
# :origin: ''
|
113
|
+
#:user:
|
114
|
+
# :content: {}
|
115
|
+
# :source:
|
116
|
+
# :origin: ''
|
117
|
+
#:specific_file:
|
118
|
+
# :content: {}
|
119
|
+
|
120
|
+
# You see of course that the two modifications we did are in the modified sub-hash
|
121
|
+
# And now the merged config
|
122
|
+
puts config.to_hash
|
123
|
+
|
124
|
+
# But you can see the modified part as it is:
|
125
|
+
puts config.internal_configs[:modified]
|
126
|
+
|
127
|
+
# Of course you can access it from any class
|
128
|
+
class Dummy
|
60
129
|
include EasyAppHelper
|
130
|
+
|
61
131
|
def initialize
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
132
|
+
puts "#{config[:test]} baby !"
|
133
|
+
# Back to the original
|
134
|
+
config.reset
|
135
|
+
puts config.internal_configs[:modified]
|
66
136
|
end
|
67
137
|
end
|
68
|
-
```
|
69
138
|
|
70
|
-
|
139
|
+
Dummy.new
|
71
140
|
|
72
|
-
|
73
|
-
|
141
|
+
# Some methods are provided to ease common tasks. For example this one will log at info level
|
142
|
+
# (so only displayed if debug mode and log level low enough), but will also puts on the console
|
143
|
+
# if verbose if set...
|
144
|
+
puts_and_logs "Hi world"
|
74
145
|
|
75
|
-
|
76
|
-
|
146
|
+
# It is actually one of the few methods added to regular Logger class (The added value of this logger
|
147
|
+
# is much more to be tightly coupled with the config object). Thus could access it like that:
|
148
|
+
logger.puts_and_logs "Hi world"
|
77
149
|
|
78
|
-
|
150
|
+
# or even
|
151
|
+
EasyAppHelper.logger.puts_and_logs "Hi world... 3 is enough."
|
152
|
+
```
|
79
153
|
|
80
|
-
### Complete example
|
81
154
|
|
82
|
-
|
155
|
+
## Configuration layers
|
83
156
|
|
84
|
-
|
85
|
-
|
157
|
+
**EasyAppHelper** will look for files in numerous places. **Both Unix and Windows places are handled**.
|
158
|
+
All the files are [Yaml][yaml] files but could have names with different extensions.
|
86
159
|
|
87
|
-
|
88
|
-
|
89
|
-
include EasyAppHelper::Config
|
90
|
-
include EasyAppHelper::Logger
|
160
|
+
You can look in the classes documentation to know exactly which extensions and places the config
|
161
|
+
files are looked for.
|
91
162
|
|
92
|
-
|
93
|
-
init_app_helper "my_app", "My Super Application", "This is the application everybody was waiting for.", "1.0"
|
94
|
-
logger.info "Application is now started."
|
95
|
-
show_config if app_config[:verbose]
|
96
|
-
end
|
163
|
+
### System config file
|
97
164
|
|
98
|
-
|
99
|
-
|
100
|
-
puts app_config.to_yaml
|
101
|
-
end
|
165
|
+
This config file is common to all applications that use EasyAppHelper. For example on a Unix system
|
166
|
+
regarding the rules described above, the framework will for the following files in that order:
|
102
167
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
168
|
+
```text
|
169
|
+
# It will be loaded in the :system layer
|
170
|
+
/etc/EasyAppHelper.conf
|
171
|
+
/etc/EasyAppHelper.yml
|
172
|
+
/etc/EasyAppHelper.cfg
|
173
|
+
/etc/EasyAppHelper.yaml
|
174
|
+
/etc/EasyAppHelper.CFG
|
175
|
+
/etc/EasyAppHelper.YML
|
176
|
+
/etc/EasyAppHelper.YAML
|
177
|
+
/etc/EasyAppHelper.Yaml
|
178
|
+
```
|
107
179
|
|
108
|
-
|
180
|
+
### Application config files
|
181
|
+
|
182
|
+
An application config file names are determined from the config.script_filename property. This initially contains
|
183
|
+
the bare name of the script, but you can replace with whatever you want. Changing this property causes actually
|
184
|
+
the impacted files to be reloaded.
|
185
|
+
|
186
|
+
It is in fact a two level configuration. One is global (the :global layer) and the other is at user level (the
|
187
|
+
:user layer).
|
188
|
+
|
189
|
+
For example on a Unix system or cygwin
|
190
|
+
|
191
|
+
```text
|
192
|
+
# For the :global layer
|
193
|
+
/etc/myscript.conf
|
194
|
+
/etc/myscript.yml
|
195
|
+
/etc/myscript.cfg
|
196
|
+
/etc/myscript.yaml
|
197
|
+
/etc/myscript.CFG
|
198
|
+
/etc/myscript.YML
|
199
|
+
/etc/myscript.YAML
|
200
|
+
/etc/myscript.Yaml
|
201
|
+
/usr/local/etc/myscript.conf
|
202
|
+
/usr/local/etc/myscript.yml
|
203
|
+
/usr/local/etc/myscript.cfg
|
204
|
+
/usr/local/etc/myscript.yaml
|
205
|
+
/usr/local/etc/myscript.CFG
|
206
|
+
/usr/local/etc/myscript.YML
|
207
|
+
/usr/local/etc/myscript.YAML
|
208
|
+
/usr/local/etc/myscript.Yaml
|
209
|
+
# For the :user level
|
210
|
+
${HOME}/.config/myscript.conf
|
211
|
+
${HOME}/.config/myscript.yml
|
212
|
+
${HOME}/.config/myscript.cfg
|
213
|
+
${HOME}/.config/myscript.yaml
|
214
|
+
${HOME}/.config/myscript.CFG
|
215
|
+
${HOME}/.config/myscript.YML
|
216
|
+
${HOME}/.config/myscript.YAML
|
217
|
+
${HOME}/.config/myscript.Yaml
|
109
218
|
```
|
110
219
|
|
111
|
-
|
220
|
+
### Command line specified config file
|
112
221
|
|
113
|
-
|
222
|
+
The command line option ```--config-file``` provides a way to specify explicitly a config file. On top of this the
|
223
|
+
option ```--config-override``` tells **EasyAppHelper** to ignore :system, :global and :user levels.
|
114
224
|
|
115
|
-
|
225
|
+
The file will be loaded in a separated layer called :specific_file
|
116
226
|
|
117
|
-
*The EasyAppHelper::Base module*
|
118
227
|
|
119
|
-
|
120
|
-
Application config is
|
121
|
-
---
|
122
|
-
:verbose: true
|
123
|
-
:log-level: 2
|
228
|
+
### The command line options
|
124
229
|
|
125
|
-
|
230
|
+
**EasyAppHelper** already provides by default some command line options. Imagine you have the following program.
|
126
231
|
|
127
|
-
|
232
|
+
```ruby
|
233
|
+
#!/usr/bin/env ruby
|
128
234
|
|
129
|
-
|
130
|
-
My Super Application Version: 1.0
|
235
|
+
require 'easy_app_helper'
|
131
236
|
|
132
|
-
|
133
|
-
|
134
|
-
--auto Auto mode. Bypasses questions to user.
|
135
|
-
--simulate Do not perform the actual underlying actions.
|
136
|
-
-v, --verbose Enable verbose mode.
|
137
|
-
-h, --help Displays this help.
|
237
|
+
class MyApp
|
238
|
+
include EasyAppHelper
|
138
239
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
--log-level Log level from 0 to 5, default 2.
|
143
|
-
--log-file File to log to.
|
240
|
+
APP_NAME = "My super application"
|
241
|
+
VERSION = '0.0.1'
|
242
|
+
DESCRIPTION = 'This application is a proof of concept for EasyAppHelper.'
|
144
243
|
|
145
|
-
-- Configuration options -------------------------------------
|
146
|
-
--config-file Specify a config file.
|
147
244
|
|
148
|
-
|
149
|
-
|
245
|
+
def initialize
|
246
|
+
# Providing this data is optional but brings better logging and online help
|
247
|
+
config.describes_application(app_name: APP_NAME, app_version: VERSION, app_description: DESCRIPTION)
|
248
|
+
end
|
150
249
|
|
151
250
|
|
152
|
-
|
251
|
+
def run
|
252
|
+
if config[:help]
|
253
|
+
puts config.help
|
254
|
+
exit 0
|
255
|
+
end
|
256
|
+
puts_and_logs "Application is starting"
|
257
|
+
do_some_processing
|
258
|
+
end
|
153
259
|
|
154
|
-
|
155
|
-
|
156
|
-
|
260
|
+
def do_some_processing
|
261
|
+
puts_and_logs "Starting some heavy processing"
|
262
|
+
end
|
157
263
|
|
158
|
-
|
264
|
+
end
|
159
265
|
|
160
|
-
Now let's try some options related to the EasyAppHelper::Logger module
|
161
266
|
|
162
|
-
|
267
|
+
MyApp.new.run
|
268
|
+
```
|
163
269
|
|
164
|
-
|
165
|
-
Thus we can do a:
|
270
|
+
And you run it without any command line option
|
166
271
|
|
167
|
-
|
168
|
-
|
272
|
+
```text
|
273
|
+
./test4_app.rb
|
274
|
+
```
|
169
275
|
|
170
|
-
|
171
|
-
Of course, as mentioned by the inline doc, this could go to a log file using the --log-file option...
|
276
|
+
No output...
|
172
277
|
|
173
|
-
|
278
|
+
Let' try
|
174
279
|
|
175
|
-
|
280
|
+
```text
|
281
|
+
./test4_app.rb --help
|
176
282
|
|
177
|
-
|
283
|
+
Usage: test4_app [options]
|
284
|
+
My super application Version: 0.0.1
|
178
285
|
|
179
|
-
|
286
|
+
This application is a proof of concept for EasyAppHelper.
|
287
|
+
-- Generic options -------------------------------------------------------------
|
288
|
+
--auto Auto mode. Bypasses questions to user.
|
289
|
+
--simulate Do not perform the actual underlying actions.
|
290
|
+
-v, --verbose Enable verbose mode.
|
291
|
+
-h, --help Displays this help.
|
292
|
+
-- Configuration options -------------------------------------------------------
|
293
|
+
--config-file Specify a config file.
|
294
|
+
--config-override If specified override all other config.
|
295
|
+
-- Debug and logging options ---------------------------------------------------
|
296
|
+
--debug Run in debug mode.
|
297
|
+
--debug-on-err Run in debug mode with output to stderr.
|
298
|
+
--log-level Log level from 0 to 5, default 2.
|
299
|
+
--log-file File to log to.
|
180
300
|
|
181
|
-
|
301
|
+
```
|
302
|
+
You see there the online help. And then the program exists.
|
182
303
|
|
183
|
-
|
304
|
+
Let's try the ```--verbose``` flag
|
184
305
|
|
185
|
-
|
306
|
+
```text
|
307
|
+
./test4_app.rb --verbose
|
308
|
+
Application is starting
|
309
|
+
Starting some heavy processing
|
310
|
+
```
|
186
311
|
|
187
|
-
|
188
|
-
/usr/local/etc/my_app.ext
|
312
|
+
You see that the puts_and_logs is sensitive to the ```--verbose``` switch...
|
189
313
|
|
190
|
-
|
314
|
+
But what if I debug
|
315
|
+
```text
|
316
|
+
./test4_app.rb --debug
|
317
|
+
```
|
191
318
|
|
192
|
-
|
319
|
+
Humm... nothing... Let's provide the log level
|
193
320
|
|
194
|
-
|
321
|
+
```text
|
322
|
+
./test4_app.rb --debug --log-level 0
|
323
|
+
I, [2013-06-23T19:37:24.975392 #10276] INFO -- My super application: Application is starting
|
324
|
+
I, [2013-06-23T19:37:24.975592 #10276] INFO -- My super application: Starting some heavy processing
|
325
|
+
```
|
195
326
|
|
196
|
-
|
327
|
+
You see there that the puts_and_logs logs as well with the log level 1 (Info)... Nice looks like it was claiming
|
328
|
+
this in its name... ;-)
|
197
329
|
|
198
|
-
|
330
|
+
If I mix ?
|
199
331
|
|
200
|
-
|
201
|
-
|
332
|
+
```text
|
333
|
+
./test4_app.rb --debug --log-level 0 --verbose
|
334
|
+
Application is starting
|
335
|
+
I, [2013-06-23T19:39:05.712558 #11768] INFO -- My super application: Application is starting
|
336
|
+
Starting some heavy processing
|
337
|
+
I, [2013-06-23T19:39:05.712834 #11768] INFO -- My super application: Starting some heavy processing
|
338
|
+
```
|
202
339
|
|
203
|
-
|
340
|
+
So far so good...
|
204
341
|
|
205
|
-
|
342
|
+
### Debugging the framework itself
|
206
343
|
|
344
|
+
If you want, you can even debug what happens during **EasyAppHelper** initialisation, for this you can use the
|
345
|
+
```DEBUG_EASY_MODULES``` environment variable. As how and where everything has to be logged is only specified when
|
346
|
+
you actually provide command line options, **EasyAppHelper** provides a temporary logger to itself and will
|
347
|
+
after all dump the logger content to the logger you specified and if you specify... So that you don't miss a log.
|
348
|
+
|
349
|
+
```text
|
350
|
+
$ DEBUG_EASY_MODULES=y ruby ./test4_app.rb
|
351
|
+
|
352
|
+
D, [2013-06-23T19:43:47.977031 #16294] DEBUG -- : Temporary initialisation logger created...
|
353
|
+
D, [2013-06-23T19:43:47.977861 #16294] DEBUG -- : Trying "/etc/EasyAppHelper.conf" as config file.
|
354
|
+
D, [2013-06-23T19:43:47.977908 #16294] DEBUG -- : Trying "/etc/EasyAppHelper.yml" as config file.
|
355
|
+
D, [2013-06-23T19:43:47.977938 #16294] DEBUG -- : Loading config file "/etc/EasyAppHelper.cfg"
|
356
|
+
D, [2013-06-23T19:43:47.978300 #16294] DEBUG -- : Trying "/etc/test4_app.conf" as config file.
|
357
|
+
D, [2013-06-23T19:43:47.978332 #16294] DEBUG -- : Trying "/etc/test4_app.yml" as config file.
|
358
|
+
D, [2013-06-23T19:43:47.978355 #16294] DEBUG -- : Trying "/etc/test4_app.cfg" as config file.
|
359
|
+
D, [2013-06-23T19:43:47.978381 #16294] DEBUG -- : Trying "/etc/test4_app.yaml" as config file.
|
360
|
+
D, [2013-06-23T19:43:47.978403 #16294] DEBUG -- : Trying "/etc/test4_app.CFG" as config file.
|
361
|
+
D, [2013-06-23T19:43:47.978424 #16294] DEBUG -- : Trying "/etc/test4_app.YML" as config file.
|
362
|
+
D, [2013-06-23T19:43:47.978445 #16294] DEBUG -- : Trying "/etc/test4_app.YAML" as config file.
|
363
|
+
D, [2013-06-23T19:43:47.978466 #16294] DEBUG -- : Trying "/etc/test4_app.Yaml" as config file.
|
364
|
+
D, [2013-06-23T19:43:47.978491 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.conf" as config file.
|
365
|
+
D, [2013-06-23T19:43:47.978529 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.yml" as config file.
|
366
|
+
D, [2013-06-23T19:43:47.978553 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.cfg" as config file.
|
367
|
+
D, [2013-06-23T19:43:47.978575 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.yaml" as config file.
|
368
|
+
D, [2013-06-23T19:43:47.978597 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.CFG" as config file.
|
369
|
+
D, [2013-06-23T19:43:47.978619 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.YML" as config file.
|
370
|
+
D, [2013-06-23T19:43:47.978670 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.Yaml" as config file.
|
371
|
+
I, [2013-06-23T19:43:47.978695 #16294] INFO -- : No config file found for layer global.
|
372
|
+
D, [2013-06-23T19:43:47.978725 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.conf" as config file.
|
373
|
+
D, [2013-06-23T19:43:47.978748 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.yml" as config file.
|
374
|
+
D, [2013-06-23T19:43:47.978770 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.cfg" as config file.
|
375
|
+
D, [2013-06-23T19:43:47.978792 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.yaml" as config file.
|
376
|
+
D, [2013-06-23T19:43:47.978817 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.CFG" as config file.
|
377
|
+
D, [2013-06-23T19:43:47.978840 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.YML" as config file.
|
378
|
+
D, [2013-06-23T19:43:47.978861 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.YAML" as config file.
|
379
|
+
D, [2013-06-23T19:43:47.978974 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.Yaml" as config file.
|
380
|
+
I, [2013-06-23T19:43:47.979000 #16294] INFO -- : No config file found for layer user.
|
381
|
+
I, [2013-06-23T19:43:47.979025 #16294] INFO -- : No config file found for layer specific_file.
|
382
|
+
D, [2013-06-23T19:43:47.979514 #16294] DEBUG -- : Trying "/etc/EasyAppHelper.conf" as config file.
|
383
|
+
D, [2013-06-23T19:43:47.979561 #16294] DEBUG -- : Trying "/etc/EasyAppHelper.yml" as config file.
|
384
|
+
D, [2013-06-23T19:43:47.979591 #16294] DEBUG -- : Loading config file "/etc/EasyAppHelper.cfg"
|
385
|
+
D, [2013-06-23T19:43:47.979717 #16294] DEBUG -- : Trying "/etc/test4_app.conf" as config file.
|
386
|
+
D, [2013-06-23T19:43:47.979747 #16294] DEBUG -- : Trying "/etc/test4_app.yml" as config file.
|
387
|
+
D, [2013-06-23T19:43:47.979800 #16294] DEBUG -- : Trying "/etc/test4_app.cfg" as config file.
|
388
|
+
D, [2013-06-23T19:43:47.979823 #16294] DEBUG -- : Trying "/etc/test4_app.yaml" as config file.
|
389
|
+
D, [2013-06-23T19:43:47.979845 #16294] DEBUG -- : Trying "/etc/test4_app.CFG" as config file.
|
390
|
+
D, [2013-06-23T19:43:47.979867 #16294] DEBUG -- : Trying "/etc/test4_app.YML" as config file.
|
391
|
+
D, [2013-06-23T19:43:47.979908 #16294] DEBUG -- : Trying "/etc/test4_app.YAML" as config file.
|
392
|
+
D, [2013-06-23T19:43:47.979935 #16294] DEBUG -- : Trying "/etc/test4_app.Yaml" as config file.
|
393
|
+
D, [2013-06-23T19:43:47.979959 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.conf" as config file.
|
394
|
+
D, [2013-06-23T19:43:47.979981 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.yml" as config file.
|
395
|
+
D, [2013-06-23T19:43:47.980004 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.cfg" as config file.
|
396
|
+
D, [2013-06-23T19:43:47.980026 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.yaml" as config file.
|
397
|
+
D, [2013-06-23T19:43:47.980047 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.CFG" as config file.
|
398
|
+
D, [2013-06-23T19:43:47.980069 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.YML" as config file.
|
399
|
+
D, [2013-06-23T19:43:47.980091 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.YAML" as config file.
|
400
|
+
D, [2013-06-23T19:43:47.980112 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.Yaml" as config file.
|
401
|
+
I, [2013-06-23T19:43:47.980135 #16294] INFO -- : No config file found for layer global.
|
402
|
+
D, [2013-06-23T19:43:47.980181 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.conf" as config file.
|
403
|
+
D, [2013-06-23T19:43:47.980207 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.yml" as config file.
|
404
|
+
D, [2013-06-23T19:43:47.980230 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.cfg" as config file.
|
405
|
+
D, [2013-06-23T19:43:47.980252 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.yaml" as config file.
|
406
|
+
D, [2013-06-23T19:43:47.980274 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.CFG" as config file.
|
407
|
+
D, [2013-06-23T19:43:47.980296 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.YML" as config file.
|
408
|
+
D, [2013-06-23T19:43:47.980319 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.YAML" as config file.
|
409
|
+
D, [2013-06-23T19:43:47.980361 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.Yaml" as config file.
|
410
|
+
I, [2013-06-23T19:43:47.980395 #16294] INFO -- : No config file found for layer user.
|
411
|
+
I, [2013-06-23T19:43:47.980418 #16294] INFO -- : No config file found for layer specific_file.
|
412
|
+
D, [2013-06-23T19:43:47.981934 #16294] DEBUG -- : Config layers:
|
413
|
+
---
|
414
|
+
:modified:
|
415
|
+
:content: {}
|
416
|
+
:source: Changed by code
|
417
|
+
:command_line:
|
418
|
+
:content:
|
419
|
+
:auto:
|
420
|
+
:simulate:
|
421
|
+
:verbose: true
|
422
|
+
:help:
|
423
|
+
:config-file:
|
424
|
+
:config-override:
|
425
|
+
:debug: true
|
426
|
+
:debug-on-err:
|
427
|
+
:log-level: 0
|
428
|
+
:log-file:
|
429
|
+
:source: Command line
|
430
|
+
:system:
|
431
|
+
:content:
|
432
|
+
:copyright: (c) 2012-2013 Nanonet
|
433
|
+
:source: /etc/EasyAppHelper.cfg
|
434
|
+
:origin: EasyAppHelper
|
435
|
+
:global:
|
436
|
+
:content: {}
|
437
|
+
:source:
|
438
|
+
:origin: test4_app
|
439
|
+
:user:
|
440
|
+
:content: {}
|
441
|
+
:source:
|
442
|
+
:origin: test4_app
|
443
|
+
:specific_file:
|
444
|
+
:content: {}
|
445
|
+
|
446
|
+
D, [2013-06-23T19:43:47.985357 #16294] DEBUG -- : Merged config:
|
447
|
+
---
|
448
|
+
:copyright: (c) 2012-2013 Nanonet
|
449
|
+
:verbose: true
|
450
|
+
:debug: true
|
451
|
+
:log-level: 0
|
452
|
+
|
453
|
+
Application is starting
|
454
|
+
I, [2013-06-23T19:43:47.986298 #16294] INFO -- My super application: Application is starting
|
455
|
+
Starting some heavy processing
|
456
|
+
I, [2013-06-23T19:43:47.986460 #16294] INFO -- My super application: Starting some heavy processing
|
457
|
+
```
|
207
458
|
|
208
|
-
|
459
|
+
You can notice that what **EasyAppHelper** initialisation logged and what you application logged
|
460
|
+
did eventually end-up in the same log...
|
209
461
|
|
210
|
-
If you want to debug what happens during the framework instanciation, you can use the DEBUG_EASY_MODULES environment variable.
|
211
|
-
|
212
|
-
ex:
|
213
|
-
|
214
|
-
$ DEBUG_EASY_MODULES=y ruby ./test_app.rb
|
215
|
-
D, [2013-03-20T13:14:32.149109 #10564] DEBUG -- : Processing helper module: EasyAppHelper::Logger::Instanciator
|
216
|
-
D, [2013-03-20T13:14:32.149109 #10564] DEBUG -- : Processing helper module: EasyAppHelper::Config::Instanciator
|
217
|
-
D, [2013-03-20T13:14:32.149109 #10564] DEBUG -- : Trying "/etc/EasyAppHelper.conf" as config file.
|
218
|
-
D, [2013-03-20T13:14:32.149109 #10564] DEBUG -- : Trying "/etc/EasyAppHelper.yml" as config file.
|
219
|
-
D, [2013-03-20T13:14:32.149109 #10564] DEBUG -- : Trying "/etc/EasyAppHelper.cfg" as config file.
|
220
|
-
D, [2013-03-20T13:14:32.149109 #10564] DEBUG -- : Trying "/etc/EasyAppHelper.yaml" as config file.
|
221
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/EasyAppHelper.CFG" as config file.
|
222
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/EasyAppHelper.YML" as config file.
|
223
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/EasyAppHelper.YAML" as config file.
|
224
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/EasyAppHelper.Yaml" as config file.
|
225
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/my_app.conf" as config file.
|
226
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/my_app.yml" as config file.
|
227
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/my_app.cfg" as config file.
|
228
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/my_app.yaml" as config file.
|
229
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/my_app.CFG" as config file.
|
230
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/my_app.YML" as config file.
|
231
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/my_app.YAML" as config file.
|
232
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/etc/my_app.Yaml" as config file.
|
233
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/usr/local/etc/my_app.conf" as config file.
|
234
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/usr/local/etc/my_app.yml" as config file.
|
235
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/usr/local/etc/my_app.cfg" as config file.
|
236
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/usr/local/etc/my_app.yaml" as config file.
|
237
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/usr/local/etc/my_app.CFG" as config file.
|
238
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/usr/local/etc/my_app.YML" as config file.
|
239
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/usr/local/etc/my_app.YAML" as config file.
|
240
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/usr/local/etc/my_app.Yaml" as config file.
|
241
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/home/user_home_dir/.config/my_app.conf" as config file.
|
242
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/home/user_home_dir/.config/my_app.yml" as config file.
|
243
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/home/user_home_dir/.config/my_app.cfg" as config file.
|
244
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/home/user_home_dir/.config/my_app.yaml" as config file.
|
245
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/home/user_home_dir/.config/my_app.CFG" as config file.
|
246
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/home/user_home_dir/.config/my_app.YML" as config file.
|
247
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/home/user_home_dir/.config/my_app.YAML" as config file.
|
248
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Trying "/home/user_home_dir/.config/my_app.Yaml" as config file.
|
249
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Processing helper module: EasyAppHelper::Base::Instanciator
|
250
|
-
D, [2013-03-20T13:14:32.164733 #10564] DEBUG -- : Processing helper module: EasyAppHelper::Common::Instanciator
|
251
|
-
|
252
|
-
You can observe that for each of the included module, the framework uses its related so-called instanciator in order to know how to start the module, externalizing the methods into a separated module to avoid poluting your own application with methods useless for you when you include the module.
|
253
462
|
|
254
463
|
## Contributing
|
255
464
|
|
@@ -259,17 +468,12 @@ You can observe that for each of the included module, the framework uses its rel
|
|
259
468
|
4. Push to the branch (`git push origin my-new-feature`)
|
260
469
|
5. Create new Pull Request
|
261
470
|
|
262
|
-
### Creating your own EasyAppHelper module
|
263
|
-
|
264
|
-
You need to write two modules
|
265
|
-
|
266
|
-
* One EasyAppHelper::MyModule that will provide the features mixed in your application.
|
267
|
-
* One EasyAppHelper::MyModule::Instanciator that will extend (not include) EasyAppHelper::Common::Instanciator and that will be responsible to initialize your module.
|
268
471
|
|
269
472
|
That's all folks.
|
270
473
|
|
271
474
|
|
272
|
-
[
|
273
|
-
[
|
274
|
-
[
|
275
|
-
[
|
475
|
+
[EAP]: https://rubygems.org/gems/easy_app_helper "**EasyAppHelper** gem"
|
476
|
+
[slop]: https://rubygems.org/gems/slop "Slop gem"
|
477
|
+
[yaml]: http://www.yaml.org/ "The Yaml official site"
|
478
|
+
[3]: http://rubydoc.info/github/lbriais/easy_app_helper/master/frames "**EasyAppHelper** documentation"
|
479
|
+
[4]: https://github.com/lbriais/easy_app_helper/wiki "**EasyAppHelper** wiki"
|