datasift 3.0.0.beta4 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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