12 changed files with 189 additions and 0 deletions
@ -0,0 +1,47 @@ |
|||||||
|
Use Groups for Custom Builds |
||||||
|
============================ |
||||||
|
|
||||||
|
Often in the prototyping process you'll find yourself cycling between running your overall build and building a single card. You'll probably be commenting out code in the process. |
||||||
|
|
||||||
|
And even after your code is stable, you'll probably want to build your deck multiple ways: maybe a printer-friendly black-and-white version for print-and-play and then a full color version. |
||||||
|
|
||||||
|
Squib's Build Groups help you with these situations. By grouping your Squib code into different groups, you can run parts of it at a time without having to go back and commenting out code. |
||||||
|
|
||||||
|
Here's a basic example: |
||||||
|
|
||||||
|
.. raw:: html |
||||||
|
|
||||||
|
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> |
||||||
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gist-embed/2.4/gist-embed.min.js"></script> |
||||||
|
<code data-gist-id="bda48487e3b8c9d15edb" data-gist-file="build_groups.rb"></code> |
||||||
|
|
||||||
|
Only one group is enabled by default: ``:all``. All other groups are disabled by default. To see which groups are enabled currently, the :doc:`/dsl/groups` returns the set. |
||||||
|
|
||||||
|
Groups can be enabled and disabled in several ways: |
||||||
|
|
||||||
|
* The :doc:`/dsl/enable_group` and :doc:`/dsl/disable_group` DSL methods can explicitly enable/disable a group. Again, you're back to commenting out the *enable_group* call, but that's easier than remembering what lines to comment out each time. |
||||||
|
* When a ``Squib::Deck`` is initialized, the `environment variable <https://en.wikipedia.org/wiki/Environment_variable>`_ ``SQUIB_BUILD`` is consulted for a comma-separated string. These are converted to Ruby symbols and the corresponding groups are enabled. |
||||||
|
|
||||||
|
Note that the environment variables are intended to change from run to run, from the command line (see above gist for examples in various OS's). |
||||||
|
|
||||||
|
.. note:: |
||||||
|
|
||||||
|
There should be no need to set the SQUIB_BUILD variable globally on your system. |
||||||
|
|
||||||
|
Don't like how Windows specifies environment variables? One adaptation of this is to do the environment setting in a ``Rakefile``. Rake is the build utility that comes with Ruby, and it allows us to set different tasks exactly in this way. This Rakefile works nicely with our above code example: |
||||||
|
|
||||||
|
|
||||||
|
.. raw:: html |
||||||
|
|
||||||
|
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> |
||||||
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/gist-embed/2.4/gist-embed.min.js"></script> |
||||||
|
<code data-gist-id="bda48487e3b8c9d15edb" data-gist-file="Rakefile"></code> |
||||||
|
|
||||||
|
|
||||||
|
Thus, you can just run this code with commands like these:: |
||||||
|
|
||||||
|
$ rake |
||||||
|
$ rake pnp |
||||||
|
$ rake color |
||||||
|
$ rake test |
||||||
|
$ rake both |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
disable_group |
||||||
|
============= |
||||||
|
|
||||||
|
Disable the given build group for the rest of the build. Thus, code within the corresponding :doc:`/dsl/group` block will not be executed. See :doc:`/build_groups` for ways to use this effectively. |
||||||
|
|
||||||
|
|
||||||
|
Required Arguments |
||||||
|
------------------ |
||||||
|
|
||||||
|
group |
||||||
|
the name of the group to disable. Convention is to use a Ruby symbol. |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Examples |
||||||
|
-------- |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
enable_group |
||||||
|
============= |
||||||
|
|
||||||
|
Enable the given build group for the rest of the build. Thus, code within the corresponding :doc:`/dsl/group` block will be executed. See :doc:`/build_groups` for ways to use this effectively. |
||||||
|
|
||||||
|
|
||||||
|
Required Arguments |
||||||
|
------------------ |
||||||
|
|
||||||
|
group |
||||||
|
the name of the group to enable. Convention is to use a Ruby symbol. |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Examples |
||||||
|
-------- |
||||||
@ -0,0 +1,28 @@ |
|||||||
|
group |
||||||
|
===== |
||||||
|
|
||||||
|
Establish a set of commands that can be enabled/disabled together to allow for customized builds. See :doc:`/build_groups` for ways to use this effectively. |
||||||
|
|
||||||
|
Required Arguments |
||||||
|
------------------ |
||||||
|
|
||||||
|
group |
||||||
|
default: ``:all`` |
||||||
|
|
||||||
|
The name of the group. Convention is to use a Ruby symbol. |
||||||
|
|
||||||
|
|
||||||
|
&block |
||||||
|
When this group is enabled (and only ``:all`` is enabled by default), then this block is executed. Otherwise, the block is ignored. |
||||||
|
|
||||||
|
|
||||||
|
Examples |
||||||
|
-------- |
||||||
|
|
||||||
|
Use group to organize your Squib code into build groups:: |
||||||
|
|
||||||
|
Squib::Deck.new do |
||||||
|
group :pnp do |
||||||
|
save_pdf |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
groups |
||||||
|
====== |
||||||
|
|
||||||
|
Returns the set of group names that have been enabled. See :doc:`/build_groups` for ways to use this effectively. |
||||||
|
|
||||||
|
Arguments |
||||||
|
--------- |
||||||
|
|
||||||
|
(none) |
||||||
|
|
||||||
|
|
||||||
|
Examples |
||||||
|
-------- |
||||||
|
|
||||||
|
Use group to organize your Squib code into build groups:: |
||||||
|
|
||||||
|
Squib::Deck.new do |
||||||
|
enable_group :pnp |
||||||
|
group :pnp do |
||||||
|
save_pdf |
||||||
|
end |
||||||
|
puts groups # outputs :all and :pnp |
||||||
|
end |
||||||
@ -0,0 +1,47 @@ |
|||||||
|
require 'set' |
||||||
|
|
||||||
|
module Squib |
||||||
|
|
||||||
|
# An idea for later... |
||||||
|
# def enable_group_env group |
||||||
|
# ENV['SQUIB_BUILD'] ||= '' |
||||||
|
# ENV['SQUIB_BUILD'] += ',' |
||||||
|
# ENV['SQUIB_BUILD'] += group |
||||||
|
# end |
||||||
|
# module_function :enable_group_env |
||||||
|
|
||||||
|
class Deck |
||||||
|
|
||||||
|
# See official API docs |
||||||
|
def group grp = :all, &block |
||||||
|
raise 'Please provide a block' unless block_given? |
||||||
|
block.yield if groups.include? grp |
||||||
|
end |
||||||
|
|
||||||
|
# See official API docs |
||||||
|
def enable_group grp |
||||||
|
groups # make sure it's initialized |
||||||
|
@build_groups << grp |
||||||
|
end |
||||||
|
|
||||||
|
# See official API docs |
||||||
|
def disable_group grp |
||||||
|
groups # make sure it's initialized |
||||||
|
@build_groups.delete grp |
||||||
|
end |
||||||
|
|
||||||
|
# See official API docs |
||||||
|
def groups |
||||||
|
@build_groups ||= Set.new.add(:all) |
||||||
|
end |
||||||
|
|
||||||
|
# See official API docs |
||||||
|
def enable_groups_from_env! |
||||||
|
return if ENV['SQUIB_BUILD'].nil? |
||||||
|
ENV['SQUIB_BUILD'].split(',').each do |grp| |
||||||
|
enable_group grp.strip.to_sym |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
end |
||||||
|
end |
||||||
Loading…
Reference in new issue