cleaner method sigs
parent
76ef45cfa4
commit
70b3c0b136
|
|
@ -2,8 +2,7 @@ require_relative 'arg_loader'
|
||||||
|
|
||||||
module Squib::Args
|
module Squib::Args
|
||||||
|
|
||||||
module_function
|
module_function def extract_box(opts, deck, dsl_method_defaults = {})
|
||||||
def extract_box(opts, deck, dsl_method_defaults = {})
|
|
||||||
Box.new(deck, dsl_method_defaults).extract!(opts, deck)
|
Box.new(deck, dsl_method_defaults).extract!(opts, deck)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,34 @@
|
||||||
module Squib
|
module Squib::Args
|
||||||
# @api private
|
|
||||||
module Args
|
|
||||||
class CardRange
|
|
||||||
include Enumerable
|
|
||||||
|
|
||||||
def initialize(input, deck_size: 1)
|
module_function def extract_range(opts, deck)
|
||||||
@range = validate(input, deck_size)
|
CardRange.new(opts[:range], deck_size: deck.size)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Hook into enumerable by delegating to @range
|
class CardRange
|
||||||
def each(&block)
|
include Enumerable
|
||||||
@range.each { |i| block.call(i) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def size
|
|
||||||
@range.size
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def validate(input, deck_size)
|
|
||||||
input ||= :all # default
|
|
||||||
input = 0..(deck_size - 1) if input == :all
|
|
||||||
input = (input.to_i)..(input.to_i) if input.respond_to? :to_i
|
|
||||||
raise ArgumentError.new("#{input} must be Enumerable (i.e. respond_to :each).") unless input.respond_to? :each
|
|
||||||
raise ArgumentError.new("#{input} is outside of deck range of 0..#{deck_size - 1}") if (!input.max.nil?) && (input.max > (deck_size - 1))
|
|
||||||
input
|
|
||||||
end
|
|
||||||
|
|
||||||
|
def initialize(input, deck_size: 1)
|
||||||
|
@range = validate(input, deck_size)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Hook into enumerable by delegating to @range
|
||||||
|
def each(&block)
|
||||||
|
@range.each { |i| block.call(i) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def size
|
||||||
|
@range.size
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def validate(input, deck_size)
|
||||||
|
input ||= :all # default
|
||||||
|
input = 0..(deck_size - 1) if input == :all
|
||||||
|
input = (input.to_i)..(input.to_i) if input.respond_to? :to_i
|
||||||
|
raise ArgumentError.new("#{input} must be Enumerable (i.e. respond_to :each).") unless input.respond_to? :each
|
||||||
|
raise ArgumentError.new("#{input} is outside of deck range of 0..#{deck_size - 1}") if (!input.max.nil?) && (input.max > (deck_size - 1))
|
||||||
|
input
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -2,91 +2,92 @@ require 'cairo'
|
||||||
require_relative 'arg_loader'
|
require_relative 'arg_loader'
|
||||||
require_relative 'color_validator'
|
require_relative 'color_validator'
|
||||||
|
|
||||||
module Squib
|
module Squib::Args
|
||||||
# @api private
|
|
||||||
module Args
|
|
||||||
|
|
||||||
class Draw
|
module_function def extract_draw(opts, deck, dsl_method_defaults = {})
|
||||||
include ArgLoader
|
Draw.new(deck.custom_colors, dsl_method_defaults).extract!(opts, deck)
|
||||||
include ColorValidator
|
end
|
||||||
|
|
||||||
def initialize(custom_colors, dsl_method_defaults = {})
|
class Draw
|
||||||
@custom_colors = custom_colors
|
include ArgLoader
|
||||||
@dsl_method_defaults = dsl_method_defaults
|
include ColorValidator
|
||||||
|
|
||||||
|
def initialize(custom_colors, dsl_method_defaults = {})
|
||||||
|
@custom_colors = custom_colors
|
||||||
|
@dsl_method_defaults = dsl_method_defaults
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.parameters
|
||||||
|
{ color: :black,
|
||||||
|
fill_color: '#0000',
|
||||||
|
stroke_color: :black,
|
||||||
|
stroke_width: 2.0,
|
||||||
|
stroke_strategy: :fill_first,
|
||||||
|
join: :miter,
|
||||||
|
cap: 'butt',
|
||||||
|
dash: ''
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.expanding_parameters
|
||||||
|
parameters.keys # all of them are expandable
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.params_with_units
|
||||||
|
[:stroke_width]
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_join(arg, _i)
|
||||||
|
case arg.to_s.strip.downcase
|
||||||
|
when 'miter'
|
||||||
|
Cairo::LINE_JOIN_MITER
|
||||||
|
when 'round'
|
||||||
|
Cairo::LINE_JOIN_ROUND
|
||||||
|
when 'bevel'
|
||||||
|
Cairo::LINE_JOIN_BEVEL
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.parameters
|
def validate_cap(arg, _i)
|
||||||
{ color: :black,
|
case arg.to_s.strip.downcase
|
||||||
fill_color: '#0000',
|
when 'butt'
|
||||||
stroke_color: :black,
|
Cairo::LINE_CAP_BUTT
|
||||||
stroke_width: 2.0,
|
when 'round'
|
||||||
stroke_strategy: :fill_first,
|
Cairo::LINE_CAP_ROUND
|
||||||
join: :miter,
|
when 'square'
|
||||||
cap: 'butt',
|
Cairo::LINE_CAP_SQUARE
|
||||||
dash: ''
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.expanding_parameters
|
def validate_dash(arg, _i)
|
||||||
parameters.keys # all of them are expandable
|
arg.to_s.split.collect do |x|
|
||||||
|
UnitConversion.parse(x, @dpi).to_f
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.params_with_units
|
def validate_fill_color(arg, _i)
|
||||||
[:stroke_width]
|
colorify(arg, @custom_colors)
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_stroke_color(arg, _i)
|
||||||
|
colorify(arg, @custom_colors)
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_color(arg, _i)
|
||||||
|
colorify(arg, @custom_colors)
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_stroke_strategy(arg, _i)
|
||||||
|
case arg.to_s.downcase.strip
|
||||||
|
when 'fill_first'
|
||||||
|
:fill_first
|
||||||
|
when 'stroke_first'
|
||||||
|
:stroke_first
|
||||||
|
else
|
||||||
|
raise "Only 'stroke_first' or 'fill_first' allowed"
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_join(arg, _i)
|
|
||||||
case arg.to_s.strip.downcase
|
|
||||||
when 'miter'
|
|
||||||
Cairo::LINE_JOIN_MITER
|
|
||||||
when 'round'
|
|
||||||
Cairo::LINE_JOIN_ROUND
|
|
||||||
when 'bevel'
|
|
||||||
Cairo::LINE_JOIN_BEVEL
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_cap(arg, _i)
|
|
||||||
case arg.to_s.strip.downcase
|
|
||||||
when 'butt'
|
|
||||||
Cairo::LINE_CAP_BUTT
|
|
||||||
when 'round'
|
|
||||||
Cairo::LINE_CAP_ROUND
|
|
||||||
when 'square'
|
|
||||||
Cairo::LINE_CAP_SQUARE
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_dash(arg, _i)
|
|
||||||
arg.to_s.split.collect do |x|
|
|
||||||
UnitConversion.parse(x, @dpi).to_f
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_fill_color(arg, _i)
|
|
||||||
colorify(arg, @custom_colors)
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_stroke_color(arg, _i)
|
|
||||||
colorify(arg, @custom_colors)
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_color(arg, _i)
|
|
||||||
colorify(arg, @custom_colors)
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_stroke_strategy(arg, _i)
|
|
||||||
case arg.to_s.downcase.strip
|
|
||||||
when 'fill_first'
|
|
||||||
:fill_first
|
|
||||||
when 'stroke_first'
|
|
||||||
:stroke_first
|
|
||||||
else
|
|
||||||
raise "Only 'stroke_first' or 'fill_first' allowed"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@ module Squib
|
||||||
|
|
||||||
def run(opts)
|
def run(opts)
|
||||||
warn_if_unexpected opts
|
warn_if_unexpected opts
|
||||||
range = Args::CardRange.new(opts[:range], deck_size: deck.size)
|
range = Args.extract_range opts, deck
|
||||||
draw = Args::Draw.new(@deck.custom_colors).extract!(opts, deck)
|
draw = Args.extract_draw opts, deck
|
||||||
range.each { |i| @deck.cards[i].background(draw.color[i]) }
|
range.each { |i| @deck.cards[i].background(draw.color[i]) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,9 @@ module Squib
|
||||||
|
|
||||||
def run(opts)
|
def run(opts)
|
||||||
warn_if_unexpected opts
|
warn_if_unexpected opts
|
||||||
range = Args::CardRange.new(opts[:range], deck_size: deck.size)
|
range = Args.extract_range opts, deck
|
||||||
draw = Args::Draw.new(@deck.custom_colors).extract!(opts, deck)
|
draw = Args.extract_draw opts, deck
|
||||||
box = Args.extract_box(opts, deck)
|
box = Args.extract_box opts, deck
|
||||||
range.each { |i| deck.cards[i].grid(box[i], draw[i]) }
|
range.each { |i| deck.cards[i].grid(box[i], draw[i]) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue