datasift 2.0.2 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source :rubygems
1
+ source "https://rubygems.org"
2
2
  gemspec
data/README.md CHANGED
@@ -56,6 +56,12 @@ more details.
56
56
  Changelog
57
57
  ---------
58
58
 
59
+ * v.2.0.3 Stability improvement and bug fix (2013-03-04)
60
+
61
+ Removed references to deprecated Historic output field 'volume_info'.
62
+ Added 65s timeout on live streaming to handle 'silent' server disconnects.
63
+ Minor changes to ensure Ruby 2.0 compatibility.
64
+
59
65
  * v.2.0.2 Added missing Historic sample size into historic/prepare requests (2012-12-03)
60
66
 
61
67
  * v.2.0.1 Fixed a bug that was preventing streaming connections from being established (2012-09-03)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.2
1
+ 2.0.3
@@ -16,7 +16,7 @@ if ARGV.size == 0
16
16
  end
17
17
 
18
18
  # Include the DataSift library
19
- require File.dirname(__FILE__) + '/../lib/datasift'
19
+ require './' + File.dirname(__FILE__) + '/../lib/datasift'
20
20
 
21
21
  # Include the configuration - put your username and API key in this file
22
22
  require 'yaml'
@@ -8,7 +8,7 @@
8
8
  #
9
9
 
10
10
  # Include the DataSift library
11
- require File.dirname(__FILE__) + '/../lib/datasift'
11
+ require './' + File.dirname(__FILE__) + '/../lib/datasift'
12
12
 
13
13
  # Include the configuration - put your username and API key in this file
14
14
  require 'yaml'
@@ -13,7 +13,7 @@
13
13
  #
14
14
 
15
15
  # Include the DataSift library
16
- require File.dirname(__FILE__) + '/../lib/datasift'
16
+ require './' + File.dirname(__FILE__) + '/../lib/datasift'
17
17
 
18
18
  # Function to format a number with commas
19
19
  def number_with_delimiter(number, delimiter=',')
@@ -10,7 +10,7 @@
10
10
  #
11
11
 
12
12
  # Include the DataSift library
13
- require File.dirname(__FILE__) + '/../lib/datasift'
13
+ require './' + File.dirname(__FILE__) + '/../lib/datasift'
14
14
 
15
15
  # Include the configuration - put your username and API key in this file
16
16
  require 'yaml'
@@ -10,7 +10,7 @@
10
10
  #
11
11
 
12
12
  # Include the DataSift library
13
- require File.dirname(__FILE__) + '/../lib/datasift'
13
+ require './' + File.dirname(__FILE__) + '/../lib/datasift'
14
14
 
15
15
  # Include the configuration - put your username and API key in this file
16
16
  require 'yaml'
@@ -18,7 +18,7 @@ if ARGV.size == 0
18
18
  end
19
19
 
20
20
  # Include the DataSift library
21
- require File.dirname(__FILE__) + '/../lib/datasift'
21
+ require './' + File.dirname(__FILE__) + '/../lib/datasift'
22
22
 
23
23
  # Include the configuration - put your username and API key in this file
24
24
  require 'yaml'
@@ -7,19 +7,18 @@ module DataSift
7
7
  class ApiClient
8
8
  #Make a call to a DataSift API endpoint.
9
9
  #=== Parameters
10
+ #* +user+ - The DataSift User object.
10
11
  #* +endpoint+ - The endpoint of the API call.
11
12
  #* +params+ - The parameters to be passed along with the request.
12
- #* +username+ - The username for the Auth header
13
- #* +api_key+ - The API key for the Auth header
14
13
  #=== Returns
15
14
  #A Hash contatining...
16
15
  #* +response_code+ - The HTTP response code.
17
16
  #* +data+ - A Hash containing the response data.
18
17
  #* +rate_limit+ - The total API credits you get per hour.
19
18
  #* +rate_limit_remaining+ - The number of API credits you have remaining for this hour.
20
- def call(username, api_key, endpoint, params = {}, user_agent = 'DataSiftPHP/0.0')
19
+ def call(user, endpoint, params = {}, user_agent = User::USER_AGENT)
21
20
  # Build the full endpoint URL
22
- url = 'http://' + User::API_BASE_URL + endpoint
21
+ url = 'http' + (user.use_ssl ? 's' : '') + '://' + User::API_BASE_URL + endpoint
23
22
 
