Browse Source

converting a bunch over now, new rspec tests

dev
Andy Meneely 6 years ago
parent
commit
4b664d2061
  1. 8
      Guardfile
  2. 2
      docs/dsl/save_pdf.rst
  3. 8
      docs/dsl/save_png.rst
  4. 75
      lib/squib/api/save.rb
  5. 2
      lib/squib/args/coords.rb
  6. 3
      lib/squib/args/hand_special.rb
  7. 4
      lib/squib/args/save_batch.rb
  8. 3
      lib/squib/args/sprue_file.rb
  9. 9
      lib/squib/args/unit_conversion.rb
  10. 6
      lib/squib/deck.rb
  11. 42
      lib/squib/dsl/hand.rb
  12. 21
      lib/squib/dsl/save.rb
  13. 50
      lib/squib/dsl/save_pdf.rb
  14. 46
      lib/squib/dsl/save_png.rb
  15. 53
      lib/squib/dsl/save_sheet.rb
  16. 21
      spec/dsl/consistent_dsl_methods.rb
  17. 7
      spec/dsl/sample_param_coverage_spec.rb
  18. 32
      spec/dsl/save_spec.rb
  19. 1
      spec/spec_helper.rb
  20. 2
      squib.gemspec

8
Guardfile

@ -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

2
docs/dsl/save_pdf.rst

@ -100,5 +100,7 @@ rtl
whether to render columns right to left, used for duplex printing of card backs
.. include:: /args/range.rst
Examples
--------

8
docs/dsl/save_png.rst

@ -6,12 +6,6 @@ Saves the given range of cards to a PNG
Options
-------
range
default ``:all``
the range of cards over which this will be rendered. See {file:README.md#Specifying_Ranges Specifying Ranges}
dir
default: ``'_output'``
@ -42,5 +36,7 @@ trim_radius
the rounded rectangle radius around the card to trim before saving.
.. include:: /args/range.rst
Examples
--------

75
lib/squib/api/save.rb

@ -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
lib/squib/args/coords.rb

@ -2,7 +2,7 @@ require_relative 'arg_loader'
module Squib::Args
module_function def extract_coord(opts, deck)
Box.new.extract!(opts, deck)
Coords.new.extract!(opts, deck)
end
class Coords

3
lib/squib/args/hand_special.rb

@ -1,6 +1,9 @@
require 'cairo'
module Squib::Args
module_function def extract_hand_special(opts, deck)
HandSpecial.new(deck.height).extract! opts, deck
end
class HandSpecial
include ArgLoader

4
lib/squib/args/save_batch.rb

@ -2,6 +2,10 @@ require_relative 'arg_loader'
require_relative 'dir_validator'
module Squib::Args
module_function def extract_save_batch(opts, deck)
SaveBatch.new.extract! opts, deck
end
class SaveBatch
include ArgLoader
include DirValidator

3
lib/squib/args/sprue_file.rb

@ -1,6 +1,9 @@
require_relative 'arg_loader'
module Squib::Args
module_function def extract_sprue_file(opts, deck, dsl_method_default = {})
SprueFile.new.extract! opts, deck
end
class SprueFile
include ArgLoader

9
lib/squib/args/unit_conversion.rb

@ -2,14 +2,8 @@ require_relative '../constants'
module Squib
module Args
# :nodoc:
# @api private
module UnitConversion
# :nodoc:
# @api private
module_function
def parse(arg, dpi=300)
module_function def parse(arg, dpi=300)
case arg.to_s.rstrip
when /in$/ # ends with "in"
arg.rstrip[0..-2].to_f * dpi
@ -23,7 +17,6 @@ module Squib
arg
end
end
end
end
end

6
lib/squib/deck.rb

@ -105,7 +105,6 @@ module Squib
require_relative 'dsl/background'
require_relative 'api/data'
require_relative 'api/groups'
require_relative 'api/save'
require_relative 'api/settings'
require_relative 'api/shapes'
require_relative 'api/text'
@ -116,7 +115,12 @@ module Squib
###################
require_relative 'dsl/background'
require_relative 'dsl/grid'
require_relative 'dsl/hand'
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/svg'

42
lib/squib/dsl/hand.rb

@ -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

21
lib/squib/dsl/save.rb

@ -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

50
lib/squib/dsl/save_pdf.rb

@ -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

46
lib/squib/dsl/save_png.rb

@ -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

53
lib/squib/dsl/save_sheet.rb

@ -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

21
spec/dsl/consistent_dsl_methods.rb

@ -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

7
spec/dsl/sample_param_coverage_spec.rb

@ -0,0 +1,7 @@
require 'spec_helper'
describe Squib do
it 'has a sample exercising every expected option'
end

32
spec/dsl/save_spec.rb

@ -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

1
spec/spec_helper.rb

@ -9,6 +9,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
SimpleCov.start
require 'squib'
require 'rainbow/refinement'
RSpec.configure do |config|
config.mock_with :rspec do |mocks|

2
squib.gemspec

@ -45,6 +45,8 @@ Gem::Specification.new do |spec|
spec.add_development_dependency 'activesupport'
spec.add_development_dependency 'bundler'
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 'launchy'
spec.add_development_dependency 'rake'

Loading…
Cancel
Save