This is still a work in progress but I’ll try to outline how I envision being productive in our current setup.
We must keep Avo as easy to work with for us and for all newcomers. Remember that this is public and all the other repos (dashboards, filters, etc.) are private and some might not have access to them.
The dummy
app should be functional as a runnable app (rails server
) and to be used with rspec
to run our tests.
When we want to try out new features and provide support requests to our community users, we can start up Avo dummy
using bin/dev
and work there. After we make the feature we should add tests in this repository.
When we need to provide support or build new commercial features, we can spin up prommy
with bin/dev
to do so. Prommy is using the commercial packages in it’s Gemfile
so we can work straight in the packages themselves.
After we finish a feature, we add the configuration files (resources, actions, etc.) to each repo’s (dashboards, filters, etc.) dummy
app and write some specs
there.
We’ll end up with some duplicated configuration files but it’s going to help in the long run.
In order to do development properly we need to have all the assets from all the gems available and compiled.
When doing development we run a task rake avo:gem_pats
to find the root paths for all packages and memoize them in a AVO_ENGINES
environment variable.
AVO_ENGINES # avo:/Users/adrian/work/avocado/avo-3,avo_filters:/Users/adrian/work/avocado/advanced/avo_filters
Next, tailwind.config.js
uses those paths to hydrate them with the exact views paths for each gem.
# The hydrated paths for each gem
'/Users/adrian/work/avocado/gems/avo/app/helpers/**/*.rb',
'/Users/adrian/work/avocado/gems/avo/app/views/**/*.erb',
'/Users/adrian/work/avocado/gems/avo/app/javascript/**/*.js',
'/Users/adrian/work/avocado/gems/avo/app/components/**/*.{html.erb,rb}',
'/Users/adrian/work/avocado/gems/avo/app/controllers/**/*.rb',
'/Users/adrian/work/avocado/gems/avo/app/javascript/**/*.js',
'/Users/adrian/work/avocado/gems/avo/lib/avo/**/*.rb',
'/Users/adrian/work/avocado/gems/avo/public/**/*.{js,css}',
'/Users/adrian/work/avocado/gems/avo_filters/app/helpers/**/*.rb',
'/Users/adrian/work/avocado/gems/avo_filters/app/views/**/*.erb',
'/Users/adrian/work/avocado/gems/avo_filters/app/javascript/**/*.js',
'/Users/adrian/work/avocado/gems/avo_filters/app/components/**/*.{html.erb,rb}',
'/Users/adrian/work/avocado/gems/avo_filters/app/controllers/**/*.rb',
'/Users/adrian/work/avocado/gems/avo_filters/app/javascript/**/*.js',
'/Users/adrian/work/avocado/gems/avo_filters/lib/avo_filters/**/*.rb',
'/Users/adrian/work/avocado/gems/avo_filters/public/**/*.{js,css}',
Now we’ve got all the paths for all the gems so we whitelist all the css classes with one process.
Avo now exports the avo:gem_paths
rake task so any app that requires Avo will be able to run it.
This way we don’t need to duplicate this script and we don’t depend on the support
package. This is important because the free gem (Avo) will have to work without support
.