gnip-stream 0.0.1 → 1.0.0

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