gnip-stream 0.0.1 → 1.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2a44363dec5f30d5653aa57acbc5c8ca83163829
4
+ data.tar.gz: 897cb6a887bca7d7190b0cf23b7e52a71a49f176
5
+ SHA512:
6
+ metadata.gz: 9bb28a5bbcce731be4806b40a5c0bd95b9b08ab0653767dbeda4ebf1b370014ed212f8d27724b69c1c8c6739027584cfc331d2756c294f955b7109745ae6f1e6
7
+ data.tar.gz: 078d8c413a644f4b35a240a8596ea65f83d8c95a52108929c469b6c02bcc4f80e033996bf725ffc4d223a7a5b59b1cbfe980f2285e12379a530f04f4c3250993
data/.gitignore CHANGED
@@ -2,3 +2,5 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ tags
6
+ .idea
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "vendor/em-http-request"]
2
+ path = vendor/em-http-request
3
+ url = git://github.com/eriwen/em-http-request.git
data/README.md CHANGED
@@ -37,6 +37,7 @@ end
37
37
 
38
38
  * [Ryan Weald](https://github.com/rweald)
39
39
  * [Sharethrough Team](https://github.com/sharethrough)
40
+ * [Eric Wendelin](http://eriwen.com)
40
41
 
41
42
  ##License
42
43
  MIT. See [LICENSE](https://github.com/rweald/gnip-stream/blob/master/LICENSE) file for more details.
data/gnip-stream.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Ryan Weald"]
9
9
  s.email = ["ryan@weald.com"]
10
10
  s.homepage = "https://github.com/rweald/gnip-stream"
11
- s.summary = %q{}
11
+ s.summary = "A library to connect and stream data from the GNIP streaming API"
12
12
  s.description = %q{}
13
13
 
14
14
  s.rubyforge_project = "gnip-stream"
@@ -16,9 +16,9 @@ Gem::Specification.new do |s|
16
16
  s.files = `git ls-files`.split("\n")
17
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
19
+ s.require_paths = ["lib", "vendor"]
20
20
 
21
21
  s.add_development_dependency "rspec"
22
22
 
23
- s.add_dependency "em-http-request", ">= 1.0.0"
23
+ s.add_dependency "em-http-request", ">= 1.0.3"
24
24
  end
@@ -15,7 +15,8 @@ module GnipStream
15
15
  end
16
16
 
17
17
  def consume(&block)
18
- @stream.on_message(&block)
18
+ @client_callback = block if block
19
+ @stream.on_message(&@client_callback)
19
20
  @stream.connect
20
21
  end
21
22
  end
@@ -1,9 +1,7 @@
1
- require 'gnip-stream/powertrack_authentication'
2
1
  module GnipStream
3
2
  class PowertrackClient
4
3
  def initialize(url, username, password)
5
- @authentication = PowertrackAuthentication.new(url, username, password)
6
- @stream = JsonStream.new(url)
4
+ @stream = JsonStream.new(url, {'authorization' => [username, password], 'accept-encoding' => 'gzip, compressed'})
7
5
  @error_handler = ErrorReconnect.new(self, :consume)
8
6
  @connection_close_handler = ErrorReconnect.new(self, :consume)
9
7
  configure_handlers
@@ -15,17 +13,9 @@ module GnipStream
15
13
  end
16
14
 
17
15
  def consume(&block)
18
- @client_callback = block
16
+ @client_callback = block if block
19
17
  @stream.on_message(&@client_callback)
20
- authenticate
21
18
  @stream.connect
22
19
  end
23
-
24
- def authenticate
25
- @authentication.authenticate
26
- @stream.url = @authentication.location
27
- @stream.headers = {"cookie" => @authentication.cookies}
28
- end
29
-
30
20
  end
31
21
  end
@@ -3,6 +3,8 @@ require 'em-http-request'
3
3
 
4
4
  module GnipStream
5
5
  class Stream
6
+
7
+ EventMachine.threadpool_size = 3
6
8
 
7
9
  attr_accessor :headers, :options, :url, :username, :password
8
10
 
@@ -26,7 +28,7 @@ module GnipStream
26
28
 
27
29
  def connect
28
30
  EM.run do
29
- http = EM::HttpRequest.new(@url, :inactivity_timeout => 0).get(:head => @headers)
31
+ http = EM::HttpRequest.new(@url, :inactivity_timeout => 2**16, :connection_timeout => 2**16).get(:head => @headers)
30
32
  http.stream { |chunk| process_chunk(chunk) }
31
33
  http.callback {
32
34
  handle_connection_close(http)
@@ -1,3 +1,3 @@
1
1
  module GnipStream
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -3,46 +3,27 @@ require 'gnip-stream/powertrack_client'
3
3
 
4
4
  describe GnipStream::PowertrackClient do
5
5
  let(:fake_stream) { double("GnipStream::JsonStream").as_null_object }
6
- let(:fake_auth) { double("GnipStream::PowertrackAuthentication").as_null_object }
7
6
  before do
8
7
  GnipStream::JsonStream.stub(:new => fake_stream)
9
- GnipStream::PowertrackAuthentication.stub(:new => fake_auth)
10
8
  end
11
9
 
12
10
  subject { GnipStream::PowertrackClient.new("http://example.com", "user", "password") }
13
11
 
14
12
  describe "#initialize" do
15
- it "initializes a PowertrackAuthentication instance" do
16
- GnipStream::PowertrackAuthentication.should_receive(:new)
17
- subject
18
- end
19
-
20
13
  it "initializes an instance JsonStream" do
21
- GnipStream::JsonStream.should_receive(:new)
14
+ GnipStream::JsonStream.should_receive(:new)
22
15
  subject
23
16
  end
24
17
  end
25
18
 
26
19
  describe "configure_handlers" do
27
20
  it "sets up the appropriate error and close handlers" do
28
- fake_stream.should_receive(:on_error).twice
21
+ fake_stream.should_receive(:on_error).twice
29
22
  fake_stream.should_receive(:on_connection_close).twice
30
23
  subject.configure_handlers
31
24
  end
32
25
  end
33
26
 
34
- describe "#authenticate" do
35
- it "performs the necessary authentication and passes appropriate credentials to stream" do
36
- fake_auth.should_receive(:authenticate)
37
- fake_auth.should_receive(:location).and_return("http://example.com")
38
- fake_auth.should_receive(:cookies).and_return("some cookie")
39
-
40
- fake_stream.should_receive(:url=).with("http://example.com")
41
- fake_stream.should_receive(:headers=)
42
- subject.authenticate
43
- end
44
- end
45
-
46
27
  describe "#consume" do
47
28
  it "setup the client callback" do
48
29
  fake_stream.should_receive(:on_message)
metadata CHANGED
@@ -1,46 +1,49 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gnip-stream
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - Ryan Weald
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2011-10-21 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
11
+
12
+ date: 2013-10-31 00:00:00 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70139514960160 !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
23
16
  prerelease: false
24
- version_requirements: *70139514960160
25
- - !ruby/object:Gem::Dependency
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - &id003
20
+ - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ type: :development
24
+ version_requirements: *id001
25
+ - !ruby/object:Gem::Dependency
26
26
  name: em-http-request
27
- requirement: &70139514958620 !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: 1.0.0
33
- type: :runtime
34
27
  prerelease: false
35
- version_requirements: *70139514958620
36
- description: ''
37
- email:
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.3
33
+ type: :runtime
34
+ version_requirements: *id002
35
+ description: ""
36
+ email:
38
37
  - ryan@weald.com
39
38
  executables: []
39
+
40
40
  extensions: []
41
+
41
42
  extra_rdoc_files: []
42
- files:
43
+
44
+ files:
43
45
  - .gitignore
46
+ - .gitmodules
44
47
  - .pryrc
45
48
  - .rvmrc
46
49
  - .travis.yml
@@ -54,7 +57,6 @@ files:
54
57
  - lib/gnip-stream/error_reconnect.rb
55
58
  - lib/gnip-stream/facebook_client.rb
56
59
  - lib/gnip-stream/json_stream.rb
57
- - lib/gnip-stream/powertrack_authentication.rb
58
60
  - lib/gnip-stream/powertrack_client.rb
59
61
  - lib/gnip-stream/stream.rb
60
62
  - lib/gnip-stream/stream_delegate.rb
@@ -64,41 +66,39 @@ files:
64
66
  - spec/gnip-stream/error_reconnect_spec.rb
65
67
  - spec/gnip-stream/facebook_client_spec.rb
66
68
  - spec/gnip-stream/json_stream_spec.rb
67
- - spec/gnip-stream/powertrack_authentication_spec.rb
68
69
  - spec/gnip-stream/powertrack_client_spec.rb
69
70
  - spec/gnip-stream/stream_spec.rb
70
71
  - spec/gnip-stream/xml_stream_spec.rb
71
72
  - spec/spec_helper.rb
72
73
  homepage: https://github.com/rweald/gnip-stream
73
74
  licenses: []
75
+
76
+ metadata: {}
77
+
74
78
  post_install_message:
75
79
  rdoc_options: []
76
- require_paths:
80
+
81
+ require_paths:
77
82
  - lib
78
- required_ruby_version: !ruby/object:Gem::Requirement
79
- none: false
80
- requirements:
81
- - - ! '>='
82
- - !ruby/object:Gem::Version
83
- version: '0'
84
- required_rubygems_version: !ruby/object:Gem::Requirement
85
- none: false
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
83
+ - vendor
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - *id003
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - *id003
90
90
  requirements: []
91
+
91
92
  rubyforge_project: gnip-stream
92
- rubygems_version: 1.8.10
93
+ rubygems_version: 2.0.3
93
94
  signing_key:
94
- specification_version: 3
95
- summary: ''
96
- test_files:
95
+ specification_version: 4
96
+ summary: A library to connect and stream data from the GNIP streaming API
97
+ test_files:
97
98
  - spec/gnip-stream/data_buffer_spec.rb
98
99
  - spec/gnip-stream/error_reconnect_spec.rb
99
100
  - spec/gnip-stream/facebook_client_spec.rb
100
101
  - spec/gnip-stream/json_stream_spec.rb
101
- - spec/gnip-stream/powertrack_authentication_spec.rb
102
102
  - spec/gnip-stream/powertrack_client_spec.rb
103
103
  - spec/gnip-stream/stream_spec.rb
104
104
  - spec/gnip-stream/xml_stream_spec.rb
@@ -1,27 +0,0 @@
1
- module GnipStream
2
- class PowertrackAuthentication
3
- attr_accessor :cookies, :location
4
- def initialize(url, username, password)
5
- @url = url
6
- @username = username
7
- @password = password
8
- end
9
-
10
- def authenticate
11
- EM.run do
12
- http = EM::HttpRequest.new(@url).get(
13
- :head => {"authorization" => [@username, @password]})
14
- http.headers { |head| parse_response_header(head) }
15
- http.callback { EM.stop }
16
- http.error do
17
- raise "Gnip Authentication Failed. Reason was #{http.error}"
18
- end
19
- end
20
- end
21
-
22
- def parse_response_header(header)
23
- @location = header["LOCATION"]
24
- @cookies = (header["SET_COOKIE"].first.split(";")[0..2].join(";"))
25
- end
26
- end
27
- end
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
- require 'gnip-stream/powertrack_authentication'
3
-
4
- describe GnipStream::PowertrackAuthentication do
5
- subject { GnipStream::PowertrackAuthentication.new("http://example.com",
6
- "user", "password") }
7
- describe "#authenticate" do
8
- let(:fake_request) { double("fake request") }
9
- it "should make a request to the GNIP API to receive access cookie" do
10
- EM::HttpRequest.should_receive(:new).with("http://example.com").and_return(fake_request)
11
- fake_request.should_receive(:get) do |args|
12
- args[:head].should == {'authorization' => ["user", "password"]}
13
- EM.stop
14
- double.as_null_object
15
- end
16
-
17
- subject.authenticate
18
- end
19
- end
20
-
21
- describe "#parse_response_header" do
22
- it "should set the stream url based on 'LOCATION' header" do
23
- subject.parse_response_header({"SET_COOKIE" => ["session_token=foobar; domain=.gnip.com; path=/;
24
- expires=Wed, 13-Jul-2011 22:10:10 GMT _base_session=hello; path=/; HttpOnly"]})
25
- subject.cookies.should == "session_token=foobar; domain=.gnip.com; path=/"
26
- end
27
-
28
- it "should set the url that we can stream data from" do
29
- subject.parse_response_header("LOCATION" => "http://example.com", "SET_COOKIE" => ["session_token=foobar; domain=.gnip.com; path=/;
30
- expires=Wed, 13-Jul-2011 22:10:10 GMT _base_session=hello; path=/; HttpOnly"])
31
- subject.location.should == "http://example.com"
32
- end
33
- end
34
- end