Args refactoring: combine polygon, tri, and bezier args into coords

As a rule, I think it's better to group args classes together have some extra overhead of extracting unused parameters. For example, we don't *need* to extract "n" for the circle, but the ease of having logically grouped classes is better than having tons of different classes tailored to each command.
dev
Andy Meneely 2015-06-16 21:14:43 -04:00
parent b5903293d7
commit c931a860a1
4 changed files with 24 additions and 75 deletions

View File

@ -1,10 +1,8 @@
require 'squib/args/box' require 'squib/args/box'
require 'squib/args/draw' require 'squib/args/draw'
require 'squib/args/card_range' require 'squib/args/card_range'
require 'squib/args/tri'
require 'squib/args/bezier'
require 'squib/args/polygon'
require 'squib/args/transform' require 'squib/args/transform'
require 'squib/args/coords'
module Squib module Squib
class Deck class Deck
@ -59,10 +57,9 @@ module Squib
# @api public # @api public
def circle(opts = {}) def circle(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
opts = {radius: 100}.merge(opts) # overriding the non-system default coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
box = Args::Box.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].circle(box[i], draw[i]) } range.each { |i| @cards[i].circle(coords[i], draw[i]) }
end end
# Draw an ellipse # Draw an ellipse
@ -115,8 +112,8 @@ module Squib
def triangle(opts = {}) def triangle(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
tri = Args::Tri.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].triangle(tri[i], draw[i]) } range.each { |i| @cards[i].triangle(coords[i], draw[i]) }
end end
# Draw a line using the given coordinates # Draw a line using the given coordinates
@ -139,8 +136,8 @@ module Squib
def line(opts = {}) def line(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
bezier = Args::Bezier.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].line(bezier[i], draw[i]) } range.each { |i| @cards[i].line(coords[i], draw[i]) }
end end
# Draw a curve using the given coordinates # Draw a curve using the given coordinates
@ -165,8 +162,8 @@ module Squib
def curve(opts = {}) def curve(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
bezier = Args::Bezier.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].curve(bezier[i], draw[i]) } range.each { |i| @cards[i].curve(coords[i], draw[i]) }
end end
# Draw a star at the given x,y # Draw a star at the given x,y
@ -190,9 +187,9 @@ module Squib
def star(opts = {}) def star(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
poly = Args::Polygon.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].star(poly[i], trans[i], draw[i]) } range.each { |i| @cards[i].star(coords[i], trans[i], draw[i]) }
end end
# Draw a regular polygon at the given x,y # Draw a regular polygon at the given x,y
@ -216,9 +213,9 @@ module Squib
def polygon(opts = {}) def polygon(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size) range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
poly = Args::Polygon.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].polygon(poly[i], trans[i], draw[i]) } range.each { |i| @cards[i].polygon(coords[i], trans[i], draw[i]) }
end end
end end

View File

@ -4,14 +4,19 @@ module Squib
# @api private # @api private
module Args module Args
class Bezier class Coords
include ArgLoader include ArgLoader
def self.parameters def self.parameters
{ x1: 100, y1: 100, { x: 0, y: 0,
cx1: 0 , cy1: 0, x1: 100, y1: 100,
x2: 150, y2: 150, x2: 150, y2: 150,
cx2: 0 , cy2: 0} x3: 100, y3: 150,
cx1: 0 , cy1: 0,
cx2: 0 , cy2: 0,
inner_radius: 50, outer_radius: 100,
radius: 100,
n: 5, }
end end
def self.expanding_parameters def self.expanding_parameters

View File

@ -1,26 +0,0 @@
require 'squib/args/arg_loader'
module Squib
# @api private
module Args
class Polygon
include ArgLoader
def self.parameters
{ x: 0, y: 0, n: 5,
radius: 100, inner_radius: 50, outer_radius: 100}
end
def self.expanding_parameters
parameters.keys # all of them
end
def self.params_with_units
parameters.keys # all of them
end
end
end
end

View File

@ -1,27 +0,0 @@
require 'squib/args/arg_loader'
module Squib
# @api private
module Args
class Tri
include ArgLoader
def self.parameters
{ x1: 100, y1: 100,
x2: 150, y2: 150,
x3: 100, y3: 150 }
end
def self.expanding_parameters
parameters.keys # all of them
end
def self.params_with_units
parameters.keys # all of them
end
end
end
end