class RSSendy::Feed

Constants

InvalidFeedError
PROPERTIES
REQUIREMENTS

Attributes

doc[R]
html_template[R]
items[R]
response[R]
subject[W]

Public Class Methods

content(cont=nil) click to toggle source
# File lib/rssendy.rb, line 48
def content(cont=nil)
  return @__cont_blk__ unless cont
  @__cont_blk__ = ->(doc) {doc.instance_eval(cont.sub(/^doc\./, ''))}
end
new(opts={}) click to toggle source
# File lib/rssendy.rb, line 59
def initialize(opts={})
  PROPERTIES.each do |property|
    send("#{property}=", opts[property] || self.class.send(property))
  end
  @subject = opts.fetch(:subject, self.class.subject)
  @content = opts.fetch(:content, self.class.content)
  @rss_subject = !!rss_subject
end
subject(subj=nil) click to toggle source
# File lib/rssendy.rb, line 53
def subject(subj=nil)
  return @__subject__ unless subj
  @__subject__ = subj
end

Public Instance Methods

build_template() click to toggle source
# File lib/rssendy.rb, line 94
def build_template
  raise InvalidFeedError, "No template set" unless template

  tmpl = ERB.new(File.read(template))
  @html_template = tmpl.result(binding)
end
content() click to toggle source
# File lib/rssendy.rb, line 72
def content
  return @content if Proc === @content || @content.nil?
  _cont = @content.dup
  @content = ->(doc) { doc.instance_eval(_cont.sub(/^doc\./, '')) }
end
missing_keys() click to toggle source
# File lib/rssendy.rb, line 112
def missing_keys
  REQUIREMENTS.reject {|prop| send(prop)}
end
post() click to toggle source
# File lib/rssendy.rb, line 101
def post
  raise InvalidFeedError, "Feed invalid. Missing keys: #{missing_keys.inspect}" unless valid?

  sendy = ::Cindy.new host, api_key
  sendy.create_campaign(build_opts)
end
pull!() click to toggle source
# File lib/rssendy.rb, line 86
def pull!
  raise InvalidFeedError, "Feed invalid. Missing keys: #{missing_keys.inspect}" unless valid?

  @response = open(url).read
  @doc = Nokogiri(@response)
  @items = content[@doc]
end
subject() click to toggle source
# File lib/rssendy.rb, line 78
def subject
  return @subject unless rss_subject? && !(Proc === @subject)
  return unless @subject

  _subj = @subject.dup
  @subject = ->(doc) { doc.instance_eval(_subj.sub(/^doc\./, '')) }
end
valid?() click to toggle source
# File lib/rssendy.rb, line 108
def valid?
  REQUIREMENTS.all? {|prop| send(prop)}
end

Private Instance Methods

build_opts() click to toggle source
# File lib/rssendy.rb, line 122
def build_opts
  {
    from_name: from_name,
    from_email: from_email,
    reply_to: reply_to,
    subject: rss_subject? ? subject[doc] : subject,
    html_text: build_template
  }.tap {|opts|
    %i(plain_text list_ids brand_id send_campaign).each do |property|
      val = send(property)
      opts[property] = val if val
    end
  }
end
rss_subject?() click to toggle source
# File lib/rssendy.rb, line 118
def rss_subject?
  rss_subject
end