superfeedr-superfeedr-ruby 0.2.1 → 0.3.0

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: 0
3
3
  :major: 0
4
- :minor: 2
4
+ :minor: 3
data/lib/config.yaml ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ :superfeedr_jid: firehoser.superfeedr.com
@@ -4,7 +4,7 @@ class IqQueryStanza
4
4
  @doc = Nokogiri::XML::Document.new
5
5
  @iq = Nokogiri::XML::Node.new("iq", @doc)
6
6
  @iq["type"] = params[:type].to_s
7
- @iq["to"] = "firehoser.superfeedr.com"
7
+ @iq["to"] = Superfeedr.conf[:superfeedr_jid]
8
8
  @iq["id"] = "#{random_iq_id}"
9
9
  @iq["from"] = params[:from] if params[:from]
10
10
  end
data/lib/superfeedr.rb CHANGED
@@ -6,6 +6,12 @@ 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
+ ##
11
+ # By default, the log level is at error. You can change that at anytime in your app
12
+ Babylon.logger.level = Log4r::ERROR
13
+
14
+
9
15
  ##
10
16
  # Based on the API documented there : http://superfeedr.com/documentation
11
17
  module Superfeedr
@@ -52,10 +58,43 @@ module Superfeedr
52
58
  end
53
59
 
54
60
  ##
55
- # Subscribe to a feed. The block passed in argument will be called upon success.
61
+ # Subscribes to the multiple feeds, one by one. Calls the block after each feed.
62
+ def self.subscribe(*feeds, &block)
63
+ return if feeds.flatten! == []
64
+ feed = feeds.shift
65
+ Superfeedr.add_feed(feed) do |result|
66
+ subscribe(feeds, &block)
67
+ block.call(feed)
68
+ end
69
+ end
70
+
71
+ ##
72
+ # Ubsubscribe to multiple feeds, one by one. Calls the block after each feed.
73
+ def self.unsubscribe(*feeds, &block)
74
+ return if feeds.flatten! == []
75
+ feed = feeds.shift
76
+ Superfeedr.remove_feed(feed) do |result|
77
+ unsubscribe(feeds, &block)
78
+ block.call(feed)
79
+ end
80
+ end
81
+
82
+ ##
83
+ # List all subscriptions, by sending them by blocks (page), starting at page specified in argument
84
+ def self.subscriptions(start_page = 1, &block)
85
+ Superfeedr.subscriptions_by_page(start_page) do |result|
86
+ if !result.empty?
87
+ subscriptions(start_page + 1, &block)
88
+ end
89
+ block.call(result)
90
+ end
91
+ end
92
+
93
+ ##
94
+ # Adds the url to the list of feeds you're monitoring. The block passed in argument will be called upon success.
56
95
  # The block will take one boolen argument : true means everything went right... false means something failed!
57
96
  # (Please set Babylon's log to Log4r::INFO for more info)
58
- def self.subscribe(feed_url, &block)
97
+ def self.add_feed(feed_url, &block)
59
98
  raise NotConnected unless connection
60
99
  stanza = SubscribeQueryStanza.new({:node => feed_url, :from => connection.jid})
61
100
  @@callbacks[stanza.id] = Hash.new
@@ -68,7 +107,7 @@ module Superfeedr
68
107
  # Unsubscribe from a feed. The block passed in argument will be called upon success.
69
108
  # The block will take one boolen argument : true means everything went right... false means something failed!
70
109
  # (Please set Babylon's log to Log4r::INFO for more info)
71
- def self.unsubscribe(feed_url, &block)
110
+ def self.remove_feed(feed_url, &block)
72
111
  raise NotConnected unless connection
73
112
  stanza = UnsubscribeQueryStanza.new({:node => feed_url, :from => connection.jid})
74
113
  @@callbacks[stanza.id] = Hash.new
@@ -81,7 +120,7 @@ module Superfeedr
81
120
  # Lists the subscriptions by page. The block passed in argument will be called with 2 arguments : the page,
82
121
  # and an array of the feed's url in the page you requested.
83
122
  # (Currently the Superfeedr API only supports 30 feeds per page.)
84
- def self.subscriptions(page = 1, &block)
123
+ def self.subscriptions_by_page(page = 1, &block)
85
124
  raise NotConnected unless connection
