rssendy 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|