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 whether to render columns right to left, used for duplex printing of card backs
.. include:: /args/range.rst
Examples Examples
-------- --------

8
docs/dsl/save_png.rst

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

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

3
lib/squib/args/hand_special.rb

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

4
lib/squib/args/save_batch.rb

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

3
lib/squib/args/sprue_file.rb

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

9
lib/squib/args/unit_conversion.rb

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

6
lib/squib/deck.rb

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

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

2
squib.gemspec

@ -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…
Cancel
Save