86
125
  stanza = SubscriptionsQueryStanza.new({:page => page, :from => connection.jid})
87
126
  @@callbacks[stanza.id] = Hash.new
@@ -154,10 +193,19 @@ module Superfeedr
154
193
  if stanza["id"] && @@callbacks[stanza["id"]]
155
194
  @@callbacks[stanza["id"]][:method].call(stanza, &@@callbacks[stanza["id"]][:param])
156
195
  @@callbacks.delete(stanza["id"])
157
- elsif stanza.name == "message" and stanza.at("event")["xmlns"] == "http://jabber.org/protocol/pubsub#event"
158
- @@notication_callback.call(NotificationStanza.new(stanza))
159
- # Here we need to call the main notification callback!
196
+ else
197
+ if stanza.name == "message" and stanza.at("event")
198
+ @@notication_callback.call(NotificationStanza.new(stanza))
199
+ # Here we need to call the main notification callback!
200
+ end
160
201
  end
161
202
  end
162
203
 
204
+ ##
205
+ # Config loaded from config.yaml
206
+ def self.conf
207
+ @@conf ||= YAML::load(File.read(File.dirname(__FILE__) + '/config.yaml'))
208
+ end
209
+
210
+
163
211
  end
@@ -12,7 +12,48 @@ describe Superfeedr do
12
12
  describe "on_stanza" do
13
13
  end
14
14
 
15
+
15
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
22
+ Superfeedr.subscribe(feeds) do |result|
23
+ result.should be_true
24
+ end
25
+ end
26
+ end
27
+
28
+ 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
34
+ Superfeedr.unsubscribe(feeds) do |result|
35
+ result.should be_true
36
+ end
37
+ end
38
+ end
39
+
40
+ describe "subscriptions" do
41
+ it "should call subscriptions_by_page for each page as long as they're not empty" do
42
+ def method_called_upon_page
43
+ end
44
+ self.should_receive(:method_called_upon_page).exactly(4).times
45
+ 3.times do |t|
46
+ Superfeedr.should_receive(:subscriptions_by_page).with(t+1).and_yield(["a", "b", "c"])
47
+ end
48
+ Superfeedr.should_receive(:subscriptions_by_page).with(4).and_yield([])
49
+ Superfeedr.subscriptions do |result|
50
+ method_called_upon_page
51
+ end
52
+ end
53
+ end
54
+
55
+
56
+ describe "add_feed" do
16
57
  before(:each) do
17
58
  Superfeedr.stub!(:connection).and_return(@mock_connection)
18
59
  Superfeedr.stub!(:send).and_return(true)
@@ -27,28 +68,28 @@ describe Superfeedr do
27
68
  it "should raise an error if not connected" do
28
69
  Superfeedr.should_receive(:connection).and_return(nil)
29
70
  lambda {
30
- Superfeedr.subscribe(@node, &@block)
71
+ Superfeedr.add_feed(@node, &@block)
31
72
  }.should raise_error(Superfeedr::NotConnected)
32
73
  end
33
74
 
34
75
  it "should create a new SubscribeQueryStanza with the right url" do
35
76
  SubscribeQueryStanza.should_receive(:new).with({:node => @node, :from => @mock_connection.jid}).and_return(@mock_stanza)
36
- Superfeedr.subscribe(@node, &@block)
77
+ Superfeedr.add_feed(@node, &@block)
37
78
  end
38
79
 
39
80
  it "should add a Proc that just calls the block in params to the @@callbacks" do
40
- Superfeedr.subscribe(@node, &@block)
81
+ Superfeedr.add_feed(@node, &@block)
41
82
  Superfeedr.callbacks[@mock_stanza.id][:method].should == Superfeedr.method(:on_subscribe)
42
83
  Superfeedr.callbacks[@mock_stanza.id][:param].should == @block
43
84
  end
44
85
 
45
86
  it "should send the stanza" do
46
87
  Superfeedr.should_receive(:send).with(@mock_stanza).and_return(true)
47
- Superfeedr.subscribe(@node, &@block)
88
+ Superfeedr.add_feed(@node, &@block)
48
89
  end
49
90
  end
50
91
 
51
- describe "unsubscribe" do
92
+ describe "remove_feed" do
52
93
  before(:each) do
53
94
  Superfeedr.stub!(:connection).and_return(@mock_connection)
