datasift 0.2.0 → 1.0.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.
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