superfeedr-superfeedr-ruby 0.3.1 → 0.3.2

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.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 1
2
+ :patch: 2
3
3
  :major: 0
4
4
  :minor: 3
@@ -1,18 +1,26 @@
1
- class SubscribeQueryStanza < IqQueryStanza
1
+ class SubscribeQueryStanza < IqQueryStanza
2
2
 
3
- def initialize(params)
4
- super(params.merge({:type => :set}))
5
- pubsub = Nokogiri::XML::Node.new("pubsub", @doc)
6
- pubsub["xmlns"] = "http://jabber.org/protocol/pubsub"
3
+ def initialize(params)
4
+ raise NoFeedToSubscribe if params[:nodes].nil? or params[:nodes].empty?
5
+ raise TooManyFeeds if params[:nodes].size > 30
6
+ super(params.merge({:type => :set}))
7
+ @pubsub = Nokogiri::XML::Node.new("pubsub", @doc)
8
+ @pubsub["xmlns"] = "http://jabber.org/protocol/pubsub"
9
+ params[:nodes].each do |node|
10
+ add_node(node)
11
+ end
12
+ @iq.add_child(@pubsub)
13
+ end
14
+
15
+ def add_node(node)
7
16
  subscribe = Nokogiri::XML::Node.new("subscribe", @doc)
8
- subscribe["node"] = params[:node]
17
+ subscribe["node"] = node
9
18
  subscribe["jid"] = from.split("/").first
10
- pubsub.add_child(subscribe)
11
- @iq.add_child(pubsub)
12
- end
19
+ @pubsub.add_child(subscribe)
20
+ end
13
21
 
14
- def node
15
- @iq.search("subscribe").first["node"]
22
+ def nodes
23
+ @pubsub.children.map {|c| c["node"]}
16
24
  end
17
25
 
18
26
  end
@@ -1,18 +1,27 @@
1
1
  class UnsubscribeQueryStanza < IqQueryStanza
2
2
 
3
3
  def initialize(params)
4
+ raise NoFeedToSubscribe if params[:nodes].nil? or params[:nodes].empty?
5
+ raise TooManyFeeds if params[:nodes].size > 30
4
6
  super(params.merge({:type => :set}))
5
- pubsub = Nokogiri::XML::Node.new("pubsub", @doc)
6
- pubsub["xmlns"] = "http://jabber.org/protocol/pubsub"
7
- @iq.add_child(pubsub)
7
+
8
+ @pubsub = Nokogiri::XML::Node.new("pubsub", @doc)
9
+ params[:nodes].each do |node|
10
+ add_node(node)
11
+ end
12
+ @pubsub["xmlns"] = "http://jabber.org/protocol/pubsub"
13
+ @iq.add_child(@pubsub)
14
+ end
15
+
16
+ def add_node(node)
8
17
  unsubscribe = Nokogiri::XML::Node.new("unsubscribe", @doc)
9
- unsubscribe["node"] = params[:node].to_s
18
+ unsubscribe["node"] = node.to_s
10
19
  unsubscribe["jid"] = from.split("/").first
11
- pubsub.add_child(unsubscribe)
12
- end
20
+ @pubsub.add_child(unsubscribe)
21
+ end
13
22
 
14
- def node
15
- @iq.search("unsubscribe").first["node"]
23
+ def nodes
24
+ @pubsub.children.map {|c| c["node"]}
16
25
  end
17
26
 
18
- end
27
+ end
data/lib/superfeedr.rb CHANGED
@@ -6,7 +6,6 @@ require "stanzas/subscribe_query_stanza.rb"
6
6
  require "stanzas/unsubscribe_query_stanza.rb"
7
7
  require "stanzas/subscriptions_query_stanza.rb"
8
8
 
9
-
10
9
  ##
11
10
  # By default, the log level is at error. You can change that at anytime in your app
12
11
  Babylon.logger.level = Log4r::ERROR
@@ -58,13 +57,13 @@ module Superfeedr
58
57
  end
59
58
 
60
59
  ##
61
- # Subscribes to the multiple feeds, one by one. Calls the block after each feed.
60
+ # Subscribes to the multiple feeds, 30 by 30. Calls the block after each feed.
62
61
  def self.subscribe(*feeds, &block)
63
62
  return if feeds.flatten! == []
64
- feed = feeds.shift
65
- Superfeedr.add_feed(feed) do |result|
63
+ subset = feeds.slice!(0..29)
64
+ Superfeedr.add_feeds(subset) do |result|
66
65
  subscribe(feeds, &block)
67
- block.call(feed)
66
+ block.call(subset)
68
67
  end
69
68
  end
70
69
 
@@ -72,10 +71,10 @@ module Superfeedr
72
71
  # Ubsubscribe to multiple feeds, one by one. Calls the block after each feed.
73
72
  def self.unsubscribe(*feeds, &block)
74
73
  return if feeds.flatten! == []
75
- feed = feeds.shift
76
- Superfeedr.remove_feed(feed) do |result|
74
+ subset = feeds.slice!(0..29)
75
+ Superfeedr.remove_feeds(subset) do |result|
77
76
  unsubscribe(feeds, &block)
78
- block.call(feed)
77
+ block.call(subset)
79
78
  end
80
79
  end
81
80
 
@@ -85,8 +84,8 @@ module Superfeedr
85
84
  Superfeedr.subscriptions_by_page(start_page) do |page, result|
86
85
  if !result.empty?
87
86
  subscriptions(start_page + 1, &block)
88
- block.call(page, result)
89
87
  end
88
+ block.call(page, result)
90
89
  end
91
90
  end
92
91
 
@@ -94,9 +93,9 @@ module Superfeedr
94
93
  # Adds the url to the list of feeds you're monitoring. The block passed in argument will be called upon success.
95
94
  # The block will take one boolen argument : true means everything went right... false means something failed!
96
95
  # (Please set Babylon's log to Log4r::INFO for more info)
97
- def self.add_feed(feed_url, &block)
96
+ def self.add_feeds(feeds_url, &block)
98
97
  raise NotConnected unless connection
99
- stanza = SubscribeQueryStanza.new({:node => feed_url, :from => connection.jid})
98
+ stanza = SubscribeQueryStanza.new({:nodes => feeds_url, :from => connection.jid})
100
99
  @@callbacks[stanza.id] = Hash.new
101
100
  @@callbacks[stanza.id][:method] = method(:on_subscribe)
102
101
  @@callbacks[stanza.id][:param] = block
@@ -107,9 +106,9 @@ module Superfeedr
107
106
  # Unsubscribe from a feed. The block passed in argument will be called upon success.
108
107
  # The block will take one boolen argument : true means everything went right... false means something failed!
109
108
  # (Please set Babylon's log to Log4r::INFO for more info)
110
- def self.remove_feed(feed_url, &block)
109
+ def self.remove_feeds(feeds_url, &block)
111
110
  raise NotConnected unless connection
112
- stanza = UnsubscribeQueryStanza.new({:node => feed_url, :from => connection.jid})
111
+ stanza = UnsubscribeQueryStanza.new({:nodes => feeds_url, :from => connection.jid})
113
112
  @@callbacks[stanza.id] = Hash.new
114
113
  @@callbacks[stanza.id][:method] = method(:on_unsubscribe)
115
114
  @@callbacks[stanza.id][:param] = block
@@ -140,7 +139,7 @@ module Superfeedr
140
139
  # Called with a response to a subscriptions listing
141
140
  def self.on_subscriptions(stanza, &block)
142
141
  page = stanza.xpath('//subscriptions').first["page"].to_i
143
- feeds = stanza.xpath('//subscription').map { |s| s["node"] }
142
+ feeds = stanza.xpath('//subscription').map { |s| CGI.unescapeHTML(s["node"]) }
144
143
  block.call(page, feeds)
145
144
  end
146
145
 
@@ -195,7 +194,7 @@ module Superfeedr
195
194
  @@callbacks.delete(stanza["id"])
196
195
  else
197
196
  if stanza.name == "message" and stanza.at("event")
198
- @@notication_callback.call(NotificationStanza.new(stanza))
197
+ @@notication_callback.call(NotificationStanza.new(stanza)) if @@notification_callback
199
198
  # Here we need to call the main notification callback!
200
199
  end
201
200
  end
@@ -5,11 +5,11 @@ describe SubscribeQueryStanza do
5
5
  it_should_behave_like "Iq Query Stanzas"
6
6
 
7
7
  before(:each) do
8
- @params = { :type => "set", :from => "me@server.com/resource", :node => "http//domain.tld/feed.xml", :type => "set", :from => "me@server.com/resource"}
8
+ @params = { :type => "set", :from => "me@server.com/resource", :nodes => ["http//domain.tld/feed.xml"], :type => "set", :from => "me@server.com/resource"}
9
9
  end
10
10
 
11
11
  it "should have the right node value" do
12
- SubscribeQueryStanza.new(@params).node.should == @params[:node]
12
+ SubscribeQueryStanza.new(@params).nodes.should == @params[:nodes]
13
13
  end
