lib/almanack/event.rb in almanack-1.0.5 vs lib/almanack/event.rb in almanack-1.1.0.beta1

- old
+ new

@@ -1,24 +1,75 @@ require 'ostruct' module Almanack class Event < OpenStruct def formatted_date - formatted = "#{formatted_day(start_date)} at #{formatted_time(start_date)}" + formatted = "#{formatted_day(start_time)} at #{formatted_time(start_time)}" - if end_date + if end_time formatted << " to " - formatted << "#{formatted_day(end_date)} at " unless ends_on_same_day? - formatted << formatted_time(end_date) + formatted << "#{formatted_day(end_time)} at " unless ends_on_same_day? + formatted << formatted_time(end_time) end formatted end + # Deprecated in favour of start_time + def start_date + deprecated :start_date, newer_method: :start_time + end + + def start_time + read_attribute :start_time, fallback: :start_date + end + + # Deprecated in favour of end_time + def end_date + deprecated :end_date, newer_method: :end_time + end + + def end_time + read_attribute :end_time, fallback: :end_date + end + + def serialized + each_pair.with_object({}) do |(attr, _), hash| + hash[attr] = serialize_attribute(attr) + end + end + private + def serialize_attribute(attribute) + value = send(attribute) + value.is_a?(Time) ? value.iso8601 : value + end + + def deprecated(older_method, options = {}) + newer_method = options.delete(:newer_method) + value = read_attribute(newer_method, fallback: older_method) + warn "Event method #{older_method} is deprecated; use #{newer_method} instead" + value + end + + def read_attribute(newer_method, options = {}) + older_method = options.delete(:fallback) + newer_value = self[newer_method] + fallback_value = self[older_method] + + if fallback_value && newer_value + raise "Both #{older_method} and #{newer_method} properties are set, please use #{newer_method} only instead" + elsif newer_value + newer_value + elsif fallback_value + warn "Deprecated event property #{older_method} is set; set #{newer_method} property instead" + fallback_value + end + end + def ends_on_same_day? - [start_date.year, start_date.yday] == [end_date.year, end_date.yday] + [start_time.year, start_time.yday] == [end_time.year, end_time.yday] end def formatted_time(time) time.strftime('%-l:%M%P') end