lib/squib/deck.rb in squib-0.6.0 vs lib/squib/deck.rb in squib-0.7.0

- old
+ new

@@ -1,111 +1,113 @@ -require 'yaml' -require 'pp' -require 'forwardable' -require 'squib' -require 'squib/card' -require 'squib/progress' -require 'squib/input_helpers' -require 'squib/constants' -require 'squib/layout_parser' -require 'squib/args/unit_conversion' -require 'squib/conf' -require 'squib/graphics/showcase' -require 'squib/graphics/hand' - -# The project module -# -# @api public -module Squib - - # The main interface to Squib. Provides a front-end porcelain whereas the Card class interacts with the graphics plumbing. - # - # @api public - class Deck - include Enumerable - include Squib::InputHelpers - extend Forwardable - - # Attributes for the width, height (in pixels) and number of cards - # These are expected to be immuatble for the life of Deck - # @api private - attr_reader :width, :height, :cards - - # Delegate these configuration options to the Squib::Conf object - def_delegators :conf, :antialias, :backend, :count_format, :custom_colors, :dir, - :img_dir, :prefix, :text_hint, :typographer - # :nodoc: - # @api private - attr_reader :layout, :conf - - # Squib's constructor that sets the immutable properties. - # - # This is the starting point for Squib. In providing a block to the constructor, you have access to all of Deck's instance methods. - # The documented methods in Deck are the ones intended for use by most users. - # If your game requires multiple different sizes or orientations, I recommend using multiple `Squib::Deck`s in your `deck.rb`. You can modify the internals of `Squib::Deck` (e.g. `@cards`), but that's not recommended. - # @example - # require 'squib' - # Squib::Deck.new do - # text str: 'Hello, World!" - # end - # - # @param width [Integer] the width of each card in pixels. Supports unit conversion (e.g. '2.5in'). - # @param height [Integer] the height of each card in pixels. Supports unit conversion (e.g. '3.5in'). - # @param cards [Integer] the number of cards in the deck - # @param dpi [Integer] the pixels per inch when rendering out to PDF or calculating using inches. - # @param config [String] the file used for global settings of this deck - # @param layout [String, Array] load a YML file of custom layouts. Multiple files are merged sequentially, redefining collisons. See README and sample for details. - # @param block [Block] the main body of the script. - # @api public - def initialize(width: 825, height: 1125, cards: 1, dpi: 300, config: 'config.yml', layout: nil, &block) - @dpi = dpi - @font = SYSTEM_DEFAULTS[:default_font] - @cards = [] - @conf = Conf.load(config) - @progress_bar = Progress.new(@conf.progress_bars) # FIXME this is evil. Using something different with @ and non-@ - show_info(config, layout) - @width = Args::UnitConversion.parse width, dpi - @height = Args::UnitConversion.parse height, dpi - cards.times{ |i| @cards << Squib::Card.new(self, @width, @height, i) } - @layout = LayoutParser.load_layout(layout) - if block_given? - instance_eval(&block) # here we go. wheeeee! - end - end - - # Directly accesses the array of cards in the deck - # - # @api private - def [](key) - @cards[key] - end - - # Iterates over each card in the deck - # - # @api private - def each(&block) - @cards.each { |card| block.call(card) } - end - - # Use Logger to show more detail on the run - # :nodoc: - # @api private - def show_info(config, layout) - Squib::logger.info "Squib v#{Squib::VERSION}" - Squib::logger.info " building #{@cards.size} #{@width}x#{@height} cards" - Squib::logger.info " using #{@backend}" - end - - ################## - ### PUBLIC API ### - ################## - require 'squib/api/background' - require 'squib/api/data' - require 'squib/api/image' - require 'squib/api/save' - require 'squib/api/settings' - require 'squib/api/shapes' - require 'squib/api/text' - require 'squib/api/units' - - end -end +require 'forwardable' +require 'pp' +require 'squib' +require 'squib/args/unit_conversion' +require 'squib/card' +require 'squib/conf' +require 'squib/constants' +require 'squib/graphics/hand' +require 'squib/graphics/showcase' +require 'squib/layout_parser' +require 'squib/progress' + + +# The project module +# +# @api public +module Squib + + # The main interface to Squib. Provides a front-end porcelain whereas the Card class interacts with the graphics plumbing. + # + # @api public + class Deck + include Enumerable + extend Forwardable + + # Attributes for the width, height (in pixels) and number of cards + # These are expected to be immuatble for the life of Deck + # @api private + attr_reader :width, :height, :cards + + # Delegate these configuration options to the Squib::Conf object + def_delegators :conf, :antialias, :backend, :count_format, :custom_colors, :dir, + :img_dir, :prefix, :text_hint, :typographer + # :nodoc: + # @api private + attr_reader :layout, :conf, :dpi, :font + + # + # deck.size is really just @cards.size + def_delegators :cards, :size + + # Squib's constructor that sets the immutable properties. + # + # This is the starting point for Squib. In providing a block to the constructor, you have access to all of Deck's instance methods. + # The documented methods in Deck are the ones intended for use by most users. + # If your game requires multiple different sizes or orientations, I recommend using multiple `Squib::Deck`s in your `deck.rb`. You can modify the internals of `Squib::Deck` (e.g. `@cards`), but that's not recommended. + # @example + # require 'squib' + # Squib::Deck.new do + # text str: 'Hello, World!" + # end + # + # @param width [Integer] the width of each card in pixels. Supports unit conversion (e.g. '2.5in'). + # @param height [Integer] the height of each card in pixels. Supports unit conversion (e.g. '3.5in'). + # @param cards [Integer] the number of cards in the deck + # @param dpi [Integer] the pixels per inch when rendering out to PDF or calculating using inches. + # @param config [String] the file used for global settings of this deck + # @param layout [String, Array] load a YML file of custom layouts. Multiple files are merged sequentially, redefining collisons. See README and sample for details. + # @param block [Block] the main body of the script. + # @api public + def initialize(width: 825, height: 1125, cards: 1, dpi: 300, config: 'config.yml', layout: nil, &block) + @dpi = dpi + @font = SYSTEM_DEFAULTS[:default_font] + @cards = [] + @conf = Conf.load(config) + @progress_bar = Progress.new(@conf.progress_bars) # FIXME this is evil. Using something different with @ and non-@ + show_info(config, layout) + @width = Args::UnitConversion.parse width, dpi + @height = Args::UnitConversion.parse height, dpi + cards.times{ |i| @cards << Squib::Card.new(self, @width, @height, i) } + @layout = LayoutParser.load_layout(layout) + if block_given? + instance_eval(&block) # here we go. wheeeee! + end + end + + # Directly accesses the array of cards in the deck + # + # @api private + def [](key) + @cards[key] + end + + # Iterates over each card in the deck + # + # @api private + def each(&block) + @cards.each { |card| block.call(card) } + end + + # Use Logger to show more detail on the run + # :nodoc: + # @api private + def show_info(config, layout) + Squib::logger.info "Squib v#{Squib::VERSION}" + Squib::logger.info " building #{@cards.size} #{@width}x#{@height} cards" + Squib::logger.info " using #{@backend}" + end + + ################## + ### PUBLIC API ### + ################## + require 'squib/api/background' + require 'squib/api/data' + require 'squib/api/image' + require 'squib/api/save' + require 'squib/api/settings' + require 'squib/api/shapes' + require 'squib/api/text' + require 'squib/api/units' + + end +end