20 changed files with 304 additions and 91 deletions
@ -0,0 +1,8 @@ |
|||||||
|
group :default do |
||||||
|
guard 'rake', :task => 'spec' do |
||||||
|
watch %r{.*\.xlsx$} |
||||||
|
watch %r{.*\.rb$} |
||||||
|
watch %r{.*\.yml$} |
||||||
|
watch %r{.*\.rst$} |
||||||
|
end |
||||||
|
end |
||||||
@ -1,75 +0,0 @@ |
|||||||
require_relative '../args/card_range' |
|
||||||
require_relative '../args/hand_special' |
|
||||||
require_relative '../args/save_batch' |
|
||||||
require_relative '../args/sheet' |
|
||||||
require_relative '../args/showcase_special' |
|
||||||
require_relative '../args/sprue_file' |
|
||||||
require_relative '../graphics/save_pdf' |
|
||||||
require_relative '../graphics/save_sprue' |
|
||||||
require_relative '../sprues/sprue' |
|
||||||
|
|
||||||
module Squib |
|
||||||
class Deck |
|
||||||
|
|
||||||
# DSL method. See http://squib.readthedocs.io |
|
||||||
def save(opts = {}) |
|
||||||
save_png(opts) if Array(opts[:format]).include? :png |
|
||||||
save_pdf(opts) if Array(opts[:format]).include? :pdf |
|
||||||
self |
|
||||||
end |
|
||||||
|
|
||||||
# DSL method. See http://squib.readthedocs.io |
|
||||||
def save_pdf(opts = {}) |
|
||||||
range = Args::CardRange.new(opts[:range], deck_size: size) |
|
||||||
sheet = Args::Sheet.new({ file: 'output.pdf' }).extract!(opts, self) |
|
||||||
sprue_file = Args::SprueFile.new.load!(opts, expand_by: size) |
|
||||||
|
|
||||||
if sprue_file.sprue.nil? |
|
||||||
Graphics::SavePDF.new(self).render_pdf(range, sheet) |
|
||||||
else |
|
||||||
tmpl = Sprue.load sprue_file.sprue, dpi |
|
||||||
Graphics::SaveSpruePDF. |
|
||||||
new(self, tmpl, sheet). |
|
||||||
render_sheet(range) |
|
||||||
end |
|
||||||
end |
|
||||||
|
|
||||||
# DSL method. See http://squib.readthedocs.io |
|
||||||
def save_png(opts = {}) |
|
||||||
range = Args::CardRange.new(opts[:range], deck_size: size) |
|
||||||
batch = Args::SaveBatch.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
@progress_bar.start("Saving PNGs to #{batch.summary}", size) do |bar| |
|
||||||
range.each do |i| |
|
||||||
@cards[i].save_png(batch[i]) |
|
||||||
bar.increment |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
||||||
|
|
||||||
# DSL method. See http://squib.readthedocs.io |
|
||||||
def save_sheet(opts = {}) |
|
||||||
range = Args::CardRange.new(opts[:range], deck_size: size) |
|
||||||
batch = Args::SaveBatch.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
sheet = Args::Sheet.new({ margin: 0 }).extract! opts, self |
|
||||||
sprue_file = Args::SprueFile.new.load!(opts, expand_by: size) |
|
||||||
|
|
||||||
if sprue_file.sprue.nil? |
|
||||||
render_sheet(range, batch, sheet) |
|
||||||
else |
|
||||||
tmpl = Sprue.load sprue_file.sprue, dpi |
|
||||||
Graphics::SaveSpruePNG. |
|
||||||
new(self, tmpl, sheet). |
|
||||||
render_sheet(range) |
|
||||||
end |
|
||||||
end |
|
||||||
|
|
||||||
# DSL method. See http://squib.readthedocs.io |
|
||||||
def hand(opts = {}) |
|
||||||
range = Args::CardRange.new(opts[:range], deck_size: size) |
|
||||||
hand = Args::HandSpecial.new(height).load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
sheet = Args::Sheet.new({ file: 'hand.png', trim_radius: 0 }).extract!(opts, self) |
|
||||||
render_hand(range, sheet, hand) |
|
||||||
end |
|
||||||
|
|
||||||
end |
|
||||||
end |
|
||||||
@ -0,0 +1,42 @@ |
|||||||
|
require_relative '../args/card_range' |
||||||
|
require_relative '../args/hand_special' |
||||||
|
require_relative '../args/sheet' |
||||||
|
require_relative '../errors_warnings/warn_unexpected_params' |
||||||
|
require_relative '../graphics/hand' |
||||||
|
|
||||||
|
module Squib |
||||||
|
class Deck |
||||||
|
def hand(opts = {}) |
||||||
|
DSL::Hand.new(self, __callee__).run(opts) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
module DSL |
||||||
|
class Hand |
||||||
|
include WarnUnexpectedParams |
||||||
|
attr_reader :dsl_method, :deck |
||||||
|
|
||||||
|
def initialize(deck, dsl_method) |
||||||
|
@deck = deck |
||||||
|
@dsl_method = dsl_method |
||||||
|
@bar = deck.progress_bar |
||||||
|
end |
||||||
|
|
||||||
|
def self.accepted_params |
||||||
|
%i( |
||||||
|
file dir range |
||||||
|
radius angle_range margin fill_color |
||||||
|
trim trim_radius |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
def run(opts) |
||||||
|
warn_if_unexpected opts |
||||||
|
range = Args.extract_range opts, deck |
||||||
|
sheet = Args.extract_sheet opts, deck, {file: 'hand.png'} |
||||||
|
hand = Args.extract_hand_special opts, deck |
||||||
|
deck.render_hand(range, sheet, hand) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
require 'rainbow/refinement' |
||||||
|
require_relative 'save_png' |
||||||
|
require_relative 'save_pdf' |
||||||
|
|
||||||
|
module Squib |
||||||
|
class Deck |
||||||
|
using Rainbow # we can colorize strings now! |
||||||
|
def save(opts = {}) |
||||||
|
fmts = Array(opts[:format]) |
||||||
|
warn 'Must specify format :png and/or :pdf' if fmts.empty? |
||||||
|
opts.delete :format # not needed anymore |
||||||
|
save_png(opts) if fmts.include? :png |
||||||
|
save_pdf(opts) if fmts.include? :pdf |
||||||
|
uns = fmts - [:pdf, :png ] |
||||||
|
unless uns.empty? |
||||||
|
warn "Unsupported format(s) #{uns} to #{'save'.cyan}()", uplevel: 1 |
||||||
|
end |
||||||
|
self |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,50 @@ |
|||||||
|
require_relative '../errors_warnings/warn_unexpected_params' |
||||||
|
require_relative '../graphics/save_pdf' |
||||||
|
require_relative '../graphics/save_sprue' |
||||||
|
|
||||||
|
|
||||||
|
module Squib |
||||||
|
class Deck |
||||||
|
def save_pdf(opts = {}) |
||||||
|
DSL::SavePDF.new(self, __callee__).run(opts) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
module DSL |
||||||
|
class SavePDF |
||||||
|
include WarnUnexpectedParams |
||||||
|
attr_reader :dsl_method, :deck |
||||||
|
|
||||||
|
def initialize(deck, dsl_method) |
||||||
|
@deck = deck |
||||||
|
@dsl_method = dsl_method |
||||||
|
@bar = deck.progress_bar |
||||||
|
end |
||||||
|
|
||||||
|
def self.accepted_params |
||||||
|
%i( |
||||||
|
file dir sprue |
||||||
|
width height margin gap |
||||||
|
crop_marks crop_stroke_color crop_stroke_dash crop_stroke_width |
||||||
|
crop_margin_bottom crop_margin_left crop_margin_right crop_margin_top |
||||||
|
rtl trim trim_radius |
||||||
|
range |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
def run(opts) |
||||||
|
warn_if_unexpected opts |
||||||
|
range = Args.extract_range opts, deck |
||||||
|
sheet = Args.extract_sheet opts, deck |
||||||
|
sprue_file = Args.extract_sprue_file opts, deck |
||||||
|
if sprue_file.sprue.nil? |
||||||
|
Graphics::SavePDF.new(deck).render_pdf(range, sheet) |
||||||
|
else |
||||||
|
tmpl = Sprue.load sprue_file.sprue, deck.dpi |
||||||
|
Graphics::SaveSpruePDF.new(deck, tmpl, sheet).render_sheet(range) |
||||||
|
end |
||||||
|
|
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,46 @@ |
|||||||
|
require_relative '../errors_warnings/warn_unexpected_params' |
||||||
|
|
||||||
|
|
||||||
|
module Squib |
||||||
|
class Deck |
||||||
|
def save_png(opts = {}) |
||||||
|
DSL::SavePNG.new(self, __callee__).run(opts) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
module DSL |
||||||
|
class SavePNG |
||||||
|
include WarnUnexpectedParams |
||||||
|
attr_reader :dsl_method, :deck |
||||||
|
|
||||||
|
def initialize(deck, dsl_method) |
||||||
|
@deck = deck |
||||||
|
@dsl_method = dsl_method |
||||||
|
@bar = deck.progress_bar |
||||||
|
end |
||||||
|
|
||||||
|
def self.accepted_params |
||||||
|
%i( |
||||||
|
range |
||||||
|
dir prefix count_format |
||||||
|
rotate trim trim_radius |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
def run(opts) |
||||||
|
warn_if_unexpected opts |
||||||
|
Dir.chdir(deck.img_dir) do |
||||||
|
range = Args.extract_range opts, deck |
||||||
|
batch = Args.extract_save_batch opts, deck |
||||||
|
@bar.start("Saving PNGs to #{batch.summary}", deck.size) do |bar| |
||||||
|
range.each do |i| |
||||||
|
deck.cards[i].save_png(batch[i]) |
||||||
|
bar.increment |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
require_relative '../args/card_range' |
||||||
|
require_relative '../args/save_batch' |
||||||
|
require_relative '../args/sheet' |
||||||
|
require_relative '../args/sprue_file' |
||||||
|
require_relative '../errors_warnings/warn_unexpected_params' |
||||||
|
require_relative '../graphics/save_doc' |
||||||
|
require_relative '../graphics/save_sprue' |
||||||
|
require_relative '../sprues/sprue' |
||||||
|
|
||||||
|
|
||||||
|
module Squib |
||||||
|
class Deck |
||||||
|
def save_sheet(opts = {}) |
||||||
|
DSL::SaveSheet.new(self, __callee__).run(opts) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
module DSL |
||||||
|
class SaveSheet |
||||||
|
include WarnUnexpectedParams |
||||||
|
attr_reader :dsl_method, :deck |
||||||
|
|
||||||
|
def initialize(deck, dsl_method) |
||||||
|
@deck = deck |
||||||
|
@dsl_method = dsl_method |
||||||
|
end |
||||||
|
|
||||||
|
def self.accepted_params |
||||||
|
%i( |
||||||
|
range sprue |
||||||
|
columns rows rtl |
||||||
|
prefix count_format dir |
||||||
|
margin gap trim trim_radius |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
def run(opts) |
||||||
|
warn_if_unexpected opts |
||||||
|
range = Args.extract_range opts, deck |
||||||
|
batch = Args.extract_save_batch opts, deck |
||||||
|
sheet = Args.extract_sheet opts, deck, { margin: 0 } |
||||||
|
sprue_file = Args.extract_sprue_file opts, deck |
||||||
|
if sprue_file.sprue.nil? |
||||||
|
deck.render_sheet(range, batch, sheet) |
||||||
|
else |
||||||
|
tmpl = Sprue.load sprue_file.sprue, deck.dpi |
||||||
|
Graphics::SaveSpruePNG.new(deck, tmpl, sheet).render_sheet(range) |
||||||
|
end |
||||||
|
|
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
require 'spec_helper' |
||||||
|
|
||||||
|
describe Squib::DSL do |
||||||
|
let(:deck) { Squib::Deck.new } |
||||||
|
|
||||||
|
Squib::DSL.constants.each do |m| |
||||||
|
it "method #{m} calls warn_if_unexpected" do |
||||||
|
method_obj = Squib::DSL.const_get(m).new(deck, m) |
||||||
|
expect(method_obj).to receive(:warn_if_unexpected).and_throw(:warned) |
||||||
|
catch :warned do |
||||||
|
method_obj.run({}) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
it "method #{m} has dsl_method and deck defined" do |
||||||
|
method_obj = Squib::DSL.const_get(m).new(deck, m) |
||||||
|
expect(method_obj).to have_attributes({deck: deck, dsl_method: m}) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
end |
||||||
@ -0,0 +1,7 @@ |
|||||||
|
require 'spec_helper' |
||||||
|
|
||||||
|
describe Squib do |
||||||
|
|
||||||
|
it 'has a sample exercising every expected option' |
||||||
|
|
||||||
|
end |
||||||
@ -0,0 +1,32 @@ |
|||||||
|
require 'squib/deck' |
||||||
|
require 'spec_helper' |
||||||
|
|
||||||
|
describe Squib::Deck do |
||||||
|
let(:deck) { Squib::Deck.new } |
||||||
|
|
||||||
|
context '#save' do |
||||||
|
it 'delegates to both based on format options: :pdf, :png' do |
||||||
|
expect(deck).to receive(:save_png).once.with({ prefix: 'foo' }) |
||||||
|
expect(deck).to receive(:save_pdf).once.with({ prefix: 'foo' }) |
||||||
|
deck.save format: [:png, :pdf], prefix: 'foo' |
||||||
|
end |
||||||
|
|
||||||
|
it 'delegates to just pdf based on format options: :pdf' do |
||||||
|
expect(deck).to receive(:save_pdf).once.with({ prefix: 'foo' }) |
||||||
|
deck.save format: :pdf, prefix: 'foo' |
||||||
|
end |
||||||
|
|
||||||
|
it 'delegates to just png based on format options: :png' do |
||||||
|
expect(deck).to receive(:save_png).once.with({ prefix: 'foo' }) |
||||||
|
deck.save format: :png, prefix: 'foo' |
||||||
|
end |
||||||
|
|
||||||
|
it 'warns on :svg' do |
||||||
|
expect(deck).to receive(:save_png).once.with({ prefix: 'foo' }) |
||||||
|
expect(deck).to receive(:save_pdf).once.with({ prefix: 'foo' }) |
||||||
|
expect(deck).to receive(:warn).once |
||||||
|
deck.save format: [:png, :svg, :pdf], prefix: 'foo' |
||||||
|
end |
||||||
|
|
||||||
|
end |
||||||
|
end |
||||||
Loading…
Reference in new issue