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