squib 0.0.2 → 0.0.3

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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +29 -29
  3. data/.travis.yml +6 -6
  4. data/.yardopts +7 -5
  5. data/Gemfile +2 -2
  6. data/LICENSE.txt +22 -22
  7. data/README.md +245 -92
  8. data/Rakefile +11 -11
  9. data/bin/squib +18 -18
  10. data/lib/squib.rb +31 -18
  11. data/lib/squib/api/background.rb +18 -16
  12. data/lib/squib/api/data.rb +52 -52
  13. data/lib/squib/api/image.rb +66 -48
  14. data/lib/squib/api/save.rb +43 -37
  15. data/lib/squib/api/settings.rb +38 -35
  16. data/lib/squib/api/shapes.rb +116 -106
  17. data/lib/squib/api/text.rb +50 -45
  18. data/lib/squib/api/units.rb +16 -16
  19. data/lib/squib/card.rb +42 -36
  20. data/lib/squib/commands/new.rb +43 -39
  21. data/lib/squib/constants.rb +104 -39
  22. data/lib/squib/deck.rb +116 -113
  23. data/lib/squib/graphics/background.rb +13 -12
  24. data/lib/squib/graphics/image.rb +47 -28
  25. data/lib/squib/graphics/save_doc.rb +54 -50
  26. data/lib/squib/graphics/save_images.rb +32 -10
  27. data/lib/squib/graphics/shapes.rb +59 -55
  28. data/lib/squib/graphics/text.rb +113 -107
  29. data/lib/squib/input_helpers.rb +193 -139
  30. data/lib/squib/progress.rb +38 -0
  31. data/lib/squib/project_template/.gitignore +4 -3
  32. data/lib/squib/project_template/ABOUT.md +19 -19
  33. data/lib/squib/project_template/Gemfile +2 -2
  34. data/lib/squib/project_template/PNP NOTES.md +3 -3
  35. data/lib/squib/project_template/config.yml +20 -2
  36. data/lib/squib/project_template/deck.rb +5 -5
  37. data/lib/squib/version.rb +6 -6
  38. data/samples/ball.png +0 -0
  39. data/samples/basic.rb +19 -19
  40. data/samples/colors.rb +15 -16
  41. data/samples/custom-config.yml +6 -1
  42. data/samples/custom-layout.yml +39 -34
  43. data/samples/custom_config.rb +18 -5
  44. data/samples/customconfig-imgdir/shiny-purse2.png +0 -0
  45. data/samples/customconfig-imgdir/spanner2.svg +91 -0
  46. data/samples/draw_shapes.rb +18 -18
  47. data/samples/excel.rb +19 -19
  48. data/samples/grit.png +0 -0
  49. data/samples/hello_world.rb +6 -6
  50. data/samples/load_images.rb +29 -19
  51. data/samples/offset.svg +71 -0
  52. data/samples/portrait-landscape.rb +23 -0
  53. data/samples/ranges.rb +55 -47
  54. data/samples/save_pdf.rb +14 -14
  55. data/samples/shiny-purse.png +0 -0
  56. data/samples/spanner.svg +91 -91
  57. data/samples/text_options.rb +60 -58
  58. data/samples/tgc_proofs.rb +19 -19
  59. data/samples/units.rb +12 -12
  60. data/samples/use_layout.rb +28 -28
  61. data/spec/api/api_text_spec.rb +42 -36
  62. data/spec/commands/new_spec.rb +47 -47
  63. data/spec/data/multi-extends-single-entry.yml +13 -0
  64. data/spec/data/multi-level-extends.yml +10 -0
  65. data/spec/data/no-extends.yml +5 -0
  66. data/spec/data/single-extends.yml +7 -0
  67. data/spec/data/single-level-multi-extends.yml +12 -0
  68. data/spec/deck_spec.rb +147 -49
  69. data/spec/input_helpers_spec.rb +117 -0
  70. data/spec/samples_run_spec.rb +19 -14
  71. data/spec/spec_helper.rb +3 -0
  72. data/squib.gemspec +46 -42
  73. metadata +78 -4
  74. data/API.md +0 -59
@@ -0,0 +1,117 @@
1
+ require 'spec_helper'
2
+ require 'squib/input_helpers'
3
+
4
+ class DummyDeck
5
+ include Squib::InputHelpers
6
+ attr_accessor :layout, :cards, :custom_colors
7
+ end
8
+
9
+ module Squib
10
+ def logger=(l)
11
+ @logger = l
12
+ end
13
+ module_function 'logger='
14
+ end
15
+
16
+ describe Squib::InputHelpers do
17
+
18
+
19
+ before(:each) do
20
+ @deck = DummyDeck.new
21
+ @deck.layout = {
22
+ 'blah' => {x: 25},
23
+ 'apples' => {x: 35},
24
+ 'oranges' => {y: 45},
25
+ }
26
+ @deck.cards = %w(a b)
27
+ @deck.custom_colors = {}
28
+ end
29
+
30
+ context '#layoutify' do
31
+ it "warns on the logger when the layout doesn't exist" do
32
+ @old_logger = Squib.logger
33
+ Squib.logger = instance_double(Logger)
34
+ expect(Squib.logger).to receive(:warn).with("Layout entry 'foo' does not exist.").twice
35
+ expect(Squib.logger).to receive(:debug)
36
+ expect(@deck.send(:layoutify, {layout: :foo})).to eq({layout: [:foo,:foo]})
37
+ Squib.logger = @old_logger
38
+ end
39
+
40
+ it "applies the layout in a normal situation" do
41
+ expect(@deck.send(:layoutify, {layout: :blah})).to \
42
+ eq({layout: [:blah, :blah], x: [25, 25]})
43
+ end
44
+
45
+ it "applies two different layouts for two different situations" do
46
+ expect(@deck.send(:layoutify, {layout: ['blah', 'apples']})).to \
47
+ eq({layout: ['blah','apples'], x: [25, 35]})
48
+ end
49
+
50
+ it "still has nils when not applied two different layouts differ in structure" do
51
+ expect(@deck.send(:layoutify, {layout: ['apples', 'oranges']})).to \
52
+ eq({layout: ['apples','oranges'], x: [35], y: [nil, 45]})
53
+ #...this might behavior that is hard to debug for users. Trying to come up with a warning or something...
54
+ end
55
+
56
+ it "also looks up based on strings" do
57
+ expect(@deck.send(:layoutify, {layout: 'blah'})).to \
58
+ eq({layout: ['blah','blah'], x: [25, 25]})
59
+ end
60
+
61
+ end
62
+
63
+ context '#rangeify' do
64
+ it "must be within the card size range" do
65
+ expect{@deck.send(:rangeify, {range: 2..3})}.to \
66
+ raise_error(ArgumentError, '2..3 is outside of deck range of 0..1')
67
+ end
68
+
69
+ it "cannot be nil" do
70
+ expect{@deck.send(:rangeify, {range: nil})}.to \
71
+ raise_error(RuntimeError, 'Range cannot be nil')
72
+ end
73
+
74
+ it "defaults to a range of all cards if :all" do
75
+ expect(@deck.send(:rangeify, {range: :all})).to eq({range: 0..1})
76
+ end
77
+ end
78
+
79
+ context "#fileify" do
80
+ it "should throw an error if the file doesn't exist" do
81
+ expect{@deck.send(:fileify, {file: 'nonexist.txt'}, true)}.to \
82
+ raise_error(RuntimeError,"File #{File.expand_path('nonexist.txt')} does not exist!")
83
+ end
84
+ end
85
+
86
+ context "#dir" do
87
+ it "should raise an error if the directory does not exist" do
88
+ expect{@deck.send(:dirify, {dir: 'nonexist'}, :dir, false)}.to \
89
+ raise_error(RuntimeError,"'nonexist' does not exist!")
90
+ end
91
+ end
92
+
93
+ context "#colorify" do
94
+ it "should parse if nillable" do
95
+ color = @deck.send(:colorify, {color: ['#fff']}, true)[:color]
96
+ expect(color.to_a[0].to_a).to eq([1.0, 1.0, 1.0, 1.0])
97
+ end
98
+
99
+ it "raises and error if the color doesn't exist" do
100
+ expect{ @deck.send(:colorify, {color: [:nonexist]}, false) }.to \
101
+ raise_error(ArgumentError, "unknown color name: nonexist")
102
+ end
103
+
104
+ it "pulls from config's custom colors" do
105
+ @deck.custom_colors['foo'] = "#abc"
106
+ expect(@deck.send(:colorify, {color: [:foo]}, false)[:color][0].to_s).to \
107
+ eq('#AABBCCFF')
108
+ end
109
+
110
+ it "pulls from config's custom colors even when a string" do
111
+ @deck.custom_colors['foo'] = "#abc"
112
+ expect(@deck.send(:colorify, {color: ['foo']}, false)[:color][0].to_s).to \
113
+ eq('#AABBCCFF')
114
+ end
115
+ end
116
+
117
+ end
@@ -1,15 +1,20 @@
1
- require 'spec_helper'
2
- require 'squib'
3
-
4
- describe Squib do
5
-
6
- it "should execute all examples with no errors" do
7
- samples = File.expand_path('../samples', File.dirname(__FILE__))
8
- Dir["#{samples}/**/*.rb"].each do |sample|
9
- Dir.chdir(samples) do #to save to _output
10
- require_relative "../samples/#{File.basename(sample)}"
11
- end
12
- end
13
- end
14
-
1
+ require 'spec_helper'
2
+ require 'squib'
3
+ require 'pp'
4
+
5
+ describe Squib do
6
+
7
+ context "all samples run without error" do
8
+ it "should execute with no errors" do
9
+ p = double("ProgressBar")
10
+ allow(ProgressBar).to receive(:create).and_return(Squib::DoNothing.new)
11
+ samples = File.expand_path('../samples', File.dirname(__FILE__))
12
+ Dir["#{samples}/**/*.rb"].each do |sample|
13
+ Dir.chdir(samples) do #to save to _output
14
+ require_relative "../samples/#{File.basename(sample)}"
15
+ end
16
+ end
17
+ end
18
+ end
19
+
15
20
  end