14
14
 
15
15
  end
@@ -5,11 +5,11 @@ describe UnsubscribeQueryStanza do
5
5
  it_should_behave_like "Iq Query Stanzas"
6
6
 
7
7
  before(:each) do
8
- @params = { :type => "set", :from => "me@server.com/resource", :node => "http//domain.tld/feed.xml", :type => "set", :from => "me@server.com/resource"}
8
+ @params = { :type => "set", :from => "me@server.com/resource", :nodes => ["http//domain.tld/feed.xml", "http//domain.tld/feed2.xml"], :type => "set", :from => "me@server.com/resource"}
9
9
  end
10
10
 
11
11
  it "should have the right node value" do
12
- UnsubscribeQueryStanza.new(@params).node.should == @params[:node]
12
+ UnsubscribeQueryStanza.new(@params).nodes.should == @params[:nodes]
13
13
  end
14
14
 
15
15
  end
@@ -14,11 +14,10 @@ describe Superfeedr do
14
14
 
15
15
 
16
16
  describe "subscribe" do
17
- it "should call add_feed with feeds supplied" do
18
- feeds = "a", "b", "c", "d"
19
- feeds.each do |feed|
20
- Superfeedr.should_receive(:add_feed).with(feed).and_yield(true)
21
- end
17
+ it "should call add_feeds with feeds supplied" do
18
+ feeds = ["a"] * 50
19
+ Superfeedr.should_receive(:add_feeds).with(["a"] * 30).and_yield(true)
20
+ Superfeedr.should_receive(:add_feeds).with(["a"] * 20).and_yield(true)
22
21
  Superfeedr.subscribe(feeds) do |result|
23
22
  result.should be_true
24
23
  end
@@ -26,11 +25,10 @@ describe Superfeedr do
26
25
  end
27
26
 
28
27
  describe "unsubscribe" do
29
- it "should call remove_feed with feeds supplied" do
30
- feeds = "a", "b", "c", "d"
31
- feeds.each do |feed|
32
- Superfeedr.should_receive(:remove_feed).with(feed).and_yield(true)
33
- end
28
+ it "should call remove_feeds with feeds supplied" do
29
+ feeds = ["a"] * 40
30
+ Superfeedr.should_receive(:remove_feeds).with(["a"] * 30).and_yield(true)
31
+ Superfeedr.should_receive(:remove_feeds).with(["a"] * 10).and_yield(true)
34
32
  Superfeedr.unsubscribe(feeds) do |result|
35
33
  result.should be_true
36
34
  end
@@ -41,7 +39,7 @@ describe Superfeedr do
41
39
  it "should call subscriptions_by_page for each page as long as they're not empty" do
42
40
  def method_called_upon_page
43
41
  end
44
- self.should_receive(:method_called_upon_page).exactly(3).times
42
+ self.should_receive(:method_called_upon_page).exactly(4).times
45
43
  3.times do |t|
46
44
  Superfeedr.should_receive(:subscriptions_by_page).with(t+1).and_yield( t+1 , ["a", "b", "c"])
47
45
  end
@@ -53,7 +51,7 @@ describe Superfeedr do
53
51
  end
54
52
 
55
53
 
56
- describe "add_feed" do
54
+ describe "add_feeds" do
57
55
  before(:each) do
58
56
  Superfeedr.stub!(:connection).and_return(@mock_connection)
59
57
  Superfeedr.stub!(:send).and_return(true)
@@ -68,35 +66,35 @@ describe Superfeedr do
68
66
  it "should raise an error if not connected" do
69
67
  Superfeedr.should_receive(:connection).and_return(nil)
70
68
  lambda {
71
- Superfeedr.add_feed(@node, &@block)
69
+ Superfeedr.add_feeds(@node, &@block)
72
70
  }.should raise_error(Superfeedr::NotConnected)
73
71
  end
74
72
 
75
73
  it "should create a new SubscribeQueryStanza with the right url" do
76
- SubscribeQueryStanza.should_receive(:new).with({:node => @node, :from => @mock_connection.jid}).and_return(@mock_stanza)
77
- Superfeedr.add_feed(@node, &@block)
74
+ SubscribeQueryStanza.should_receive(:new).with({:nodes => @node, :from => @mock_connection.jid}).and_return(@mock_stanza)
75
+ Superfeedr.add_feeds(@node, &@block)
78
76
  end
79
77
 
80
78
  it "should add a Proc that just calls the block in params to the @@callbacks" do
