squib 0.14.1 → 0.14.2
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 +5 -5
- data/.gitignore +41 -41
- data/.travis.yml +19 -19
- data/CHANGELOG.md +357 -340
- data/CONTRIBUTING.md +40 -40
- data/Gemfile +2 -2
- data/LICENSE.txt +22 -22
- data/README.md +121 -121
- data/RELEASE TODO.md +21 -21
- data/Rakefile +48 -48
- data/appveyor.yml +24 -24
- data/bin/squib +4 -4
- data/lib/squib.rb +32 -32
- data/lib/squib/api/background.rb +15 -15
- data/lib/squib/api/data.rb +137 -137
- data/lib/squib/api/groups.rb +54 -54
- data/lib/squib/api/image.rb +49 -49
- data/lib/squib/api/save.rb +83 -83
- data/lib/squib/api/settings.rb +21 -21
- data/lib/squib/api/shapes.rb +124 -124
- data/lib/squib/api/text.rb +25 -25
- data/lib/squib/api/text_embed.rb +71 -71
- data/lib/squib/api/units.rb +27 -27
- data/lib/squib/args/arg_loader.rb +126 -126
- data/lib/squib/args/box.rb +55 -55
- data/lib/squib/args/card_range.rb +32 -32
- data/lib/squib/args/color_validator.rb +12 -12
- data/lib/squib/args/coords.rb +35 -35
- data/lib/squib/args/csv_opts.rb +25 -25
- data/lib/squib/args/dir_validator.rb +16 -16
- data/lib/squib/args/draw.rb +92 -92
- data/lib/squib/args/embed_adjust.rb +25 -25
- data/lib/squib/args/embed_key.rb +17 -17
- data/lib/squib/args/hand_special.rb +37 -37
- data/lib/squib/args/import.rb +40 -40
- data/lib/squib/args/input_file.rb +37 -37
- data/lib/squib/args/paint.rb +44 -44
- data/lib/squib/args/paragraph.rb +116 -116
- data/lib/squib/args/save_batch.rb +63 -63
- data/lib/squib/args/scale_box.rb +53 -53
- data/lib/squib/args/sheet.rb +172 -172
- data/lib/squib/args/showcase_special.rb +38 -38
- data/lib/squib/args/sprue_file.rb +44 -44
- data/lib/squib/args/svg_special.rb +37 -37
- data/lib/squib/args/transform.rb +61 -61
- data/lib/squib/args/typographer.rb +119 -119
- data/lib/squib/args/unit_conversion.rb +29 -29
- data/lib/squib/builtin/layouts/economy.yml +85 -85
- data/lib/squib/builtin/layouts/fantasy.yml +101 -101
- data/lib/squib/builtin/layouts/hand.yml +62 -62
- data/lib/squib/builtin/layouts/party.yml +94 -94
- data/lib/squib/builtin/layouts/playing-card.yml +35 -35
- data/lib/squib/builtin/layouts/tuck_box.yml +46 -46
- data/lib/squib/builtin/projects/advanced/.gitignore +4 -4
- data/lib/squib/builtin/projects/advanced/ABOUT.md +19 -19
- data/lib/squib/builtin/projects/advanced/Gemfile +11 -11
- data/lib/squib/builtin/projects/advanced/Guardfile +21 -21
- data/lib/squib/builtin/projects/advanced/IDEAS.md +22 -22
- data/lib/squib/builtin/projects/advanced/PLAYTESTING.md +26 -26
- data/lib/squib/builtin/projects/advanced/Rakefile +27 -27
- data/lib/squib/builtin/projects/advanced/config.yml +49 -49
- data/lib/squib/builtin/projects/advanced/docs/PNP NOTES.md +3 -3
- data/lib/squib/builtin/projects/advanced/docs/RULES.md +21 -21
- data/lib/squib/builtin/projects/advanced/img/example.svg +60 -60
- data/lib/squib/builtin/projects/advanced/layouts/deck.yml +27 -27
- data/lib/squib/builtin/projects/advanced/src/deck.rb +34 -34
- data/lib/squib/builtin/projects/advanced/src/version.rb +3 -3
- data/lib/squib/builtin/projects/basic/.gitignore +4 -4
- data/lib/squib/builtin/projects/basic/ABOUT.md +19 -19
- data/lib/squib/builtin/projects/basic/Gemfile +3 -3
- data/lib/squib/builtin/projects/basic/IDEAS.md +22 -22
- data/lib/squib/builtin/projects/basic/PLAYTESTING.md +26 -26
- data/lib/squib/builtin/projects/basic/PNP NOTES.md +3 -3
- data/lib/squib/builtin/projects/basic/RULES.md +21 -21
- data/lib/squib/builtin/projects/basic/Rakefile +7 -7
- data/lib/squib/builtin/projects/basic/config.yml +49 -49
- data/lib/squib/builtin/projects/basic/deck.rb +6 -6
- data/lib/squib/builtin/sprues/a4_euro_card.yml +42 -42
- data/lib/squib/builtin/sprues/a4_poker_card_8up.yml +40 -40
- data/lib/squib/builtin/sprues/a4_poker_card_9up.yml +42 -42
- data/lib/squib/builtin/sprues/a4_usa_card.yml +42 -42
- data/lib/squib/builtin/sprues/drivethrucards_1up.yml +10 -0
- data/lib/squib/builtin/sprues/letter_poker_card_9up.yml +25 -25
- data/lib/squib/builtin/sprues/letter_poker_foldable_8up.yml +52 -52
- data/lib/squib/builtin/sprues/printplaygames_18up.yml +68 -0
- data/lib/squib/card.rb +75 -74
- data/lib/squib/commands/cli.rb +39 -39
- data/lib/squib/commands/data/template_option.rb +109 -109
- data/lib/squib/commands/make_sprue.rb +275 -275
- data/lib/squib/commands/new.rb +77 -77
- data/lib/squib/conf.rb +139 -139
- data/lib/squib/constants.rb +17 -17
- data/lib/squib/deck.rb +116 -116
- data/lib/squib/graphics/background.rb +14 -14
- data/lib/squib/graphics/cairo_context_wrapper.rb +113 -113
- data/lib/squib/graphics/embedding_utils.rb +28 -28
- data/lib/squib/graphics/gradient_regex.rb +47 -47
- data/lib/squib/graphics/hand.rb +42 -42
- data/lib/squib/graphics/image.rb +108 -108
- data/lib/squib/graphics/save_doc.rb +61 -61
- data/lib/squib/graphics/save_images.rb +52 -52
- data/lib/squib/graphics/save_pdf.rb +90 -90
- data/lib/squib/graphics/save_sprue.rb +204 -205
- data/lib/squib/graphics/shapes.rb +143 -143
- data/lib/squib/graphics/showcase.rb +85 -85
- data/lib/squib/graphics/text.rb +174 -174
- data/lib/squib/import/data_frame.rb +108 -108
- data/lib/squib/layout_parser.rb +138 -126
- data/lib/squib/progress.rb +38 -38
- data/lib/squib/sample_helpers.rb +34 -34
- data/lib/squib/sprues/crop_line.rb +28 -28
- data/lib/squib/sprues/crop_line_dash.rb +35 -35
- data/lib/squib/sprues/invalid_sprue_definition.rb +9 -9
- data/lib/squib/sprues/sprue.rb +203 -203
- data/lib/squib/sprues/sprue_schema.rb +48 -48
- data/lib/squib/version.rb +10 -10
- data/samples/autoscale_font/_autoscale_font.rb +29 -29
- data/samples/backend/_backend.rb +26 -26
- data/samples/basic.rb +19 -19
- data/samples/build_groups/build_groups.rb +36 -36
- data/samples/colors/_colors.rb +38 -38
- data/samples/colors/_gradients.rb +34 -34
- data/samples/config/config_text_markup.rb +20 -20
- data/samples/config/custom_config.rb +18 -18
- data/samples/data/_csv.rb +33 -33
- data/samples/data/_excel.rb +55 -55
- data/samples/data/_yaml.rb +12 -12
- data/samples/hello_world.rb +6 -6
- data/samples/images/_cairo_access.rb +39 -39
- data/samples/images/_images.rb +104 -104
- data/samples/images/_more_load_images.rb +102 -102
- data/samples/intro/01_hello.rb +8 -8
- data/samples/intro/02_options.rb +14 -14
- data/samples/intro/03_layout.rb +11 -11
- data/samples/intro/04_arrays.rb +15 -15
- data/samples/intro/05_excel.rb +14 -14
- data/samples/layouts/builtin_layouts.rb +97 -97
- data/samples/layouts/layouts.rb +71 -71
- data/samples/project/src/characters.rb +8 -8
- data/samples/project/src/skills.rb +7 -7
- data/samples/proofs/_tgc_proofs.rb +16 -16
- data/samples/ranges/_ranges.rb +64 -64
- data/samples/saves/_hand.rb +23 -23
- data/samples/saves/_portrait_landscape.rb +23 -23
- data/samples/saves/_save_pdf.rb +29 -29
- data/samples/saves/_saves.rb +51 -51
- data/samples/saves/_showcase.rb +25 -25
- data/samples/shapes/_draw_shapes.rb +60 -58
- data/samples/shapes/_proofs.rb +22 -22
- data/samples/sprues/_advanced_sprues.rb +24 -24
- data/samples/sprues/_builtin_sprues.rb +21 -19
- data/samples/sprues/_fold_sheet.rb +27 -27
- data/samples/sprues/_hex_tiles.rb +15 -15
- data/samples/sprues/_mints.rb +11 -11
- data/samples/sprues/_sprue_example.rb +11 -11
- data/samples/text/_embed_text.rb +128 -128
- data/samples/text/_text.rb +47 -47
- data/samples/text/_text_options.rb +102 -102
- data/samples/text/bug134.rb +14 -14
- data/samples/units/_units.rb +32 -32
- data/squib.gemspec +52 -51
- metadata +66 -50
data/CONTRIBUTING.md
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
# Contributing to Squib
|
|
2
|
-
|
|
3
|
-
Please use GitHub issues for bugs and feature requests.
|
|
4
|
-
|
|
5
|
-
## Need Help?
|
|
6
|
-
|
|
7
|
-
There are lots of people using Squib already. If you've gone through the [samples](https://github.com/andymeneely/squib/tree/master/samples) and still have questions, here are some other places to get help.
|
|
8
|
-
|
|
9
|
-
* [StackOverflow](http://stackoverflow.com/questions/ask?tags=ruby squib) with the tag "ruby" and "squib" will get you answers quickly and a great way to document questions for future Squibbers.
|
|
10
|
-
* Our [thread on BoardGameGeek](http://boardgamegeek.com/thread/1293453) is quite active and informal (if a bit unstructured).
|
|
11
|
-
|
|
12
|
-
If you email me directly I'll probably ask you to post your question publicly so we can document answers for future Googling Squibbers.
|
|
13
|
-
|
|
14
|
-
## Pull Requests
|
|
15
|
-
|
|
16
|
-
If you are contributing a new feature:
|
|
17
|
-
* Keep your change small and atomic. Do significant refactoring in a separate pull request.
|
|
18
|
-
* Please write a sample demonstrating your new feature. Place it in the samples/ directory
|
|
19
|
-
* While your pull request is open, please keep it up to date with the `dev` branch so it can be easily integrated
|
|
20
|
-
* We (sort of) follow [these Ruby style guidelines](https://github.com/bbatsov/ruby-style-guide)
|
|
21
|
-
|
|
22
|
-
## Get Involved in the Community
|
|
23
|
-
|
|
24
|
-
Let's help each other out! Even if you're relatively new, there's probably some question out there that you can help answer. Here's how to help:
|
|
25
|
-
|
|
26
|
-
* Subscribe to our thread on BoardGameGeek (see above for link)
|
|
27
|
-
* Subscribe to alerts from Stackoverflow for the tags "squib" and "ruby"
|
|
28
|
-
* Post snippets of your code using GitHub gists
|
|
29
|
-
* Write a how-to tutorial and post it on [our wiki](https://github.com/andymeneely/squib/wiki)
|
|
30
|
-
|
|
31
|
-
## Testing Pre-Builds
|
|
32
|
-
|
|
33
|
-
Testers needed!! If you want to test new features as I develop them, or make sure I didn't break your code, you can always point your Gemfile to the repository and follow what I'm doing there. Your Gemfile specification looks like this:
|
|
34
|
-
|
|
35
|
-
```ruby
|
|
36
|
-
gem 'squib', git: 'git://github.com/andymeneely/squib', branch: 'dev'
|
|
37
|
-
```
|
|
38
|
-
* The `dev` branch is where I am working on features in-process. I have not done much regression testing at this point, but would love testing feedback nonetheless.
|
|
39
|
-
* The `master` branch is where I consider features and bug that are done and tested, but not released yet.
|
|
40
|
-
* Use `bundle exec` to execute your code (e.g. `bundle exec rake` or `bundle exec ruby deck.rb`). See [Bundler](http://bundler.io) for more info.
|
|
1
|
+
# Contributing to Squib
|
|
2
|
+
|
|
3
|
+
Please use GitHub issues for bugs and feature requests.
|
|
4
|
+
|
|
5
|
+
## Need Help?
|
|
6
|
+
|
|
7
|
+
There are lots of people using Squib already. If you've gone through the [samples](https://github.com/andymeneely/squib/tree/master/samples) and still have questions, here are some other places to get help.
|
|
8
|
+
|
|
9
|
+
* [StackOverflow](http://stackoverflow.com/questions/ask?tags=ruby squib) with the tag "ruby" and "squib" will get you answers quickly and a great way to document questions for future Squibbers.
|
|
10
|
+
* Our [thread on BoardGameGeek](http://boardgamegeek.com/thread/1293453) is quite active and informal (if a bit unstructured).
|
|
11
|
+
|
|
12
|
+
If you email me directly I'll probably ask you to post your question publicly so we can document answers for future Googling Squibbers.
|
|
13
|
+
|
|
14
|
+
## Pull Requests
|
|
15
|
+
|
|
16
|
+
If you are contributing a new feature:
|
|
17
|
+
* Keep your change small and atomic. Do significant refactoring in a separate pull request.
|
|
18
|
+
* Please write a sample demonstrating your new feature. Place it in the samples/ directory
|
|
19
|
+
* While your pull request is open, please keep it up to date with the `dev` branch so it can be easily integrated
|
|
20
|
+
* We (sort of) follow [these Ruby style guidelines](https://github.com/bbatsov/ruby-style-guide)
|
|
21
|
+
|
|
22
|
+
## Get Involved in the Community
|
|
23
|
+
|
|
24
|
+
Let's help each other out! Even if you're relatively new, there's probably some question out there that you can help answer. Here's how to help:
|
|
25
|
+
|
|
26
|
+
* Subscribe to our thread on BoardGameGeek (see above for link)
|
|
27
|
+
* Subscribe to alerts from Stackoverflow for the tags "squib" and "ruby"
|
|
28
|
+
* Post snippets of your code using GitHub gists
|
|
29
|
+
* Write a how-to tutorial and post it on [our wiki](https://github.com/andymeneely/squib/wiki)
|
|
30
|
+
|
|
31
|
+
## Testing Pre-Builds
|
|
32
|
+
|
|
33
|
+
Testers needed!! If you want to test new features as I develop them, or make sure I didn't break your code, you can always point your Gemfile to the repository and follow what I'm doing there. Your Gemfile specification looks like this:
|
|
34
|
+
|
|
35
|
+
```ruby
|
|
36
|
+
gem 'squib', git: 'git://github.com/andymeneely/squib', branch: 'dev'
|
|
37
|
+
```
|
|
38
|
+
* The `dev` branch is where I am working on features in-process. I have not done much regression testing at this point, but would love testing feedback nonetheless.
|
|
39
|
+
* The `master` branch is where I consider features and bug that are done and tested, but not released yet.
|
|
40
|
+
* Use `bundle exec` to execute your code (e.g. `bundle exec rake` or `bundle exec ruby deck.rb`). See [Bundler](http://bundler.io) for more info.
|
data/Gemfile
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
source 'https://rubygems.org'
|
|
2
|
-
gemspec
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
gemspec
|
data/LICENSE.txt
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
Copyright (c) 2014 Andy Meneely
|
|
2
|
-
|
|
3
|
-
MIT License
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
-
a copy of this software and associated documentation files (the
|
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
-
the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be
|
|
14
|
-
included in all copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
1
|
+
Copyright (c) 2014 Andy Meneely
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
# Squib [](https://rubygems.org/gems/squib) [](https://travis-ci.org/andymeneely/squib) [](https://ci.appveyor.com/project/andymeneely/squib/branch/master) [ for prototyping card and board games. Write a little bit of Ruby, define your deck's stats, then compile your game into a series of images ready for print-and-play or even print-on-demand. Squib is very data-driven and built on the principle of Don't Repeat Yourself. Think of it like [nanDeck](http://www.nand.it/nandeck/) done "the Ruby way". Squib supports:
|
|
4
|
-
|
|
5
|
-
* A concise set of rules for laying out your cards
|
|
6
|
-
* Loading PNGs and SVGs
|
|
7
|
-
* Complex text rendering using [Pango](http://www.pango.org/)
|
|
8
|
-
* Reading `xlsx` and `csv` files
|
|
9
|
-
* Rendering to PNGs, PDFs, and SVGs (sheets or individual files)
|
|
10
|
-
* Flexible, data-driven layouts in Yaml
|
|
11
|
-
* Basic shape drawing, blending operators, gradients, etc.
|
|
12
|
-
* Unit conversion
|
|
13
|
-
* The full power of Ruby!
|
|
14
|
-
|
|
15
|
-
Squib is based on the [Cairo](http://cairographics.org/) graphics rendering engine, the library of choice for WebKit, Gecko, Inkscape and many, many others.
|
|
16
|
-
|
|
17
|
-
Check this out.
|
|
18
|
-
|
|
19
|
-
```ruby
|
|
20
|
-
require 'squib'
|
|
21
|
-
|
|
22
|
-
Squib::Deck.new(cards: 2) do
|
|
23
|
-
text str: %w(Hello World!)
|
|
24
|
-
save_png
|
|
25
|
-
end
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
We just created a 2-card deck with "Hello" on the first card, and "World" on the second, and saved them out to PNGs.
|
|
29
|
-
|
|
30
|
-
Wanna see more? Check out the website: http://andymeneely.github.io/squib/
|
|
31
|
-
|
|
32
|
-
## Installation
|
|
33
|
-
|
|
34
|
-
Squib requires Ruby 2.2 or later.
|
|
35
|
-
|
|
36
|
-
Install it yourself with:
|
|
37
|
-
|
|
38
|
-
$ gem install squib
|
|
39
|
-
|
|
40
|
-
If you're using Bundler, add this line to your application's Gemfile:
|
|
41
|
-
|
|
42
|
-
gem 'squib'
|
|
43
|
-
|
|
44
|
-
And then execute:
|
|
45
|
-
|
|
46
|
-
$ bundle
|
|
47
|
-
|
|
48
|
-
More info: http://squib.readthedocs.org/en/latest/install.html
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
## Getting Started
|
|
52
|
-
|
|
53
|
-
After installing Squib, you can create a project and run your first build like this:
|
|
54
|
-
|
|
55
|
-
```sh
|
|
56
|
-
$ squib new my-cool-game
|
|
57
|
-
$ cd my-cool-game
|
|
58
|
-
$ ruby deck.rb
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
The `squib new` command will generate files and folders like this:
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
├── .gitignore
|
|
65
|
-
├── ABOUT.md
|
|
66
|
-
├── Gemfile
|
|
67
|
-
├── IDEAS.md
|
|
68
|
-
├── PLAYTESTING.md
|
|
69
|
-
├── PNP NOTES.md
|
|
70
|
-
├── RULES.md
|
|
71
|
-
├── Rakefile
|
|
72
|
-
├── _output
|
|
73
|
-
│ └── gitkeep.txt
|
|
74
|
-
├── config.yml
|
|
75
|
-
├── deck.rb
|
|
76
|
-
└── layout.yml
|
|
77
|
-
|
|
78
|
-
12 files
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
# Learning Squib
|
|
83
|
-
|
|
84
|
-
Go [read the docs!](http://squib.readthedocs.org/)
|
|
85
|
-
|
|
86
|
-
Also:
|
|
87
|
-
* The `samples` directory in the [source repository](https://github.com/andymeneely/squib) has lots of examples.
|
|
88
|
-
* [Your Last Heist](http://yourlastheist.com) is my own creation, and it was made with Squib. Go through the repository and watch how it evolved!
|
|
89
|
-
* [Junk Land](https://github.com/andymeneely/junk-land) is my own creation that's uses Squib for full-color rendering, and makes use of Ruby in a lot of interesting ways. The port is still in process.
|
|
90
|
-
* [Project Spider Monkey](https://github.com/andymeneely/project-spider-monkey) is another of my own creations. This one was started from scratch with Squib, but it's still in its early stages.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
## Staying DRY
|
|
94
|
-
|
|
95
|
-
Squib tries to keep you DRY (Don't Repeat Yourself) with the following features:
|
|
96
|
-
|
|
97
|
-
* Custom layouts allow you to specify various arguments in a separate file. This is great for x-y coordinates and alignment properties that would otherwise clutter up perfectly readable code. Squib goes even further and has a special "extends" that works especially well for grouped-together styles.
|
|
98
|
-
* Flexible ranges and array handling: the `range` parameter in Squib is very flexible, meaning that one `text` command can specify different text in different fonts, styles, colors, etc. for each card. If you find yourself doing multiple `text` command for the same field across different ranges of cards, there's probably a better way to condense.
|
|
99
|
-
* Custom colors keep you from hardcoding magic color strings everywhere. Custom colors go into `config.yml` file.
|
|
100
|
-
* Plus, you know, Ruby.
|
|
101
|
-
|
|
102
|
-
## SublimeText
|
|
103
|
-
|
|
104
|
-
Using SublimeText? I like you already. I've written up some Squib snippets to ease remembering Squib commands. It's called `Squib Snippets` on Package Control. Compatible with SublimeText 3. Source code is also [on Github](https://github.com/andymeneely/sublime-squib) (contributions welcome!). Check it out:
|
|
105
|
-
|
|
106
|
-

|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
# Get Help and Give Help
|
|
111
|
-
|
|
112
|
-
See [this page](http://squib.readthedocs.org/en/latest/help.html)
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
# What's up the with the name?
|
|
116
|
-
|
|
117
|
-
Truthfully, I just thought it was a cool, simple word that was not used much in the Ruby community nor the board game community. But, now that I've committed to the name, I've realized that:
|
|
118
|
-
|
|
119
|
-
* Squibs are small explosive devices, much like Squib "explodes" your rules into a playable game
|
|
120
|
-
* Squibs are often used in heist movies, leading to a sudden plot twist that often resembles the twists of good tabletop game
|
|
121
|
-
* Squibs are also part of the Harry Potter world - they are people who are non-magical but wizard-born. Squib is aware of wizarding magic and comes from that heritage, but it's not magical itself.
|
|
1
|
+
# Squib [](https://rubygems.org/gems/squib) [](https://travis-ci.org/andymeneely/squib) [](https://ci.appveyor.com/project/andymeneely/squib/branch/master) [](https://coveralls.io/r/andymeneely/squib) [](http://squib.readthedocs.io/en/latest/?badge=latest) [](https://boardgamegeek.com/guild/2601)
|
|
2
|
+
|
|
3
|
+
Squib is a Ruby [DSL](http://en.wikipedia.org/wiki/Domain-specific_language) for prototyping card and board games. Write a little bit of Ruby, define your deck's stats, then compile your game into a series of images ready for print-and-play or even print-on-demand. Squib is very data-driven and built on the principle of Don't Repeat Yourself. Think of it like [nanDeck](http://www.nand.it/nandeck/) done "the Ruby way". Squib supports:
|
|
4
|
+
|
|
5
|
+
* A concise set of rules for laying out your cards
|
|
6
|
+
* Loading PNGs and SVGs
|
|
7
|
+
* Complex text rendering using [Pango](http://www.pango.org/)
|
|
8
|
+
* Reading `xlsx` and `csv` files
|
|
9
|
+
* Rendering to PNGs, PDFs, and SVGs (sheets or individual files)
|
|
10
|
+
* Flexible, data-driven layouts in Yaml
|
|
11
|
+
* Basic shape drawing, blending operators, gradients, etc.
|
|
12
|
+
* Unit conversion
|
|
13
|
+
* The full power of Ruby!
|
|
14
|
+
|
|
15
|
+
Squib is based on the [Cairo](http://cairographics.org/) graphics rendering engine, the library of choice for WebKit, Gecko, Inkscape and many, many others.
|
|
16
|
+
|
|
17
|
+
Check this out.
|
|
18
|
+
|
|
19
|
+
```ruby
|
|
20
|
+
require 'squib'
|
|
21
|
+
|
|
22
|
+
Squib::Deck.new(cards: 2) do
|
|
23
|
+
text str: %w(Hello World!)
|
|
24
|
+
save_png
|
|
25
|
+
end
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
We just created a 2-card deck with "Hello" on the first card, and "World" on the second, and saved them out to PNGs.
|
|
29
|
+
|
|
30
|
+
Wanna see more? Check out the website: http://andymeneely.github.io/squib/
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
Squib requires Ruby 2.2 or later.
|
|
35
|
+
|
|
36
|
+
Install it yourself with:
|
|
37
|
+
|
|
38
|
+
$ gem install squib
|
|
39
|
+
|
|
40
|
+
If you're using Bundler, add this line to your application's Gemfile:
|
|
41
|
+
|
|
42
|
+
gem 'squib'
|
|
43
|
+
|
|
44
|
+
And then execute:
|
|
45
|
+
|
|
46
|
+
$ bundle
|
|
47
|
+
|
|
48
|
+
More info: http://squib.readthedocs.org/en/latest/install.html
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## Getting Started
|
|
52
|
+
|
|
53
|
+
After installing Squib, you can create a project and run your first build like this:
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
$ squib new my-cool-game
|
|
57
|
+
$ cd my-cool-game
|
|
58
|
+
$ ruby deck.rb
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
The `squib new` command will generate files and folders like this:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
├── .gitignore
|
|
65
|
+
├── ABOUT.md
|
|
66
|
+
├── Gemfile
|
|
67
|
+
├── IDEAS.md
|
|
68
|
+
├── PLAYTESTING.md
|
|
69
|
+
├── PNP NOTES.md
|
|
70
|
+
├── RULES.md
|
|
71
|
+
├── Rakefile
|
|
72
|
+
├── _output
|
|
73
|
+
│ └── gitkeep.txt
|
|
74
|
+
├── config.yml
|
|
75
|
+
├── deck.rb
|
|
76
|
+
└── layout.yml
|
|
77
|
+
|
|
78
|
+
12 files
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# Learning Squib
|
|
83
|
+
|
|
84
|
+
Go [read the docs!](http://squib.readthedocs.org/)
|
|
85
|
+
|
|
86
|
+
Also:
|
|
87
|
+
* The `samples` directory in the [source repository](https://github.com/andymeneely/squib) has lots of examples.
|
|
88
|
+
* [Your Last Heist](http://yourlastheist.com) is my own creation, and it was made with Squib. Go through the repository and watch how it evolved!
|
|
89
|
+
* [Junk Land](https://github.com/andymeneely/junk-land) is my own creation that's uses Squib for full-color rendering, and makes use of Ruby in a lot of interesting ways. The port is still in process.
|
|
90
|
+
* [Project Spider Monkey](https://github.com/andymeneely/project-spider-monkey) is another of my own creations. This one was started from scratch with Squib, but it's still in its early stages.
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
## Staying DRY
|
|
94
|
+
|
|
95
|
+
Squib tries to keep you DRY (Don't Repeat Yourself) with the following features:
|
|
96
|
+
|
|
97
|
+
* Custom layouts allow you to specify various arguments in a separate file. This is great for x-y coordinates and alignment properties that would otherwise clutter up perfectly readable code. Squib goes even further and has a special "extends" that works especially well for grouped-together styles.
|
|
98
|
+
* Flexible ranges and array handling: the `range` parameter in Squib is very flexible, meaning that one `text` command can specify different text in different fonts, styles, colors, etc. for each card. If you find yourself doing multiple `text` command for the same field across different ranges of cards, there's probably a better way to condense.
|
|
99
|
+
* Custom colors keep you from hardcoding magic color strings everywhere. Custom colors go into `config.yml` file.
|
|
100
|
+
* Plus, you know, Ruby.
|
|
101
|
+
|
|
102
|
+
## SublimeText
|
|
103
|
+
|
|
104
|
+
Using SublimeText? I like you already. I've written up some Squib snippets to ease remembering Squib commands. It's called `Squib Snippets` on Package Control. Compatible with SublimeText 3. Source code is also [on Github](https://github.com/andymeneely/sublime-squib) (contributions welcome!). Check it out:
|
|
105
|
+
|
|
106
|
+

|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# Get Help and Give Help
|
|
111
|
+
|
|
112
|
+
See [this page](http://squib.readthedocs.org/en/latest/help.html)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
# What's up the with the name?
|
|
116
|
+
|
|
117
|
+
Truthfully, I just thought it was a cool, simple word that was not used much in the Ruby community nor the board game community. But, now that I've committed to the name, I've realized that:
|
|
118
|
+
|
|
119
|
+
* Squibs are small explosive devices, much like Squib "explodes" your rules into a playable game
|
|
120
|
+
* Squibs are often used in heist movies, leading to a sudden plot twist that often resembles the twists of good tabletop game
|
|
121
|
+
* Squibs are also part of the Harry Potter world - they are people who are non-magical but wizard-born. Squib is aware of wizarding magic and comes from that heritage, but it's not magical itself.
|
data/RELEASE TODO.md
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
Be sure to remember to do the following for releases. (Copy into a GitHub issue)
|
|
2
|
-
|
|
3
|
-
- [ ] CHANGELOG is written for all new changes
|
|
4
|
-
- [ ] README is updated
|
|
5
|
-
- [ ] Samples are updated
|
|
6
|
-
- [ ] Are all the dependencies up to date?
|
|
7
|
-
- [ ] Check `sample_regression_spec.rb` regression tests are all enabled (i.e. `overwrite_sample` is commented out)
|
|
8
|
-
- [ ] Bump version.rb
|
|
9
|
-
- [ ] Bump docs/conf.py versions
|
|
10
|
-
- [ ] Do a full rake locally
|
|
11
|
-
- [ ] `rake sanity`, and check visually
|
|
12
|
-
- [ ] Travis is passing on dev branch
|
|
13
|
-
- [ ] Merge master branch
|
|
14
|
-
- [ ] Merge release branch
|
|
15
|
-
- [ ] Push master and release branches
|
|
16
|
-
- [ ] Create GitHub release tag
|
|
17
|
-
- [ ] `gem push pkg/squib-x.y.z.gem`
|
|
18
|
-
- [ ] Github milestone closed
|
|
19
|
-
- [ ] Activate version on squib.readthedocs.org
|
|
20
|
-
- [ ] Bump version.rb to the next alpha
|
|
21
|
-
- [ ] Publish on BoardGameGeek thread
|
|
1
|
+
Be sure to remember to do the following for releases. (Copy into a GitHub issue)
|
|
2
|
+
|
|
3
|
+
- [ ] CHANGELOG is written for all new changes
|
|
4
|
+
- [ ] README is updated
|
|
5
|
+
- [ ] Samples are updated
|
|
6
|
+
- [ ] Are all the dependencies up to date?
|
|
7
|
+
- [ ] Check `sample_regression_spec.rb` regression tests are all enabled (i.e. `overwrite_sample` is commented out)
|
|
8
|
+
- [ ] Bump version.rb
|
|
9
|
+
- [ ] Bump docs/conf.py versions
|
|
10
|
+
- [ ] Do a full rake locally
|
|
11
|
+
- [ ] `rake sanity`, and check visually
|
|
12
|
+
- [ ] Travis is passing on dev branch
|
|
13
|
+
- [ ] Merge master branch
|
|
14
|
+
- [ ] Merge release branch
|
|
15
|
+
- [ ] Push master and release branches
|
|
16
|
+
- [ ] Create GitHub release tag
|
|
17
|
+
- [ ] `gem push pkg/squib-x.y.z.gem`
|
|
18
|
+
- [ ] Github milestone closed
|
|
19
|
+
- [ ] Activate version on squib.readthedocs.org
|
|
20
|
+
- [ ] Bump version.rb to the next alpha
|
|
21
|
+
- [ ] Publish on BoardGameGeek thread
|
data/Rakefile
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
require 'bundler/gem_tasks'
|
|
2
|
-
require 'rspec/core/rake_task'
|
|
3
|
-
require 'benchmark'
|
|
4
|
-
# require 'byebug'
|
|
5
|
-
|
|
6
|
-
desc 'install + spec'
|
|
7
|
-
task default: ['install:local', :spec]
|
|
8
|
-
|
|
9
|
-
# Useful for hooking up with SublimeText.
|
|
10
|
-
# e.g. rake sample[basic.rb]
|
|
11
|
-
desc 'Run a specific sample'
|
|
12
|
-
task :run, [:file] => :install do |t, args|
|
|
13
|
-
args.with_defaults(file: 'basic.rb')
|
|
14
|
-
Dir.chdir('samples') do
|
|
15
|
-
args[:file] << '.rb' unless args[:file].end_with? '.rb'
|
|
16
|
-
puts "Running samples/#{args[:file]}"
|
|
17
|
-
load args[:file]
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
RSpec::Core::RakeTask.new(:spec)
|
|
22
|
-
|
|
23
|
-
RSpec::Core::RakeTask.new(:spec_fastonly) do |t|
|
|
24
|
-
t.rspec_opts = '--tag ~slow'
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
desc 'Run some performance benchmarks'
|
|
28
|
-
task benchmark: [:install] do
|
|
29
|
-
require 'squib'
|
|
30
|
-
Squib::logger.level = Logger::ERROR # silence warnings
|
|
31
|
-
Dir.chdir('benchmarks') do
|
|
32
|
-
Benchmark.bm(15) do |bm|
|
|
33
|
-
Dir['*.rb'].each do | script |
|
|
34
|
-
GC.start
|
|
35
|
-
bm.report(script) { load script }
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
desc 'Run sanity tests without a full rebuild'
|
|
42
|
-
task :sanity_only do
|
|
43
|
-
require_relative 'spec/sanity/sanity_test.rb'
|
|
44
|
-
SanityTest.new.run
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
desc 'Run full rebuild with sanity tests'
|
|
48
|
-
task sanity: [:install, :spec, :sanity_only]
|
|
1
|
+
require 'bundler/gem_tasks'
|
|
2
|
+
require 'rspec/core/rake_task'
|
|
3
|
+
require 'benchmark'
|
|
4
|
+
# require 'byebug'
|
|
5
|
+
|
|
6
|
+
desc 'install + spec'
|
|
7
|
+
task default: ['install:local', :spec]
|
|
8
|
+
|
|
9
|
+
# Useful for hooking up with SublimeText.
|
|
10
|
+
# e.g. rake sample[basic.rb]
|
|
11
|
+
desc 'Run a specific sample'
|
|
12
|
+
task :run, [:file] => :install do |t, args|
|
|
13
|
+
args.with_defaults(file: 'basic.rb')
|
|
14
|
+
Dir.chdir('samples') do
|
|
15
|
+
args[:file] << '.rb' unless args[:file].end_with? '.rb'
|
|
16
|
+
puts "Running samples/#{args[:file]}"
|
|
17
|
+
load args[:file]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
22
|
+
|
|
23
|
+
RSpec::Core::RakeTask.new(:spec_fastonly) do |t|
|
|
24
|
+
t.rspec_opts = '--tag ~slow'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
desc 'Run some performance benchmarks'
|
|
28
|
+
task benchmark: [:install] do
|
|
29
|
+
require 'squib'
|
|
30
|
+
Squib::logger.level = Logger::ERROR # silence warnings
|
|
31
|
+
Dir.chdir('benchmarks') do
|
|
32
|
+
Benchmark.bm(15) do |bm|
|
|
33
|
+
Dir['*.rb'].each do | script |
|
|
34
|
+
GC.start
|
|
35
|
+
bm.report(script) { load script }
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc 'Run sanity tests without a full rebuild'
|
|
42
|
+
task :sanity_only do
|
|
43
|
+
require_relative 'spec/sanity/sanity_test.rb'
|
|
44
|
+
SanityTest.new.run
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
desc 'Run full rebuild with sanity tests'
|
|
48
|
+
task sanity: [:install, :spec, :sanity_only]
|