lib/squib/deck.rb in squib-0.1.0 vs lib/squib/deck.rb in squib-0.2.0
- old
+ new
@@ -3,10 +3,11 @@
require 'squib'
require 'squib/card'
require 'squib/progress'
require 'squib/input_helpers'
require 'squib/constants'
+require 'squib/layout_parser'
# The project module
#
# @api public
module Squib
@@ -63,11 +64,11 @@
@progress_bar = Squib::Progress.new(false)
@text_hint = :off
cards.times{ @cards << Squib::Card.new(self, width, height) }
show_info(config, layout)
load_config(config)
- load_layout(layout)
+ @layout = LayoutParser.load_layout(layout)
if block_given?
instance_eval(&block)
end
end
@@ -83,17 +84,10 @@
# @api private
def each(&block)
@cards.each { |card| block.call(card) }
end
- # Shows a descriptive place of the location
- #
- # @api private
- def location(opts)
- opts[:layout] || (" @ #{opts[:x]},#{opts[:y]}")
- end
-
# Load the configuration file, if exists, overriding hardcoded defaults
# @api private
def load_config(file)
if File.exists?(file) && config = YAML.load_file(file)
Squib::logger.info { " using config: #{file}" }
@@ -101,72 +95,9 @@
@dpi = config['dpi'].to_i
@text_hint = config['text_hint']
@progress_bar.enabled = config['progress_bars']
@custom_colors = config['custom_colors']
@img_dir = config['img_dir']
- end
- end
-
- # Load the layout configuration file, if exists
- # @api private
- def load_layout(files)
- @layout = {}
- Squib::logger.info { " using layout(s): #{files}" }
- Array(files).each do |file|
- thefile = file
- thefile = "#{File.dirname(__FILE__)}/layouts/#{file}" unless File.exists?(file)
- if File.exists? thefile
- yml = @layout.merge(YAML.load_file(thefile) || {}) #load_file returns false on empty file
- yml.each do |key, value|
- @layout[key] = recurse_extends(yml, key, {})
- end
- else
- puts "the file: #{thefile}"
- Squib::logger.error { "Layout file not found: #{file}" }
- end
- end
- end
-
- # Process the extends recursively
- # :nodoc:
- # @api private
- def recurse_extends(yml, key, visited )
- assert_not_visited(key, visited)
- return yml[key] unless has_extends?(yml, key)
- visited[key] = key
- parent_keys = [yml[key]['extends']].flatten
- h = {}
- parent_keys.each do |parent_key|
- from_extends = yml[key].merge(recurse_extends(yml, parent_key, visited)) do |key, child_val, parent_val|
- if child_val.to_s.strip.start_with?('+=')
- parent_val + child_val.sub('+=','').strip.to_f
- elsif child_val.to_s.strip.start_with?('-=')
- parent_val - child_val.sub('-=','').strip.to_f
- else
- child_val #child overrides parent when merging, no +=
- end
- end
- h = h.merge(from_extends) do |key, older_sibling, younger_sibling|
- younger_sibling #when two siblings have the same entry, the "younger" (lower one) overrides
- end
- end
- return h
- end
-
- # Does this layout entry have an extends field?
- # i.e. is it a base-case or will it need recursion?
- # :nodoc:
- # @api private
- def has_extends?(yml, key)
- !!yml[key] && yml[key].key?('extends')
- end
-
- # Safeguard against malformed circular extends
- # :nodoc:
- # @api private
- def assert_not_visited(key, visited)
- if visited.key? key
- raise "Invalid layout: circular extends with '#{key}'"
end
end
# Use Logger to show more detail on the run
# :nodoc: