lib/newslettre/letter.rb in newslettre-0.1.1 vs lib/newslettre/letter.rb in newslettre-0.2.0

- old
+ new

@@ -17,13 +17,39 @@ load_data data end + def schedule + scheduler.get + end + + def deschedule! + scheduler.delete + end + + def schedule! options = {} + scheduler.deliver options + end + + def scheduled? + begin + !!schedule + rescue NotScheduledFailure + false + end + end + def recipients @recipients ||= Newslettre::APIModuleProxy.new self, Recipients.new(self.name, self.api) end + + protected + + def scheduler + @scheduler ||= Schedule.new self.name, self.api + end end def list request 'list' end @@ -41,9 +67,64 @@ end def edit name, data = {} request 'edit', data end + + class Schedule < Newslettre::APIModule + attr_reader :letter + + def initialize letter, api + @letter = letter + @api = api + end + + def deliver options = {} + require 'time' + data = { :name => letter } + at = options.delete :at + unless at.nil? + data[:at] = at.iso8601 + end + request :add, data + end + + def delete + request :delete, :name => letter + + true + end + + def get + require 'time' + begin + date = request(:get, :name => letter)["date"] + rescue Newslettre::API::ClientFailure + raise NotScheduledFailure, "not found" + end + + unless date.nil? or date.size.zero? + parse_utc_date date + else + raise NotScheduledFailure, "invalid date" + end + end + + protected + + def parse_utc_date date + date, time = date.split(" ") + + year, month, day = date.split "-" + hour, minute, second = time.split ":" + + Time.utc year, month, day, hour, minute, second + end + + end + + class NotScheduledFailure < Newslettre::API::ClientFailure; end + class Recipients < Newslettre::APIModule attr_reader :letter def initialize letter, api