datasift 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -28,7 +28,7 @@ consumer.consume(true) do |interaction|
28
28
  end
29
29
  ```
30
30
 
31
- See the DataSift documentation for full details of the data contained within each interaction: http://support.datasift.net/help/kb/rest-api/return-objects
31
+ See the DataSift documentation for full details of the data contained within each interaction. See this page on our developer site for an example tweet: http://dev.datasift.com/docs/targets/twitter/twitter-output-format
32
32
 
33
33
  License
34
34
  -------
data/Rakefile CHANGED
@@ -1,9 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
+
3
4
  require 'rake/testtask'
4
- require 'rake/clean'
5
- require 'rake/gempackagetask'
6
- require 'rake/rdoctask'
7
5
  Rake::TestTask.new(:test) do |test|
8
6
  test.libs << 'lib' << 'test'
9
7
  test.pattern = 'test/**/test_*.rb'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 1.0.0
@@ -0,0 +1,52 @@
1
+ # This simple example demonstrates consuming a stream from just the stream
2
+ # hash.
3
+ #
4
+ # NB: Most of the error handling (exception catching) has been removed for
5
+ # the sake of simplicity. Nearly everything in this library may throw
6
+ # exceptions, and production code should catch them. See the documentation
7
+ # for full details.
8
+ #
9
+
10
+ # Make sure we have some arguments
11
+ if ARGV.size == 0
12
+ puts 'ERR: Please specify the hash to consume!'
13
+ puts
14
+ puts
15
+ exit!
16
+ end
17
+
18
+ # Include the DataSift library
19
+ require File.dirname(__FILE__) + '/../lib/datasift'
20
+
21
+ # Include the configuration - put your username and API key in this file
22
+ config = YAML::load(File.open(File.join(File.dirname(__FILE__), '..', 'config.yml')))
23
+
24
+ # Authenticate
25
+ puts 'Creating user...'
26
+ user = DataSift::User.new(config['username'], config['api_key'])
27
+
28
+ # Create the consumer
29
+ puts 'Getting the consumer...'
30
+ consumer = user.getConsumer(DataSift::StreamConsumer::TYPE_HTTP, ARGV[0])
31
+
32
+ # Setting up the onStopped handler
33
+ consumer.onStopped do |reason|
34
+ puts
35
+ puts 'Stopped: ' + reason
36
+ puts
37
+ end
38
+
39
+ # And start consuming
40
+ puts 'Consuming...'
41
+ puts '--'
42
+ consumer.consume(true) do |interaction|
43
+ if interaction
44
+ puts 'Type: ' + interaction['interaction']['type']
45
+ puts 'Content: ' + interaction['interaction']['content']
46
+ puts '--'
47
+ end
48
+ end
49
+
50
+ puts
51
+ puts 'Finished consuming'
52
+ puts
@@ -1,10 +1,10 @@
1
- # This example gets the cost associated with the stream given on the command
1
+ # This example gets the DPU associated with the stream given on the command
2
2
  # line or piped/typed into STDIN. It presents it in a nice ASCII table.]
3
3
  # Note that the CSDL must be enclosed in quotes if given on the command line.
4
4
  #
5
- # ruby cost.rb 'interaction.content contains "football"'
5
+ # ruby dpu.rb 'interaction.content contains "football"'
6
6
  # or
7
- # cat football.csdl | ruby cost.rb
7
+ # cat football.csdl | ruby dpu.rb
8
8
  #
9
9
  # NB: Most of the error handling (exception catching) has been removed for
10
10
  # the sake of simplicity. Nearly everything in this library may throw
@@ -38,43 +38,43 @@ user = DataSift::User.new(config['username'], config['api_key'])
38
38
  puts 'Creating definition...'
39
39
  definition = user.createDefinition(csdl)
40
40
 
41
- # Getting cost
42
- puts 'Getting cost...'
41
+ # Getting DPU
42
+ puts 'Getting DPU...'
43
43
  begin
44
- cost = definition.getCostBreakdown()
44
+ dpu = definition.getDPUBreakdown()
45
45
  rescue DataSift::CompileFailedError => e
46
46
  puts 'CSDL compilation failed: ' + e
47
47
  puts
48
48
  exit!
49
49
  end
50
50
 
51
- costtable = []
51
+ dputable = []
52
52
  maxlength = {'target' => 'Target'.length, 'times used' => 'Times used'.length, 'complexity' => 'Complexity'.length};
53
- cost['costs'].each do |tgt,c|
53
+ dpu['detail'].each do |tgt,c|
54
54
  maxlength['target'] = [maxlength['target'], tgt.length].max()
55
55
  maxlength['times used'] = [maxlength['times used'], number_with_delimiter(c['count']).length].max()
56
- maxlength['complexity'] = [maxlength['complexity'], number_with_delimiter(c['cost']).length].max()
56
+ maxlength['complexity'] = [maxlength['complexity'], number_with_delimiter(c['dpu']).length].max()
57
57
 
58
- costtable.push({
58
+ dputable.push({
59
59
  'target' => tgt,
60
60
  'times used' => number_with_delimiter(c['count']),
61
- 'complexity' => number_with_delimiter(c['cost']),
61
+ 'complexity' => number_with_delimiter(c['dpu']),
62
62
  })
63
63
 
64
64
  c['targets'].each do |tgt2,d|
65
65
  maxlength['target'] = [maxlength['target'], 2 + tgt2.length].max()
66
66
  maxlength['times used'] = [maxlength['times used'], number_with_delimiter(d['count']).length].max()
67
- maxlength['complexity'] = [maxlength['complexity'], number_with_delimiter(d['cost']).length].max()
67
+ maxlength['complexity'] = [maxlength['complexity'], number_with_delimiter(d['dpu']).length].max()
68
68
 
69
- costtable.push({
69
+ dputable.push({
70
70
  'target' => ' ' + tgt2,
71
71
  'times used' => number_with_delimiter(d['count']),
72
- 'complexity' => number_with_delimiter(d['cost']),
72
+ 'complexity' => number_with_delimiter(d['dpu']),
73
73
  })
74
74
  end
75
75
  end
76
76
 
77
- maxlength['complexity'] = [maxlength['complexity'], number_with_delimiter(cost['total']).length].max()
77
+ maxlength['complexity'] = [maxlength['complexity'], number_with_delimiter(dpu['dpu']).length].max()
78
78
 
79
79
  puts
80
80
  print '/-' + ('-' * maxlength['target']) + '---'
@@ -89,7 +89,7 @@ print '|-' + ('-' * maxlength['target']) + '-+-'
89
89
  print ('-' * maxlength['times used']) + '-+-'
90
90
  puts ('-' * maxlength['complexity']) + '-|'
91
91
 
92
- costtable.each do |row|
92
+ dputable.each do |row|
93
93
  print '| ' + row['target'].ljust(maxlength['target']) + ' | '
94
94
  print row['times used'].rjust(maxlength['times used']) + ' | '
95
95
  puts row['complexity'].rjust(maxlength['complexity']) + ' |'
@@ -100,24 +100,10 @@ print ('-' * maxlength['times used']) + '-+-'
100
100
  puts ('-' * maxlength['complexity']) + '-|'
101
101
 
102
102
  print '| ' + 'Total'.rjust(maxlength['target'] + 3 + maxlength['times used']) + ' = '
103
- puts cost['total'].to_s.rjust(maxlength['complexity']) + ' |'
103
+ puts dpu['dpu'].to_s.rjust(maxlength['complexity']) + ' |'
104
104
 
105
105
  print '\\-' + ('-' * maxlength['target']) + '---'
106
106
  print ('-' * maxlength['times used']) + '---'
107
107
  puts ('-' * maxlength['complexity']) + '-/'
108
108
 
109
109
  puts
110
-
111
- if cost['total'] > 1000
112
- tiernum = 3;
113
- tierdesc = 'high complexity';
114
- elsif cost['total'] > 100
115
- tiernum = 2;
116
- tierdesc = 'medium complexity';
117
- else
118
- tiernum = 1;
119
- tierdesc = 'simple complexity';
120
- end
121
-
122
- puts 'A total cost of ' + number_with_delimiter(cost['total']) + ' puts this stream in tier ' + tiernum.to_s + ', ' + tierdesc
123
- puts
@@ -18,7 +18,7 @@ module DataSift
18
18
  # The Definition class represents a stream definition.
19
19
  #
20
20
  class Definition
21
- attr_reader :csdl, :total_cost, :created_at
21
+ attr_reader :csdl, :total_dpu, :created_at
22
22
 
23
23
  # Constructor. A User object is required, and you can optionally supply a
24
24
  # default CSDL string.
@@ -36,12 +36,22 @@ module DataSift
36
36
  self.csdl = csdl
37
37
  end
38
38
 
39
+ # CSDL getter
40
+ def csdl
41
+ raise InvalidDataError, 'The CSDL is not available' unless !@csdl.nil?
42
+ @csdl
43
+ end
44
+
39
45
  # CSDL setter. Strips the incoming string and resets the hash if it's changed.
40
46
  def csdl=(csdl)
41
- raise InvalidDataError, 'The CSDL must be a string.' unless csdl.is_a? String
42
- csdl.strip!
43
- clearHash() unless csdl == @csdl
44
- @csdl = csdl
47
+ if csdl.nil?
48
+ @csdl = nil
49
+ else
50
+ raise InvalidDataError, 'The CSDL must be a string.' unless csdl.is_a? String
51
+ csdl.strip!
52
+ clearHash() unless csdl == @csdl
53
+ @csdl = csdl
54
+ end
45
55
  end
46
56
 
47
57
  # Hash getter. If the hash has not yet been obtained the CSDL will be
@@ -61,8 +71,9 @@ module DataSift
61
71
  # Reset the hash to false. The effect of this is to mark the definition as
62
72
  # requiring compilation.
63
73
  def clearHash()
74
+ @csdl = '' unless !@csdl.nil?
64
75
  @hash = false
65
- @total_cost = false
76
+ @total_dpu = false
66
77
  @created_at = false
67
78
  end
68
79
 
@@ -80,10 +91,10 @@ module DataSift
80
91
  raise CompileFailedError, 'Compiled successfully but no hash in the response'
81
92
  end
82
93
 
83
- if res.has_key?('cost')
84
- @total_cost = Integer(res['cost'])
94
+ if res.has_key?('dpu')
95
+ @total_dpu = Float(res['dpu'])
85
96
  else
86
- raise CompileFailedError, 'Compiled successfully but no cost in the response'
97
+ raise CompileFailedError, 'Compiled successfully but no DPU in the response'
87
98
  end
88
99
 
89
100
  if res.has_key?('created_at')
@@ -103,16 +114,15 @@ module DataSift
103
114
  end
104
115
  end
105
116
 
106
- # Call the DataSift API to get the cost for this definition. Returns an
117
+ # Call the DataSift API to get the DPU for this definition. Returns an
107
118
  # array containing...
108
- # costs => The breakdown of running the rule
109
- # tags => The tags associated with the rule
110
- # total => The total cost of the rule
119
+ # detail => The breakdown of running the rule
120
+ # dpu => The total DPU of the rule
111
121
  #
112
- def getCostBreakdown()
113
- raise InvalidDataError, "Cannot get the cost for an empty definition." unless @csdl.length > 0
122
+ def getDPUBreakdown()
123
+ raise InvalidDataError, "Cannot get the DPU for an empty definition." unless @csdl.length > 0
114
124
 
115
- @user.callAPI('cost', { 'hash' => self.hash })
125
+ @user.callAPI('dpu', { 'hash' => self.hash })
116
126
  end
117
127
 
118
128
  # Call the DataSift API to get buffered interactions.
@@ -57,8 +57,8 @@ module DataSift
57
57
  @stop_reason = 'Unknown reason'
58
58
  @state = STATE_STOPPED
59
59
 
60
- # Compile the definition to ensure it's valid for use
61
- @definition.compile()
60
+ # Get the hash which will compile the CSDL if necessary
61
+ @definition.hash
62
62
  end
63
63
 
64
64
  # This is called when the consumer is stopped.
@@ -39,7 +39,9 @@ module DataSift
39
39
  next if json.nil?
40
40
  chunkLeft = size-json.size
41
41
  if chunkLeft == 0
42
- parser << json
42
+ if json.length > 100
43
+ parser << json
44
+ end
43
45
  else
44
46
  # received only part of the chunk, grab the rest
45
47
  parser << @socket.read(chunkLeft)
data/lib/DataSift/user.rb CHANGED
@@ -22,9 +22,9 @@ module DataSift
22
22
  # provides factory methods for all of the functionality in the API.
23
23
  #
24
24
  class User
25
- USER_AGENT = 'DataSiftRuby/0.1';
26
- API_BASE_URL = 'api.datasift.net/';
27
- STREAM_BASE_URL = 'stream.datasift.net/';
25
+ USER_AGENT = 'DataSiftRuby/0.3.0';
26
+ API_BASE_URL = 'api.datasift.com/';
27
+ STREAM_BASE_URL = 'stream.datasift.com/';
28
28
 
29
29
  attr_reader :username, :api_key, :rate_limit, :rate_limit_remaining, :api_client
30
30
 
@@ -54,6 +54,32 @@ module DataSift
54
54
  DataSift::Definition.new(self, csdl, false)
55
55
  end
56
56
 
57
+ # Returns a StreamConsumer-derived object for the given hash, for the
58
+ # given type.
59
+ # === Parameters
60
+ #
61
+ # * +type+ - The consumer type for which to construct a consumer.
62
+ # * +hash+ - The hash to be consumed.
63
+ #
64
+ def getConsumer(type = nil, hash = nil, on_interaction = nil, on_stopped = nil)
65
+ StreamConsumer.factory(self, type, Definition.new(self, nil, hash))
66
+ end
67
+
68
+ # Returns the usage data for this user. If a hash is provided then a more
69
+ # detailed breakdown using interaction types is retrieved and returned.
70
+ # === Parameters
71
+ #
72
+ # * +period+ - An optional period for which to fetch data ('hour' or 'day')
73
+ def getUsage(period = 'hour')
74
+ if period != 'hour' and period != 'day'
75
+ raise EInvalidData, 'Period must be hour or day'
76
+ end
77
+
78
+ params = { 'period' => period }
79
+
80
+ callAPI('usage', params)
81
+ end
82
+
57
83
  # Returns the user agent this library should use for all API calls.
58
84
  def getUserAgent()
59
85
  USER_AGENT
@@ -74,7 +74,7 @@ class TestDefinition < Test::Unit::TestCase
74
74
  @user.api_client.setResponse(200, {
75
75
  'hash' => @testdata['definition_hash'],
76
76
  'created_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
77
- 'cost' => 10,
77
+ 'dpu' => 10,
78
78
  }, 200, 150)
79
79
  @definition.compile()
80
80
  rescue InvalidDataError
@@ -90,26 +90,26 @@ class TestDefinition < Test::Unit::TestCase
90
90
  @user.api_client.setResponse(200, {
91
91
  'hash' => @testdata['definition_hash'],
92
92
  'created_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
93
- 'cost' => 10,
93
+ 'dpu' => 10,
94
94
  }, 200, 150)
95
95
  assert_equal @testdata['definition_hash'], @definition.hash
96
96
  end
97
97
 
98
- should "have a positive cost" do
98
+ should "have a positive DPU" do
99
99
  @user.api_client.setResponse(200, {
100
100
  'hash' => @testdata['definition_hash'],
101
101
  'created_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
102
- 'cost' => 10,
102
+ 'dpu' => 10,
103
103
  }, 200, 150)
104
104
  @definition.compile()
105
- assert @definition.total_cost > 0
105
+ assert @definition.total_dpu > 0
106
106
  end
107
107
 
108
108
  should "have a valid created_at date" do
109
109
  @user.api_client.setResponse(200, {
110
110
  'hash' => @testdata['definition_hash'],
111
111
  'created_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
112
- 'cost' => 10,
112
+ 'dpu' => 10,
113
113
  }, 200, 150)
114
114
  @definition.compile()
115
115
  assert @definition.created_at
@@ -138,7 +138,7 @@ class TestDefinition < Test::Unit::TestCase
138
138
  end
139
139
  end
140
140
 
141
- context "The cost returned from a valid Definition object" do
141
+ context "The DPU returned from a valid Definition object" do
142
142
  setup do
143
143
  init()
144
144
  initUser()
@@ -147,35 +147,35 @@ class TestDefinition < Test::Unit::TestCase
147
147
  @user.api_client.setResponse(200, {
148
148
  'hash' => @testdata['definition_hash'],
149
149
  'created_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
150
- 'cost' => 10,
150
+ 'dpu' => 10,
151
151
  }, 200, 150)
152
152
  @definition.compile()
153
- # Now get the cost
153
+ # Now get the DPU
154
154
  @user.api_client.setResponse(200, {
155
- 'costs' => {
155
+ 'detail' => {
156
156
  'contains' => {
157
157
  'count' => 1,
158
- 'cost' => 4,
158
+ 'dpu' => 4,
159
159
  'targets' => {
160
160
  'interaction.content' => {
161
161
  'count' => 1,
162
- 'cost' => 4,
162
+ 'dpu' => 4,
163
163
  },
164
164
  },
165
165
  },
166
166
  },
167
- 'total' => 4
167
+ 'dpu' => 4
168
168
  }, 200, 150)
169
- @cost = @definition.getCostBreakdown()
169
+ @dpu = @definition.getDPUBreakdown()
170
170
  end
171
171
 
172
- should "contain valid cost data" do
173
- assert @cost.has_key?('costs')
174
- assert @cost.has_key?('total')
172
+ should "contain valid DPU data" do
173
+ assert @dpu.has_key?('detail')
174
+ assert @dpu.has_key?('dpu')
175
175
  end
176
176
 
177
- should "have a positive total cost" do
178
- assert @cost['total'] > 0
177
+ should "have a positive total DPU" do
178
+ assert @dpu['dpu'] > 0
179
179
  end
180
180
  end
181
181
 
@@ -188,7 +188,7 @@ class TestDefinition < Test::Unit::TestCase
188
188
  @user.api_client.setResponse(200, {
189
189
  'hash' => @testdata['definition_hash'],
190
190
  'created_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
191
- 'cost' => 10,
191
+ 'dpu' => 10,
192
192
  }, 200, 150)
193
193
  @definition.compile()
194
194
  # Now get some buffered interactions
@@ -268,7 +268,7 @@ class TestDefinition < Test::Unit::TestCase
268
268
  @user.api_client.setResponse(200, {
269
269
  'hash' => @testdata['definition_hash'],
270
270
  'created_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
271
- 'cost' => 10,
271
+ 'dpu' => 10,
272
272
  }, 200, 150)
273
273
  @definition.compile()
274
274
  # Now get a consumer
@@ -26,9 +26,9 @@ class TestDefinitionLive < Test::Unit::TestCase
26
26
  assert_equal @testdata['definition_hash'], @definition.hash
27
27
  end
28
28
 
29
- should "have a positive cost" do
29
+ should "have a positive DPU" do
30
30
  @definition.compile()
31
- assert @definition.total_cost > 0
31
+ assert @definition.total_dpu > 0
32
32
  end
33
33
 
34
34
  should "have a valid created_at date" do
@@ -54,21 +54,21 @@ class TestDefinitionLive < Test::Unit::TestCase
54
54
  end
55
55
  end
56
56
 
57
- context "The cost returned from a valid Definition object" do
57
+ context "The DPU returned from a valid Definition object" do
58
58
  setup do
59
59
  init()
60
60
  initUser(false)
61
61
  @definition = @user.createDefinition(@testdata['definition'])
62
- @cost = @definition.getCostBreakdown()
62
+ @dpu = @definition.getDPUBreakdown()
63
63
  end
64
64
 
65
- should "contain valid cost data" do
66
- assert @cost.has_key?('costs')
67
- assert @cost.has_key?('total')
65
+ should "contain valid DPU data" do
66
+ assert @dpu.has_key?('detail')
67
+ assert @dpu.has_key?('dpu')
68
68
  end
69
69
 
70
- should "have a positive total cost" do
71
- assert @cost['total'] > 0
70
+ should "have a positive total DPU" do
71
+ assert @dpu['dpu'] > 0
72
72
  end
73
73
  end
74
74
 
data/test/test_user.rb CHANGED
@@ -16,6 +16,28 @@ class TestUser < Test::Unit::TestCase
16
16
  assert_not_nil @user
17
17
  assert_equal @config['api_key'], @user.api_key
18
18
  end
19
+
20
+ should "return valid summary usage information" do
21
+ @user.api_client.setResponse(200, {
22
+ 'start' => 'Mon, 07 Nov 2011 14:20:00 +0000',
23
+ 'streams' => {
24
+ '5e82aa9ac3dcf4dec1cce08a0cec914a' => {
25
+ 'seconds' => 313,
26
+ 'licenses' => {
27
+ 'twitter' => 17,
28
+ 'facebook' => 5
29
+ }
30
+ }
31
+ },
32
+ 'end' => 'Mon, 07 Nov 2011 15:20:00 +0000'
33
+ }, 200, 150)
34
+ usage = @user.getUsage()
35
+ assert_equal "Mon, 07 Nov 2011 14:20:00 +0000", usage['start']
36
+ assert_equal "Mon, 07 Nov 2011 15:20:00 +0000", usage['end']
37
+ assert_equal 313, usage['streams']['5e82aa9ac3dcf4dec1cce08a0cec914a']['seconds']
38
+ assert_equal 17, usage['streams']['5e82aa9ac3dcf4dec1cce08a0cec914a']['licenses']['twitter']
39
+ assert_equal 5, usage['streams']['5e82aa9ac3dcf4dec1cce08a0cec914a']['licenses']['facebook']
40
+ end
19
41
  end
20
42
 
21
43
  context "Given an empty definition from the User factory" do
@@ -52,7 +74,7 @@ class TestUser < Test::Unit::TestCase
52
74
  @user.api_client.setResponse(200, {
53
75
  'hash' => @testdata['definition_hash'],
54
76
  'created_at' => Time.now.strftime('%Y-%m-%d %H:%M:%S'),
55
- 'cost' => 10,
77
+ 'dpu' => 10,
56
78
  }, 200, 150)
57
79
  @definition.compile()
58
80
  end
@@ -65,4 +87,31 @@ class TestUser < Test::Unit::TestCase
65
87
  assert @user.rate_limit_remaining == 150
66
88
  end
67
89
  end
90
+
91
+ context "The exception raised by the User.getUsage method" do
92
+ setup do
93
+ init()
94
+ initUser()
95
+ end
96
+
97
+ should "be APIError given a 400 response" do
98
+ @user.api_client.setResponse(400, { 'error' => 'Bad request from user supplied data'}, 200, 150)
99
+ assert_raise(DataSift::APIError) { usage = @user.getUsage() }
100
+ end
101
+
102
+ should "be AccessDenied given a 401 response" do
103
+ @user.api_client.setResponse(401, { 'error' => 'User banned because they are a very bad person'}, 200, 150)
104
+ assert_raise(DataSift::AccessDeniedError) { usage = @user.getUsage() }
105
+ end
106
+
107
+ should "be APIError given a 404 response" do
108
+ @user.api_client.setResponse(404, { 'error' => 'Endpoint or data not found'}, 200, 150)
109
+ assert_raise(DataSift::APIError) { usage = @user.getUsage() }
110
+ end
111
+
112
+ should "be APIError given a 500 response" do
113
+ @user.api_client.setResponse(500, { 'error' => 'Problem with an internal service'}, 200, 150)
114
+ assert_raise(DataSift::APIError) { usage = @user.getUsage() }
115
+ end
116
+ end
68
117
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datasift
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-06 00:00:00.000000000Z
12
+ date: 2011-11-21 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
16
- requirement: &22559520 !ruby/object:Gem::Requirement
16
+ requirement: &8779460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.6.3
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *22559520
24
+ version_requirements: *8779460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: crack
27
- requirement: &22559040 !ruby/object:Gem::Requirement
27
+ requirement: &8778640 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *22559040
35
+ version_requirements: *8778640
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yajl-ruby
38
- requirement: &22558540 !ruby/object:Gem::Requirement
38
+ requirement: &8777980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.8.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *22558540
46
+ version_requirements: *8777980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &22558040 !ruby/object:Gem::Requirement
49
+ requirement: &8777260 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *22558040
57
+ version_requirements: *8777260
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: shoulda
60
- requirement: &22557580 !ruby/object:Gem::Requirement
60
+ requirement: &8776460 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.11.3
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *22557580
68
+ version_requirements: *8776460
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &22557000 !ruby/object:Gem::Requirement
71
+ requirement: &8775820 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: 2.6.0
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *22557000
79
+ version_requirements: *8775820
80
80
  description: The official Ruby library for accessing the DataSift API. See http://datasift.net/
81
81
  for full details and to sign up for an account.
82
82
  email:
@@ -91,7 +91,8 @@ files:
91
91
  - VERSION
92
92
  - config.yml
93
93
  - datasift.gemspec
94
- - examples/cost.rb
94
+ - examples/consume-stream.rb
95
+ - examples/dpu.rb
95
96
  - examples/football-buffered.rb
96
97
  - examples/football.rb
97
98
  - examples/twitter-track.rb