24
23
  retval = {
25
24
  'response_code' => 500,
@@ -30,10 +29,10 @@ module DataSift
30
29
 
31
30
  begin
32
31
  # Make the call
33
- res = RestClient.post(url, params, { 'Auth' => username + ':' + api_key, 'User-Agent' => user_agent })
32
+ res = RestClient.post(url, params, { 'Auth' => user.username + ':' + user.api_key, 'User-Agent' => user_agent })
34
33
 
35
34
  # Success
36
- retval['response_code'] = 200
35
+ retval['response_code'] = res.code
37
36
 
38
37
  # Parse the JSON response
39
38
  retval['data'] = Yajl::Parser.parse(res)
@@ -58,8 +58,6 @@ module DataSift
58
58
  attr_reader :sample
59
59
  #The DPU cost of running this Historics query.
60
60
  attr_reader :dpus
61
- #The data availability for this Historics query.
62
- attr_reader :volume_info
63
61
  #True if this Historics query has been deleted.
64
62
  attr_reader :is_deleted
65
63
 
@@ -109,7 +107,6 @@ module DataSift
109
107
  @progress = 0
110
108
  @dpus = false
111
109
  @availability = {}
112
- @volume_info = {}
113
110
  @is_deleted = false
114
111
  end
115
112
  end
@@ -169,9 +166,6 @@ module DataSift
169
166
  raise APIError, 'No sample in the response' unless data.has_key?('sample')
170
167
  @sample = data['sample']
171
168
 
172
- raise APIError, 'No volume info in the response' unless data.has_key?('volume_info')
173
- @volume_info = data['volume_info']
174
-
175
169
  @is_deleted = (@status == 'deleted')
176
170
 
177
171
  return true
@@ -53,6 +53,7 @@ module DataSift
53
53
  @auto_reconnect = true
54
54
  @stop_reason = 'Unknown reason'
55
55
  @state = STATE_STOPPED
56
+ @stream_timeout = 65
56
57
 
57
58
  # Get the hash which will compile the CSDL if necessary
58
59
  @definition.hash
@@ -124,7 +125,7 @@ module DataSift
124
125
  elsif interaction['status'] == 'warning'
125
126
  onWarning.call(interaction['message'])
126
127
  else
127
- # Tick
128
+ # Tick
128
129
  end
129
130
  else
130
131
  if interaction.has_key?('deleted') and interaction['deleted']
@@ -22,7 +22,6 @@ module DataSift
22
22
  def onStart(&block)
23
23
  begin
24
24
  reconnect() unless !@socket.nil? and !@socket.closed?
25
-
26
25
  parser = Yajl::Parser.new
27
26
  parser.on_parse_complete = block if block_given?
28
27
  if @response_head[:headers]["Transfer-Encoding"] == 'chunked'
@@ -30,6 +29,15 @@ module DataSift
30
29
  chunkLeft = 0
31
30
  while !@socket.eof? && (line = @socket.gets) && @state == StreamConsumer::STATE_RUNNING
32
31
  break if line.match /^0.*?\r\n/
32
+
33
+ begin
34
+ ready = IO.select([@socket], nil, [@socket], @stream_timeout)
35
+ unless ready
36
+ reconnect()
37
+ next
38
+ end
39
+ end
40
+
33
41
  next if line == "\r\n"
34
42
  size = line.hex
35
43
  json = @socket.read(size)
@@ -82,7 +90,6 @@ module DataSift
82
90
  end
83
91
 
84
92
  private
85
-
86
93
  #Reconnect the stream socket.
87
94
  def reconnect()
88
95
  uri = URI.parse('http' + (@user.use_ssl ? 's' : '') + '://' + User::STREAM_BASE_URL + @definition.hash)
@@ -234,7 +234,7 @@ module DataSift
234
234
  @api_client = ApiClient.new()
235
235
  end
236
236
 
237
- res = @api_client.call(@username, @api_key, endpoint, params, getUserAgent())
237
+ res = @api_client.call(self, endpoint, params, getUserAgent())
238
238
 
239
239
  # Set up the return value
240
240
  retval = res['data']
@@ -14,12 +14,12 @@ class Test::Unit::TestCase
14
14
  @testdata = YAML::load(File.open(File.join(File.dirname(__FILE__), 'testdata.yml')))
15
15
 
16
16
  # Initialise the test data (parse the dates, etc).
17
- @testdata['historic_start'] = DateTime.parse(@testdata['historic_start'])
18
- @testdata['historic_end'] = DateTime.parse(@testdata['historic_end'])
19
- @testdata['historic_created_at'] = DateTime.parse(@testdata['historic_created_at'])
20
- @testdata['push_created_at'] = DateTime.parse(@testdata['push_created_at'])
21
- @testdata['push_last_request'] = DateTime.parse(@testdata['push_last_request'])
22
- @testdata['push_last_success'] = DateTime.parse(@testdata['push_last_success'])
17
+ @testdata['historic_start'] = DateTime.parse(@testdata['historic_start'].to_s)
18
+ @testdata['historic_end'] = DateTime.parse(@testdata['historic_end'].to_s)
19
+ @testdata['historic_created_at'] = DateTime.parse(@testdata['historic_created_at'].to_s)
20
+ @testdata['push_created_at'] = DateTime.parse(@testdata['push_created_at'].to_s)
21
+ @testdata['push_last_request'] = DateTime.parse(@testdata['push_last_request'].to_s)
22
+ @testdata['push_last_success'] = DateTime.parse(@testdata['push_last_success'].to_s)
23
23
  @testdata['historic_sources'] = @testdata['historic_sources'].split(',')
24
24
 
25
25
  @user = DataSift::User.new(@config['username'], @config['api_key'])
@@ -43,9 +43,6 @@ class Test::Unit::TestCase
43
43
  'progress' => 0,
44
44
  'sources' => @testdata['historic_sources'],
45
45
  'sample' => @testdata['historic_sample'],
46
- 'volume_info' => {
47
- 'digg' => 9
48
- },
49
46
  }
