rssendy 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rssendy/version.rb +1 -1
- data/lib/rssendy.rb +26 -2
- data/spec/rssendy_spec.rb +21 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2feac2b5ec0601ea52e8481f00f3355594018bc5
|
4
|
+
data.tar.gz: 1d3f5022dc0b41ba46754288d329ab97b6009745
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35be4485db70650686dba33e206937a08e8b9ae36041a43f07d374f9f65fb33da3f5a29b34fd4402418b8c60a92de5e0ff2992c676ba52fba21f81abc517391c
|
7
|
+
data.tar.gz: 71f368a5dd5a3cf467c8c0a953bb2fc30f644968e81280f8a874fce9b361482b356e5bcd6e7d144fe9fde82823a2af635f59327ee4573c582134042eaf11db09
|
data/lib/rssendy/version.rb
CHANGED
data/lib/rssendy.rb
CHANGED
@@ -29,7 +29,7 @@ module RSSendy
|
|
29
29
|
class Feed
|
30
30
|
PROPERTIES = %i{
|
31
31
|
api_key url template host from_name from_email reply_to
|
32
|
-
|
32
|
+
plain_text html_text list_ids brand_id send_campaign rss_subject
|
33
33
|
}
|
34
34
|
REQUIREMENTS = %i(api_key content url template host from_name from_email reply_to subject)
|
35
35
|
|
@@ -49,17 +49,25 @@ module RSSendy
|
|
49
49
|
return @__cont_blk__ unless cont
|
50
50
|
@__cont_blk__ = ->(doc) {doc.instance_eval(cont.sub(/^doc\./, ''))}
|
51
51
|
end
|
52
|
+
|
53
|
+
def subject(subj=nil)
|
54
|
+
return @__subject__ unless subj
|
55
|
+
@__subject__ = subj
|
56
|
+
end
|
52
57
|
end
|
53
58
|
|
54
59
|
def initialize(opts={})
|
55
60
|
PROPERTIES.each do |property|
|
56
61
|
send("#{property}=", opts[property] || self.class.send(property))
|
57
62
|
end
|
63
|
+
@subject = opts.fetch(:subject, self.class.subject)
|
58
64
|
@content = opts.fetch(:content, self.class.content)
|
65
|
+
@rss_subject = !!rss_subject
|
59
66
|
end
|
60
67
|
|
61
68
|
attr_accessor(*PROPERTIES)
|
62
69
|
attr_reader :response, :doc, :items, :html_template
|
70
|
+
attr_writer :subject
|
63
71
|
|
64
72
|
def content
|
65
73
|
return @content if Proc === @content || @content.nil?
|
@@ -67,6 +75,14 @@ module RSSendy
|
|
67
75
|
@content = ->(doc) { doc.instance_eval(_cont.sub(/^doc\./, '')) }
|
68
76
|
end
|
69
77
|
|
78
|
+
def subject
|
79
|
+
return @subject unless rss_subject? && !(Proc === @subject)
|
80
|
+
return unless @subject
|
81
|
+
|
82
|
+
_subj = @subject.dup
|
83
|
+
@subject = ->(doc) { doc.instance_eval(_subj.sub(/^doc\./, '')) }
|
84
|
+
end
|
85
|
+
|
70
86
|
def pull!
|
71
87
|
raise InvalidFeedError, "Feed invalid. Missing keys: #{missing_keys.inspect}" unless valid?
|
72
88
|
|
@@ -99,12 +115,16 @@ module RSSendy
|
|
99
115
|
|
100
116
|
private
|
101
117
|
|
118
|
+
def rss_subject?
|
119
|
+
rss_subject
|
120
|
+
end
|
121
|
+
|
102
122
|
def build_opts
|
103
123
|
{
|
104
124
|
from_name: from_name,
|
105
125
|
from_email: from_email,
|
106
126
|
reply_to: reply_to,
|
107
|
-
subject: subject,
|
127
|
+
subject: rss_subject? ? parse_subject : subject,
|
108
128
|
html_text: build_template
|
109
129
|
}.tap {|opts|
|
110
130
|
%i(plain_text list_ids brand_id send_campaign).each do |property|
|
@@ -113,6 +133,10 @@ module RSSendy
|
|
113
133
|
end
|
114
134
|
}
|
115
135
|
end
|
136
|
+
|
137
|
+
def parse_subject
|
138
|
+
doc.instance_eval(subject)
|
139
|
+
end
|
116
140
|
end
|
117
141
|
end
|
118
142
|
|
data/spec/rssendy_spec.rb
CHANGED
@@ -19,6 +19,9 @@ RSpec.describe RSSendy::Feed do
|
|
19
19
|
<<-RSS
|
20
20
|
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
|
21
21
|
<channel>
|
22
|
+
<title>
|
23
|
+
why, hello thar
|
24
|
+
</title>
|
22
25
|
<item>
|
23
26
|
<content:encoded>
|
24
27
|
<![CDATA[
|
@@ -72,6 +75,24 @@ RSpec.describe RSSendy::Feed do
|
|
72
75
|
describe 'instance' do
|
73
76
|
let(:feed) { subject.new }
|
74
77
|
|
78
|
+
describe "setting subject" do
|
79
|
+
context "when rss_subject false" do
|
80
|
+
it "has subject set manually" do
|
81
|
+
expect(feed.subject).to eql("latest news")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context "when rss_subject true" do
|
86
|
+
before do
|
87
|
+
feed.subject = 'doc.at_xpath("//title").text.strip'
|
88
|
+
feed.rss_subject = true
|
89
|
+
end
|
90
|
+
|
91
|
+
it "pulls subject from feed" do
|
92
|
+
expect(feed.subject[doc]).to eql("why, hello thar")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
75
96
|
describe '#build_template' do
|
76
97
|
context "when valid" do
|
77
98
|
before do
|