easy_app_helper 1.0.14 → 2.0.2
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.
- checksums.yaml +4 -4
- data/.gitignore +48 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/README.md +90 -447
- data/Rakefile +1 -8
- data/easy_app_helper.gemspec +6 -6
- data/lib/easy_app_helper/config/compatibility.rb +22 -0
- data/lib/easy_app_helper/config/initializer.rb +15 -0
- data/lib/easy_app_helper/config.rb +11 -0
- data/lib/easy_app_helper/logger/initializer.rb +46 -0
- data/lib/easy_app_helper/logger/wrapper.rb +12 -0
- data/lib/easy_app_helper/managed_logger.rb +9 -0
- data/lib/easy_app_helper/version.rb +1 -8
- data/lib/easy_app_helper.rb +23 -14
- data/spec/config_spec.rb +18 -188
- data/spec/easy_app_helper_spec.rb +28 -0
- data/spec/logger_spec.rb +8 -27
- data/spec/spec_helper.rb +92 -0
- metadata +27 -18
- data/etc/test_internal.conf +0 -3
- data/lib/easy_app_helper/core/base.rb +0 -228
- data/lib/easy_app_helper/core/config.rb +0 -220
- data/lib/easy_app_helper/core/logger.rb +0 -111
- data/lib/easy_app_helper/core/merge_policies.rb +0 -40
- data/lib/easy_app_helper/core/places.rb +0 -87
- data/lib/easy_app_helper/module_manager.rb +0 -68
- data/test/test.yml +0 -7
data/README.md
CHANGED
@@ -1,51 +1,30 @@
|
|
1
|
-
# EasyAppHelper
|
1
|
+
# EasyAppHelper v2
|
2
|
+
[](https://travis-ci.org/lbriais/easy_app_helper)
|
3
|
+
[](http://badge.fury.io/rb/easy_app_helper)
|
2
4
|
|
3
|
-
|
4
|
-
[](http://badge.fury.io/rb/easy_app_helper)
|
5
|
+
Every Ruby script on Earth has basically the same fundamental needs:
|
5
6
|
|
6
|
-
|
7
|
+
* Config files everywhere accross the system, some of them belonging to the administrator some to the user
|
8
|
+
running the application, some coming from the command line options and more...
|
9
|
+
* Display a nice command-line help
|
10
|
+
* Logging stuff either to STDOUT, STDERR or to a specific log file.
|
7
11
|
|
12
|
+
__If, like everyone, you have those basic needs, then this [gem][EAP] is definitely for you.__
|
8
13
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
apps designed for easy_app_helper prior to version 1.0.0**, although they could be very easily adapted
|
13
|
-
(anyway you always specify your gem dependencies using [semantic versioning](http://semver.org/) and the [pessimistic version operator]
|
14
|
-
(http://robots.thoughtbot.com/post/2508037841/rubys-pessimistic-operator), don't you ? More info [here](http://guides.rubygems.org/patterns/#declaring_dependencies)). Older applications should explicitly
|
15
|
-
require to use the latest version of the 0.x.x series instead. The config files themselves remain
|
16
|
-
compatible with all versions of **EasyAppHelper**, as they are actually just plain Yaml files...
|
17
|
-
|
18
|
-
The new **EasyAppHelper** module provides:
|
19
|
-
|
20
|
-
* A **super charged Config class** that:
|
21
|
-
* Manages **multiple sources of configuration**(command line, multiple config files...) in a **layered config**.
|
22
|
-
* Provides an **easy to customize merge mechanism** for the different **config layers** that renders a "live view"
|
23
|
-
of the merged configuration, while keeping a way to access or modify independently any of them.
|
24
|
-
* Allows **flexibility** when dealing with modification and provides a way to roll back modifications done to config
|
25
|
-
anytime, fully reload it, blast it... Export feature could be very easily added and will probably.
|
26
|
-
* A **Logger tightly coupled with the Config** class, that will behave regarding options specified be it from
|
27
|
-
command line or from any source(layer) of the config object...
|
28
|
-
* Embeds [Slop][slop] to handle **command line parameters** and keeps all parameters specified from the command
|
29
|
-
line in a **dedicated layer of the config object**.
|
30
|
-
* A mechanism that ensures that as soon as you access any of the objects or methods exposed by EasyAppHelper,
|
31
|
-
all of them are **fully configured and ready to be used**.
|
14
|
+
This is a complete rewrite of the [easy_app_helper gem v1.x][EAP1] now based on the [stacked_config Gem][SC] for the
|
15
|
+
config file management part, but it maintains some compatibility with previous version. See
|
16
|
+
[compatibility issues with previous versions](#compatibility-issues-with-previous-versions) for more information.
|
32
17
|
|
33
18
|
If you are writing command line applications, I hope you will like it because it's very easy to use,
|
34
19
|
and as unobtrusive as possible (you choose when you want to include or use as a module) while providing
|
35
20
|
a ready-for-prod config, logger and command line management.
|
36
21
|
|
37
22
|
|
38
|
-
Currently the only runtime dependency is the cool [Slop gem][slop] which is used to process the command line options.
|
39
|
-
|
40
|
-
[Why this gem][wiki] ?
|
41
|
-
|
42
|
-
|
43
|
-
|
44
23
|
## Installation
|
45
24
|
|
46
25
|
Add this line to your application's Gemfile:
|
47
26
|
|
48
|
-
gem 'easy_app_helper'
|
27
|
+
gem 'easy_app_helper', '~> 2.0'
|
49
28
|
|
50
29
|
And then execute:
|
51
30
|
|
@@ -56,17 +35,16 @@ Or install it yourself as:
|
|
56
35
|
$ gem install easy_app_helper
|
57
36
|
|
58
37
|
|
59
|
-
|
60
|
-
|
61
38
|
## Usage
|
62
39
|
|
63
|
-
|
40
|
+
### The config files handling
|
64
41
|
|
65
|
-
|
66
|
-
|
67
|
-
|
42
|
+
Basically all the config files management is delegated to the [stacked_config Gem][SC]. Please check its documentation
|
43
|
+
to know how it works. In your own script the 'merged' ([read for more][SC]) configuration is available using the
|
44
|
+
`EasyAppHelper.config` object.
|
68
45
|
|
69
|
-
|
46
|
+
To use it, you just need to require it, you can or not include the `EasyAppHelper` module. It's methods are both
|
47
|
+
available as module or mixin methods.
|
70
48
|
|
71
49
|
```ruby
|
72
50
|
require 'easy_app_helper'
|
@@ -74,250 +52,95 @@ require 'easy_app_helper'
|
|
74
52
|
# You can directly access the config or the logger through the **EasyAppHelper** module
|
75
53
|
puts "The application verbose flag is #{EasyAppHelper.config[:verbose]}"
|
76
54
|
|
77
|
-
#
|
78
|
-
# This will do nothing unless --debug is set and --log-level is set to the correct level
|
79
|
-
EasyAppHelper.logger.info "Hi guys!"
|
80
|
-
|
81
|
-
# Fed up with the **EasyAppHelper** prefix ? Just include the module where you want
|
55
|
+
# Fed up with the 'EasyAppHelper' prefix ? Just include the module where you want
|
82
56
|
include EasyAppHelper
|
83
|
-
|
84
|
-
# You can override programmatically any part of the config
|
85
|
-
config[:debug] = true
|
86
|
-
logger.level = 1
|
87
|
-
config[:test] = 'Groovy'
|
88
|
-
EasyAppHelper.logger.info "Hi guys!... again"
|
89
|
-
|
90
|
-
# You can see the internals of the config
|
91
|
-
puts config.internal_configs.to_yaml
|
92
|
-
# Which will output
|
93
|
-
#:modified:
|
94
|
-
# :content:
|
95
|
-
# :log-level: 1
|
96
|
-
# :debug: true
|
97
|
-
# :test: cool
|
98
|
-
# :source: Changed by code
|
99
|
-
#:command_line:
|
100
|
-
# :content:
|
101
|
-
# :auto:
|
102
|
-
# :simulate:
|
103
|
-
# :verbose: true
|
104
|
-
# :help:
|
105
|
-
# :config-file:
|
106
|
-
# :config-override:
|
107
|
-
# :debug:
|
108
|
-
# :debug-on-err:
|
109
|
-
# :log-level:
|
110
|
-
# :log-file:
|
111
|
-
# :source: Command line
|
112
|
-
#:system:
|
113
|
-
# :content: {}
|
114
|
-
# :source:
|
115
|
-
# :origin: EasyAppHelper
|
116
|
-
#:internal:
|
117
|
-
# :content: {}
|
118
|
-
# :source:
|
119
|
-
# :origin: ''
|
120
|
-
#:global:
|
121
|
-
# :content: {}
|
122
|
-
# :source:
|
123
|
-
# :origin: ''
|
124
|
-
#:user:
|
125
|
-
# :content: {}
|
126
|
-
# :source:
|
127
|
-
# :origin: ''
|
128
|
-
#:specific_file:
|
129
|
-
# :content: {}
|
130
|
-
|
131
|
-
# You see of course that the three modifications we did appear actually in the modified sub-hash
|
132
|
-
# And now the merged config
|
133
|
-
puts config.to_hash
|
134
|
-
|
135
|
-
# But you can see the modified part as it is:
|
136
|
-
puts config.internal_configs[:modified]
|
137
|
-
|
138
|
-
# Of course you can access it from any class
|
139
|
-
class Dummy
|
140
|
-
include EasyAppHelper
|
141
|
-
|
142
|
-
def initialize
|
143
|
-
puts "#{config[:test]} baby !"
|
144
|
-
# Back to the original
|
145
|
-
config.reset
|
146
|
-
puts config.internal_configs[:modified]
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
Dummy.new
|
151
|
-
|
152
|
-
# Some methods are provided to ease common tasks. For example this one will log at info level
|
153
|
-
# (so only displayed if debug mode and log level low enough), but will also puts on the console
|
154
|
-
# if verbose if set...
|
155
|
-
puts_and_logs "Hi world"
|
156
|
-
|
157
|
-
# It is actually one of the few methods added to regular Logger class (The added value of this logger
|
158
|
-
# is much more to be tightly coupled with the config object). Thus could access it like that:
|
159
|
-
logger.puts_and_logs "Hi world"
|
160
|
-
|
161
|
-
# or even
|
162
|
-
EasyAppHelper.logger.puts_and_logs "Hi world... 3 is enough."
|
57
|
+
puts "The application verbose flag is #{config[:verbose]}"
|
163
58
|
```
|
164
59
|
|
60
|
+
Check the [stacked_config Gem][SC] help to further understand about the `config` object.
|
165
61
|
|
166
|
-
|
167
|
-
|
168
|
-
**EasyAppHelper** will look for files in numerous places. **Both Unix and Windows places are handled**.
|
169
|
-
All the files are [Yaml][yaml] files but could have names with different extensions.
|
62
|
+
### The logger
|
170
63
|
|
171
|
-
|
172
|
-
|
64
|
+
The logger behaviour is tightly coupled with config part and there are few config options already available to drive
|
65
|
+
the way it will work. By default the logger will just log to the `File::NULL` device (/dev/null on Unix systems).
|
173
66
|
|
174
|
-
|
67
|
+
* __debug__: if specified the logger will log to STDOUT.
|
68
|
+
* __debug-on-err__: if specified the logger will log to STDERR.
|
69
|
+
* __log-level__: Specify the logger log level from 0 to 5, default 2 (in your code you can use one of the
|
70
|
+
`Logger::Severity.constants` if you prefer).
|
71
|
+
* __log-file__: Specifies a file to log to.
|
175
72
|
|
176
|
-
|
177
|
-
|
73
|
+
By default the `EasyAppHelper.logger` is an instance of a standard `Logger` but can specify your own using the
|
74
|
+
`EasyAppHelper::Logger::Initializer.setup_logger` method.
|
178
75
|
|
179
|
-
```
|
180
|
-
|
181
|
-
/etc/EasyAppHelper.conf
|
182
|
-
/etc/EasyAppHelper.yml
|
183
|
-
/etc/EasyAppHelper.cfg
|
184
|
-
/etc/EasyAppHelper.yaml
|
185
|
-
/etc/EasyAppHelper.CFG
|
186
|
-
/etc/EasyAppHelper.YML
|
187
|
-
/etc/EasyAppHelper.YAML
|
188
|
-
/etc/EasyAppHelper.Yaml
|
189
|
-
```
|
76
|
+
```ruby
|
77
|
+
require 'easy_app_helper'
|
190
78
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
It is a way for a Gem to define a system default configuration.
|
195
|
-
|
196
|
-
```text
|
197
|
-
# The :internal layer
|
198
|
-
etc/myscript.conf
|
199
|
-
etc/myscript.yml
|
200
|
-
etc/myscript.cfg
|
201
|
-
etc/myscript.yaml
|
202
|
-
etc/myscript.CFG
|
203
|
-
etc/myscript.YML
|
204
|
-
etc/myscript.YAML
|
205
|
-
etc/myscript.Yaml
|
206
|
-
config/myscript.conf
|
207
|
-
config/myscript.yml
|
208
|
-
config/myscript.cfg
|
209
|
-
config/myscript.yaml
|
210
|
-
config/myscript.CFG
|
211
|
-
config/myscript.YML
|
212
|
-
config/myscript.YAML
|
213
|
-
config/myscript.Yaml
|
214
|
-
```
|
79
|
+
# You can directly use the logger according to the command line, or config file, flags
|
80
|
+
# This will do nothing unless --debug is set and --log-level is set to the correct level
|
81
|
+
EasyAppHelper.logger.info "Hi guys!"
|
215
82
|
|
83
|
+
# Fed up with the **EasyAppHelper** prefix ? Just include the module where you want
|
84
|
+
include EasyAppHelper
|
216
85
|
|
217
|
-
|
218
|
-
|
219
|
-
Application config file names are determined from the config.script_filename property. It initially contains
|
220
|
-
the bare name of the script(path and extension removed), but you can replace with whatever you want. Changing
|
221
|
-
this property causes actually the impacted files to be reloaded.
|
222
|
-
|
223
|
-
It is in fact a two level configuration. One is global (the :global layer) and the other is at user level (the
|
224
|
-
:user layer).
|
225
|
-
|
226
|
-
For example on a Unix system or cygwin
|
227
|
-
|
228
|
-
```text
|
229
|
-
# For the :global layer
|
230
|
-
/etc/myscript.conf
|
231
|
-
/etc/myscript.yml
|
232
|
-
/etc/myscript.cfg
|
233
|
-
/etc/myscript.yaml
|
234
|
-
/etc/myscript.CFG
|
235
|
-
/etc/myscript.YML
|
236
|
-
/etc/myscript.YAML
|
237
|
-
/etc/myscript.Yaml
|
238
|
-
/usr/local/etc/myscript.conf
|
239
|
-
/usr/local/etc/myscript.yml
|
240
|
-
/usr/local/etc/myscript.cfg
|
241
|
-
/usr/local/etc/myscript.yaml
|
242
|
-
/usr/local/etc/myscript.CFG
|
243
|
-
/usr/local/etc/myscript.YML
|
244
|
-
/usr/local/etc/myscript.YAML
|
245
|
-
/usr/local/etc/myscript.Yaml
|
246
|
-
# For the :user level
|
247
|
-
${HOME}/.config/myscript.conf
|
248
|
-
${HOME}/.config/myscript.yml
|
249
|
-
${HOME}/.config/myscript.cfg
|
250
|
-
${HOME}/.config/myscript.yaml
|
251
|
-
${HOME}/.config/myscript.CFG
|
252
|
-
${HOME}/.config/myscript.YML
|
253
|
-
${HOME}/.config/myscript.YAML
|
254
|
-
${HOME}/.config/myscript.Yaml
|
86
|
+
logger.level = 1
|
87
|
+
logger.info "Hi guys!... again"
|
255
88
|
```
|
256
89
|
|
257
|
-
|
90
|
+
`EasyAppHelper` introduces a nice method coupled with both the `verbose` option and log-related options:
|
91
|
+
`puts_and_logs`. It will perform a `puts` if the `verbose` option is set. And on top it will log at 'info' level if
|
92
|
+
the `debug` option is set (or on STDERR if `debug-on-err` is set).
|
258
93
|
|
259
|
-
|
260
|
-
|
94
|
+
```ruby
|
95
|
+
require 'easy_app_helper'
|
261
96
|
|
262
|
-
|
97
|
+
include EasyAppHelper
|
263
98
|
|
99
|
+
puts_and_logs 'Hello world'
|
100
|
+
```
|
264
101
|
|
265
102
|
### The command line options
|
266
103
|
|
267
|
-
|
104
|
+
The command line options is one of the config layers maintained by the [stacked_config Gem][SC], and therefore there
|
105
|
+
is not much to say except that [easy_app_helper][EAP] adds itself some options related to the logging as seen in the
|
106
|
+
[logger part](#the-logger).
|
107
|
+
|
108
|
+
Of course as described in the [stacked_config Gem][SC] documentation, you can define your own options:
|
109
|
+
|
110
|
+
Let's say you have a `my_script.rb`:
|
268
111
|
|
269
112
|
```ruby
|
270
113
|
#!/usr/bin/env ruby
|
271
114
|
|
272
115
|
require 'easy_app_helper'
|
273
116
|
|
274
|
-
|
275
|
-
include EasyAppHelper
|
276
|
-
|
277
|
-
APP_NAME = "My super application"
|
278
|
-
VERSION = '0.0.1'
|
279
|
-
DESCRIPTION = 'This application is a proof of concept for EasyAppHelper.'
|
280
|
-
|
281
|
-
|
282
|
-
def initialize
|
283
|
-
# Providing this data is optional but brings better logging and online help
|
284
|
-
config.describes_application(app_name: APP_NAME, app_version: VERSION, app_description: DESCRIPTION)
|
285
|
-
end
|
117
|
+
include EasyAppHelper
|
286
118
|
|
119
|
+
APP_NAME = "My super application"
|
120
|
+
VERSION = '0.0.1'
|
121
|
+
DESCRIPTION = 'This application is a proof of concept for EasyAppHelper.'
|
287
122
|
|
288
|
-
|
289
|
-
if config[:help]
|
290
|
-
puts config.help
|
291
|
-
exit 0
|
292
|
-
end
|
293
|
-
puts_and_logs "Application is starting"
|
294
|
-
do_some_processing
|
295
|
-
end
|
123
|
+
config.describes_application(app_name: APP_NAME, app_version: VERSION, app_description: DESCRIPTION)
|
296
124
|
|
297
|
-
def do_some_processing
|
298
|
-
puts_and_logs "Starting some heavy processing"
|
299
|
-
end
|
300
125
|
|
126
|
+
config.add_command_line_section('My script options') do |slop|
|
127
|
+
slop.on :u, :useless, 'Stupid option', :argument => false
|
128
|
+
slop.on :anint, 'Stupid option with integer argument', :argument => true, :as => Integer
|
301
129
|
end
|
302
130
|
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
And you run it without any command line option
|
308
|
-
|
309
|
-
```text
|
310
|
-
./test4_app.rb
|
131
|
+
if config[:help]
|
132
|
+
puts config.command_line_help
|
133
|
+
end
|
311
134
|
```
|
312
135
|
|
313
|
-
|
136
|
+
Then if you do:
|
314
137
|
|
315
|
-
|
138
|
+
$ ./my_script.rb -h
|
316
139
|
|
317
|
-
|
318
|
-
./test4_app.rb --help
|
140
|
+
You will obtain a nice command line help:
|
319
141
|
|
320
|
-
|
142
|
+
```
|
143
|
+
Usage: my_script [options]
|
321
144
|
My super application Version: 0.0.1
|
322
145
|
|
323
146
|
This application is a proof of concept for EasyAppHelper.
|
@@ -334,215 +157,35 @@ This application is a proof of concept for EasyAppHelper.
|
|
334
157
|
--debug-on-err Run in debug mode with output to stderr.
|
335
158
|
--log-level Log level from 0 to 5, default 2.
|
336
159
|
--log-file File to log to.
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
Let's try the ```--verbose``` flag
|
342
|
-
|
343
|
-
```text
|
344
|
-
./test4_app.rb --verbose
|
345
|
-
Application is starting
|
346
|
-
Starting some heavy processing
|
160
|
+
-- My script options -----------------------------------------------------------
|
161
|
+
-u, --useless Stupid option
|
162
|
+
--anint Stupid option with integer argument
|
347
163
|
```
|
348
164
|
|
349
|
-
|
165
|
+
See [stacked_config Gem][SC] documentation for more options.
|
350
166
|
|
351
|
-
But what if I debug
|
352
|
-
```text
|
353
|
-
./test4_app.rb --debug
|
354
|
-
```
|
355
167
|
|
356
|
-
|
357
|
-
|
358
|
-
```text
|
359
|
-
./test4_app.rb --debug --log-level 0
|
360
|
-
I, [2013-06-23T19:37:24.975392 #10276] INFO -- My super application: Application is starting
|
361
|
-
I, [2013-06-23T19:37:24.975592 #10276] INFO -- My super application: Starting some heavy processing
|
362
|
-
```
|
363
|
-
|
364
|
-
You see there that the puts_and_logs logs as well with the log level 1 (Info)... Nice looks like it was claiming
|
365
|
-
this in its name... ;-)
|
366
|
-
|
367
|
-
If I mix ?
|
368
|
-
|
369
|
-
```text
|
370
|
-
./test4_app.rb --debug --log-level 0 --verbose
|
371
|
-
Application is starting
|
372
|
-
I, [2013-06-23T19:39:05.712558 #11768] INFO -- My super application: Application is starting
|
373
|
-
Starting some heavy processing
|
374
|
-
I, [2013-06-23T19:39:05.712834 #11768] INFO -- My super application: Starting some heavy processing
|
375
|
-
```
|
168
|
+
## Compatibility issues with previous versions
|
376
169
|
|
377
|
-
|
378
|
-
|
379
|
-
### Specifying command line parameters
|
380
|
-
|
381
|
-
As said, internally **EasyAppHelper** uses the [Slop gem][slop] to handle the command line parameters.
|
382
|
-
You can configure the internal Slop object by calling the add_command_line_section method of the config
|
383
|
-
object. You could create a method that setup your application command line parameters like this:
|
384
|
-
|
385
|
-
```ruby
|
386
|
-
def add_cmd_line_options
|
387
|
-
config.add_command_line_section do |slop|
|
388
|
-
slop.on :u, :useless, 'Stupid option', :argument => false
|
389
|
-
slop.on :anint, 'Stupid option with integer argument', :argument => true, :as => Integer
|
390
|
-
end
|
391
|
-
end
|
392
|
-
|
393
|
-
```
|
394
|
-
|
395
|
-
See [Slop gem][slop] API documentation for more options.
|
396
|
-
|
397
|
-
|
398
|
-
### Debugging the framework itself
|
399
|
-
|
400
|
-
If you want, you can even debug what happens during **EasyAppHelper** initialisation, for this you can use the
|
401
|
-
```DEBUG_EASY_MODULES``` environment variable. As how and where everything has to be logged is only specified when
|
402
|
-
you actually provide command line options, **EasyAppHelper** provides a temporary logger to itself and will
|
403
|
-
after all dump the logger content to the logger you specified and if you specify... So that you don't miss a log.
|
404
|
-
|
405
|
-
```text
|
406
|
-
$ DEBUG_EASY_MODULES=y ruby ./test4_app.rb
|
407
|
-
|
408
|
-
D, [2013-06-23T19:43:47.977031 #16294] DEBUG -- : Temporary initialisation logger created...
|
409
|
-
D, [2013-06-23T19:43:47.977861 #16294] DEBUG -- : Trying "/etc/EasyAppHelper.conf" as config file.
|
410
|
-
D, [2013-06-23T19:43:47.977908 #16294] DEBUG -- : Trying "/etc/EasyAppHelper.yml" as config file.
|
411
|
-
D, [2013-06-23T19:43:47.977938 #16294] DEBUG -- : Loading config file "/etc/EasyAppHelper.cfg"
|
412
|
-
D, [2013-06-23T19:43:47.977961 #16294] DEBUG -- : Trying "/home/laurent/devel/ruby/gems/test4_app/etc/test4_app.conf" as config file.
|
413
|
-
D, [2013-06-23T19:43:47.977982 #16294] DEBUG -- : Trying "/home/laurent/devel/ruby/gems/test4_app/etc/test4_app.yml" as config file.
|
414
|
-
D, [2013-06-23T19:43:47.977995 #16294] DEBUG -- : Trying "/home/laurent/devel/ruby/gems/test4_app/etc/test4_app.cfg" as config file.
|
415
|
-
D, [2013-06-23T19:43:47.978032 #16294] DEBUG -- : Trying "/home/laurent/devel/ruby/gems/test4_app/etc/test4_app.yaml" as config file.
|
416
|
-
D, [2013-06-23T19:43:47.978082 #16294] DEBUG -- : Trying "/home/laurent/devel/ruby/gems/test4_app/etc/test4_app.CFG" as config file.
|
417
|
-
D, [2013-06-23T19:43:47.978119 #16294] DEBUG -- : Trying "/home/laurent/devel/ruby/gems/test4_app/etc/test4_app.YML" as config file.
|
418
|
-
D, [2013-06-23T19:43:47.978163 #16294] DEBUG -- : Trying "/home/laurent/devel/ruby/gems/test4_app/etc/test4_app.YAML" as config file.
|
419
|
-
D, [2013-06-23T19:43:47.978206 #16294] DEBUG -- : Trying "/home/laurent/devel/ruby/gems/test4_app/etc/test4_app.Yaml" as config file.
|
420
|
-
I, [2013-06-23T19:43:47.978255 #16294] INFO -- : No config file found for layer internal.
|
421
|
-
D, [2013-06-23T19:43:47.978300 #16294] DEBUG -- : Trying "/etc/test4_app.conf" as config file.
|
422
|
-
D, [2013-06-23T19:43:47.978332 #16294] DEBUG -- : Trying "/etc/test4_app.yml" as config file.
|
423
|
-
D, [2013-06-23T19:43:47.978355 #16294] DEBUG -- : Trying "/etc/test4_app.cfg" as config file.
|
424
|
-
D, [2013-06-23T19:43:47.978381 #16294] DEBUG -- : Trying "/etc/test4_app.yaml" as config file.
|
425
|
-
D, [2013-06-23T19:43:47.978403 #16294] DEBUG -- : Trying "/etc/test4_app.CFG" as config file.
|
426
|
-
D, [2013-06-23T19:43:47.978424 #16294] DEBUG -- : Trying "/etc/test4_app.YML" as config file.
|
427
|
-
D, [2013-06-23T19:43:47.978445 #16294] DEBUG -- : Trying "/etc/test4_app.YAML" as config file.
|
428
|
-
D, [2013-06-23T19:43:47.978466 #16294] DEBUG -- : Trying "/etc/test4_app.Yaml" as config file.
|
429
|
-
D, [2013-06-23T19:43:47.978491 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.conf" as config file.
|
430
|
-
D, [2013-06-23T19:43:47.978529 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.yml" as config file.
|
431
|
-
D, [2013-06-23T19:43:47.978553 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.cfg" as config file.
|
432
|
-
D, [2013-06-23T19:43:47.978575 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.yaml" as config file.
|
433
|
-
D, [2013-06-23T19:43:47.978597 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.CFG" as config file.
|
434
|
-
D, [2013-06-23T19:43:47.978619 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.YML" as config file.
|
435
|
-
D, [2013-06-23T19:43:47.978670 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.Yaml" as config file.
|
436
|
-
I, [2013-06-23T19:43:47.978695 #16294] INFO -- : No config file found for layer global.
|
437
|
-
D, [2013-06-23T19:43:47.978725 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.conf" as config file.
|
438
|
-
D, [2013-06-23T19:43:47.978748 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.yml" as config file.
|
439
|
-
D, [2013-06-23T19:43:47.978770 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.cfg" as config file.
|
440
|
-
D, [2013-06-23T19:43:47.978792 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.yaml" as config file.
|
441
|
-
D, [2013-06-23T19:43:47.978817 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.CFG" as config file.
|
442
|
-
D, [2013-06-23T19:43:47.978840 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.YML" as config file.
|
443
|
-
D, [2013-06-23T19:43:47.978861 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.YAML" as config file.
|
444
|
-
D, [2013-06-23T19:43:47.978974 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.Yaml" as config file.
|
445
|
-
I, [2013-06-23T19:43:47.979000 #16294] INFO -- : No config file found for layer user.
|
446
|
-
I, [2013-06-23T19:43:47.979025 #16294] INFO -- : No config file found for layer specific_file.
|
447
|
-
D, [2013-06-23T19:43:47.979514 #16294] DEBUG -- : Trying "/etc/EasyAppHelper.conf" as config file.
|
448
|
-
D, [2013-06-23T19:43:47.979561 #16294] DEBUG -- : Trying "/etc/EasyAppHelper.yml" as config file.
|
449
|
-
D, [2013-06-23T19:43:47.979591 #16294] DEBUG -- : Loading config file "/etc/EasyAppHelper.cfg"
|
450
|
-
D, [2013-06-23T19:43:47.979717 #16294] DEBUG -- : Trying "/etc/test4_app.conf" as config file.
|
451
|
-
D, [2013-06-23T19:43:47.979747 #16294] DEBUG -- : Trying "/etc/test4_app.yml" as config file.
|
452
|
-
D, [2013-06-23T19:43:47.979800 #16294] DEBUG -- : Trying "/etc/test4_app.cfg" as config file.
|
453
|
-
D, [2013-06-23T19:43:47.979823 #16294] DEBUG -- : Trying "/etc/test4_app.yaml" as config file.
|
454
|
-
D, [2013-06-23T19:43:47.979845 #16294] DEBUG -- : Trying "/etc/test4_app.CFG" as config file.
|
455
|
-
D, [2013-06-23T19:43:47.979867 #16294] DEBUG -- : Trying "/etc/test4_app.YML" as config file.
|
456
|
-
D, [2013-06-23T19:43:47.979908 #16294] DEBUG -- : Trying "/etc/test4_app.YAML" as config file.
|
457
|
-
D, [2013-06-23T19:43:47.979935 #16294] DEBUG -- : Trying "/etc/test4_app.Yaml" as config file.
|
458
|
-
D, [2013-06-23T19:43:47.979959 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.conf" as config file.
|
459
|
-
D, [2013-06-23T19:43:47.979981 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.yml" as config file.
|
460
|
-
D, [2013-06-23T19:43:47.980004 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.cfg" as config file.
|
461
|
-
D, [2013-06-23T19:43:47.980026 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.yaml" as config file.
|
462
|
-
D, [2013-06-23T19:43:47.980047 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.CFG" as config file.
|
463
|
-
D, [2013-06-23T19:43:47.980069 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.YML" as config file.
|
464
|
-
D, [2013-06-23T19:43:47.980091 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.YAML" as config file.
|
465
|
-
D, [2013-06-23T19:43:47.980112 #16294] DEBUG -- : Trying "/usr/local/etc/test4_app.Yaml" as config file.
|
466
|
-
I, [2013-06-23T19:43:47.980135 #16294] INFO -- : No config file found for layer global.
|
467
|
-
D, [2013-06-23T19:43:47.980181 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.conf" as config file.
|
468
|
-
D, [2013-06-23T19:43:47.980207 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.yml" as config file.
|
469
|
-
D, [2013-06-23T19:43:47.980230 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.cfg" as config file.
|
470
|
-
D, [2013-06-23T19:43:47.980252 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.yaml" as config file.
|
471
|
-
D, [2013-06-23T19:43:47.980274 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.CFG" as config file.
|
472
|
-
D, [2013-06-23T19:43:47.980296 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.YML" as config file.
|
473
|
-
D, [2013-06-23T19:43:47.980319 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.YAML" as config file.
|
474
|
-
D, [2013-06-23T19:43:47.980361 #16294] DEBUG -- : Trying "/home/laurent/.config/test4_app.Yaml" as config file.
|
475
|
-
I, [2013-06-23T19:43:47.980395 #16294] INFO -- : No config file found for layer user.
|
476
|
-
I, [2013-06-23T19:43:47.980418 #16294] INFO -- : No config file found for layer specific_file.
|
477
|
-
D, [2013-06-23T19:43:47.981934 #16294] DEBUG -- : Config layers:
|
478
|
-
---
|
479
|
-
:modified:
|
480
|
-
:content: {}
|
481
|
-
:source: Changed by code
|
482
|
-
:command_line:
|
483
|
-
:content:
|
484
|
-
:auto:
|
485
|
-
:simulate:
|
486
|
-
:verbose: true
|
487
|
-
:help:
|
488
|
-
:config-file:
|
489
|
-
:config-override:
|
490
|
-
:debug: true
|
491
|
-
:debug-on-err:
|
492
|
-
:log-level: 0
|
493
|
-
:log-file:
|
494
|
-
:source: Command line
|
495
|
-
:system:
|
496
|
-
:content:
|
497
|
-
:copyright: (c) 2012-2013 Nanonet
|
498
|
-
:source: /etc/EasyAppHelper.cfg
|
499
|
-
:origin: EasyAppHelper
|
500
|
-
:internal:
|
501
|
-
:content: {}
|
502
|
-
:source:
|
503
|
-
:origin: test4_app
|
504
|
-
:global:
|
505
|
-
:content: {}
|
506
|
-
:source:
|
507
|
-
:origin: test4_app
|
508
|
-
:user:
|
509
|
-
:content: {}
|
510
|
-
:source:
|
511
|
-
:origin: test4_app
|
512
|
-
:specific_file:
|
513
|
-
:content: {}
|
514
|
-
|
515
|
-
D, [2013-06-23T19:43:47.985357 #16294] DEBUG -- : Merged config:
|
516
|
-
---
|
517
|
-
:copyright: (c) 2012-2013 Nanonet
|
518
|
-
:verbose: true
|
519
|
-
:debug: true
|
520
|
-
:log-level: 0
|
521
|
-
|
522
|
-
Application is starting
|
523
|
-
I, [2013-06-23T19:43:47.986298 #16294] INFO -- My super application: Application is starting
|
524
|
-
Starting some heavy processing
|
525
|
-
I, [2013-06-23T19:43:47.986460 #16294] INFO -- My super application: Starting some heavy processing
|
526
|
-
```
|
170
|
+
[easy_app_helper][EAP] v2.x is not fully compatible with previous branch 1.x. But for common usage it should
|
171
|
+
nevertheless be the case.
|
527
172
|
|
528
|
-
|
529
|
-
|
173
|
+
There is a (not perfect) compatibility mode that you can trigger by setting the `easy_app_helper_compatibility_mode`
|
174
|
+
property to true in one of your config files.
|
530
175
|
|
531
176
|
|
532
177
|
## Contributing
|
533
178
|
|
534
|
-
1. Fork it
|
535
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
536
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
537
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
538
|
-
5. Create
|
179
|
+
1. [Fork it] ( https://github.com/lbriais/easy_app_helper/fork ), clone your fork.
|
180
|
+
2. Create your feature branch (`git checkout -b my-new-feature`) and develop your super extra feature.
|
181
|
+
3. Commit your changes (`git commit -am 'Add some feature'`).
|
182
|
+
4. Push to the branch (`git push origin my-new-feature`).
|
183
|
+
5. Create a Pull Request.
|
539
184
|
|
540
185
|
|
541
|
-
|
186
|
+
__That's all folks.__
|
542
187
|
|
543
188
|
|
544
|
-
[EAP]:
|
545
|
-
[
|
546
|
-
[
|
547
|
-
[doc]: http://rubydoc.info/github/lbriais/easy_app_helper/master "EasyAppHelper documentation"
|
548
|
-
[wiki]: https://github.com/lbriais/easy_app_helper/wiki "EasyAppHelper wiki"
|
189
|
+
[EAP]: https://rubygems.org/gems/easy_app_helper "EasyAppHelper gem"
|
190
|
+
[EAP1]: https://rubygems.org/gems/easy_app_helper/tree/old_release_1_x "EasyAppHelper gem DEPRECATED branch"
|
191
|
+
[SC]: https://github.com/lbriais/stacked_config "The stacked_config Gem"
|
data/Rakefile
CHANGED
data/easy_app_helper.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'easy_app_helper/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'easy_app_helper'
|
8
|
-
spec.version = EasyAppHelper::
|
8
|
+
spec.version = EasyAppHelper::VERSION
|
9
9
|
spec.authors = ['L.Briais']
|
10
10
|
spec.email = ['lbnetid+rb@gmail.com']
|
11
11
|
spec.description = %q{Easy Application Helpers framework}
|
@@ -13,15 +13,15 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'https://github.com/lbriais/easy_app_helper'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split(
|
17
|
-
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
23
|
spec.add_development_dependency 'pry'
|
24
|
-
spec.add_development_dependency 'rspec', '~>
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
25
25
|
|
26
|
-
spec.add_runtime_dependency '
|
26
|
+
spec.add_runtime_dependency 'stacked_config', '~> 0.1', '>= 0.1.2'
|
27
27
|
end
|