50
47
  @user.api_client.setResponse(200, data.merge(changes), 200, 150)
51
48
  end
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require './' + File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestDefinition < Test::Unit::TestCase
4
4
  context "Given an empty Definition object" do
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require './' + File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestHistorics < Test::Unit::TestCase
4
4
  context "Given a new Historic object from a stream hash" do
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require './' + File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestPushDefinition < Test::Unit::TestCase
4
4
  context "Given a new PushDefinition object" do
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require './' + File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestPushSubscription < Test::Unit::TestCase
4
4
  context "Given a new PushSubsription object" do
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require './' + File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestUser < Test::Unit::TestCase
4
4
  context "Given a new User object" do
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datasift
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 2
8
7
  - 0
9
- - 2
10
- version: 2.0.2
8
+ - 3
9
+ version: 2.0.3
11
10
  platform: ruby
12
11
  authors:
13
12
  - DataSift
@@ -15,17 +14,16 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2012-12-14 00:00:00 Z
17
+ date: 2013-03-04 00:00:00 +00:00
18
+ default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rest-client
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
24
  requirements:
26
25
  - - ~>
27
26
  - !ruby/object:Gem::Version
28
- hash: 9
29
27
  segments:
30
28
  - 1
31
29
  - 6
@@ -37,11 +35,9 @@ dependencies:
37
35
  name: yajl-ruby
38
36
  prerelease: false
39
37
  requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
38
  requirements:
42
39
  - - ~>
43
40
  - !ruby/object:Gem::Version
44
- hash: 19
45
41
  segments:
46
42
  - 1
47
43
  - 1
@@ -53,11 +49,9 @@ dependencies:
53
49
  name: rdoc
54
50
  prerelease: false
55
51
  requirement: &id003 !ruby/object:Gem::Requirement
56
- none: false
57
52
  requirements:
58
53
  - - ">"
59
54
  - !ruby/object:Gem::Version
60
- hash: 3
61
55
  segments:
62
56
  - 0
63
57
  version: "0"
@@ -67,11 +61,9 @@ dependencies:
67
61
  name: shoulda
68
62
  prerelease: false
69
63
  requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
64
  requirements:
72
65
  - - ~>
73
66
  - !ruby/object:Gem::Version
74
- hash: 37
75
67
  segments:
76
68
  - 2
77
69
  - 11
@@ -83,11 +75,9 @@ dependencies:
83
75
  name: rspec
84
76
  prerelease: false
85
77
  requirement: &id005 !ruby/object:Gem::Requirement
86
- none: false
87
78
  requirements:
88
79
  - - ~>
89
80
  - !ruby/object:Gem::Version
90
- hash: 23
91
81
  segments:
92
82
  - 2
93
83
  - 6
@@ -158,6 +148,7 @@ files:
158
148
  - test/test_pushsubscription.rb
159
149
  - test/test_user.rb
160
150
  - test/testdata.yml
151
+ has_rdoc: true
161
152
  homepage: http://github.com/datasift/datasift-ruby
162
153
  licenses: []
163
154
 
@@ -167,20 +158,16 @@ rdoc_options: []
167
158
  require_paths:
168
159
  - lib
169
160
  required_ruby_version: !ruby/object:Gem::Requirement
170
- none: false
171
161
  requirements:
172
162
  - - ">="
173
163
  - !ruby/object:Gem::Version
174
- hash: 3
175
164
  segments:
176
165
  - 0
177
166
  version: "0"
178
167
  required_rubygems_version: !ruby/object:Gem::Requirement
179
- none: false
180
168
  requirements:
181
169
  - - ">="
182
170
  - !ruby/object:Gem::Version
183
- hash: 23
184
171
  segments:
185
172
  - 1
186
173
  - 3
@@ -189,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
176
  requirements: []
190
177
 
191
178
  rubyforge_project:
192
- rubygems_version: 1.8.24
179
+ rubygems_version: 1.3.6
193
180
  signing_key:
194
181
  specification_version: 3
195
182
  summary: DataSift is a simple wrapper for the DataSift API.