squib 0.15.2 → 0.15.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.
- checksums.yaml +4 -4
- data/.gitignore +41 -41
- data/.travis.yml +17 -17
- data/CHANGELOG.md +400 -395
- data/CONTRIBUTING.md +40 -40
- data/Dockerfile +25 -25
- data/Gemfile +2 -2
- data/LICENSE.txt +22 -22
- data/README.md +145 -145
- data/RELEASE TODO.md +21 -21
- data/Rakefile +48 -48
- data/appveyor.yml +25 -25
- 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 +41 -41
- 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 -10
- 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 -68
- data/lib/squib/card.rb +75 -75
- 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 +277 -277
- 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 +123 -123
- 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 +219 -219
- 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 -138
- 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 +206 -206
- data/lib/squib/sprues/sprue_schema.rb +50 -50
- 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 +44 -44
- data/samples/colors/_gradients.rb +34 -34
- data/samples/colors/_switch_color.rb +33 -33
- 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_filenames.rb +24 -24
- 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 -60
- data/samples/shapes/_proofs.rb +22 -22
- data/samples/sprues/_advanced_sprues.rb +25 -25
- data/samples/sprues/_builtin_sprues.rb +21 -21
- 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 -52
- metadata +62 -63
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]
|
data/appveyor.yml
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
version: '{build}'
|
|
2
|
-
|
|
3
|
-
skip_tags: true
|
|
4
|
-
|
|
5
|
-
environment:
|
|
6
|
-
matrix:
|
|
7
|
-
- ruby_version: "24"
|
|
8
|
-
- ruby_version: "24-x64"
|
|
9
|
-
- ruby_version: "25"
|
|
10
|
-
- ruby_version: "25-x64"
|
|
11
|
-
- ruby_version: "26"
|
|
12
|
-
- ruby_version: "26-x64"
|
|
13
|
-
|
|
14
|
-
install:
|
|
15
|
-
- SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
|
|
16
|
-
- ruby --version
|
|
17
|
-
- gem --version
|
|
18
|
-
- gem install bundler
|
|
19
|
-
- bundler --version
|
|
20
|
-
- bundle install
|
|
21
|
-
|
|
22
|
-
test_script:
|
|
23
|
-
- rake
|
|
24
|
-
|
|
25
|
-
build: off
|
|
1
|
+
version: '{build}'
|
|
2
|
+
|
|
3
|
+
skip_tags: true
|
|
4
|
+
|
|
5
|
+
environment:
|
|
6
|
+
matrix:
|
|
7
|
+
- ruby_version: "24"
|
|
8
|
+
- ruby_version: "24-x64"
|
|
9
|
+
- ruby_version: "25"
|
|
10
|
+
- ruby_version: "25-x64"
|
|
11
|
+
- ruby_version: "26"
|
|
12
|
+
- ruby_version: "26-x64"
|
|
13
|
+
|
|
14
|
+
install:
|
|
15
|
+
- SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
|
|
16
|
+
- ruby --version
|
|
17
|
+
- gem --version
|
|
18
|
+
- gem install bundler
|
|
19
|
+
- bundler --version
|
|
20
|
+
- bundle install
|
|
21
|
+
|
|
22
|
+
test_script:
|
|
23
|
+
- rake
|
|
24
|
+
|
|
25
|
+
build: off
|
data/bin/squib
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
require 'squib'
|
|
3
|
-
|
|
4
|
-
Squib::CLI.new.run
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'squib'
|
|
3
|
+
|
|
4
|
+
Squib::CLI.new.run
|
data/lib/squib.rb
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
require 'logger'
|
|
2
|
-
require 'cairo'
|
|
3
|
-
require 'pango'
|
|
4
|
-
require 'rsvg2'
|
|
5
|
-
require_relative 'squib/version'
|
|
6
|
-
require_relative 'squib/commands/cli'
|
|
7
|
-
require_relative 'squib/deck'
|
|
8
|
-
require_relative 'squib/card'
|
|
9
|
-
|
|
10
|
-
module Squib
|
|
11
|
-
|
|
12
|
-
# Access the internal logger that Squib uses. By default, Squib configure the logger to the WARN level
|
|
13
|
-
# Use this to suppress or increase output levels.
|
|
14
|
-
# @example
|
|
15
|
-
# Squib.logger.level = Logger::DEBUG #show waaaay more information than you probably need, unless you're a dev
|
|
16
|
-
# Squib.logger.level = Logger::ERROR #basically turns it off
|
|
17
|
-
#
|
|
18
|
-
# @return [Logger] the ruby logger
|
|
19
|
-
# @api public
|
|
20
|
-
def logger
|
|
21
|
-
if @logger.nil?
|
|
22
|
-
@logger = Logger.new($stdout)
|
|
23
|
-
@logger.level = Logger::WARN
|
|
24
|
-
@logger.formatter = proc do |severity, datetime, m_progname, msg|
|
|
25
|
-
"#{datetime} #{severity}: #{msg}\n"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
@logger
|
|
29
|
-
end
|
|
30
|
-
module_function :logger
|
|
31
|
-
|
|
32
|
-
end
|
|
1
|
+
require 'logger'
|
|
2
|
+
require 'cairo'
|
|
3
|
+
require 'pango'
|
|
4
|
+
require 'rsvg2'
|
|
5
|
+
require_relative 'squib/version'
|
|
6
|
+
require_relative 'squib/commands/cli'
|
|
7
|
+
require_relative 'squib/deck'
|
|
8
|
+
require_relative 'squib/card'
|
|
9
|
+
|
|
10
|
+
module Squib
|
|
11
|
+
|
|
12
|
+
# Access the internal logger that Squib uses. By default, Squib configure the logger to the WARN level
|
|
13
|
+
# Use this to suppress or increase output levels.
|
|
14
|
+
# @example
|
|
15
|
+
# Squib.logger.level = Logger::DEBUG #show waaaay more information than you probably need, unless you're a dev
|
|
16
|
+
# Squib.logger.level = Logger::ERROR #basically turns it off
|
|
17
|
+
#
|
|
18
|
+
# @return [Logger] the ruby logger
|
|
19
|
+
# @api public
|
|
20
|
+
def logger
|
|
21
|
+
if @logger.nil?
|
|
22
|
+
@logger = Logger.new($stdout)
|
|
23
|
+
@logger.level = Logger::WARN
|
|
24
|
+
@logger.formatter = proc do |severity, datetime, m_progname, msg|
|
|
25
|
+
"#{datetime} #{severity}: #{msg}\n"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
@logger
|
|
29
|
+
end
|
|
30
|
+
module_function :logger
|
|
31
|
+
|
|
32
|
+
end
|
data/lib/squib/api/background.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
require_relative '../args/card_range'
|
|
2
|
-
require_relative '../args/draw'
|
|
3
|
-
|
|
4
|
-
module Squib
|
|
5
|
-
class Deck
|
|
6
|
-
|
|
7
|
-
# DSL method. See http://squib.readthedocs.io
|
|
8
|
-
def background(opts = {})
|
|
9
|
-
range = Args::CardRange.new(opts[:range], deck_size: size)
|
|
10
|
-
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
|
|
11
|
-
range.each { |i| @cards[i].background(draw.color[i]) }
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
end
|
|
15
|
-
end
|
|
1
|
+
require_relative '../args/card_range'
|
|
2
|
+
require_relative '../args/draw'
|
|
3
|
+
|
|
4
|
+
module Squib
|
|
5
|
+
class Deck
|
|
6
|
+
|
|
7
|
+
# DSL method. See http://squib.readthedocs.io
|
|
8
|
+
def background(opts = {})
|
|
9
|
+
range = Args::CardRange.new(opts[:range], deck_size: size)
|
|
10
|
+
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
|
|
11
|
+
range.each { |i| @cards[i].background(draw.color[i]) }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/squib/api/data.rb
CHANGED
|
@@ -1,137 +1,137 @@
|
|
|
1
|
-
require 'roo'
|
|
2
|
-
require 'csv'
|
|
3
|
-
require 'yaml'
|
|
4
|
-
require_relative '../args/input_file'
|
|
5
|
-
require_relative '../args/import'
|
|
6
|
-
require_relative '../args/csv_opts'
|
|
7
|
-
require_relative '../import/data_frame'
|
|
8
|
-
|
|
9
|
-
module Squib
|
|
10
|
-
|
|
11
|
-
# DSL method. See http://squib.readthedocs.io
|
|
12
|
-
def xlsx(opts = {})
|
|
13
|
-
input = Args::InputFile.new(file: 'deck.xlsx').load!(opts)
|
|
14
|
-
import = Args::Import.new.load!(opts)
|
|
15
|
-
s = Roo::Excelx.new(input.file[0])
|
|
16
|
-
s.default_sheet = s.sheets[input.sheet[0]]
|
|
17
|
-
data = Squib::DataFrame.new
|
|
18
|
-
s.first_column.upto(s.last_column) do |col|
|
|
19
|
-
header = s.cell(s.first_row, col).to_s
|
|
20
|
-
header.strip! if import.strip?
|
|
21
|
-
data[header] = []
|
|
22
|
-
(s.first_row + 1).upto(s.last_row) do |row|
|
|
23
|
-
cell = s.cell(row, col)
|
|
24
|
-
# Roo hack for avoiding unnecessary .0's on whole integers (https://github.com/roo-rb/roo/issues/139)
|
|
25
|
-
cell = s.excelx_value(row, col) if s.excelx_type(row, col) == [:numeric_or_formula, 'General']
|
|
26
|
-
cell.strip! if cell.respond_to?(:strip) && import.strip?
|
|
27
|
-
cell = yield(header, cell) if block_given?
|
|
28
|
-
data[header] << cell
|
|
29
|
-
end# row
|
|
30
|
-
end# col
|
|
31
|
-
explode_quantities(data, import.explode)
|
|
32
|
-
end# xlsx
|
|
33
|
-
module_function :xlsx
|
|
34
|
-
|
|
35
|
-
# DSL method. See http://squib.readthedocs.io
|
|
36
|
-
def csv(opts = {})
|
|
37
|
-
# TODO refactor all this out to separate methods, and its own class
|
|
38
|
-
import = Args::Import.new.load!(opts)
|
|
39
|
-
file = Args::InputFile.new(file: 'deck.csv').load!(opts).file[0]
|
|
40
|
-
data = opts.key?(:data) ? opts[:data] : File.read(file)
|
|
41
|
-
csv_opts = Args::CSV_Opts.new(opts)
|
|
42
|
-
table = CSV.parse(data, csv_opts.to_hash)
|
|
43
|
-
check_duplicate_csv_headers(table)
|
|
44
|
-
hash = Squib::DataFrame.new
|
|
45
|
-
table.headers.each do |header|
|
|
46
|
-
new_header = header.to_s
|
|
47
|
-
new_header = new_header.strip if import.strip?
|
|
48
|
-
hash[new_header] ||= table[header]
|
|
49
|
-
end
|
|
50
|
-
if import.strip?
|
|
51
|
-
new_hash = Squib::DataFrame.new
|
|
52
|
-
hash.each do |header, col|
|
|
53
|
-
new_hash[header] = col.map do |str|
|
|
54
|
-
str = str.strip if str.respond_to?(:strip)
|
|
55
|
-
str
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
hash = new_hash
|
|
59
|
-
end
|
|
60
|
-
if block_given?
|
|
61
|
-
hash.each do |header, col|
|
|
62
|
-
col.map! do |val|
|
|
63
|
-
yield(header, val)
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
return explode_quantities(hash, import.explode)
|
|
68
|
-
end
|
|
69
|
-
module_function :csv
|
|
70
|
-
|
|
71
|
-
# DSL method. See http://squib.readthedocs.io
|
|
72
|
-
def yaml(opts = {})
|
|
73
|
-
input = Args::InputFile.new(file: 'deck.yml').load!(opts)
|
|
74
|
-
import = Args::Import.new.load!(opts)
|
|
75
|
-
yml = YAML.load_file(input.file[0])
|
|
76
|
-
data = Squib::DataFrame.new
|
|
77
|
-
# Get a universal list of keys to ensure everything is covered.
|
|
78
|
-
keys = yml.map { |c| c.keys}.flatten.uniq
|
|
79
|
-
keys.each { |k| data[k] = [] } #init arrays
|
|
80
|
-
yml.each do |card|
|
|
81
|
-
# nil value if key isn't set.
|
|
82
|
-
keys.each { |k| data[k] << card[k] }
|
|
83
|
-
end
|
|
84
|
-
if block_given?
|
|
85
|
-
data.each do |header, col|
|
|
86
|
-
col.map! do |val|
|
|
87
|
-
yield(header, val)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
explode_quantities(data, import.explode)
|
|
92
|
-
end
|
|
93
|
-
module_function :yaml
|
|
94
|
-
|
|
95
|
-
# Check if the given CSV table has duplicate columns, and throw a warning
|
|
96
|
-
# @api private
|
|
97
|
-
def check_duplicate_csv_headers(table)
|
|
98
|
-
if table.headers.size != table.headers.uniq.size
|
|
99
|
-
dups = table.headers.select{|e| table.headers.count(e) > 1 }
|
|
100
|
-
Squib.logger.warn "CSV duplicated the following column keys: #{dups.join(',')}"
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
module_function :check_duplicate_csv_headers
|
|
104
|
-
|
|
105
|
-
# @api private
|
|
106
|
-
def explode_quantities(data, qty)
|
|
107
|
-
return data unless data.col? qty.to_s.strip
|
|
108
|
-
qtys = data[qty]
|
|
109
|
-
new_data = Squib::DataFrame.new
|
|
110
|
-
data.each do |col, arr|
|
|
111
|
-
new_data[col] = []
|
|
112
|
-
qtys.each_with_index do |qty, index|
|
|
113
|
-
qty.to_i.times { new_data[col] << arr[index] }
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
return new_data
|
|
117
|
-
end
|
|
118
|
-
module_function :explode_quantities
|
|
119
|
-
|
|
120
|
-
class Deck
|
|
121
|
-
|
|
122
|
-
# DSL method. See http://squib.readthedocs.io
|
|
123
|
-
def xlsx(opts = {})
|
|
124
|
-
Squib.xlsx(opts)
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
# DSL method. See http://squib.readthedocs.io
|
|
128
|
-
def csv(opts = {})
|
|
129
|
-
Squib.csv(opts)
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# DSL method. See http://squib.readthedocs.io
|
|
133
|
-
def yaml(opts = {})
|
|
134
|
-
Squib.yaml(opts)
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
end
|
|
1
|
+
require 'roo'
|
|
2
|
+
require 'csv'
|
|
3
|
+
require 'yaml'
|
|
4
|
+
require_relative '../args/input_file'
|
|
5
|
+
require_relative '../args/import'
|
|
6
|
+
require_relative '../args/csv_opts'
|
|
7
|
+
require_relative '../import/data_frame'
|
|
8
|
+
|
|
9
|
+
module Squib
|
|
10
|
+
|
|
11
|
+
# DSL method. See http://squib.readthedocs.io
|
|
12
|
+
def xlsx(opts = {})
|
|
13
|
+
input = Args::InputFile.new(file: 'deck.xlsx').load!(opts)
|
|
14
|
+
import = Args::Import.new.load!(opts)
|
|
15
|
+
s = Roo::Excelx.new(input.file[0])
|
|
16
|
+
s.default_sheet = s.sheets[input.sheet[0]]
|
|
17
|
+
data = Squib::DataFrame.new
|
|
18
|
+
s.first_column.upto(s.last_column) do |col|
|
|
19
|
+
header = s.cell(s.first_row, col).to_s
|
|
20
|
+
header.strip! if import.strip?
|
|
21
|
+
data[header] = []
|
|
22
|
+
(s.first_row + 1).upto(s.last_row) do |row|
|
|
23
|
+
cell = s.cell(row, col)
|
|
24
|
+
# Roo hack for avoiding unnecessary .0's on whole integers (https://github.com/roo-rb/roo/issues/139)
|
|
25
|
+
cell = s.excelx_value(row, col) if s.excelx_type(row, col) == [:numeric_or_formula, 'General']
|
|
26
|
+
cell.strip! if cell.respond_to?(:strip) && import.strip?
|
|
27
|
+
cell = yield(header, cell) if block_given?
|
|
28
|
+
data[header] << cell
|
|
29
|
+
end# row
|
|
30
|
+
end# col
|
|
31
|
+
explode_quantities(data, import.explode)
|
|
32
|
+
end# xlsx
|
|
33
|
+
module_function :xlsx
|
|
34
|
+
|
|
35
|
+
# DSL method. See http://squib.readthedocs.io
|
|
36
|
+
def csv(opts = {})
|
|
37
|
+
# TODO refactor all this out to separate methods, and its own class
|
|
38
|
+
import = Args::Import.new.load!(opts)
|
|
39
|
+
file = Args::InputFile.new(file: 'deck.csv').load!(opts).file[0]
|
|
40
|
+
data = opts.key?(:data) ? opts[:data] : File.read(file)
|
|
41
|
+
csv_opts = Args::CSV_Opts.new(opts)
|
|
42
|
+
table = CSV.parse(data, csv_opts.to_hash)
|
|
43
|
+
check_duplicate_csv_headers(table)
|
|
44
|
+
hash = Squib::DataFrame.new
|
|
45
|
+
table.headers.each do |header|
|
|
46
|
+
new_header = header.to_s
|
|
47
|
+
new_header = new_header.strip if import.strip?
|
|
48
|
+
hash[new_header] ||= table[header]
|
|
49
|
+
end
|
|
50
|
+
if import.strip?
|
|
51
|
+
new_hash = Squib::DataFrame.new
|
|
52
|
+
hash.each do |header, col|
|
|
53
|
+
new_hash[header] = col.map do |str|
|
|
54
|
+
str = str.strip if str.respond_to?(:strip)
|
|
55
|
+
str
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
hash = new_hash
|
|
59
|
+
end
|
|
60
|
+
if block_given?
|
|
61
|
+
hash.each do |header, col|
|
|
62
|
+
col.map! do |val|
|
|
63
|
+
yield(header, val)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
return explode_quantities(hash, import.explode)
|
|
68
|
+
end
|
|
69
|
+
module_function :csv
|
|
70
|
+
|
|
71
|
+
# DSL method. See http://squib.readthedocs.io
|
|
72
|
+
def yaml(opts = {})
|
|
73
|
+
input = Args::InputFile.new(file: 'deck.yml').load!(opts)
|
|
74
|
+
import = Args::Import.new.load!(opts)
|
|
75
|
+
yml = YAML.load_file(input.file[0])
|
|
76
|
+
data = Squib::DataFrame.new
|
|
77
|
+
# Get a universal list of keys to ensure everything is covered.
|
|
78
|
+
keys = yml.map { |c| c.keys}.flatten.uniq
|
|
79
|
+
keys.each { |k| data[k] = [] } #init arrays
|
|
80
|
+
yml.each do |card|
|
|
81
|
+
# nil value if key isn't set.
|
|
82
|
+
keys.each { |k| data[k] << card[k] }
|
|
83
|
+
end
|
|
84
|
+
if block_given?
|
|
85
|
+
data.each do |header, col|
|
|
86
|
+
col.map! do |val|
|
|
87
|
+
yield(header, val)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
explode_quantities(data, import.explode)
|
|
92
|
+
end
|
|
93
|
+
module_function :yaml
|
|
94
|
+
|
|
95
|
+
# Check if the given CSV table has duplicate columns, and throw a warning
|
|
96
|
+
# @api private
|
|
97
|
+
def check_duplicate_csv_headers(table)
|
|
98
|
+
if table.headers.size != table.headers.uniq.size
|
|
99
|
+
dups = table.headers.select{|e| table.headers.count(e) > 1 }
|
|
100
|
+
Squib.logger.warn "CSV duplicated the following column keys: #{dups.join(',')}"
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
module_function :check_duplicate_csv_headers
|
|
104
|
+
|
|
105
|
+
# @api private
|
|
106
|
+
def explode_quantities(data, qty)
|
|
107
|
+
return data unless data.col? qty.to_s.strip
|
|
108
|
+
qtys = data[qty]
|
|
109
|
+
new_data = Squib::DataFrame.new
|
|
110
|
+
data.each do |col, arr|
|
|
111
|
+
new_data[col] = []
|
|
112
|
+
qtys.each_with_index do |qty, index|
|
|
113
|
+
qty.to_i.times { new_data[col] << arr[index] }
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
return new_data
|
|
117
|
+
end
|
|
118
|
+
module_function :explode_quantities
|
|
119
|
+
|
|
120
|
+
class Deck
|
|
121
|
+
|
|
122
|
+
# DSL method. See http://squib.readthedocs.io
|
|
123
|
+
def xlsx(opts = {})
|
|
124
|
+
Squib.xlsx(opts)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# DSL method. See http://squib.readthedocs.io
|
|
128
|
+
def csv(opts = {})
|
|
129
|
+
Squib.csv(opts)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# DSL method. See http://squib.readthedocs.io
|
|
133
|
+
def yaml(opts = {})
|
|
134
|
+
Squib.yaml(opts)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|