easy_app_helper 0.0.9 → 1.0.0
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/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"
         |