superfeedr-superfeedr-ruby 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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