Adding Components
Rendering Engine
Contributing a rendering engine to Padrino is actually quite straightforward. For this guide, let's assume we want to add haml
as a rendering engine integrated into Padrino.
First let's add rendering engine into the generator in padrino-gen/generators/components/renderers/haml.rb:
# padrino-gen/lib/padrino-gen/generators/components/renderers/haml.rb
def setup_renderer
require_dependencies 'haml'
end
Let's also add a test to ensure the new rendering component generates as expected in padrino-gen/test/test_project_generator.rb:
# padrino-gen/test/test_project_generator.rb
should "properly generate for haml" do
buffer = silence_logger {@project.start(['sample_project', '--root=/tmp', '--renderer=haml','--script=none'])}
assert_match /Applying.*?haml.*?renderer/, buffer
assert_match_in_file(/gem 'haml'/, '/tmp/sample_project/Gemfile')
end
and finally let's update the README for padrino-gen
to reflect the new component in padrino-gen/README.rdoc:
# padrino-gen/README.rdoc
renderer:: erb (default), haml
When adding support for a new rendering engine, you are highly encouraged to also include support for this engine within the padrino-admin
gem. This admin gem constructs views and forms based on templates provided for each supported renderer.
When adding a new renderer, be sure to add templates for each of the necessary admin views. The necessary templates and structure can be found in the padrino-admin/generators/templates/haml views folder. Be sure to implement all of these if you want the integrated rendering engine to work with the admin dashboard.
Finally, let's update the padrino-admin
README file at padrino-admin/README.rdoc to reflect our newly support component:
# padrino-admin/README.rdoc
Template Agnostic:: Erb and Haml Renderer
This completes the full integration of a rendering engine into Padrino. Once all of this has been finished in your github fork, send us a pull request and assuming you followed these instructions properly and the engine actually works when generated, we will include the component into the next Padrino version crediting you for the contribution!
last updated: 2022-02-22
comments powered by Disqus