superfeedr-blather 0.1.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,7 +1,5 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem 'blather', "~> 0.4.14"
4
-
5
3
  group :development do
6
4
  gem "jeweler", "~> 1.5.2"
7
5
  gem "yard", "~> 0.6.0"
@@ -13,4 +11,4 @@ group :test do
13
11
  gem 'autotest-notification', :require => 'autotest_notification'
14
12
  end
15
13
 
16
- gemspec :name => "superfeedr-blather"
14
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- superfeedr-blather (0.1.1)
5
- blather (~> 0.4.14)
4
+ superfeedr-blather (0.2.1)
5
+ blather (~> 0.4)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
@@ -40,7 +40,7 @@ PLATFORMS
40
40
  DEPENDENCIES
41
41
  autotest
42
42
  autotest-notification
43
- blather (~> 0.4.14)
43
+ blather (~> 0.4)
44
44
  jeweler (~> 1.5.2)
45
45
  rspec
46
46
  superfeedr-blather!
data/README CHANGED
@@ -37,6 +37,12 @@ new notification on demand ("show console" displays the button).
37
37
 
38
38
  == Install
39
39
 
40
+ Rubygems:
41
+
42
+ gem install superfeedr-blather
43
+
44
+ From source:
45
+
40
46
  git clone git://github.com/kapoq/superfeedr-blather.git
41
47
 
42
48
  == Source and latest version
