datasift 3.0.0.beta4 → 3.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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGELOG.md +12 -0
  4. data/LICENSE +1 -1
  5. data/MIGRATING_TO_V.3.0.0.md +1 -1
  6. data/README.md +23 -2
  7. data/Rakefile +10 -0
  8. data/VERSION +1 -1
  9. data/datasift.gemspec +4 -4
  10. data/examples/auth.rb +14 -10
  11. data/examples/cli.sh +2 -2
  12. data/examples/core_api_eg.rb +6 -1
  13. data/examples/dynamic_list_eg.rb +74 -0
  14. data/examples/dynamic_list_replace_eg.rb +45 -0
  15. data/examples/historics_eg.rb +20 -13
  16. data/examples/historics_preview_eg.rb +5 -4
  17. data/examples/live_stream_eg.rb +2 -1
  18. data/examples/managed_source_eg.rb +11 -10
  19. data/examples/pull.rb +8 -8
  20. data/examples/push_eg.rb +32 -15
  21. data/lib/cli.rb +2 -2
  22. data/lib/datasift.rb +7 -3
  23. data/lib/dynamic_list.rb +66 -0
  24. data/lib/dynamic_list_replace.rb +45 -0
  25. data/lib/historics.rb +17 -0
  26. data/lib/historics_preview.rb +2 -1
  27. data/lib/push.rb +10 -17
  28. data/test/datasift/core_api_test.rb +153 -0
  29. data/test/datasift/historics_preview_api_test.rb +83 -0
  30. data/test/datasift/push_api_test.rb +223 -0
  31. data/test/fixtures/balance.json +1 -0
  32. data/test/fixtures/compile_csdl_invalid.json +1 -0
  33. data/test/fixtures/compile_csdl_valid.json +1 -0
  34. data/test/fixtures/dpu_valid.json +1 -0
  35. data/test/fixtures/preview_create_valid.json +1 -0
  36. data/test/fixtures/preview_get_running.json +1 -0
  37. data/test/fixtures/preview_get_succeeded.json +1 -0
  38. data/test/fixtures/push_create_valid.json +1 -0
  39. data/test/fixtures/push_get_list_by_hash_valid.json +1 -0
  40. data/test/fixtures/push_get_list_by_historics_id_valid.json +1 -0
  41. data/test/fixtures/push_get_list_valid.json +1 -0
  42. data/test/fixtures/push_get_valid.json +1 -0
  43. data/test/fixtures/push_log_valid.json +1 -0
  44. data/test/fixtures/push_pause_valid.json +1 -0
  45. data/test/fixtures/push_stop_valid.json +1 -0
  46. data/test/fixtures/push_validate_valid.json +1 -0
  47. data/test/fixtures/usage_current.json +1 -0
  48. data/test/fixtures/validate_csdl_invalid.json +1 -0
  49. data/test/fixtures/validate_csdl_valid.json +1 -0
  50. data/test/test_helper.rb +17 -0
  51. metadata +36 -9
  52. data/tests/core_api_test.rb +0 -95
