converting a bunch over now, new rspec tests
parent
21bee3a3cb
commit
4b664d2061
|
|
@ -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
|
||||||
|
|
@ -100,5 +100,7 @@ rtl
|
||||||
|
|
||||||
whether to render columns right to left, used for duplex printing of card backs
|
whether to render columns right to left, used for duplex printing of card backs
|
||||||
|
|
||||||
|
.. include:: /args/range.rst
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,6 @@ Saves the given range of cards to a PNG
|
||||||
Options
|
Options
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
|
||||||
range
|
|
||||||
default ``:all``
|
|
||||||
|
|
||||||
the range of cards over which this will be rendered. See {file:README.md#Specifying_Ranges Specifying Ranges}
|
|
||||||
|
|
||||||
dir
|
dir
|
||||||
default: ``'_output'``
|
default: ``'_output'``
|
||||||
|
|
||||||
|
|
@ -42,5 +36,7 @@ trim_radius
|
||||||
|
|
||||||
the rounded rectangle radius around the card to trim before saving.
|
the rounded rectangle radius around the card to trim before saving.
|
||||||
|
|
||||||
|
.. include:: /args/range.rst
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -2,7 +2,7 @@ require_relative 'arg_loader'
|
||||||
|
|
||||||
module Squib::Args
|
module Squib::Args
|
||||||
module_function def extract_coord(opts, deck)
|
module_function def extract_coord(opts, deck)
|
||||||
Box.new.extract!(opts, deck)
|
Coords.new.extract!(opts, deck)
|
||||||
end
|
end
|
||||||
|
|
||||||
class Coords
|
class Coords
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
require 'cairo'
|
require 'cairo'
|
||||||
|
|
||||||
module Squib::Args
|
module Squib::Args
|
||||||
|
module_function def extract_hand_special(opts, deck)
|
||||||
|
HandSpecial.new(deck.height).extract! opts, deck
|
||||||
|
end
|
||||||
|
|
||||||
class HandSpecial
|
class HandSpecial
|
||||||
include ArgLoader
|
include ArgLoader
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,10 @@ require_relative 'arg_loader'
|
||||||
require_relative 'dir_validator'
|
require_relative 'dir_validator'
|
||||||
|
|
||||||
module Squib::Args
|
module Squib::Args
|
||||||
|
module_function def extract_save_batch(opts, deck)
|
||||||
|
SaveBatch.new.extract! opts, deck
|
||||||
|
end
|
||||||
|
|
||||||
class SaveBatch
|
class SaveBatch
|
||||||
include ArgLoader
|
include ArgLoader
|
||||||
include DirValidator
|
include DirValidator
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
require_relative 'arg_loader'
|
require_relative 'arg_loader'
|
||||||
|
|
||||||
module Squib::Args
|
module Squib::Args
|
||||||
|
module_function def extract_sprue_file(opts, deck, dsl_method_default = {})
|
||||||
|
SprueFile.new.extract! opts, deck
|
||||||
|
end
|
||||||
class SprueFile
|
class SprueFile
|
||||||
include ArgLoader
|
include ArgLoader
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,8 @@ require_relative '../constants'
|
||||||
|
|
||||||
module Squib
|
module Squib
|
||||||
module Args
|
module Args
|
||||||
# :nodoc:
|
|
||||||
# @api private
|
|
||||||
module UnitConversion
|
module UnitConversion
|
||||||
|
module_function def parse(arg, dpi=300)
|
||||||
# :nodoc:
|
|
||||||
# @api private
|
|
||||||
module_function
|
|
||||||
def parse(arg, dpi=300)
|
|
||||||
case arg.to_s.rstrip
|
case arg.to_s.rstrip
|
||||||
when /in$/ # ends with "in"
|
when /in$/ # ends with "in"
|
||||||
arg.rstrip[0..-2].to_f * dpi
|
arg.rstrip[0..-2].to_f * dpi
|
||||||
|
|
@ -23,7 +17,6 @@ module Squib
|
||||||
arg
|
arg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,6 @@ module Squib
|
||||||
require_relative 'dsl/background'
|
require_relative 'dsl/background'
|
||||||
require_relative 'api/data'
|
require_relative 'api/data'
|
||||||
require_relative 'api/groups'
|
require_relative 'api/groups'
|
||||||
require_relative 'api/save'
|
|
||||||
require_relative 'api/settings'
|
require_relative 'api/settings'
|
||||||
require_relative 'api/shapes'
|
require_relative 'api/shapes'
|
||||||
require_relative 'api/text'
|
require_relative 'api/text'
|
||||||
|
|
@ -116,7 +115,12 @@ module Squib
|
||||||
###################
|
###################
|
||||||
require_relative 'dsl/background'
|
require_relative 'dsl/background'
|
||||||
require_relative 'dsl/grid'
|
require_relative 'dsl/grid'
|
||||||
|
require_relative 'dsl/hand'
|
||||||
require_relative 'dsl/png'
|
require_relative 'dsl/png'
|
||||||
|
require_relative 'dsl/save_pdf'
|
||||||
|
require_relative 'dsl/save_png'
|
||||||
|
require_relative 'dsl/save_sheet'
|
||||||
|
require_relative 'dsl/save'
|
||||||
require_relative 'dsl/showcase'
|
require_relative 'dsl/showcase'
|
||||||
require_relative 'dsl/svg'
|
require_relative 'dsl/svg'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -9,6 +9,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
|
||||||
SimpleCov.start
|
SimpleCov.start
|
||||||
|
|
||||||
require 'squib'
|
require 'squib'
|
||||||
|
require 'rainbow/refinement'
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.mock_with :rspec do |mocks|
|
config.mock_with :rspec do |mocks|
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,8 @@ Gem::Specification.new do |spec|
|
||||||
spec.add_development_dependency 'activesupport'
|
spec.add_development_dependency 'activesupport'
|
||||||
spec.add_development_dependency 'bundler'
|
spec.add_development_dependency 'bundler'
|
||||||
spec.add_development_dependency 'coveralls', '>= 0.8.21'
|
spec.add_development_dependency 'coveralls', '>= 0.8.21'
|
||||||
|
spec.add_development_dependency 'guard'
|
||||||
|
spec.add_development_dependency 'guard-rake'
|
||||||
spec.add_development_dependency 'game_icons'
|
spec.add_development_dependency 'game_icons'
|
||||||
spec.add_development_dependency 'launchy'
|
spec.add_development_dependency 'launchy'
|
||||||
spec.add_development_dependency 'rake'
|
spec.add_development_dependency 'rake'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue