ld-celluloid-eventsource 0.9.0 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae62916a2869d9f669a30e437e98f70c840e006e
4
- data.tar.gz: 108da12046da7322ba51e2dd7fdaa6d28bdfeb43
3
+ metadata.gz: 8bd8fda8554cfa1dba5eb39bbf50070aa0d7106b
4
+ data.tar.gz: a16e16201da0c651b4528b4f213230e0200b743e
5
5
  SHA512:
6
- metadata.gz: 3b06a93d8c97309a27f95026a085648f36a2cb97d33dda6e93c87cd355d7c7637b05e2d08a47ec15280fbaeca6ce88a4be699dca74e05ecbe863a416d64112e3
7
- data.tar.gz: e958aea737b951f0b9ece703cf94050390143614f9ad16a838f06d379c21fe7a3f42e5c608c06b35544372b52091715a6dd6cfcc5db9c00da5c4bcd41f893ea8
6
+ metadata.gz: d1d605c0cebbb138c600e8893760c7819237238c58cd20650c419cc9a79f98d3edea814698e25a627ad1767b2fe14e840696ae2de668dcaf10853a4709017dce
7
+ data.tar.gz: 8771be4c7e0dafce34b50018d4d9719460940c15eb86ea059c6bc140d96dbc2e0e1db079308868e09e48dd8869d80a50b5904f8bd16d5dc003a460354a93f993
data/.circle.yml ADDED
@@ -0,0 +1,7 @@
1
+ ruby:
2
+ version: 2.3.1
3
+
4
+ dependencies:
5
+ pre:
6
+ - gem update bundler
7
+ - bundle install
data/Contributing.md ADDED
@@ -0,0 +1,7 @@
1
+ # Celluloid::Eventsource
2
+
3
+ To release:
4
+ 1. Bump version in version.rb
5
+ 1. Commit changes and tag with version: ie 0.8.4
6
+ 1. `VERSION=0.8.4 && git tag $VERSION && git push origin $VERSION && gem build ld-celluloid-eventsource.gemspec && gem push ld-celluloid-eventsource-$VERSION.gem`
7
+ 1. Release on Github
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Celluloid::Eventsource
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/celluloid-eventsource.png)](http://badge.fury.io/rb/celluloid-eventsource)
4
- [![Code Climate](https://codeclimate.com/github/Tonkpils/celluloid-eventsource.png)](https://codeclimate.com/github/Tonkpils/celluloid-eventsource)
5
- [![Build Status](https://travis-ci.org/Tonkpils/celluloid-eventsource.svg?branch=master)](https://travis-ci.org/Tonkpils/celluloid-eventsource)
3
+ [![Gem Version](https://badge.fury.io/rb/celluloid-eventsource.png)](http://badge.fury.io/rb/ld-celluloid-eventsource) [![CircleCI](https://circleci.com/gh/launchdarkly/celluloid-eventsource/tree/master.svg?style=svg)](https://circleci.com/gh/launchdarkly/celluloid-eventsource/tree/master)
6
4
 
7
5
  An EventSource client based off Celluloid::IO.
8
6
 
@@ -12,7 +10,7 @@ Specification based on [EventSource](http://www.w3.org/TR/2012/CR-eventsource-20
12
10
 
13
11
  Add this line to your application's Gemfile:
14
12
 
15
- gem 'celluloid-eventsource'
13
+ gem 'ld-celluloid-eventsource'
16
14
 
17
15
  And then execute:
18
16
 
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'celluloid-io', '~> 0.17.3'
22
22
  spec.add_dependency 'celluloid', '~> 0.18.0.pre'
23
+ spec.add_dependency 'nio4r', '~> 1.1'
23
24
  spec.add_dependency 'http_parser.rb', '~> 0.6.0'
24
25
 
25
26
  spec.add_development_dependency 'atomic', '~> 1.1'
@@ -1,5 +1,5 @@
1
1
  module Celluloid
2
2
  class EventSource
3
- VERSION = "0.9.0"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
  end
@@ -1,8 +1,9 @@
1
1
  require 'celluloid/current'
2
- require "celluloid/eventsource/version"
2
+ require 'celluloid/eventsource/version'
3
3
  require 'celluloid/io'
4
4
  require 'celluloid/eventsource/response_parser'
5
5
  require 'uri'
6
+ require 'base64'
6
7
 
7
8
  module Celluloid
8
9
  class EventSource
@@ -24,6 +25,13 @@ module Celluloid
24
25
  @ready_state = CONNECTING
25
26
  @with_credentials = options.delete(:with_credentials) { false }
26
27
  @headers = default_request_headers.merge(options.fetch(:headers, {}))
28
+ proxy = ENV['HTTP_PROXY'] || ENV['http_proxy'] || options[:proxy]
29
+ if proxy
30
+ proxyUri = URI(proxy)
31
+ if proxyUri.scheme == 'http' || proxyUri.scheme == 'https'
32
+ @proxy = proxyUri
33
+ end
34
+ end
27
35
 
28
36
  @event_type_buffer = ""
29
37
  @last_event_id_buffer = ""
@@ -96,7 +104,22 @@ module Celluloid
96
104
  end
97
105
 
98
106
  def establish_connection
99
- @socket = Celluloid::IO::TCPSocket.new(@url.host, @url.port)
107
+ if @proxy
108
+ sock = ::TCPSocket.new(@proxy.host, @proxy.port)
109
+ @socket = Celluloid::IO::TCPSocket.new(sock)
110
+
111
+ @socket.write(connect_string)
112
+ @socket.flush
113
+ while (line = @socket.readline.chomp) != '' do @parser << line end
114
+
115
+ unless @parser.status_code == 200
116
+ @on[:error].call({status_code: @parser.status_code, body: @parser.chunk})
117
+ return
118
+ end
119
+ else
120
+ sock = ::TCPSocket.new(@url.host, @url.port)
121
+ @socket = Celluloid::IO::TCPSocket.new(sock)
122
+ end
100
123
 
101
124
  if ssl?
102
125
  @socket = Celluloid::IO::SSLSocket.new(@socket)
@@ -104,6 +127,7 @@ module Celluloid
104
127
  end
105
128
 
106
129
  @socket.write(request_string)
130
+ @socket.flush()
107
131
 
108
132
  until @parser.headers?
109
133
  @parser << @socket.readline
@@ -234,6 +258,16 @@ module Celluloid
234
258
  ["GET #{url.request_uri} HTTP/1.1", headers].flatten.join("\r\n").concat("\r\n\r\n")
235
259
  end
236
260
 
261
+ def connect_string
262
+ req = "CONNECT #{url.host}:#{url.port} HTTP/1.1\r\n"
263
+ req << "Host: #{url.host}:#{url.port}\r\n"
264
+ if @proxy.user || @proxy.password
265
+ encoded_credentials = Base64.strict_encode64([@proxy.user || '', @proxy.password || ''].join(":"))
266
+ req << "Proxy-Authorization: Basic #{encoded_credentials}\r\n"
267
+ end
268
+ req << "\r\n"
269
+ end
270
+
237
271
  end
238
272
 
239
273
  end
@@ -39,6 +39,28 @@ RSpec.describe Celluloid::EventSource do
39
39
  headers = es.instance_variable_get('@headers')
40
40
  expect(headers['Authorization']).to eq(auth_header["Authorization"])
41
41
  end
42
+
43
+ it 'parses an http proxy' do
44
+ proxy = "http://myhost:8080"
45
+ allow_any_instance_of(Celluloid::EventSource).to receive_message_chain(:async, :listen)
46
+ es = Celluloid::EventSource.new("http://#{url}", :proxy => proxy)
47
+
48
+ instanceProxy = es.instance_variable_get('@proxy')
49
+ expect(instanceProxy.host).to eq('myhost')
50
+ expect(instanceProxy.port).to eq(8080)
51
+ end
52
+
53
+ it 'parses an http proxy auth' do
54
+ proxy = "http://user:pass@myhost:8080"
55
+ allow_any_instance_of(Celluloid::EventSource).to receive_message_chain(:async, :listen)
56
+ es = Celluloid::EventSource.new("http://#{url}", :proxy => proxy)
57
+
58
+ instanceProxy = es.instance_variable_get('@proxy')
59
+ expect(instanceProxy.host).to eq('myhost')
60
+ expect(instanceProxy.port).to eq(8080)
61
+ expect(instanceProxy.user).to eq('user')
62
+ expect(instanceProxy.password).to eq('pass')
63
+ end
42
64
  end
43
65
 
44
66
  context 'callbacks' do
@@ -67,6 +89,7 @@ RSpec.describe Celluloid::EventSource do
67
89
 
68
90
  Celluloid::EventSource.new("#{dummy.endpoint}/error") do |conn|
69
91
  conn.on_error do |error|
92
+ conn.close
70
93
  future.signal(value_class.new({ msg: error, state: conn.ready_state }))
71
94
  end
72
95
  end
data/spec/spec_helper.rb CHANGED
@@ -14,9 +14,7 @@ RSpec.configure do |config|
14
14
  config.expose_dsl_globally = false
15
15
 
16
16
  config.around(:each) do |ex|
17
- Celluloid.boot
18
17
  ex.run
19
- Celluloid.shutdown
20
18
  end
21
19
 
22
20
  # Run specs in random order to surface order dependencies. If you find an
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ld-celluloid-eventsource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LaunchDarkly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-08 00:00:00.000000000 Z
11
+ date: 2017-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid-io
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.18.0.pre
41
+ - !ruby/object:Gem::Dependency
42
+ name: nio4r
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: http_parser.rb
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -130,9 +144,10 @@ executables: []
130
144
  extensions: []
131
145
  extra_rdoc_files: []
132
146
  files:
147
+ - ".circle.yml"
133
148
  - ".gitignore"
134
149
  - ".rspec"
135
- - ".travis.yml"
150
+ - Contributing.md
136
151
  - Gemfile
137
152
  - LICENSE
138
153
  - README.md
@@ -167,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
182
  version: '0'
168
183
  requirements: []
169
184
  rubyforge_project:
170
- rubygems_version: 2.6.10
185
+ rubygems_version: 2.6.11
171
186
  signing_key:
172
187
  specification_version: 4
173
188
  summary: ld-celluloid-eventsource is a gem to consume SSE streaming API.
data/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- language: ruby
2
-
3
- before_install: gem update bundler
4
-
5
- rvm:
6
- - "2.0.0"
7
- - "2.1.0"
8
- - "2.2.2"