54
95
  Superfeedr.stub!(:send).and_return(true)
@@ -63,28 +104,28 @@ describe Superfeedr do
63
104
  it "should raise an error if not connected" do
64
105
  Superfeedr.should_receive(:connection).and_return(nil)
65
106
  lambda {
66
- Superfeedr.unsubscribe(@node, &@block)
107
+ Superfeedr.remove_feed(@node, &@block)
67
108
  }.should raise_error(Superfeedr::NotConnected)
68
109
  end
69
110
 
70
111
  it "should create a new SubscribeQueryStanza with the right url" do
71
112
  UnsubscribeQueryStanza.should_receive(:new).with({:node => @node, :from => @mock_connection.jid}).and_return(@mock_stanza)
72
- Superfeedr.unsubscribe(@node, &@block)
113
+ Superfeedr.remove_feed(@node, &@block)
73
114
  end
74
115
 
75
116
  it "should add a Proc that just calls the block in params to the @@callbacks" do
76
- Superfeedr.unsubscribe(@node, &@block)
117
+ Superfeedr.remove_feed(@node, &@block)
77
118
  Superfeedr.callbacks[@mock_stanza.id][:method].should == Superfeedr.method(:on_unsubscribe)
78
119
  Superfeedr.callbacks[@mock_stanza.id][:param].should == @block
79
120
  end
80
121
 
81
122
  it "should send the stanza" do
82
123
  Superfeedr.should_receive(:send).with(@mock_stanza).and_return(true)
83
- Superfeedr.unsubscribe(@node, &@block)
124
+ Superfeedr.remove_feed(@node, &@block)
84
125
  end
85
126
  end
86
127
 
87
- describe "subscriptions" do
128
+ describe "subscriptions_by_page" do
88
129
  before(:each) do
89
130
  Superfeedr.stub!(:connection).and_return(@mock_connection)
90
131
  Superfeedr.stub!(:send).and_return(true)
@@ -99,17 +140,17 @@ describe Superfeedr do
99
140
  it "should raise an error if not connected" do
100
141
  Superfeedr.should_receive(:connection).and_return(nil)
101
142
  lambda {
102
- Superfeedr.subscriptions(@page, &@block)
143
+ Superfeedr.subscriptions_by_page(@page, &@block)
103
144
  }.should raise_error(Superfeedr::NotConnected)
104
145
  end
105
146
 
106
147
  it "should create a new SubscribeQueryStanza with the right url" do
107
148
  SubscriptionsQueryStanza.should_receive(:new).with({:page => @page, :from => @mock_connection.jid}).and_return(@mock_stanza)
108
- Superfeedr.subscriptions(@page, &@block)
149
+ Superfeedr.subscriptions_by_page(@page, &@block)
109
150
  end
110
151
 
111
152
  it "should add a Proc that just calls the block in params to the @@callbacks" do
112
- Superfeedr.subscriptions(@page, &@block)
153
+ Superfeedr.subscriptions_by_page(@page, &@block)
113
154
  Superfeedr.callbacks[@mock_stanza.id][:method].should == Superfeedr.method(:on_subscriptions)
114
155
  Superfeedr.callbacks[@mock_stanza.id][:param].should == @block
115
156
 
@@ -117,11 +158,10 @@ describe Superfeedr do
117
158
 
118
159
  it "should send the stanza" do
119
160
  Superfeedr.should_receive(:send).with(@mock_stanza).and_return(true)
120
- Superfeedr.subscriptions(@page, &@block)
161
+ Superfeedr.subscriptions_by_page(@page, &@block)
121
162
  end
122
163
  end
123
164
 
124
-
125
165
  describe "on_subscribe" do
126
166
  it "should call the block with true if the stanza type is 'result'" do
127
167
  xml = <<-EOXML
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.2.1
4
+ version: 0.3.0
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-04 00:00:00 -07:00
12
+ date: 2009-06-06 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -46,6 +46,7 @@ files:
46
46
  - README.rdoc
47
47
  - Rakefile
48
48
  - VERSION.yml
49
+ - lib/config.yaml
49
50
  - lib/stanzas/iq_query_stanza.rb
50
51
  - lib/stanzas/notification_stanza.rb
51
52
  - lib/stanzas/subscribe_query_stanza.rb