rsift 0.3.1

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/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ .bundle
2
+ *.lock
3
+ datasift.php
4
+ config/keys.yml
5
+ *._*
6
+ *.gem
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm ruby-1.9.2-p0
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rsift.gemspec
4
+ gemspec
5
+
6
+ # gem (RUBY_VERSION =~ /^1.9/) ? 'ruby-debug19': 'ruby-debug'
data/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # rsift
2
+
3
+ This is a Ruby wrapper for the Datasift API. Right now, it just handles data, streams and comments.
4
+
5
+ Check the tests for usage examples.
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'rake/testtask'
3
+
4
+ desc "Run all the tests"
5
+ Rake::TestTask.new do |t|
6
+ t.test_files = FileList['test/unit/*.rb']
7
+ end
@@ -0,0 +1,6 @@
1
+ api-key:
2
+ foo
3
+ username:
4
+ bar
5
+ url:
6
+ url
@@ -0,0 +1,21 @@
1
+ require_relative "model"
2
+
3
+ module Rsift
4
+ class Comment < Rsift::Model
5
+
6
+ def initialize(url, key, username)
7
+ @format = "json"
8
+ @section = "comment"
9
+ super(url, key, username)
10
+ end
11
+
12
+ def do(verb, opts = {})
13
+ get("#{@section}/#{verb}.#{@format}?&"+
14
+ Rsift::escape_options(opts).join("&"))
15
+ end
16
+
17
+ def get(path)
18
+ @conn.get(path)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require "jkl"
2
+ require "net/http"
3
+ require "uri"
4
+ require 'yaml'
5
+
6
+ module Rsift
7
+ class Connection
8
+
9
+ def initialize(url, key, username)
10
+ @api_url = url
11
+ @api_key = key
12
+ @username = username
13
+ end
14
+
15
+ def get(path)
16
+ request = "#{@api_url}#{path}#{auth_string}"
17
+ JSON.parse(Jkl::get_from(request))
18
+ end
19
+
20
+ def auth_string
21
+ "&username=#{@username}&api_key=#{@api_key}"
22
+ end
23
+ end
24
+ end
data/lib/rsift/data.rb ADDED
@@ -0,0 +1,20 @@
1
+ require_relative "model"
2
+
3
+ module Rsift
4
+ class Data < Rsift::Model
5
+
6
+ def initialize(url, key, username)
7
+ @format = "json"
8
+ super(url, key, username)
9
+ end
10
+
11
+ def do(opts = {})
12
+ get("stream.#{@format}?&"+
13
+ Rsift::escape_options(opts).join("&"))
14
+ end
15
+
16
+ def get(path)
17
+ @conn.get(path)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ module Rsift
2
+
3
+ class Model
4
+
5
+ def initialize(url, key, username)
6
+ @conn = Rsift::Connection.new(url,key,username)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ require_relative "model"
2
+
3
+ module Rsift
4
+ class Stream < Rsift::Model
5
+
6
+ def initialize(url, key, username)
7
+ @format = "json"
8
+ @section = "stream"
9
+ super(url, key, username)
10
+ end
11
+
12
+ def do(verb, opts = {})
13
+ get("#{@section}/#{verb}.#{@format}?&"+
14
+ Rsift::escape_options(opts).join("&"))
15
+ end
16
+
17
+ def get(path)
18
+ @conn.get(path)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Rsift
2
+ VERSION = "0.3.1"
3
+ end
data/lib/rsift.rb ADDED
@@ -0,0 +1,17 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require "rsift/model"
5
+ require "rsift/connection"
6
+ require "rsift/stream"
7
+ require "rsift/comment"
8
+ require "rsift/data"
9
+
10
+ module Rsift
11
+ class << self
12
+
13
+ def escape_options(options)
14
+ options.map { |k, v| "#{k}=#{CGI::escape(v.to_s)}" }
15
+ end
16
+ end
17
+ end
data/rsift.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rsift/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rsift"
7
+ s.version = Rsift::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Steven Shingler"]
10
+ s.email = ["shingler@gmail.com"]
11
+ s.homepage = "http://github.com/sshingler/rsift"
12
+ s.summary = %q{Ruby wrapper for the Datasift API}
13
+ s.description = <<-EOF
14
+ A Ruby client/wrapper gem for the Datasift API.
15
+ Right now, it just handles data, streams and comments.
16
+ EOF
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test}/*`.split("\n")
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency("rake", "0.8.7")
23
+ s.add_dependency("json", "1.4.6")
24
+ s.add_dependency("rest-client", "1.4.2")
25
+ s.add_dependency("jakal", "0.1.95")
26
+ s.add_dependency("em-http-request", "0.2.15")
27
+ s.add_dependency("yajl-ruby", "0.7.8")
28
+
29
+ # Test libraries
30
+ s.add_dependency("test-unit", "1.2.3")
31
+ s.add_dependency("shoulda", "2.11.3")
32
+ s.add_dependency("webmock", "1.6.1")
33
+ end
@@ -0,0 +1,43 @@
1
+ require "webmock/test_unit"
2
+ require "test/unit"
3
+ require "shoulda"
4
+ require_relative "../../lib/rsift"
5
+
6
+ class CommentTest < Test::Unit::TestCase
7
+ include WebMock::API
8
+
9
+ def setup
10
+ @api_url = YAML::load_file("config/keys.yml")["url"]
11
+ @api_key = YAML::load_file("config/keys.yml")["api-key"]
12
+ @username = YAML::load_file("config/keys.yml")["username"]
13
+ @comment = Rsift::Comment.new(@api_url,@api_key,@username)
14
+ end
15
+
16
+ context "with comments" do
17
+ setup do
18
+ body = '{"success":true}'
19
+ stub_request(:get, /api.datasift.net\/comment/).
20
+ with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
21
+ to_return(:status => 200, :body => body, :headers => {})
22
+
23
+ end
24
+
25
+ should "get a comment" do
26
+ opts = {:stream_id => "1"}
27
+ response = @comment.do("get",opts)
28
+ assert_equal true, response["success"]
29
+ end
30
+
31
+ should "create a comment" do
32
+ opts = {:stream_id => "1", :comment => "test comment"}
33
+ response = @comment.do("create",opts)
34
+ assert_equal true, response["success"]
35
+ end
36
+
37
+ should "flag a comment" do
38
+ opts = {:comment_id => "1"}
39
+ response = @comment.do("flag",opts)
40
+ assert_equal true, response["success"]
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,31 @@
1
+ require "webmock/test_unit"
2
+ require "test/unit"
3
+ require "shoulda"
4
+ require_relative "../../lib/rsift"
5
+
6
+ class DataTest < Test::Unit::TestCase
7
+ include WebMock::API
8
+
9
+ def setup
10
+ @api_url = YAML::load_file("config/keys.yml")["url"]
11
+ @api_key = YAML::load_file("config/keys.yml")["api-key"]
12
+ @username = YAML::load_file("config/keys.yml")["username"]
13
+ @data = Rsift::Data.new(@api_url,@api_key,@username)
14
+ end
15
+
16
+ context "with data" do
17
+ setup do
18
+ body = '{"success":true}'
19
+ stub_request(:get, /api.datasift.net\/stream.json/).
20
+ with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
21
+ to_return(:status => 200, :body => body, :headers => {})
22
+
23
+ end
24
+
25
+ should "get a comment" do
26
+ opts = {:stream_identifier => "1", :count => 10}
27
+ response = @data.do(opts)
28
+ assert_equal true, response["success"]
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,74 @@
1
+ require "webmock/test_unit"
2
+ require "test/unit"
3
+ require "shoulda"
4
+ require_relative "../../lib/rsift"
5
+
6
+ class StreamTest < Test::Unit::TestCase
7
+ include WebMock::API
8
+
9
+ def setup
10
+ @api_url = YAML::load_file("config/keys.yml")["url"]
11
+ @api_key = YAML::load_file("config/keys.yml")["api-key"]
12
+ @username = YAML::load_file("config/keys.yml")["username"]
13
+ @stream = Rsift::Stream.new(@api_url,@api_key,@username)
14
+ end
15
+
16
+ context "with streams" do
17
+ setup do
18
+ body = '{"success":true}'
19
+ stub_request(:get, /api.datasift.net\/stream/).
20
+ with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
21
+ to_return(:status => 200, :body => body, :headers => {})
22
+
23
+ end
24
+
25
+ should "list my streams" do
26
+ response = @stream.do("my")
27
+ assert_equal true, response["success"]
28
+ end
29
+
30
+ should "get a stream" do
31
+ opts = {:stream_id => "1"}
32
+ response = @stream.do("get", opts)
33
+ assert_equal true, response["success"]
34
+ end
35
+
36
+ should "create a stream" do
37
+ opts = {:name => "test stream",
38
+ :description => "it's a test description",
39
+ :definition => 'interaction.content contains " London"',
40
+ :tags => "london, uk"}
41
+ response = @stream.do("create", opts)
42
+ assert_equal true, response["success"]
43
+ end
44
+
45
+ should "update a stream " do
46
+ opts = {:stream_id => "1",
47
+ :name => "test stream",
48
+ :description => "it's a test description",
49
+ :definition => 'interaction.content contains " London"',
50
+ :add_tags => "tag1",
51
+ :remove_tage => "tag2"}
52
+ response = @stream.do("update", opts)
53
+ assert_equal true, response["success"]
54
+ end
55
+
56
+ should "duplicate a stream" do
57
+ opts = {:stream_id => "1"}
58
+ response = @stream.do("duplicate", opts)
59
+ assert_equal true, response["success"]
60
+ end
61
+
62
+ should "rate a stream" do
63
+ opts = {:stream_id => "1", :rating => 5}
64
+ response = @stream.do("rate", opts)
65
+ assert_equal true, response["success"]
66
+ end
67
+
68
+ should "delete a stream" do
69
+ opts = {:stream_id => "1"}
70
+ response = @stream.do("delete", opts)
71
+ assert_equal true, response["success"]
72
+ end
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,218 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rsift
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 1
9
+ version: 0.3.1
10
+ platform: ruby
11
+ authors:
12
+ - Steven Shingler
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-23 00:00:00 +00:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rake
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 8
31
+ - 7
32
+ version: 0.8.7
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: json
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - "="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 1
45
+ - 4
46
+ - 6
47
+ version: 1.4.6
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rest-client
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - "="
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 1
60
+ - 4
61
+ - 2
62
+ version: 1.4.2
63
+ type: :runtime
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: jakal
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - "="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 0
75
+ - 1
76
+ - 95
77
+ version: 0.1.95
78
+ type: :runtime
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
81
+ name: em-http-request
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - "="
87
+ - !ruby/object:Gem::Version
88
+ segments:
89
+ - 0
90
+ - 2
91
+ - 15
92
+ version: 0.2.15
93
+ type: :runtime
94
+ version_requirements: *id005
95
+ - !ruby/object:Gem::Dependency
96
+ name: yajl-ruby
97
+ prerelease: false
98
+ requirement: &id006 !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - "="
102
+ - !ruby/object:Gem::Version
103
+ segments:
104
+ - 0
105
+ - 7
106
+ - 8
107
+ version: 0.7.8
108
+ type: :runtime
109
+ version_requirements: *id006
110
+ - !ruby/object:Gem::Dependency
111
+ name: test-unit
112
+ prerelease: false
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - "="
117
+ - !ruby/object:Gem::Version
118
+ segments:
119
+ - 1
120
+ - 2
121
+ - 3
122
+ version: 1.2.3
123
+ type: :runtime
124
+ version_requirements: *id007
125
+ - !ruby/object:Gem::Dependency
126
+ name: shoulda
127
+ prerelease: false
128
+ requirement: &id008 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - "="
132
+ - !ruby/object:Gem::Version
133
+ segments:
134
+ - 2
135
+ - 11
136
+ - 3
137
+ version: 2.11.3
138
+ type: :runtime
139
+ version_requirements: *id008
140
+ - !ruby/object:Gem::Dependency
141
+ name: webmock
142
+ prerelease: false
143
+ requirement: &id009 !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - "="
147
+ - !ruby/object:Gem::Version
148
+ segments:
149
+ - 1
150
+ - 6
151
+ - 1
152
+ version: 1.6.1
153
+ type: :runtime
154
+ version_requirements: *id009
155
+ description: |
156
+ A Ruby client/wrapper gem for the Datasift API.
157
+ Right now, it just handles data, streams and comments.
158
+
159
+ email:
160
+ - shingler@gmail.com
161
+ executables: []
162
+
163
+ extensions: []
164
+
165
+ extra_rdoc_files: []
166
+
167
+ files:
168
+ - .gitignore
169
+ - .rvmrc
170
+ - Gemfile
171
+ - README.md
172
+ - Rakefile
173
+ - config/keys_example.yml
174
+ - lib/rsift.rb
175
+ - lib/rsift/comment.rb
176
+ - lib/rsift/connection.rb
177
+ - lib/rsift/data.rb
178
+ - lib/rsift/model.rb
179
+ - lib/rsift/stream.rb
180
+ - lib/rsift/version.rb
181
+ - rsift.gemspec
182
+ - test/unit/comment_test.rb
183
+ - test/unit/data_test.rb
184
+ - test/unit/stream_test.rb
185
+ has_rdoc: true
186
+ homepage: http://github.com/sshingler/rsift
187
+ licenses: []
188
+
189
+ post_install_message:
190
+ rdoc_options: []
191
+
192
+ require_paths:
193
+ - lib
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ segments:
200
+ - 0
201
+ version: "0"
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
203
+ none: false
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ segments:
208
+ - 0
209
+ version: "0"
210
+ requirements: []
211
+
212
+ rubyforge_project:
213
+ rubygems_version: 1.3.7
214
+ signing_key:
215
+ specification_version: 3
216
+ summary: Ruby wrapper for the Datasift API
217
+ test_files: []
218
+