@@ -55,6 +61,7 @@ Dave Nolan / Kapoq Ltd / kapoq.com[http://kapoq.com]
55
61
  * apply patches upstream to blather
56
62
  * loading filename conflicts using bundler
57
63
  * multiple namespaces
64
+ * append to existing handlers (e.g. DaemonKit::XMPP stomps over client#when_ready)
58
65
 
59
66
  * improve type-casting
60
67
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.1
@@ -1,7 +1,9 @@
1
1
  require File.expand_path(File.dirname(__FILE__)) + '/../lib/superfeedr-blather'
2
2
  require 'blather/client'
3
3
 
4
- setup YOUR_SUPERFEEDR_USERNAME, YOUR_SUPERFEEDR_PASSWORD
4
+ # setup YOUR_SUPERFEEDR_USERNAME, YOUR_SUPERFEEDR_PASSWORD
5
+
6
+ DUMMY = "http://superfeedr.com/dummy.xml"
5
7
 
6
8
  when_ready do
7
9
  Blather.logger.info "Connected..."
@@ -12,30 +14,40 @@ when_ready do
12
14
  write_to_stream Blather::Stanza::PubSub::Subscriptions.new(:get, :id => "subman1", :from => jid, :to => "firehoser.superfeedr.com")
13
15
  }
14
16
 
15
- EM.add_timer(4) {
17
+ EM.add_timer(3) {
16
18
  Blather.logger.info "unsubscribing from dummy"
17
- write_to_stream Blather::Stanza::PubSub::Unsubscribe.new :set, "firehoser.superfeedr.com", "http://superfeedr.com/dummy.xml", jid
19
+ write_to_stream Blather::Stanza::PubSub::Unsubscribe.new(:set, "firehoser.superfeedr.com", DUMMY, jid)
18
20
  }
19
21
 
20
- EM.add_timer(7) {
22
+ EM.add_timer(5) {
21
23
  write_to_stream Blather::Stanza::PubSub::Subscriptions.new(:get, :id => "subman1", :from => jid, :to => "firehoser.superfeedr.com")
22
24
  }
23
25
 
24
- EM.add_timer(10) {
26
+ EM.add_timer(7) {
25
27
  Blather.logger.info "re-subscribing to dummy"
26
- write_to_stream Blather::Stanza::PubSub::Subscribe.new :set, "firehoser.superfeedr.com", "http://superfeedr.com/dummy.xml", jid
28
+ write_to_stream Blather::Stanza::PubSub::Subscribe.new(:set, "firehoser.superfeedr.com", DUMMY, jid)
27
29
  }
28
30
 
29
- EM.add_timer(13) {
31
+ EM.add_timer(9) {
30
32
  write_to_stream Blather::Stanza::PubSub::Subscriptions.new(:get, :id => "subman1", :from => jid, :to => "firehoser.superfeedr.com")
33
+ EM.stop
31
34
  }
32
35
  end
33
36
 
37
+ # Subscription requests receive a stanza with the subscription
38
+ # status. Helpful.
39
+ pubsub_subscription :node => DUMMY do |sub|
40
+ Blather.logger.info "#{sub.node} is #{sub.subscription}"
41
+ end
42
+
43
+ # Unsubscription requests just receive iq reply...
44
+ iq :result?, :id => /^#{Blather::Stanza::PubSub::Unsubscribe::PREFIX}_/ do |iq|
45
+ Blather.logger.info "Reply: unsubscription request for #{iq.id.split(/_/).last} received OK"
46
+ end
47
+
48
+ # ...but we can always check the list of subscriptions
34
49
  pubsub_subscriptions do |subs|
35
- if subs.list.detect { |sub| sub.node_url =~ /dummy\.xml/ }
36
- Blather.logger.info "subscribed to dummy.xml"
37
- else
38
- Blather.logger.info "not subscribed to dummy.xml"
50
+ unless subs.subscribed.include?(DUMMY)
51
+ Blather.logger.info "#{DUMMY} is unsubscribed"
39
52
  end
40
53
  end
41
-
@@ -25,11 +25,9 @@ module Blather
25
25
  aff
26
26
  end
27
27
 
28
- def list
29
- subscriptions.find('//ns:subscription', :ns => self.class.registered_ns).map do |child|
30
- Superfeedr::Subscription.new(child)
31
- end
32
- end
28
+ def subscribed
29
+ (list[:subscribed] || []).map { |h| h[:node] }
30
+ end
33
31
  end
34
32
  end
35
33
  end
@@ -1,4 +1,7 @@
1
1
  module Superfeedr
2
+ FIREHOSER = "firehoser.superfeedr.com"
3
+ MAX_SIMULTANEOUS_SUBSCRIPTION_REQUESTS = 30
4
+
2
5
  class Node
3
6
  def initialize(node)
4
7
  @node = node
@@ -197,14 +200,4 @@ module Superfeedr
197
200
  @point ||= (raw || []) && raw.split(",")
198
201
  end
199
202
  end
200
-
201
- class Subscription < Node
202
- def subscription_state
203
- content_from("@subscription")
204
- end
205
-
206
- def node_url
207
- content_from("@node")
208
- end
209
- end
210
203
  end
@@ -3,5 +3,10 @@ require 'bundler/setup'
3
3
 
4
4
  require 'blather'
5
5
 
6
- %w(namespaces pubsub event subscriptions).each { |f| require File.join(File.expand_path(File.dirname(__FILE__)), "blather", f) }
7
- %w(superfeedr).each { |f| require File.join(File.expand_path(File.dirname(__FILE__)), "superfeedr", f) }
6
+ %w(namespaces pubsub event subscriptions unsubscribe).each { |f|
7
+ require File.join(File.expand_path(File.dirname(__FILE__)), "blather", f)
8
+ }
9
+
10
+ %w(superfeedr).each { |f|
11
+ require File.join(File.expand_path(File.dirname(__FILE__)), "superfeedr", f)
12
+ }
@@ -4,19 +4,10 @@ describe "list of resources/subscriptions" do
4
4
  let(:stanza) { @stanza ||= open(File.expand_path(File.dirname(__FILE__) + '/../fixtures/resource_list.xml')) }
5
5
  let(:node) { @node ||= Blather::XMPPNode.import(Nokogiri::XML.parse(stanza).root) }
6
6
 
7
- describe Blather::Stanza::PubSub::Subscriptions do
8
- it "finds subscriptions" do
9
- node.list.should have(2).items
10
- end
11
- end
12
-
13
- describe Superfeedr::Subscription do
14
- let(:sub) { node.list.first }
15
-
16
- it "finds subscription state" do
17
- sub.subscription_state.should == "subscribed"
18
- end
19
- end
7
+ it "finds all subscribed nodes" do
8
+ node.subscribed.should have(2).items
9
+ node.subscribed.should include("http://superfeedr.com/dummy.xml")
10
+ end
20
11
  end
21
12
 
22
13
  describe "requesting list of resources/subscriptions" do
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  # Generated by jeweler
2
3
  # DO NOT EDIT THIS FILE DIRECTLY
3
4
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
@@ -5,11 +6,11 @@
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = %q{superfeedr-blather}
8
- s.version = "0.1.1"
9
+ s.version = "0.2.1"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
12
  s.authors = ["dave@kapoq.com"]
12
- s.date = %q{2011-01-03}
13
+ s.date = %q{2011-01-05}
13
14
  s.description = %q{You get some patches for Blather and some classes that wrap the stuff you want from Superfeedr (entries, authors etc.). Under-the-hood, Blather uses EventMachine and Nokogiri so it’s fast and convenient. If you want to daemonize your client, daemon-kit comes ready with a blather template.}
14
15
  s.email = %q{dave@kapoq.com}
15
16
  s.extra_rdoc_files = [
@@ -62,30 +63,12 @@ Gem::Specification.new do |s|
62
63
  s.specification_version = 3
63
64
 
64
65
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
65
- s.add_runtime_dependency(%q<blather>, ["~> 0.4.14"])
66
- s.add_runtime_dependency(%q<superfeedr-blather>, [">= 0"])
67
- s.add_runtime_dependency(%q<blather>, ["~> 0.4.14"])
68
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
69
- s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
70
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
71
- s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
66
+ s.add_runtime_dependency(%q<blather>, ["~> 0.4"])
72
67
  else
73
- s.add_dependency(%q<blather>, ["~> 0.4.14"])
74
- s.add_dependency(%q<superfeedr-blather>, [">= 0"])
75
- s.add_dependency(%q<blather>, ["~> 0.4.14"])
76
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
77
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
78
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
79
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
68
+ s.add_dependency(%q<blather>, ["~> 0.4"])
80
69
  end
81
70
  else
82
- s.add_dependency(%q<blather>, ["~> 0.4.14"])
83
- s.add_dependency(%q<superfeedr-blather>, [">= 0"])
84
- s.add_dependency(%q<blather>, ["~> 0.4.14"])
85
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
86
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
87
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
88
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
71
+ s.add_dependency(%q<blather>, ["~> 0.4"])
89
72
  end
90
73
  end
91
74
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 2
7
8
  - 1
8
- - 1
9
- version: 0.1.1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - dave@kapoq.com
@@ -14,11 +14,12 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-03 00:00:00 +01:00
17
+ date: 2011-01-05 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: blather
22
+ prerelease: false
22
23
  requirement: &id001 !ruby/object:Gem::Requirement
23
24
  none: false
24
25
  requirements:
@@ -27,99 +28,9 @@ dependencies:
27
28
  segments:
28
29
  - 0
29
30
  - 4
30
- - 14
31
- version: 0.4.14
31
+ version: "0.4"
32
32
  type: :runtime
33
- prerelease: false
34
33
  version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: superfeedr-blather
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- segments:
43
- - 0
44
- version: "0"
45
- type: :runtime
46
- prerelease: false
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: blather
50
- requirement: &id003 !ruby/object:Gem::Requirement
51
- none: false
52
- requirements:
53
- - - ~>
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- - 4
58
- - 14
59
- version: 0.4.14
60
- type: :runtime
61
- prerelease: false
62
- version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
- name: jeweler
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
68
- - - ~>
69
- - !ruby/object:Gem::Version
70
- segments:
71
- - 1
72
- - 5
73
- - 2
74
- version: 1.5.2
75
- type: :development
76
- prerelease: false
77
- version_requirements: *id004
78
- - !ruby/object:Gem::Dependency
79
- name: yard
80
- requirement: &id005 !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- segments:
86
- - 0
87
- - 6
88
- - 0
89
- version: 0.6.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: *id005
93
- - !ruby/object:Gem::Dependency
94
- name: jeweler
95
- requirement: &id006 !ruby/object:Gem::Requirement
96
- none: false
97
- requirements:
98
- - - ~>
99
- - !ruby/object:Gem::Version
100
- segments:
101
- - 1
102
- - 5
103
- - 2
104
- version: 1.5.2
105
- type: :development
106
- prerelease: false
107
- version_requirements: *id006
108
- - !ruby/object:Gem::Dependency
109
- name: yard
110
- requirement: &id007 !ruby/object:Gem::Requirement
111
- none: false
112
- requirements:
113
- - - ~>
114
- - !ruby/object:Gem::Version
115
- segments:
116
- - 0
117
- - 6
118
- - 0
119
- version: 0.6.0
120
- type: :development
121
- prerelease: false
122
- version_requirements: *id007
123
34
  description: "You get some patches for Blather and some classes that wrap the stuff you want from Superfeedr (entries, authors etc.). Under-the-hood, Blather uses EventMachine and Nokogiri so it\xE2\x80\x99s fast and convenient. If you want to daemonize your client, daemon-kit comes ready with a blather template."
124
35
  email: dave@kapoq.com
125
36
  executables: []
@@ -169,7 +80,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
80
  requirements:
170
81
  - - ">="
171
82
  - !ruby/object:Gem::Version
172
- hash: 3412587347389494585
173
83
  segments:
174
84
  - 0
175
85
  version: "0"