Merge Source Files from Directories in Chain
Concept
Import source files from a chain of application modules.
Synposis
Sync/Import from other modules
Suppose your local application is dulcinea and you want a file lab.lua from
directory separate_module, suppose directory dulcinea and separate_module are
located in the same location, then create a file dulcinea/.app_stack.yml like:
sync:
- separate_module: { lab.lua: '' }
and run
$ stackup
under the dulcinea directory, lab.lua will copied from separate_module.
If the file lab.lua in separate_module changed, run stackup again in
dulcinea will get a warning with colored diff message (you need diff command
installed in your system). If you want to over-writtern dulcinea/lab.lua, run
$ stackup -f
If you want copy outside file only if local file not exists, use
sync:
- separate_module: { lab.lua: '' }
- other_module: { copymeto.inc: 'copymeto.php' }
import:
- separate_module: { copyme: '' }
Note other_module/copymeto.inc will be copied as dulcinea/copymeto.php,
as explicitly defined in the above example.
Export groups
If the remote module, like separate_module in the last example also appstack aware,
it may have a file .app_stack.yml or app_stack.yml in their root folder like:
export:
- some.lua
- lib/**/*.lua
- config:
- config/*.lua
In this example setting, separate_module defined two export groups: default
and config, default group contains some.lua and all lua files under lib/ folder
and all it’s sub-folders. config group (which defined as a Hash with an Array value, in YAML format)
conains all lua files under config/ folder. You can import config files while sync default files from
separate_module by setting in dulcinea/.app_stack.yml like:
import:
- separate_module
sync:
- separate_module: [ config ]
Or you want to sync both:
sync:
- separate_module: [ config, default ]
You can still request for files that not explicitly exported by the remote configuration:
sync:
- separate_module: [ config, default, { config.lua: config.sample.lua } ]
will sync separate_module/config.lua as dulcinea/config.sample.lua, as expected.
Render a template file
Suppose you have a template file separate_module/main.lua.erb like:
...
local app_name = '<%= app_name %>'
local version = <%= version_code %>
...
And in separate_module/.app_stack.yml:
...
attrs:
app_name: Separated Module
version_code: 1.0
And in dulcinea/.app_stack.yml:
render:
- separate_module: { main.lua.erb: '' }
attrs:
app_name: Main App
version_code: 1.0
You will get a file dulcinea/main.lua with contents
...
local app_name = 'Main App'
local version = 1.0
...
i.e., attrs are merged up from ALL stacked modules.
Parking list for new version (1.4)
- [OK] Optional
.app_stack.ymlfor stacked modules - [OK] Better detection for yaml file error
- [OK] Better message with short file name
- [OK] Render files only if contents really changed
new file only modeBetter simulate, new file only, force mode- Recursive stackup (?)
- [OK] Separate sync/import group instead of one single
stackapps