superfeedr-blather 0.1.1 → 0.2.1

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/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"