81
- Superfeedr.add_feed(@node, &@block)
79
+ Superfeedr.add_feeds(@node, &@block)
82
80
  Superfeedr.callbacks[@mock_stanza.id][:method].should == Superfeedr.method(:on_subscribe)
83
81
  Superfeedr.callbacks[@mock_stanza.id][:param].should == @block
84
82
  end
85
83
 
86
84
  it "should send the stanza" do
87
85
  Superfeedr.should_receive(:send).with(@mock_stanza).and_return(true)
88
- Superfeedr.add_feed(@node, &@block)
86
+ Superfeedr.add_feeds(@node, &@block)
89
87
  end
90
88
  end
91
89
 
92
- describe "remove_feed" do
90
+ describe "remove_feeds" do
93
91
  before(:each) do
94
92
  Superfeedr.stub!(:connection).and_return(@mock_connection)
95
93
  Superfeedr.stub!(:send).and_return(true)
96
94
  @block = Proc.new {
97
95
 
98
96
  }
99
- @node = "http://domain.com/feed.xml"
97
+ @nodes = ["http://domain.com/feed.xml"]
100
98
  @mock_stanza = mock(UnsubscribeQueryStanza, {:id => "123"})
101
99
  UnsubscribeQueryStanza.stub!(:new).and_return(@mock_stanza)
102
100
  end
@@ -104,24 +102,24 @@ describe Superfeedr do
104
102
  it "should raise an error if not connected" do
105
103
  Superfeedr.should_receive(:connection).and_return(nil)
106
104
  lambda {
107
- Superfeedr.remove_feed(@node, &@block)
105
+ Superfeedr.remove_feeds(@nodes, &@block)
108
106
  }.should raise_error(Superfeedr::NotConnected)
109
107
  end
110
108
 
111
109
  it "should create a new SubscribeQueryStanza with the right url" do
112
- UnsubscribeQueryStanza.should_receive(:new).with({:node => @node, :from => @mock_connection.jid}).and_return(@mock_stanza)
113
- Superfeedr.remove_feed(@node, &@block)
110
+ UnsubscribeQueryStanza.should_receive(:new).with({:nodes => @nodes, :from => @mock_connection.jid}).and_return(@mock_stanza)
111
+ Superfeedr.remove_feeds(@nodes, &@block)
114
112
  end
115
113
 
116
114
  it "should add a Proc that just calls the block in params to the @@callbacks" do
117
- Superfeedr.remove_feed(@node, &@block)
115
+ Superfeedr.remove_feeds(@nodes, &@block)
118
116
  Superfeedr.callbacks[@mock_stanza.id][:method].should == Superfeedr.method(:on_unsubscribe)
119
117
  Superfeedr.callbacks[@mock_stanza.id][:param].should == @block
120
118
  end
121
119
 
122
120
  it "should send the stanza" do
123
121
  Superfeedr.should_receive(:send).with(@mock_stanza).and_return(true)
124
- Superfeedr.remove_feed(@node, &@block)
122
+ Superfeedr.remove_feeds(@nodes, &@block)
125
123
  end
126
124
  end
127
125
 
@@ -221,7 +219,7 @@ EOXML
221
219
  <iq type="result" to="you@superfeedr.com/home" id="subman1" from="firehoser.superfeedr.com">
222
220
  <pubsub>
223
221
  <subscriptions page="3">
224
- <subscription node="http://domain.tld/path/to/a/feed/atom.xml" subscription="subscribed" jid="you@superfeedr.com" />
222
+ <subscription node="http://domain.tld/path/to/a/feed/atom.xml&amp;toto=tutu" subscription="subscribed" jid="you@superfeedr.com" />
225
223
  <subscription node="http://domain2.tld/path/to/feed.rss" subscription="subscribed" jid="you@superfeedr.com" />
226
224
  </subscriptions>
227
225
  </pubsub>
@@ -230,7 +228,7 @@ EOXML
230
228
  stanza = Nokogiri::XML(xml)
231
229
  Superfeedr.on_subscriptions(stanza.root) do |page, subscriptions|
232
230
  page.should == 3
233
- subscriptions.should == ["http://domain.tld/path/to/a/feed/atom.xml", "http://domain2.tld/path/to/feed.rss"]
231
+ subscriptions.should == ["http://domain.tld/path/to/a/feed/atom.xml&toto=tutu", "http://domain2.tld/path/to/feed.rss"]
234
232
  end
235
233
  end
236
234
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: superfeedr-superfeedr-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - julien Genestoux
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-09 00:00:00 -07:00
12
+ date: 2009-06-11 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency