class Rabbit::SlideConfiguration

Constants

GEM_NAME_PREFIX

Attributes

author[RW]
base_name[RW]
height[RW]
id[RW]
licenses[RW]
logger[RW]
presentation_date[R]
presentation_end_time[R]
presentation_start_time[R]
slideshare_id[RW]
source_code_uri[RW]
speaker_deck_id[RW]
tags[RW]
version[W]
vimeo_id[RW]
width[RW]
youtube_id[RW]

Public Class Methods

new(logger=nil) click to toggle source
# File lib/rabbit/slide-configuration.rb, line 50
def initialize(logger=nil)
  @logger = logger || Logger.default
  clear
end

Public Instance Methods

clear() click to toggle source
# File lib/rabbit/slide-configuration.rb, line 87
def clear
  @id                = nil
  @base_name         = nil
  @tags              = []
  @presentation_date = nil
  @presentation_start_time = nil
  @presentation_end_time = nil
  @version           = nil
  @licenses          = []
  @slideshare_id     = nil
  @speaker_deck_id   = nil
  @vimeo_id          = nil
  @youtube_id        = nil
  @author            = nil
  @width             = 800
  @height            = 600
  @source_code_uri   = nil
end
gem_name() click to toggle source
# File lib/rabbit/slide-configuration.rb, line 172
def gem_name
  "#{GEM_NAME_PREFIX}-#{@author.rubygems_user}-#{@id}"
end
load() click to toggle source
# File lib/rabbit/slide-configuration.rb, line 67
def load
  return unless File.exist?(path)
  conf = YAMLLoader.load(File.read(path))
  clear
  merge!(conf)
rescue
  format = _("Failed to read slide configuration: %s: %s")
  @logger.error(format % [path, $!.message])
end
merge!(conf) click to toggle source
# File lib/rabbit/slide-configuration.rb, line 107
def merge!(conf)
  @id                = conf["id"]                || @id
  @base_name         = conf["base_name"]         || @base_name
  self.presentation_date =
    conf["presentation_date"] || @presentation_date
  self.presentation_start_time =
    conf["presentation_start_time"] || @presentation_start_time
  self.presentation_end_time =
    conf["presentation_end_time"] || @presentation_end_time
  @version           = conf["version"]           || @version
  @slideshare_id     = conf["slideshare_id"]     || @slideshare_id
  @speaker_deck_id   = conf["speaker_deck_id"]   || @speaker_deck_id
  @vimeo_id          = conf["vimeo_id"]          || @vimeo_id
  @youtube_id        = conf["youtube_id"]        || @youtube_id

  @tags              |=  (conf["tags"] || [])
  @licenses          |=  (conf["licenses"] || [])

  @author ||= AuthorConfiguration.new(@logger)
  @author.merge!(conf["author"] || {})

  @width             = conf["width"]             || @width
  @height            = conf["height"]            || @height
  @source_code_uri   = conf["source_code_uri"]   || @source_code_uri
end
path() click to toggle source
# File lib/rabbit/slide-configuration.rb, line 176
def path
  "config.yaml"
end
presentation_date=(value) click to toggle source
# File lib/rabbit/slide-configuration.rb, line 55
def presentation_date=(value)
  @presentation_date = ensure_date(value)
end
presentation_end_time=(value) click to toggle source
# File lib/rabbit/slide-configuration.rb, line 63
def presentation_end_time=(value)
  @presentation_end_time = ensure_time(value)
end
presentation_start_time=(value) click to toggle source
# File lib/rabbit/slide-configuration.rb, line 59
def presentation_start_time=(value)
  @presentation_start_time = ensure_time(value)
end
save(base_dir) click to toggle source
# File lib/rabbit/slide-configuration.rb, line 77
def save(base_dir)
  config_path = File.join(base_dir, path)
  create_file(config_path) do |conf_file|
    conf_file.print(to_yaml)
  end
rescue
  format = _("Failed to write slide configuration: %s: %s")
  @logger.error(format % [config_path, $!.message])
end
to_hash() click to toggle source
# File lib/rabbit/slide-configuration.rb, line 133
def to_hash
  config = {
    "id"                => @id,
    "base_name"         => @base_name,
    "tags"              => @tags,
    "presentation_date" => @presentation_date,
    "presentation_start_time" => @presentation_start_time,
    "presentation_end_time" => @presentation_end_time,
    "version"           => version,
    "licenses"          => @licenses,
    "slideshare_id"     => @slideshare_id,
    "speaker_deck_id"   => @speaker_deck_id,
    "vimeo_id"          => @vimeo_id,
    "youtube_id"        => @youtube_id,
    "width"             => @width,
    "height"            => @height,
    "source_code_uri"   => @source_code_uri,
  }
  config["author"] = @author.to_hash if @author
  config
end
to_yaml() click to toggle source
# File lib/rabbit/slide-configuration.rb, line 155
def to_yaml
  hash = to_hash
  hash.each do |key, value|
    case value
    when Date
      hash[key] = value.strftime("%Y-%m-%d")
    when Time
      hash[key] = value.iso8601
    end
  end
  hash.to_yaml
end
version() click to toggle source
# File lib/rabbit/slide-configuration.rb, line 168
def version
  @version || default_version
end

Private Instance Methods

default_version() click to toggle source
# File lib/rabbit/slide-configuration.rb, line 197
def default_version
  date = presentation_date
  if date
    "#{date.year}.#{date.month}.#{date.day}.0"
  else
    "1.0.0"
  end
end
ensure_date(value) click to toggle source
# File lib/rabbit/slide-configuration.rb, line 181
def ensure_date(value)
  if value.is_a?(String)
    Date.parse(value)
  else
    value
  end
end
ensure_time(value) click to toggle source
# File lib/rabbit/slide-configuration.rb, line 189
def ensure_time(value)
  if value.is_a?(String)
    Time.parse(value)
  else
    value
  end
end