@@ -7,3 +7,6 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
7
7
  ]
8
8
  SimpleCov.start
9
9
 
10
+ def test_file(str)
11
+ "#{File.expand_path(File.dirname(__FILE__))}/data/#{str}"
12
+ end
@@ -1,42 +1,46 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'squib/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.specification_version = 2 if spec.respond_to? :specification_version=
8
- spec.required_rubygems_version = Gem::Requirement.new(">= 0") if spec.respond_to? :required_rubygems_version=
9
- spec.rubygems_version = '2.2.2'
10
- spec.required_ruby_version = '>= 2.0.0'
11
-
12
- spec.name = "squib"
13
- spec.version = Squib::VERSION
14
- spec.license = "MIT"
15
-
16
- spec.summary = %q{A Ruby DSL for prototyping card games}
17
- spec.description = %q{Squib is a Ruby DSL for prototyping card games}
18
- spec.authors = ["Andy Meneely"]
19
- spec.email = ["playconfidencegames@gmail.com"]
20
- spec.homepage = "https://github.com/andymeneely/squib"
21
-
22
- spec.rdoc_options = ["--charset=UTF-8"]
23
- spec.extra_rdoc_files = %w[README.md LICENSE.txt]
24
-
25
- spec.files = `git ls-files -z`.split("\x0")
26
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
27
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
28
- spec.require_paths = ["lib"]
29
-
30
- spec.add_runtime_dependency 'cairo', '~> 1.12.9'
31
- spec.add_runtime_dependency 'pango', '~> 2.2.0'
32
- spec.add_runtime_dependency 'roo', '~> 1.13.2'
33
- spec.add_runtime_dependency 'rsvg2', '~> 2.2.0'
34
- spec.add_runtime_dependency 'mercenary', '~> 0.3.4'
35
-
36
- spec.add_development_dependency "bundler", "~> 1.6"
37
- spec.add_development_dependency "rake"
38
- spec.add_development_dependency "rspec", "~> 3.0"
39
- spec.add_development_dependency "yard"
40
- spec.add_development_dependency "coveralls"
41
-
42
- end
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'squib/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.specification_version = 2 if spec.respond_to? :specification_version=
8
+ spec.required_rubygems_version = Gem::Requirement.new(">= 0") if spec.respond_to? :required_rubygems_version=
9
+ spec.rubygems_version = '2.2.2'
10
+ spec.required_ruby_version = '>= 2.0.0'
11
+
12
+ spec.name = "squib"
13
+ spec.version = Squib::VERSION
14
+ spec.license = "MIT"
15
+
16
+ spec.summary = %q{A Ruby DSL for prototyping card games}
17
+ spec.description = %q{Squib is a Ruby DSL for prototyping card games}
18
+ spec.authors = ["Andy Meneely"]
19
+ spec.email = ["playconfidencegames@gmail.com"]
20
+ spec.homepage = "https://github.com/andymeneely/squib"
21
+
22
+ spec.rdoc_options = ["--charset=UTF-8"]
23
+ spec.extra_rdoc_files = %w[README.md LICENSE.txt]
24
+
25
+ spec.files = `git ls-files -z`.split("\x0")
26
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
27
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_runtime_dependency 'cairo', '~> 1.12.9'
31
+ spec.add_runtime_dependency 'pango', '~> 2.2.0'
32
+ spec.add_runtime_dependency 'roo', '~> 1.13.2'
33
+ spec.add_runtime_dependency 'rsvg2', '~> 2.2.0'
34
+ spec.add_runtime_dependency 'mercenary', '~> 0.3.4'
35
+ spec.add_runtime_dependency 'ruby-progressbar', '~> 1.5.1'
36
+
37
+ spec.add_development_dependency "bundler", "~> 1.6"
38
+ spec.add_development_dependency "rake"
39
+ spec.add_development_dependency "rspec", "~> 3.0"
40
+ spec.add_development_dependency "rspec-mocks", "~> 3.0"
41
+ spec.add_development_dependency "redcarpet", '~> 3.1.2'
42
+ spec.add_development_dependency "github-markup", '~> 1.2.1'
43
+ spec.add_development_dependency "yard"
44
+ spec.add_development_dependency "coveralls"
45
+
46
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Meneely
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-29 00:00:00.000000000 Z
11
+ date: 2014-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cairo
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.3.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: ruby-progressbar
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.5.1
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 1.5.1
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +136,48 @@ dependencies:
122
136
  - - ~>
123
137
  - !ruby/object:Gem::Version
124
138
  version: '3.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec-mocks
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: '3.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: '3.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: redcarpet
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ~>
158
+ - !ruby/object:Gem::Version
159
+ version: 3.1.2
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ~>
165
+ - !ruby/object:Gem::Version
166
+ version: 3.1.2
167
+ - !ruby/object:Gem::Dependency
168
+ name: github-markup
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 1.2.1
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ~>
179
+ - !ruby/object:Gem::Version
180
+ version: 1.2.1
125
181
  - !ruby/object:Gem::Dependency
126
182
  name: yard
127
183
  requirement: !ruby/object:Gem::Requirement
@@ -163,7 +219,6 @@ files:
163
219
  - .gitignore
164
220
  - .travis.yml
165
221
  - .yardopts
166
- - API.md
167
222
  - Gemfile
168
223
  - LICENSE.txt
169
224
  - README.md
@@ -189,6 +244,7 @@ files:
189
244
  - lib/squib/graphics/shapes.rb
190
245
  - lib/squib/graphics/text.rb
191
246
  - lib/squib/input_helpers.rb
247
+ - lib/squib/progress.rb
192
248
  - lib/squib/project_template/.gitignore
193
249
  - lib/squib/project_template/ABOUT.md
194
250
  - lib/squib/project_template/Gemfile
@@ -199,16 +255,22 @@ files:
199
255
  - lib/squib/project_template/layout.yml
200
256
  - lib/squib/version.rb
201
257
  - samples/_output/gitkeep.txt
258
+ - samples/ball.png
202
259
  - samples/basic.rb
203
260
  - samples/colors.rb
204
261
  - samples/custom-config.yml
205
262
  - samples/custom-layout.yml
206
263
  - samples/custom_config.rb
264
+ - samples/customconfig-imgdir/shiny-purse2.png
265
+ - samples/customconfig-imgdir/spanner2.svg
207
266
  - samples/draw_shapes.rb
208
267
  - samples/excel.rb
268
+ - samples/grit.png
209
269
  - samples/hello_world.rb
210
270
  - samples/load_images.rb
271
+ - samples/offset.svg
211
272
  - samples/pokercard.png
273
+ - samples/portrait-landscape.rb
212
274
  - samples/ranges.rb
213
275
  - samples/sample.xlsx
214
276
  - samples/save_pdf.rb
@@ -220,7 +282,13 @@ files:
220
282
  - samples/use_layout.rb
221
283
  - spec/api/api_text_spec.rb
222
284
  - spec/commands/new_spec.rb
285
+ - spec/data/multi-extends-single-entry.yml
286
+ - spec/data/multi-level-extends.yml
287
+ - spec/data/no-extends.yml
288
+ - spec/data/single-extends.yml
289
+ - spec/data/single-level-multi-extends.yml
223
290
  - spec/deck_spec.rb
291
+ - spec/input_helpers_spec.rb
224
292
  - spec/samples_run_spec.rb
225
293
  - spec/spec_helper.rb
226
294
  - squib.gemspec
@@ -245,14 +313,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
313
  version: '0'
246
314
  requirements: []
247
315
  rubyforge_project:
248
- rubygems_version: 2.0.14
316
+ rubygems_version: 2.2.2
249
317
  signing_key:
250
318
  specification_version: 2
251
319
  summary: A Ruby DSL for prototyping card games
252
320
  test_files:
253
321
  - spec/api/api_text_spec.rb
254
322
  - spec/commands/new_spec.rb
323
+ - spec/data/multi-extends-single-entry.yml
324
+ - spec/data/multi-level-extends.yml
325
+ - spec/data/no-extends.yml
326
+ - spec/data/single-extends.yml
327
+ - spec/data/single-level-multi-extends.yml
255
328
  - spec/deck_spec.rb
329
+ - spec/input_helpers_spec.rb
256
330
  - spec/samples_run_spec.rb
257
331
  - spec/spec_helper.rb
258
332
  has_rdoc:
data/API.md DELETED
@@ -1,59 +0,0 @@
1
- # Squib API
2
-
3
- The Squib DSL is based on a collection of methods provided to the `Squib::Deck` class. The general philosophy of Squib is to specify as little as possible with layers of defaults, highly flexible input, and good ol' Ruby duck-typing. Ruby does a lot to make Squib useful.
4
-
5
- # Squib::Deck and Squib::Card
6
-
7
- Squib essentially has two main classes: `Deck` and `Card`. `Deck` is the front-end, and `Card` is the back-end. The contract of `Deck` is to do the various manipulations of options and then delegate the operation to `Card` to do the low-level graphical operations.
8
-
9
- For most users, I recommending solely using `Deck` methods. If you want to roll up your sleeves and get your hands messy, you can access the Cairo or Pango contexts the directly via the `Card` class. The API documentation doesn't really cover these, however, so you're on your own there.
10
-
11
- # Specifying Parameters
12
-
13
- Squib is all about sane defaults and shorthand specification. Arguments are almost always using hashes, which look a lot like [Ruby 2.0's named parameters](http://www.ruby-doc.org/core-2.0.0/doc/syntax/calling_methods_rdoc.html#label-Keyword+Arguments). This means you can specify your parameters in any order you please. All parameters are optional. For example `x` and `y` default to 0 (i.e. the upper-left corner of the card). Any parameter that is specified in the command overrides any Squib defaults, `config.yml` settings, or layout rules.
14
-
15
- # Specifying Ranges
16
-
17
- Most public `Deck` methods allow a `range` to be specified as a first parameter. This parameter is used to access an internal `Array` of `Squib::Cards`. This can be an actual Ruby range, or anything that implements `#each` (thus can be an `Enumerable`). Integers are also supported for changing one card only. Negatives work from the back of the deck. Here are some examples from `samples/ranges.rb` found [here](https://github.com/andymeneely/squib/tree/master/samples/ranges.rb)
18
-
19
- {include:file:samples/ranges.rb}
20
-
21
- Many more examples can be found in `ranges.rb` in the [samples](https://github.com/andymeneely/squib/tree/master/samples/) folder . In particular, take a look at some idioms that uses hashes to denote things like card "types", or future-proofing against creating and deleting cards with an ID column.
22
-
23
- # Pixels and Other Units
24
-
25
- By default, Squib thinks in pixels. This decision was made so that we can have pixel-perfect layouts without automatically scaling everything, even though working in units is sometimes easier. To convert, we provide the `Deck#inch` method, as shown in `samples/units.rb` found [here](https://github.com/andymeneely/squib/tree/master/samples/units.rb)
26
-
27
- {include:file:samples/units.rb}
28
-
29
- # Specifying Colors
30
-
31
- Colors can be specified in a wide variety of ways, mostly in a hex-string. Take a look at the examples from `samples/colors.rb`, found [here](https://github.com/andymeneely/squib/tree/master/samples/colors.rb)
32
-
33
- {include:file:samples/colors.rb}
34
-
35
- Under the hood, Squib uses the `rcairo` [color parser](https://github.com/rcairo/rcairo/blob/master/lib/cairo/color.rb) to accept a variety of color specifications, along with over [300 pre-defined constants](https://github.com/rcairo/rcairo/blob/master/lib/cairo/colors.rb).
36
-
37
- # Specifying Files
38
-
39
- All files opened for reading or writing (e.g. for `png` and `xlsx`) are opened relative to the current directory. Files opened for writing (e.g. for `save_png`) will be overwritten without warning.
40
-
41
- # Custom Layouts
42
-
43
- Working with x-y coordinates all the time can be tiresome, and ideally everything in a game prototype should be data-driven and easily changed. For this, many Squib methods allow for a `layout` to be set. In essence, layouts are a way of setting default values for any argument given to the command.
44
-
45
- To use a layout, set the `layout:` option on a `Deck.new` command to point to a YAML file. Any command that allows a `layout` option can be set with a Ruby symbol or String, and the command will then load the specified `x`, `y`, `width`, and `height`. The individual command can also override these options.
46
-
47
- Note: YAML is very finnicky about having tabs in the file. Use two spaces for indentation instead.
48
-
49
- Layouts will override Squib's defaults, but are overriden by anything specified in the command itself. Thus, the order of precedence looks like this:
50
-
51
- * Use what the command specified
52
- * If anything was not yet specified, use what was given in a layout (if a layout was specified in the command and the file was given to the Deck)
53
- * If still anything was not yet specified, use what was given in Squib's defaults.
54
-
55
- Layouts also allow for a special `extends` field that will copy all of the settings from another entry. Only a single level of extends are supported currently (contact the developer if you want multiple levels).
56
-
57
- See the `use_layout` sample found [here](https://github.com/andymeneely/squib/tree/master/samples/)
58
-
59
- {include:file:samples/use_layout.rb}