@@ -0,0 +1,153 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ describe 'DataSift' do
4
+
5
+ before do
6
+ auth = DataSiftExample.new
7
+ @datasift = auth.datasift
8
+ @data = OpenStruct.new
9
+ @statuses = OpenStruct.new
10
+ @headers = OpenStruct.new
11
+
12
+ @data.valid_csdl = 'interaction.content contains "test"'
13
+ @data.invalid_csdl = 'interaction.nonsense is not valid'
14
+
15
+ @statuses.valid = 200
16
+ @statuses.bad_request = 400
17
+
18
+ end
19
+
20
+ describe '#compile/validate' do
21
+ before do
22
+ @headers.csdl_compile = {
23
+ "date" => "Thu, 30 Jan 2014 10:09:19 GMT", "content-type" => "application/json",
24
+ "transfer-encoding" => "chunked", "connection" => "close", "x-api-version" => "1",
25
+ "x-ratelimit-limit" => "10000", "x-ratelimit-remaining" => "10000", "x-ratelimit-cost" => "5"}
26
+
27
+ #valid CSDL
28
+ stub_request(:post, /api.datasift.com\/.*\/validate/).
29
+ with(:body => {"csdl" => @data.valid_csdl}).
30
+ to_return(:status => @statuses.valid,
31
+ :body => fixture('validate_csdl_valid.json'),
32
+ :headers => @headers.csdl_compile)
33
+ #invalid CSDL
34
+ stub_request(:post, /api.datasift.com\/.*\/validate/).
35
+ with(:body => {"csdl" => @data.invalid_csdl}).
36
+ to_return(:status => @statuses.bad_request,
37
+ :body => fixture('validate_csdl_invalid.json'),
38
+ :headers => @headers.csdl_compile)
39
+ #valid stream compilation
40
+ stub_request(:post, /api.datasift.com\/.*\/compile/).
41
+ with(:body => {"csdl" => @data.valid_csdl}).
42
+ to_return(:status => @statuses.valid,
43
+ :body => fixture('compile_csdl_valid.json'),
44
+ :headers => @headers.csdl_compile)
45
+ end
46
+
47
+ it 'test_csdl_cant_be_nil_when_validating' do
48
+ assert_raises InvalidParamError do
49
+ @datasift.valid?(nil)
50
+ end
51
+ end
52
+
53
+ it 'test_csdl_cant_be_empty_when_validating' do
54
+ assert_raises InvalidParamError do
55
+ @datasift.valid?('')
56
+ end
57
+ end
58
+
59
+ it 'test_if_user_can_get_successful_validation_as_bool' do
60
+ assert @datasift.valid?(@data.valid_csdl), 'Valid CSDL must return true'
61
+ end
62
+
63
+ it 'test_if_user_can_get_successful_validation_as_hash' do
64
+ validation = @datasift.valid?(@data.valid_csdl, false)
65
+ assert_kind_of Hash, validation, 'Valid should return a hash here'
66
+ assert_equal @statuses.valid, validation[:http][:status], "This request should have returned status as #{@statuses.validate_csdl}"
67
+ end
68
+
69
+ it 'test_failing_csdl_validation' do
70
+ assert_raises BadRequestError do
71
+ @datasift.valid?(@data.invalid_csdl)
72
+ end
73
+ end
74
+
75
+ it 'test_csdl_cant_be_nil_when_compiling' do
76
+ assert_raises InvalidParamError do
77
+ @datasift.compile(nil)
78
+ end
79
+ end
80
+
81
+ it 'test_csdl_cant_be_empty_when_compiling' do
82
+ assert_raises InvalidParamError do
83
+ @datasift.compile('')
84
+ end
85
+ end
86
+ end
87
+
88
+ describe '#usage' do
89
+ describe 'with valid request' do
90
+ before do
91
+ @headers.valid_usage = {
92
+ "date" => "Thu, 30 Jan 2014 10:09:19 GMT", "content-type" => "application/json",
93
+ "transfer-encoding" => "chunked", "connection" => "close", "x-api-version" => "1",
94
+ "x-ratelimit-limit" => "10000", "x-ratelimit-remaining" => "10000", "x-ratelimit-cost" => "25"}
95
+
96
+ #valid /usage request
97
+ stub_request(:post, /api.datasift.com\/.*\/usage/).
98
+ with(:body => {:period => 'hour'}).
99
+ to_return(status: @statuses.valid,
100
+ body: fixture('usage_current.json'),
101
+ headers: @headers.valid_usage)
102
+ end
103
+
104
+ it 'can get users usage' do
105
+ @datasift.usage
106
+ assert_requested(:post, "https://api.datasift.com/v1/usage", :body => {"period"=>"hour"})
107
+ end
108
+ end
109
+ end
110
+
111
+ describe '#dpu' do
112
+ before do
113
+ @data.dpu_hash_valid = '145ea24a4d83a14ecb9077b831f14809'
114
+ @headers.dpu = {
115
+ "date" => "Thu, 30 Jan 2014 10:09:19 GMT", "content-type" => "application/json",
116
+ "transfer-encoding" => "chunked", "connection" => "close", "x-api-version" => "1",
117
+ "x-ratelimit-limit" => "10000", "x-ratelimit-remaining" => "10000", "x-ratelimit-cost" => "5"}
118
+
119
+ #valid /dpu request
120
+ stub_request(:post, /api.datasift.com\/.*\/dpu/).
121
+ with(:body => {:hash => @data.dpu_hash_valid}).
122
+ to_return(status: @statuses.valid,
123
+ body: fixture('dpu_valid.json'),
124
+ headers: @headers.dpu)
125
+ end
126
+
127
+ it 'can get dpu cost for valid stream' do
128
+ @datasift.dpu(@data.dpu_hash_valid)
129
+ assert_requested(:post, "https://api.datasift.com/v1/dpu", body: {hash: @data.dpu_hash_valid})
130
+ end
131
+ end
132
+
133
+ describe '#balance' do
134
+ before do
135
+ @headers.balance = {
136
+ "date" => "Thu, 30 Jan 2014 10:09:19 GMT", "content-type" => "application/json",
137
+ "transfer-encoding" => "chunked", "connection" => "close", "x-api-version" => "1",
138
+ "x-ratelimit-limit" => "10000", "x-ratelimit-remaining" => "10000", "x-ratelimit-cost" => "25"}
139
+
140
+ #valid /dpu request
141
+ stub_request(:post, /api.datasift.com\/.*\/balance/).
142
+ to_return(status: @statuses.valid,
143
+ body: fixture('balance.json'),
144
+ headers: @headers.balance)
145
+ end
146
+
147
+ it 'can get account balance' do
148
+ @datasift.balance
149
+ assert_requested(:post, "https://api.datasift.com/v1/balance")
150
+ end
151
+ end
152
+
153
+ end
@@ -0,0 +1,83 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ describe 'DataSift::HistoricsPreview' do
4
+
5
+ before do
6
+ auth = DataSiftExample.new
7
+ @datasift = auth.datasift
8
+ @data = OpenStruct.new
9
+ @statuses = OpenStruct.new
10
+ @headers = OpenStruct.new
11
+
12
+ @statuses.valid = 200
13
+ @statuses.accepted = 202
14
+ end
15
+
16
+ describe '#create' do
17
+ before do
18
+ @data.stream_hash = '145ea24a4d83a14ecb9077b831f14809'
19
+ @data.sources = 'facebook,twitter'
20
+ @data.parameters = 'language.tag,freqDist,5;interaction.id,targetVol,hour'
21
+ @data.start = '1398898800'
22
+ @data.end = '1398985200'
23
+
24
+ @headers.preview_create = {
25
+ "date" => "Thu, 30 Jan 2014 10:09:19 GMT", "content-type" => "application/json",
26
+ "transfer-encoding" => "chunked", "connection" => "close", "x-api-version" => "1",
27
+ "x-ratelimit-limit" => "10000", "x-ratelimit-remaining" => "10000", "x-ratelimit-cost" => "25"}
28
+
29
+ #valid /preview/create request
30
+ stub_request(:post, /api.datasift.com\/.*\/preview\/create/).
31
+ with(:body => { :hash => @data.stream_hash,
32
+ :sources => @data.sources,
33
+ :parameters => @data.parameters,
34
+ :start => @data.start,
35
+ :end => @data.end}).
36
+ to_return(status: @statuses.valid,
37
+ body: fixture('preview_create_valid.json'),
38
+ headers: @headers.preview_create)
39
+ end
40
+
41
+ it 'can create an Historics Preview' do
42
+ @datasift.historics_preview.create(@data.stream_hash, @data.sources, @data.parameters, @data.start, @data.end)
43
+ assert_requested( :post,
44
+ 'https://api.datasift.com/v1/preview/create',
45
+ :body => {:start => @data.start,
46
+ :end => @data.end,
47
+ :hash => @data.stream_hash,
48
+ :sources => @data.sources,
49
+ :parameters => @data.parameters})
50
+ end
51
+
52
+ end
53
+
54
+ describe '#get' do
55
+ before do
56
+ @data.id = 'fbd5441ab17a46f2ac200f8cab6bdb79fe8efb31'
57
+
58
+ @headers.preview_get = {
59
+ "date" => "Thu, 30 Jan 2014 10:09:19 GMT", "content-type" => "application/json",
60
+ "transfer-encoding" => "chunked", "connection" => "close", "x-api-version" => "1",
61
+ "x-ratelimit-limit" => "10000", "x-ratelimit-remaining" => "10000", "x-ratelimit-cost" => "5"}
62
+
63
+ #valid /preview/get running request
64
+ stub_request(:post, /api.datasift.com\/.*\/preview\/get/).
65
+ with(:body => { :id => @data.id}).
66
+ to_return(status: @statuses.accepted,
67
+ body: fixture('preview_get_running.json'),
68
+ headers: @headers.preview_get)
69
+
70
+ #valid /preview/get succeeded request
71
+ stub_request(:post, /api.datasift.com\/.*\/preview\/get/).
72
+ with(:body => { :id => @data.id}).
73
+ to_return(status: @statuses.valid,
74
+ body: fixture('preview_get_succeeded.json'),
75
+ headers: @headers.preview_get)
76
+ end
77
+
78
+ it 'can get an Historics Preview' do
79
+ @datasift.historics_preview.get(@data.id)
80
+ assert_requested( :post, 'https://api.datasift.com/v1/preview/get', :body => {:id => @data.id})
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,223 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ describe 'DataSift::Push' do
4
+
5
+ before do
6
+ auth = DataSiftExample.new
7
+ @datasift = auth.datasift
8
+ @data = OpenStruct.new
9
+ @statuses = OpenStruct.new
10
+
11
+ @statuses.valid = 200
12
+ @statuses.no_content = 204
13
+ # @statuses.invalid_csdl = 400
14
+ # @statuses.bad_request = 400
15
+
16
+ @data.params = {
17
+ 'name' => 'connectorhttp',
18
+ 'output_type' => 'http',
19
+ 'output_params.url' => 'http://example.com/datasift',
20
+ 'output_params.compression' => 'none',
21
+ 'output_params.delivery_frequency' => '0',
22
+ 'output_params.max_size' => '10485760',
23
+ 'output_params.verify_ssl' => 'false',
24
+ 'output_params.auth.type' => 'basic',
25
+ 'output_params.auth.username' => 'username',
26
+ 'output_params.auth.password' => 'password'
27
+ }
28
+
29
+ @data.subscription_params = {:id => '7802b84cfe79e50e0a6e3cdac5ce54ab',
30
+ :stream_hash => '145ea24a4d83a14ecb9077b831f14809',
31
+ :historics_id => '5f569d6f99002bfaa483' }
32
+ end
33
+
34
+ describe '#push/validate' do
35
+ before do
36
+ #valid /push/validate request
37
+ stub_request(:post, "https://api.datasift.com/v1/push/validate").
38
+ with(:body => @data.params).
39
+ to_return(status: @statuses.valid,
40
+ body: fixture('push_validate_valid.json'))
41
+ end
42
+
43
+ it 'can validate a push destination' do
44
+ @datasift.push.valid? @data.params
45
+ assert_requested(:post, 'https://api.datasift.com/v1/push/validate', :body => @data.params)
46
+ end
47
+ end
48
+
49
+ describe '#push/create' do
50
+ before do
51
+ @data.params.merge({'hash' => '145ea24a4d83a14ecb9077b831f14809'})
52
+
53
+ #valid /push/create request
54
+ stub_request(:post, "https://api.datasift.com/v1/push/create").
55
+ with(:body => @data.params).
56
+ to_return(status: @statuses.valid,
57
+ body: fixture('push_create_valid.json'))
58
+ end
59
+
60
+ it 'can create a push subscription' do
61
+ @datasift.push.create @data.params
62
+ assert_requested(:post, 'https://api.datasift.com/v1/push/create', :body => @data.params)
63
+ end
64
+ end
65
+
66
+ describe '#push/get' do
67
+ before do
68
+ @data.list_params = { :order_by => 'created_at',
69
+ :order_dir => 'desc',
70
+ :page => 1,
71
+ :per_page => 20 }
72
+
73
+ #valid /push/get request
74
+ stub_request(:get, "https://api.datasift.com/v1/push/get").
75
+ with(:query => {:id => @data.subscription_params['id']}).
76
+ to_return(status: @statuses.valid,
77
+ body: fixture('push_get_valid.json'))
78
+
79
+ #valid /push/get list request
80
+ stub_request(:get, "https://api.datasift.com/v1/push/get").
81
+ with(:query => @data.list_params).
82
+ to_return(status: @statuses.valid,
83
+ body: fixture('push_get_list_valid.json'))
84
+
85
+ #valid /push/get list by hash request
86
+ stub_request(:get, "https://api.datasift.com/v1/push/get").
87
+ with(:query => @data.list_params.merge('hash' => @data.subscription_params['stream_hash'])).
88
+ to_return(status: @statuses.valid,
89
+ body: fixture('push_get_list_by_hash_valid.json'))
90
+
91
+ #valid /push/get list by historics id request
92
+ stub_request(:get, "https://api.datasift.com/v1/push/get").
93
+ with(:query => @data.list_params.merge('historics_id' => @data.subscription_params['historics_id'])).
94
+ to_return(status: @statuses.valid,
95
+ body: fixture('push_get_list_by_historics_id_valid.json'))
96
+ end
97
+
98
+ it 'can get a specific push subscription' do
99
+ @datasift.push.get_by_subscription @data.subscription_params['id']
100
+ assert_requested(:get, 'https://api.datasift.com/v1/push/get', :query => {:id => @data.subscription_params['id']})
101
+ end
102
+
103
+ it 'can get a list of push subscriptions' do
104
+ @datasift.push.get
105
+ assert_requested(:get, 'https://api.datasift.com/v1/push/get', :query => @data.list_params)
106
+ end
107
+
108
+ it 'can get a list of push subscriptions by stream hash' do
109
+ @datasift.push.get_by_hash @data.subscription_params['stream_hash']
110
+ assert_requested(:get, 'https://api.datasift.com/v1/push/get', :query => @data.list_params.merge('hash' => @data.subscription_params['stream_hash']))
111
+ end
112
+
113
+ it 'can get a list of push subscriptions by historic id' do
114
+ @datasift.push.get_by_historics_id @data.subscription_params['historics_id']
115
+ assert_requested(:get, 'https://api.datasift.com/v1/push/get', :query => @data.list_params.merge('historics_id' => @data.subscription_params['historics_id']))
116
+ end
117
+ end
118
+
119
+ describe '#push/stop' do
120
+ before do
121
+ #valid /push/stop request
122
+ stub_request(:put, "https://api.datasift.com/v1/push/stop").
123
+ with(:body => {:id => @data.subscription_params[:id]}).
124
+ to_return(status: @statuses.valid,
125
+ body: fixture('push_stop_valid.json'))
126
+ end
127
+
128
+ it 'can stop a push subscription' do
129
+ @datasift.push.stop @data.subscription_params[:id]
130
+ assert_requested(:put, 'https://api.datasift.com/v1/push/stop', :body => {:id => @data.subscription_params[:id]})
131
+ end
132
+ end
133
+
134
+ describe '#push/log' do
135
+ before do
136
+ @data.list_params = { :order_by => 'request_time',
137
+ :order_dir => 'desc',
138
+ :page => 1,
139
+ :per_page => 20 }
140
+
141
+ #valid /push/log request
142
+ stub_request(:get, "https://api.datasift.com/v1/push/log").
143
+ with(:query => @data.list_params.merge('id' => @data.subscription_params[:id])).
144
+ to_return(status: @statuses.valid,
145
+ body: fixture('push_log_valid.json'))
146
+ #valid /push/log list request
147
+ stub_request(:get, "https://api.datasift.com/v1/push/log").
148
+ with(:query => @data.list_params).
149
+ to_return(status: @statuses.valid,
150
+ body: fixture('push_log_valid.json'))
151
+ end
152
+
153
+ it 'can get the /push/log for a given subscription' do
154
+ @datasift.push.log_for @data.subscription_params[:id]
155
+ assert_requested(:get, 'https://api.datasift.com/v1/push/log', :query => @data.list_params.merge('id' => @data.subscription_params[:id]))
156
+ end
157
+
158
+ it 'can get the /push/log for all subscriptions' do
159
+ @datasift.push.log
160
+ assert_requested(:get, 'https://api.datasift.com/v1/push/log', :query => @data.list_params)
161
+ end
162
+ end
163
+
164
+ describe '#push/pause' do
165
+ before do
166
+ #valid /push/pause request
167
+ stub_request(:put, "https://api.datasift.com/v1/push/pause").
168
+ with(:body => {:id => @data.subscription_params[:id]}).
169
+ to_return(status: @statuses.valid,
170
+ body: fixture('push_pause_valid.json'))
171
+ end
172
+
173
+ it 'can pause a push subscription' do
174
+ @datasift.push.pause @data.subscription_params[:id]
175
+ assert_requested(:put, 'https://api.datasift.com/v1/push/pause', :body => {:id => @data.subscription_params[:id]})
176
+ end
177
+ end
178
+
179
+ describe '#push/resume' do
180
+ before do
181
+ #valid /push/resume request
182
+ stub_request(:put, "https://api.datasift.com/v1/push/resume").
183
+ with(:body => {:id => @data.subscription_params[:id]}).
184
+ to_return(status: @statuses.valid,
185
+ body: fixture('push_get_valid.json'))
186
+ end
187
+
188
+ it 'can resume a push subscription' do
189
+ @datasift.push.resume @data.subscription_params[:id]
190
+ assert_requested(:put, 'https://api.datasift.com/v1/push/resume', :body => {:id => @data.subscription_params[:id]})
191
+ end
192
+ end
193
+
194
+ describe '#push/update' do
195
+ before do
196
+ @data.update_params = {id: @data.subscription_params[:id]}
197
+ #valid /push/update request
198
+ stub_request(:post, "https://api.datasift.com/v1/push/update").
199
+ with(:body => {:id => @data.subscription_params[:id]}).
200
+ to_return(status: @statuses.valid,
201
+ body: fixture('push_get_valid.json'))
202
+ end
203
+
204
+ it 'can update a push subscription' do
205
+ @datasift.push.update @data.update_params
206
+ assert_requested(:post, 'https://api.datasift.com/v1/push/update', :body => @data.update_params)
207
+ end
208
+ end
209
+
210
+ describe '#push/delete' do
211
+ before do
212
+ #valid /push/delete request
213
+ stub_request(:delete, "https://api.datasift.com/v1/push/delete").
214
+ with(:query => {:id => @data.subscription_params[:id]}).
215
+ to_return(status: @statuses.no_content)
216
+ end
217
+
218
+ it 'can delete a push subscription' do
219
+ @datasift.push.delete @data.subscription_params[:id]
220
+ assert_requested(:delete, 'https://api.datasift.com/v1/push/delete', :query => {:id => @data.subscription_params[:id]})
221
+ end
222
+ end
223
+ end