lib/rabbit/slide-configuration.rb in rabbit-2.2.1 vs lib/rabbit/slide-configuration.rb in rabbit-3.0.0

- old
+ new

@@ -1,6 +1,6 @@ -# Copyright (C) 2012-2014 Kouhei Sutou <kou@cozmixng.org> +# Copyright (C) 2012-2017 Kouhei Sutou <kou@cozmixng.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. @@ -12,10 +12,11 @@ # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +require "date" require "time" require "yaml" require "rabbit/gettext" @@ -29,11 +30,16 @@ include PathManipulatable GEM_NAME_PREFIX = "rabbit-slide" attr_accessor :logger - attr_accessor :id, :base_name, :tags, :presentation_date + attr_accessor :id + attr_accessor :base_name + attr_accessor :tags + attr_reader :presentation_date + attr_reader :presentation_start_time + attr_reader :presentation_end_time attr_accessor :licenses attr_accessor :slideshare_id attr_accessor :speaker_deck_id attr_accessor :ustream_id attr_accessor :vimeo_id @@ -43,10 +49,22 @@ def initialize(logger=nil) @logger = logger || Logger.default clear end + def presentation_date=(value) + @presentation_date = ensure_date(value) + end + + def presentation_start_time=(value) + @presentation_start_time = ensure_time(value) + end + + def presentation_end_time=(value) + @presentation_end_time = ensure_time(value) + end + def load return unless File.exist?(path) conf = YAML.load(File.read(path)) clear merge!(conf) @@ -68,24 +86,32 @@ 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 @ustream_id = nil @vimeo_id = nil @youtube_id = nil @author = nil end + def merge!(conf) @id = conf["id"] || @id @base_name = conf["base_name"] || @base_name - @presentation_date = conf["presentation_date"] || @presentation_date + 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 @ustream_id = conf["ustream_id"] || @ustream_id @vimeo_id = conf["vimeo_id"] || @vimeo_id @@ -102,10 +128,12 @@ 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, "ustream_id" => @ustream_id, @@ -115,11 +143,20 @@ config["author"] = @author.to_hash if @author config end def to_yaml - to_hash.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 def version @version || default_version end @@ -131,22 +168,29 @@ def path "config.yaml" end private - def parsed_presentation_date - return nil if @presentation_date.nil? - begin - Time.parse(@presentation_date) - rescue ArgumentError - nil + def ensure_date(value) + if value.is_a?(String) + Date.parse(value) + else + value end end + def ensure_time(value) + if value.is_a?(String) + Time.parse(value) + else + value + end + end + def default_version - date = parsed_presentation_date + date = presentation_date if date - date.strftime("%Y.%m.%d") + "#{date.year}.#{date.month}.#{date.day}.0" else "1.0.0" end end end