pebblebed 0.3.15 → 0.3.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee75f8d72025d4c7694243367b3d2c005cabc4e0
4
- data.tar.gz: '09d5d620129964dc80b206c1f3801bda4cebbeb8'
3
+ metadata.gz: ec6e1847afca02058150931728920d66a0488b41
4
+ data.tar.gz: fe9d7005b7ae347ab80d16473b2787ce46b4188f
5
5
  SHA512:
6
- metadata.gz: ed69ba69a5cf148d35c4eb06a864bc2e2026e9f93982657df0768f200bff70e6a704920b50f843fe9e44577cebc602d9fe58ae19706ca9d1033c2bce1ac91ca2
7
- data.tar.gz: bf78c1ac553713d8e40c0ccf85eb7be968744dcfebfcc9c144819691f6c4a686f7c7d8a72d44d7bd60645ae84f0aa6ab78882d973d6c927d421e6fd011415add
6
+ metadata.gz: 9a877ec1296f7df0a29b5ae43c2eb99cd99f39f4dbbe8fce3eda0ce397eae5225294bfe53a8df0f6892194febfabb857811bc75f2f0214606c9dab615d8c8e74
7
+ data.tar.gz: bf10e50a98159afda438c7e6e746dce69e634d5283fbdea2514e7e96434bfde424cd3ee01d3f45aeb1763e3242cda4508702cc6fce72559581cb21a89cded3ce
@@ -3,7 +3,7 @@ require 'deepstruct'
3
3
  module Pebblebed
4
4
  class GenericClient < AbstractClient
5
5
  def initialize(session_key, root_url)
6
- @root_url = root_url
6
+ @root_url = root_url
7
7
  @root_url = URI(@root_url) unless @root_url.is_a?(URI::HTTP)
8
8
  @session_key = session_key
9
9
  end
@@ -22,6 +22,14 @@ module Pebblebed
22
22
  end
23
23
  end
24
24
 
25
+ def stream(method, url = '', params = {}, options = {})
26
+ on_data = options[:on_data] or raise "Option :on_data must be specified"
27
+ method_name = "stream_#{method.to_s.downcase}"
28
+ raise "Method not supported for streaming" unless Pebblebed::Http.respond_to?(method_name)
29
+ return Pebblebed::Http.send(method_name, service_url(url), service_params(params),
30
+ on_data: on_data)
31
+ end
32
+
25
33
  def service_url(url, params = nil)
26
34
  result = @root_url.dup
27
35
  result.path = result.path.sub(/\/+$/, "") + url
@@ -50,7 +50,7 @@ module Pebblebed
50
50
 
51
51
  def self.get(url = nil, params = nil, &block)
52
52
  url, params = url_and_params_from_args(url, params, &block)
53
- return with_curl { |easy|
53
+ return do_easy { |easy|
54
54
  easy.url = url_with_params(url, params)
55
55
  easy.http_get
56
56
  }
@@ -59,7 +59,7 @@ module Pebblebed
59
59
  def self.post(url, params, &block)
60
60
  url, params = url_and_params_from_args(url, params, &block)
61
61
  content_type, body = serialize_params(params)
62
- return with_curl { |easy|
62
+ return do_easy { |easy|
63
63
  easy.url = url.to_s
64
64
  easy.headers['Accept'] = 'application/json'
65
65
  easy.headers['Content-Type'] = content_type
@@ -70,7 +70,7 @@ module Pebblebed
70
70
  def self.put(url, params, &block)
71
71
  url, params = url_and_params_from_args(url, params, &block)
72
72
  content_type, body = serialize_params(params)
73
- return with_curl { |easy|
73
+ return do_easy { |easy|
74
74
  easy.url = url.to_s
75
75
  easy.headers['Accept'] = 'application/json'
76
76
  easy.headers['Content-Type'] = content_type
@@ -80,12 +80,55 @@ module Pebblebed
80
80
 
81
81
  def self.delete(url, params, &block)
82
82
  url, params = url_and_params_from_args(url, params, &block)
83
- return with_curl { |easy|
83
+ return do_easy { |easy|
84
84
  easy.url = url_with_params(url, params)
85
85
  easy.http_delete
86
86
  }
87
87
  end
88
88
 
89
+ def self.stream_get(url = nil, params = nil, options = {})
90
+ return do_easy { |easy|
91
+ on_data = options[:on_data] or raise "Option :on_data must be specified"
92
+
93
+ url, params = url_and_params_from_args(url, params)
94
+
95
+ easy.url = url_with_params(url, params)
96
+ easy.on_body do |data|
97
+ on_data.call(data)
98
+ data.length
99
+ end
100
+ easy.http_get
101
+ }
102
+ end
103
+
104
+ def self.stream_post(url, params, options = {})
105
+ return do_easy { |easy|
106
+ on_data = options[:on_data] or raise "Option :on_data must be specified"
107
+
108
+ url, params = url_and_params_from_args(url, params)
109
+ content_type, body = serialize_params(params)
110
+
111
+ easy.url = url.to_s
112
+ easy.headers['Accept'] = 'application/json'
113
+ easy.headers['Content-Type'] = content_type
114
+ easy.http_post(body)
115
+ }
116
+ end
117
+
118
+ def self.stream_put(url, params, options = {})
119
+ return do_easy { |easy|
120
+ on_data = options[:on_data] or raise "Option :on_data must be specified"
121
+
122
+ url, params = url_and_params_from_args(url, params)
123
+ content_type, body = serialize_params(params)
124
+
125
+ easy.url = url.to_s
126
+ easy.headers['Accept'] = 'application/json'
127
+ easy.headers['Content-Type'] = content_type
128
+ easy.http_put(body)
129
+ }
130
+ end
131
+
89
132
  private
90
133
 
91
134
  def self.serialize_params(params)
@@ -114,11 +157,17 @@ module Pebblebed
114
157
  response
115
158
  end
116
159
 
117
- def self.with_curl(&block)
160
+ def self.do_easy(&block)
161
+ with_easy do |easy|
162
+ yield easy
163
+ return handle_http_errors(Response.new(easy))
164
+ end
165
+ end
166
+
167
+ def self.with_easy(&block)
118
168
  easy = Thread.current[:pebblebed_curb_easy] ||= Curl::Easy.new
119
169
  easy.reset
120
170
  yield easy
121
- return handle_http_errors(Response.new(easy))
122
171
  end
123
172
 
124
173
  def self.url_with_params(url, params)
@@ -1,3 +1,3 @@
1
1
  module Pebblebed
2
- VERSION = "0.3.15"
2
+ VERSION = "0.3.16"
3
3
  end
@@ -49,4 +49,27 @@ describe Pebblebed::GenericClient do
49
49
  expect(result).to eq "Ok"
50
50
  end
51
51
 
52
+ describe 'streaming' do
53
+ context 'GET' do
54
+ it "streams response body" do
55
+ curl_result = DeepStruct.wrap({status: 200, body: nil})
56
+ allow(Pebblebed::Http).to receive(:stream_get).with(
57
+ URI.parse("http://example.org/"),
58
+ {"session" => "session_key"},
59
+ anything) { |_, _, options|
60
+ options[:on_data].call("hello")
61
+ }.and_return(curl_result)
62
+
63
+ buf = ""
64
+ client = Pebblebed::GenericClient.new("session_key", "http://example.org/")
65
+ result = client.stream(:get, '/', {}, on_data: ->(data) {
66
+ buf << data
67
+ })
68
+ expect(buf).to eq "hello"
69
+ expect(result.status).to eq 200
70
+ expect(result.body).to eq nil
71
+ end
72
+ end
73
+ end
74
+
52
75
  end
data/spec/http_spec.rb CHANGED
@@ -87,4 +87,19 @@ describe Pebblebed::Http do
87
87
  expect(result["QUERY_STRING"]).to eq "hello=world"
88
88
  end
89
89
 
90
+ describe 'streaming' do
91
+ context 'GET' do
92
+ it "streams response body" do
93
+ buf = ""
94
+ response = Pebblebed::Http.stream_get(pebble_url, {hello: 'world'},
95
+ on_data: ->(data) {
96
+ buf << data
97
+ })
98
+ result = JSON.parse(buf)
99
+ expect(result["QUERY_STRING"]).to eq "hello=world"
100
+ expect(response.body).to eq nil
101
+ end
102
+ end
103
+ end
104
+
90
105
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pebblebed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.15
4
+ version: 0.3.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-06-13 00:00:00.000000000 Z
12
+ date: 2017-07-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -303,7 +303,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
303
303
  version: '0'
304
304
  requirements: []
305
305
  rubyforge_project: pebblebed
306
- rubygems_version: 2.5.2
306
+ rubygems_version: 2.4.5.2
307
307
  signing_key:
308
308
  specification_version: 4
309
309
  summary: Development tools for working with Pebblebed
@@ -323,3 +323,4 @@ test_files:
323
323
  - spec/sinatra_spec.rb
324
324
  - spec/spec_helper.rb
325
325
  - spec/uid_spec.rb
326
+ has_rdoc: