datasift 3.0.0.beta2 → 3.0.0.beta4

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.
@@ -56,4 +56,6 @@ end
56
56
  class StreamingMessageError < DataSiftError
57
57
  end
58
58
  class WebSocketOnWindowsError < DataSiftError
59
+ end
60
+ class BadParametersError < DataSiftError
59
61
  end
@@ -5,12 +5,12 @@ module DataSift
5
5
  # Create a new historics query and return its id.
6
6
  def prepare (hash, start, end_time, name, sources = 'twitter', sample = 100)
7
7
  params = {
8
- :hash => hash,
9
- :start => start,
10
- :end => end_time,
11
- :name => name,
8
+ :hash => hash,
9
+ :start => start,
10
+ :end => end_time,
11
+ :name => name,
12
12
  :sources => sources,
13
- :sample => sample
13
+ :sample => sample
14
14
  }
15
15
  requires params
16
16
  DataSift.request(:POST, 'historics/prepare', @config, params)
@@ -26,9 +26,10 @@ module DataSift
26
26
 
27
27
  ##
28
28
  # Stop historics query.
29
- def stop(id)
29
+ def stop(id, reason = '')
30
30
  params = {:id => id}
31
31
  requires params
32
+ params[:reason] = reason
32
33
  DataSift.request(:POST, 'historics/stop', @config, params)
33
34
  end
34
35
 
@@ -73,4 +74,4 @@ module DataSift
73
74
  end
74
75
 
75
76
  end
76
- end
77
+ end
@@ -7,7 +7,7 @@ module DataSift
7
7
  :parameters => parameters,
8
8
  :start => start
9
9
  }
10
- params.merge!(end_time) if end_time != nil
10
+ params.merge!(:end => end_time) if end_time != nil
11
11
 
12
12
  DataSift.request(:POST, 'preview/create', @config, params)
13
13
  end
@@ -17,4 +17,4 @@ module DataSift
17
17
  end
18
18
 
19
19
  end
20
- end
20
+ end
@@ -13,7 +13,12 @@ module DataSift
13
13
  end
14
14
 
15
15
  attr_reader :connected, :stream, :retry_timeout, :subscriptions
16
- attr_writer :connected, :retry_timeout, :on_datasift_message
16
+ attr_writer :connected, :retry_timeout
17
+
18
+ def on_datasift_message=(p)
19
+ raise BadParametersError.new('on_ds_message - 3 parameters required') unless p.arity == 3
20
+ @on_datasift_message = p
21
+ end
17
22
 
18
23
  def connected?
19
24
  @connected
@@ -42,6 +47,7 @@ module DataSift
42
47
  end
43
48
 
44
49
  def subscribe(hash, on_message)
50
+ raise BadParametersError.new('on_message - 3 parameters required') unless on_message.arity == 3
45
51
  @subscriptions[hash] = on_message
46
52
  @stream.send "{ \"action\":\"subscribe\",\"hash\":\"#{hash}\"}"
47
53
  end
@@ -5,18 +5,19 @@ module DataSift
5
5
  # Creates a new managed source
6
6
  #+source_type+:: can be facebook_page, googleplus, instagram or yammer
7
7
  def create(source_type, name, parameters = {}, resources = [], auth = [])
8
+ raise BadParametersError.new('source_type and name are required') if source_type.nil? || name.nil?
8
9
  params = {
9
10
  :source_type => source_type,
10
11
  :name => name
11
12
  }
12
- params.merge!({:auth => MultiJson.dump(auth)}) if !auth.empty?
13
- params.merge!({:parameters => MultiJson.dump(parameters)}) if !parameters.empty?
14
- params.merge!({:resources => MultiJson.dump(resources)}) if resources.length > 0
15
-
13
+ params.merge!({:auth => auth.is_a?(String) ? auth : MultiJson.dump(auth)}) unless auth.empty?
14
+ params.merge!({:parameters => parameters.is_a?(String) ? parameters : MultiJson.dump(parameters)}) unless parameters.empty?
15
+ params.merge!({:resources => resources.is_a?(String) ? resources : MultiJson.dump(resources)}) if resources.length > 0
16
16
  DataSift.request(:POST, 'source/create', @config, params)
17
17
  end
18
18
 
19
19
  def update(id, source_type, name, parameters = {}, resources = [], auth = [])
20
+ raise BadParametersError.new('id,source_type and name are required') if id.nil? || source_type.nil? || name.nil?
20
21
  params = {
21
22
  :id => id,
22
23
  :source_type => source_type,
@@ -30,14 +31,17 @@ module DataSift
30
31
  end
31
32
 
32
33
  def delete(id)
34
+ raise BadParametersError.new('id is required') if id.nil?
33
35
  DataSift.request(:DELETE, 'source/delete', @config, {:id => id})
34
36
  end
35
37
 
36
38
  def stop(id)
39
+ raise BadParametersError.new('id is required') if id.nil?
37
40
  DataSift.request(:POST, 'source/stop', @config, {:id => id})
38
41
  end
39
42
 
40
43
  def start(id)
44
+ raise BadParametersError.new('id is required') if id.nil?
41
45
  DataSift.request(:POST, 'source/start', @config, {:id => id})
42
46
  end
43
47
 
@@ -50,8 +54,9 @@ module DataSift
50
54
  end
51
55
 
52
56
  def log(id, page = 1, per_page = 20)
53
- DataSift.request(:POST, 'source/get', @config, {:id => id, :page => page, :per_page => per_page})
57
+ raise BadParametersError.new('id is required') if id.nil?
58
+ DataSift.request(:POST, 'source/log', @config, {:id => id, :page => page, :per_page => per_page})
54
59
  end
55
60
 
56
61
  end
57
- end
62
+ end
@@ -7,10 +7,10 @@ module DataSift
7
7
 
8
8
  ##
9
9
  # Check that a subscription is defined correctly
10
- def valid?(params)
10
+ def valid?(params, bool_response = true)
11
11
  requires params
12
12
  res = DataSift.request(:POST, 'push/validate', @config, params)
13
- res[:http][:status] == 200
13
+ bool_response ? res[:http][:status] == 200 : res
14
14
  end
15
15
 
16
16
  ##
@@ -67,10 +67,10 @@ module DataSift
67
67
  # Retrieve log messages for a specific subscription
68
68
  def logs_for (id, page = 1, per_page = 20, order_by = :request_time, order_dir = :desc)
69
69
  params = {
70
- :id => id,
71
- :page => page,
72
- :per_page => per_page,
73
- :order_by => order_by,
70
+ :id => id,
71
+ :page => page,
72
+ :per_page => per_page,
73
+ :order_by => order_by,
74
74
  :order_dir => order_dir
75
75
  }
76
76
  DataSift.request(:GET, 'push/log', @config, params)
@@ -80,9 +80,9 @@ module DataSift
80
80
  # Retrieve log messages for all subscriptions
81
81
  def logs (page = 1, per_page = 20, order_by = :request_time, order_dir = :desc)
82
82
  params = {
83
- :page => page,
84
- :per_page => per_page,
85
- :order_by => order_by,
83
+ :page => page,
84
+ :per_page => per_page,
85
+ :order_by => order_by,
86
86
  :order_dir => order_dir
87
87
  }
88
88
  DataSift.request(:GET, 'push/log', @config, params)
@@ -92,10 +92,10 @@ module DataSift
92
92
  # Get details of the subscription with the given ID
93
93
  def get_by_subscription(id, page = 1, per_page = 20, order_by = :request_time, order_dir = :desc)
94
94
  params = {
95
- :id => id,
96
- :page => page,
97
- :per_page => per_page,
98
- :order_by => order_by,
95
+ :id => id,
96
+ :page => page,
97
+ :per_page => per_page,
98
+ :order_by => order_by,
99
99
  :order_dir => order_dir
100
100
  }
101
101
  DataSift.request(:GET, 'push/get', @config, params)
@@ -105,10 +105,10 @@ module DataSift
105
105
  # Get details of the subscription with the given stream ID/hash
106
106
  def get_by_hash(hash, page = 1, per_page = 20, order_by = :request_time, order_dir = :desc)
107
107
  params = {
108
- :hash => hash,
109
- :page => page,
110
- :per_page => per_page,
111
- :order_by => order_by,
108
+ :hash => hash,
109
+ :page => page,
110
+ :per_page => per_page,
111
+ :order_by => order_by,
112
112
  :order_dir => order_dir
113
113
  }
114
114
  DataSift.request(:GET, 'push/get', @config, params)
@@ -119,21 +119,21 @@ module DataSift
119
119
  def get_by_historics_id(id, page = 1, per_page = 20, order_by = :request_time, order_dir = :desc)
120
120
  params = {
121
121
  :historics_id => id,
122
- :page => page,
123
- :per_page => per_page,
124
- :order_by => order_by,
125
- :order_dir => order_dir
122
+ :page => page,
123
+ :per_page => per_page,
124
+ :order_by => order_by,
125
+ :order_dir => order_dir
126
126
  }
127
127
  DataSift.request(:GET, 'push/get', @config, params)
128
128
  end
129
129
 
130
130
  ##
131
131
  # Get details of all subscriptions within the given page constraints
132
- def get(page = 1, per_page = 20, order_by = :request_time, order_dir = :desc)
132
+ def get(page = 1, per_page = 20, order_by = :created_at, order_dir = :desc)
133
133
  params = {
134
- :page => page,
135
- :per_page => per_page,
136
- :order_by => order_by,
134
+ :page => page,
135
+ :per_page => per_page,
136
+ :order_by => order_by,
137
137
  :order_dir => order_dir
138
138
  }
139
139
  DataSift.request(:GET, 'push/get', @config, params)
@@ -143,14 +143,14 @@ module DataSift
143
143
  # Pull data from a 'pull' type Push Subscription
144
144
  def pull(id, size = 20971520, cursor = '', callback = nil)
145
145
  params = {
146
- :id => id,
147
- :size => size,
146
+ :id => id,
147
+ :size => size,
148
148
  :cursor => cursor
149
149
  }
150
150
  if callback
151
- params.merge!({:on_interaction => callback})
151
+ params.merge!({:on_interaction => callback})
152
152
  end
153
153
  DataSift.request(:GET, 'pull', @config, params, {}, 30, 30, true)
154
154
  end
155
155
  end
156
- end
156
+ end
@@ -0,0 +1,95 @@
1
+ require '../examples/auth'
2
+ require 'test/unit'
3
+ require 'webmock/test_unit'
4
+ require 'multi_json'
5
+ class CoreApiTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ auth = DataSiftExample.new
9
+ @datasift = auth.datasift
10
+ @data = OpenStruct.new
11
+ @responses = OpenStruct.new
12
+ @statuses = OpenStruct.new
13
+ @headers = OpenStruct.new
14
+
15
+ @data.valid_csdl = 'interaction.content contains "test"'
16
+ @data.invalid_csdl = 'interaction.nonsense is not valid'
17
+ #{"created_at" => "2014-01-30 10:09:19", "dpu" => "0.1"}
18
+ @responses.valid_csdl = '{"created_at": "2014-01-30 10:09:19","dpu": "0.1"}'
19
+ @responses.invalid_csdl = '{"error": "The target interaction.nonsense does not exist"}'
20
+ @responses.valid_stream = OpenStruct.new({:hash => '145ea24a4d83a14ecb9077b831f14809', :created_at => '2014-01-30 17:35:14', :dpu => '0.1'})
21
+
22
+ @statuses.valid_csdl = 200
23
+ @statuses.invalid_csdl = 400
24
+
25
+ @headers.valid_csdl = {
26
+ "date" => "Thu, 30 Jan 2014 10:09:19 GMT", "content-type" => "application/json",
27
+ "transfer-encoding" => "chunked", "connection" => "close", "x-api-version" => "1",
28
+ "x-ratelimit-limit" => "10000", "x-ratelimit-remaining" => "10000", "x-ratelimit-cost" => "5"}
29
+ #valid CSDL
30
+ stub_request(:post, /api.datasift.com\/.*\/validate/).
31
+ with(:body => {"csdl" => @data.valid_csdl}).
32
+ to_return(:status => @statuses.valid_csdl,
33
+ :body => @responses.valid_csdl,
34
+ :headers => @headers.valid_csdl)
35
+ #invalid CSDL
36
+ stub_request(:post, /api.datasift.com\/.*\/validate/).
37
+ with(:body => {"csdl" => @data.invalid_csdl}).
38
+ to_return(:status => @statuses.invalid_csdl,
39
+ :body => @responses.invalid_csdl,
40
+ :headers => @headers.valid_csdl)
41
+ #valid stream compilation
42
+ stub_request(:post, /api.datasift.com\/.*\/compile/).
43
+ with(:body => {"csdl" => @data.valid_csdl}).
44
+ to_return(:status => @statuses.valid_csdl,
45
+ :body => MultiJson.dump(@responses.valid_stream),
46
+ :headers => @headers.valid_csdl)
47
+
48
+ end
49
+
50
+
51
+ def teardown
52
+ # Do nothing
53
+ end
54
+
55
+ def test_csdl_cant_be_nil_when_validating
56
+ assert_raise InvalidParamError do
57
+ @datasift.valid?(nil)
58
+ end
59
+ end
60
+
61
+ def test_csdl_cant_be_empty_when_validating
62
+ assert_raise InvalidParamError do
63
+ @datasift.valid?('')
64
+ end
65
+ end
66
+
67
+ def test_if_user_can_get_successful_validation_as_bool
68
+ assert_boolean @datasift.valid?(@data.valid_csdl), 'Valid must return a bool by default'
69
+ assert_true @datasift.valid?(@data.valid_csdl), 'This request should have returned true'
70
+ end
71
+
72
+ def test_if_user_can_get_successful_validation_as_hash
73
+ validation = @datasift.valid?(@data.valid_csdl, false)
74
+ assert_kind_of Hash, validation, 'Valid should return a hash here'
75
+ assert_equal @statuses.valid_csdl, validation[:http][:status], "This request should have returned status as #{@statuses.validate_csdl}"
76
+ end
77
+
78
+ def test_failing_csdl_validation
79
+ assert_raise BadRequestError do
80
+ @datasift.valid?(@data.invalid_csdl)
81
+ end
82
+ end
83
+
84
+ def test_csdl_cant_be_nil_when_compiling
85
+ assert_raise InvalidParamError do
86
+ @datasift.compile(nil)
87
+ end
88
+ end
89
+
90
+ def test_csdl_cant_be_empty_when_compiling
91
+ assert_raise InvalidParamError do
92
+ @datasift.compile('')
93
+ end
94
+ end
95
+ end
metadata CHANGED
@@ -1,97 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datasift
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta2
4
+ version: 3.0.0.beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - DataSift
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-02 00:00:00.000000000 Z
11
+ date: 2014-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.6.3
19
+ version: 1.6.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.6.3
26
+ version: 1.6.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: multi_json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.8.0
34
- type: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.8.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: websocket-td
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.0.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.0.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rdoc
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>'
59
+ - - ">"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>'
66
+ - - ">"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.17.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.17.1
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: shoulda
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
89
  version: 2.11.3
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: 2.11.3
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: test-unit
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - '>='
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
103
  version: 2.5.5
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - '>='
108
+ - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: 2.5.5
97
111
  description: The official Ruby library for accessing the DataSift API. See http://datasift.com/
@@ -102,15 +116,16 @@ executables: []
102
116
  extensions: []
103
117
  extra_rdoc_files: []
104
118
  files:
105
- - .gitignore
119
+ - ".gitignore"
106
120
  - CHANGELOG.md
107
121
  - Gemfile
108
122
  - LICENSE
123
+ - MIGRATING_TO_V.3.0.0.md
109
124
  - README.md
110
- - Rakefile
111
125
  - VERSION
112
126
  - datasift.gemspec
113
127
  - examples/auth.rb
128
+ - examples/cli.sh
114
129
  - examples/core_api_eg.rb
115
130
  - examples/historics_eg.rb
116
131
  - examples/historics_preview_eg.rb
@@ -119,6 +134,7 @@ files:
119
134
  - examples/pull.rb
120
135
  - examples/push_eg.rb
121
136
  - lib/api/api_resource.rb
137
+ - lib/cli.rb
122
138
  - lib/datasift.rb
123
139
  - lib/errors.rb
124
140
  - lib/historics.rb
@@ -126,7 +142,7 @@ files:
126
142
  - lib/live_stream.rb
127
143
  - lib/managed_source.rb
128
144
  - lib/push.rb
129
- - test/core_api_test.rb
145
+ - tests/core_api_test.rb
130
146
  homepage: https://github.com/datasift/datasift-ruby
131
147
  licenses:
132
148
  - BSD
@@ -137,19 +153,18 @@ require_paths:
137
153
  - lib
138
154
  required_ruby_version: !ruby/object:Gem::Requirement
139
155
  requirements:
140
- - - '>='
156
+ - - ">="
141
157
  - !ruby/object:Gem::Version
142
158
  version: '0'
143
159
  required_rubygems_version: !ruby/object:Gem::Requirement
144
160
  requirements:
145
- - - '>='
161
+ - - ">="
146
162
  - !ruby/object:Gem::Version
147
163
  version: 1.3.6
148
164
  requirements: []
149
165
  rubyforge_project:
150
- rubygems_version: 2.0.14
166
+ rubygems_version: 2.2.2
151
167
  signing_key:
152
168
  specification_version: 4
153
169
  summary: DataSift is a simple wrapper for the DataSift API.
154
- test_files:
155
- - test/core_api_test.rb
170
+ test_files: []