twitter4r 0.1.1 → 0.2.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.
@@ -22,7 +22,6 @@ module ERBMetaMixin
22
22
  end
23
23
 
24
24
  describe "Twitter::Meta cache policy" do
25
- include ERBMetaMixin
26
25
  include ERBMetaMixin
27
26
  before(:each) do
28
27
  @root_dir = project_root_dir
@@ -33,7 +32,7 @@ describe "Twitter::Meta cache policy" do
33
32
  end
34
33
 
35
34
  it "should store value returned from project_files in @project_files after first glob" do
36
- @meta.instance_eval("@project_files").should be(nil)
35
+ @meta.instance_eval("@project_files").should eql(nil)
37
36
  @meta.project_files
38
37
  @meta.instance_eval("@project_files").should eql(@expected_project_files)
39
38
  @meta.project_files
@@ -41,7 +40,7 @@ describe "Twitter::Meta cache policy" do
41
40
  end
42
41
 
43
42
  it "should store value returned from spec_files in @spec_files after first glob" do
44
- @meta.instance_eval("@spec_files").should be(nil)
43
+ @meta.instance_eval("@spec_files").should eql(nil)
45
44
  @meta.spec_files
46
45
  @meta.instance_eval("@spec_files").should eql(@expected_spec_files)
47
46
  @meta.spec_files
@@ -83,7 +82,9 @@ describe "Twitter::Meta" do
83
82
  spec = @meta.gem_spec
84
83
  expected_spec_hash = @expected_yaml_hash['spec']
85
84
  expected_spec_hash.each do |key, val|
86
- spec.send(key).should.eql? expected_spec_hash[key]
85
+ unless val.is_a?(Hash)
86
+ spec.send(key).should.eql? expected_spec_hash[key]
87
+ end
87
88
  end
88
89
  end
89
90
  end
@@ -0,0 +1,458 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ module Test
4
+ class Model
5
+ include Twitter::ModelMixin
6
+ end
7
+ end
8
+
9
+ describe Twitter::Status, "unmarshaling" do
10
+ before(:each) do
11
+ @json_hash = { "text" => "Thinking Zipcar is lame...",
12
+ "id" => 46672912,
13
+ "user" => {"name" => "Angie",
14
+ "description" => "TV junkie...",
15
+ "location" => "NoVA",
16
+ "profile_image_url" => "http:\/\/assets0.twitter.com\/system\/user\/profile_image\/5483072\/normal\/eye.jpg?1177462492",
17
+ "url" => nil,
18
+ "id" => 5483072,
19
+ "protected" => false,
20
+ "screen_name" => "ang_410"},
21
+ "created_at" => "Wed May 02 03:04:54 +0000 2007"}
22
+ @user = Twitter::User.new @json_hash["user"]
23
+ @status = Twitter::Status.new @json_hash
24
+ @status.user = @user
25
+ end
26
+
27
+ it "should respond to unmarshal class method" do
28
+ Twitter::Status.should respond_to(:unmarshal)
29
+ end
30
+
31
+ it "should return expected Twitter::Status object for singular case" do
32
+ status = Twitter::Status.unmarshal(JSON.unparse(@json_hash))
33
+ status.should_not be(nil)
34
+ status.should eql(@status)
35
+ end
36
+
37
+ it "should return expected array of Twitter::Status objects for plural case" do
38
+ statuses = Twitter::Status.unmarshal(JSON.unparse([@json_hash]))
39
+ statuses.should_not be(nil)
40
+ statuses.should have(1).entries
41
+ statuses.first.should eql(@status)
42
+ end
43
+ end
44
+
45
+ describe Twitter::User, "unmarshaling" do
46
+ before(:each) do
47
+ @json_hash = { "name" => "Lucy Snowe",
48
+ "description" => "School Mistress Entrepreneur",
49
+ "location" => "Villette",
50
+ "url" => "http://villetteschoolforgirls.com",
51
+ "id" => 859303,
52
+ "protected" => true,
53
+ "screen_name" => "LucyDominatrix", }
54
+ @user = Twitter::User.new @json_hash
55
+ end
56
+
57
+ it "should respond to unmarshal class method" do
58
+ Twitter::User.should respond_to(:unmarshal)
59
+ end
60
+
61
+ it "should return expected arry of Twitter::User objects for plural case" do
62
+ users = Twitter::User.unmarshal(JSON.unparse([@json_hash]))
63
+ users.should have(1).entries
64
+ users.first.should eql(@user)
65
+ end
66
+
67
+ it "should return expected Twitter::User object for singular case" do
68
+ user = Twitter::User.unmarshal(JSON.unparse(@json_hash))
69
+ user.should_not be(nil)
70
+ user.should eql(@user)
71
+ end
72
+ end
73
+
74
+ describe "Twitter::ModelMixin#to_hash" do
75
+ before(:all) do
76
+ class Model
77
+ include Twitter::ModelMixin
78
+ @@ATTRIBUTES = [:id, :name, :value, :unused_attr]
79
+ attr_accessor *@@ATTRIBUTES
80
+ def self.attributes; @@ATTRIBUTES; end
81
+ end
82
+
83
+ class Hash
84
+ def eql?(other)
85
+ return false unless other # trivial nil case.
86
+ return false unless self.keys.eql?(other.keys)
87
+ self.each do |key,val|
88
+ return false unless self[key].eql?(other[key])
89
+ end
90
+ true
91
+ end
92
+ end
93
+ end
94
+
95
+ before(:each) do
96
+ @attributes = {:id => 14, :name => 'State', :value => 'Illinois'}
97
+ @model = Model.new(@attributes)
98
+ end
99
+
100
+ it "should return expected hash representation of given model object" do
101
+ @model.to_hash.should eql(@attributes)
102
+ end
103
+
104
+ after(:each) do
105
+ nilize(@attributes, @model)
106
+ end
107
+ end
108
+
109
+ describe Twitter::User, ".find" do
110
+ before(:each) do
111
+ @twitter = Twitter::Client.from_config 'config/twitter.yml'
112
+ @id = 2423423
113
+ @screen_name = 'ascreenname'
114
+ @expected_user = Twitter::User.new(:id => @id, :screen_name => @screen_name)
115
+ end
116
+
117
+ it "should invoke given Twitter::Client's #user method with expected arguments" do
118
+ # case where id => @id
119
+ @twitter.should_receive(:user).with(@id).and_return(@expected_user)
120
+ user = Twitter::User.find(@id, @twitter)
121
+ user.should eql(@expected_user)
122
+
123
+ # case where id => @screen_name, which is also valid
124
+ @twitter.should_receive(:user).with(@screen_name).and_return(@expected_user)
125
+ user = Twitter::User.find(@screen_name, @twitter)
126
+ user.should eql(@expected_user)
127
+ end
128
+
129
+ after(:each) do
130
+ nilize(@twitter, @id, @screen_name, @expected_user)
131
+ end
132
+ end
133
+
134
+ describe Twitter::Status, ".find" do
135
+ before(:each) do
136
+ @twitter = Twitter::Client.from_config 'config/twitter.yml'
137
+ @id = 9439843
138
+ @text = 'My crummy status message'
139
+ @user = Twitter::User.new(:id => @id, :screen_name => @screen_name)
140
+ @expected_status = Twitter::Status.new(:id => @id, :text => @text, :user => @user)
141
+ end
142
+
143
+ it "should invoke given Twitter::Client's #status method with expected arguments" do
144
+ @twitter.should_receive(:status).with(:get, @id).and_return(@expected_status)
145
+ status = Twitter::Status.find(@id, @twitter)
146
+ status.should eql(@expected_status)
147
+ end
148
+
149
+ after(:each) do
150
+ nilize(@twitter, @id, @text, @user, @expected_status)
151
+ end
152
+ end
153
+
154
+ describe Test::Model, "#bless" do
155
+ before(:each) do
156
+ @twitter = Twitter::Client.from_config('config/twitter.yml')
157
+ @model = Test::Model.new
158
+ end
159
+
160
+ it "should delegate to #basic_bless" do
161
+ @model.should_receive(:basic_bless).and_return(@twitter)
162
+ @model.bless(@twitter)
163
+ end
164
+
165
+ it "should set client attribute of self" do
166
+ @model.should_receive(:client=).once
167
+ @model.bless(@twitter)
168
+ end
169
+
170
+ after(:each) do
171
+ nilize(@model, @twitter)
172
+ end
173
+ end
174
+
175
+ describe Twitter::User, "#is_me?" do
176
+ before(:each) do
177
+ @twitter = Twitter::Client.from_config('config/twitter.yml')
178
+ @user_not_me = Twitter::User.new(:screen_name => 'notmylogin')
179
+ @user_me = Twitter::User.new(:screen_name => @twitter.instance_eval("@login"))
180
+ @user_not_me.bless(@twitter)
181
+ @user_me.bless(@twitter)
182
+ end
183
+
184
+ it "should return true when Twitter::User object represents authenticated user of client context" do
185
+ @user_me.is_me?.should be_true
186
+ end
187
+
188
+ it "should return false when Twitter::User object does not represent authenticated user of client context" do
189
+ @user_not_me.is_me?.should be_false
190
+ end
191
+
192
+ after(:each) do
193
+ nilize(@twitter, @user_not_me, @user_me)
194
+ end
195
+ end
196
+
197
+ describe Twitter::User, "#bless(client)" do
198
+ before(:each) do
199
+ @twitter = Twitter::Client.from_config('config/twitter.yml')
200
+ @user_not_me = Twitter::User.new(:screen_name => 'notmylogin')
201
+ @user_me = Twitter::User.new(:screen_name => @twitter.instance_eval("@login"))
202
+ end
203
+
204
+ it "should add a followers method" do
205
+ @user_me.should_not respond_to?(:followers)
206
+ @user_me.bless(@twitter)
207
+ @user_me.should respond_to?(:followers)
208
+ end
209
+
210
+ it "should not add a followers method" do
211
+ @user_not_me.should_not respond_to?(:followers)
212
+ @user_not_me.bless(@twitter)
213
+ @user_not_me.should_not respond_to?(:followers)
214
+ end
215
+
216
+ after(:each) do
217
+ nilize(@twitter, @user_not_me, @user_me)
218
+ end
219
+ end
220
+
221
+ describe Twitter::User, "#friends" do
222
+ before(:each) do
223
+ @twitter = Twitter::Client.from_config('config/twitter.yml')
224
+ @id = 5701682
225
+ @user = Twitter::User.new(:id => @id, :screen_name => 'twitter4r')
226
+ @user.bless(@twitter)
227
+ end
228
+
229
+ it "should delegate to @client.user(@id, :friends)" do
230
+ @twitter.should_receive(:user).with(@id, :friends)
231
+ @user.friends
232
+ end
233
+
234
+ after(:each) do
235
+ nilize(@twitter, @id, @user)
236
+ end
237
+ end
238
+
239
+ describe Twitter::User, "#followers" do
240
+ before(:each) do
241
+ @twitter = Twitter::Client.from_config('config/twitter.yml')
242
+ @id = 5701682
243
+ @user = Twitter::User.new(:id => @id, :screen_name => 'twitter4r')
244
+ @user.bless(@twitter)
245
+ end
246
+
247
+ it "should delegate to @client.user(@id, :followers)" do
248
+ @twitter.should_receive(:user).with(@id, :followers)
249
+ @user.followers
250
+ end
251
+
252
+ after(:each) do
253
+ nilize(@twitter, @id, @user)
254
+ end
255
+ end
256
+
257
+ describe Test::Model, "#to_i" do
258
+ before(:each) do
259
+ @id = 234324285
260
+ class Test::Model
261
+ attr_accessor :id
262
+ end
263
+ @model = Test::Model.new(:id => @id)
264
+ end
265
+
266
+ it "should return @id attribute" do
267
+ @model.to_i.should eql(@id)
268
+ end
269
+
270
+ after(:each) do
271
+ nilize(@model, @id)
272
+ end
273
+ end
274
+
275
+ describe Test::Model, "#to_s" do
276
+ before(:each) do
277
+ class Test::Model
278
+ attr_accessor :text
279
+ end
280
+ @text = 'Some text for the message body here'
281
+ @model = Test::Model.new(:text => @text)
282
+ end
283
+
284
+ it "should return expected text when a @text attribute exists for the model" do
285
+ @model.to_s.should eql(@text)
286
+ end
287
+
288
+ after(:each) do
289
+ nilize(@model)
290
+ end
291
+ end
292
+
293
+ describe Twitter::Message, ".find" do
294
+ it "should raise NotImplementedError due to Twitter (as opposed to Twitter4R) API limitation" do
295
+ lambda {
296
+ Twitter::Message.find(123, nil)
297
+ }.should raise_error(NotImplementedError)
298
+ end
299
+ end
300
+
301
+ describe Twitter::Status, ".create" do
302
+ before(:each) do
303
+ @twitter = client_context
304
+ @text = 'My status update'
305
+ @status = Twitter::Status.new(:text => @text, :client => @twitter)
306
+ end
307
+
308
+ it "should invoke #status(:post, text) on client context given" do
309
+ @twitter.should_receive(:status).with(:post, @text).and_return(@status)
310
+ Twitter::Status.create(:text => @text, :client => @twitter)
311
+ end
312
+
313
+ it "should raise an ArgumentError when no client is given in params" do
314
+ lambda {
315
+ Twitter::Status.create(:text => @text)
316
+ }.should raise_error(ArgumentError)
317
+ end
318
+
319
+ it "should raise an ArgumentError when no text is given in params" do
320
+ @twitter.should_receive(:is_a?).with(Twitter::Client)
321
+ lambda {
322
+ Twitter::Status.create(:client => @twitter)
323
+ }.should raise_error(ArgumentError)
324
+ end
325
+
326
+ it "should raise an ArgumentError when text given in params is not a String" do
327
+ lambda {
328
+ Twitter::Status.create(:client => @twitter, :text => 234493)
329
+ }.should raise_error(ArgumentError)
330
+ end
331
+
332
+ it "should raise an ArgumentError when client context given in params is not a Twitter::Client object" do
333
+ lambda {
334
+ Twitter::Status.create(:client => 'a string instead of a Twitter::Client', :text => @text)
335
+ }.should raise_error(ArgumentError)
336
+ end
337
+
338
+ after(:each) do
339
+ nilize(@twitter, @text, @status)
340
+ end
341
+ end
342
+
343
+ describe Twitter::Message, ".create" do
344
+ before(:each) do
345
+ @twitter = client_context
346
+ @text = 'Just between you and I, Lantana and Gosford Park are two of my favorite movies'
347
+ @recipient = Twitter::User.new(:id => 234958)
348
+ @message = Twitter::Message.new(:text => @text, :recipient => @recipient)
349
+ end
350
+
351
+ it "should invoke #message(:post, text, recipient) on client context given" do
352
+ @twitter.should_receive(:message).with(:post, @text, @recipient).and_return(@message)
353
+ Twitter::Message.create(:client => @twitter, :text => @text, :recipient => @recipient)
354
+ end
355
+
356
+ it "should raise an ArgumentError if no client context is given in params" do
357
+ lambda {
358
+ Twitter::Message.create(:text => @text, :recipient => @recipient)
359
+ }.should raise_error(ArgumentError)
360
+ end
361
+
362
+ it "should raise an ArgumentError if client conext given in params is not a Twitter::Client object" do
363
+ lambda {
364
+ Twitter::Message.create(
365
+ :client => 3.14159,
366
+ :text => @text,
367
+ :recipient => @recipient)
368
+ }.should raise_error(ArgumentError)
369
+ end
370
+
371
+ it "should raise an ArgumentError if no text is given in params" do
372
+ @twitter.should_receive(:is_a?).with(Twitter::Client)
373
+ lambda {
374
+ Twitter::Message.create(
375
+ :client => @twitter,
376
+ :recipient => @recipient)
377
+ }.should raise_error(ArgumentError)
378
+ end
379
+
380
+ it "should raise an ArgumentError if text given in params is not a String" do
381
+ @twitter.should_receive(:is_a?).with(Twitter::Client)
382
+ lambda {
383
+ Twitter::Message.create(
384
+ :client => @twitter,
385
+ :text => Object.new,
386
+ :recipient => @recipient)
387
+ }.should raise_error(ArgumentError)
388
+ end
389
+
390
+ it "should raise an ArgumentError if no recipient is given in params" do
391
+ @text.should_receive(:is_a?).with(String)
392
+ lambda {
393
+ Twitter::Message.create(
394
+ :client => @twitter,
395
+ :text => @text)
396
+ }.should raise_error(ArgumentError)
397
+ end
398
+
399
+ it "should raise an ArgumentError if recipient given in params is not a Twitter::User, Integer or String object" do
400
+ @text.should_receive(:is_a?).with(String)
401
+ lambda {
402
+ Twitter::Message.create(
403
+ :client => @twitter,
404
+ :text => @text,
405
+ :recipient => 3.14159)
406
+ }.should raise_error(ArgumentError)
407
+ end
408
+
409
+ after(:each) do
410
+ nilize(@twitter, @text, @recipient, @message)
411
+ end
412
+ end
413
+
414
+ describe Twitter::User, "#befriend" do
415
+ before(:each) do
416
+ @twitter = client_context
417
+ @user = Twitter::User.new(
418
+ :id => 1234,
419
+ :screen_name => 'mylogin',
420
+ :client => @twitter)
421
+ @friend = Twitter::User.new(
422
+ :id => 5678,
423
+ :screen_name => 'friend',
424
+ :client => @twitter)
425
+ end
426
+
427
+ it "should invoke #friend(:add, user) on client context" do
428
+ @twitter.should_receive(:friend).with(:add, @friend).and_return(@friend)
429
+ @user.befriend(@friend)
430
+ end
431
+
432
+ after(:each) do
433
+ nilize(@twitter, @user, @friend)
434
+ end
435
+ end
436
+
437
+ describe Twitter::User, "#defriend" do
438
+ before(:each) do
439
+ @twitter = client_context
440
+ @user = Twitter::User.new(
441
+ :id => 1234,
442
+ :screen_name => 'mylogin',
443
+ :client => @twitter)
444
+ @friend = Twitter::User.new(
445
+ :id => 5678,
446
+ :screen_name => 'friend',
447
+ :client => @twitter)
448
+ end
449
+
450
+ it "should invoke #friend(:remove, user) on client context" do
451
+ @twitter.should_receive(:friend).with(:remove, @friend).and_return(@friend)
452
+ @user.defriend(@friend)
453
+ end
454
+
455
+ after(:each) do
456
+ nilize(@twitter, @user, @friend)
457
+ end
458
+ end
@@ -5,13 +5,13 @@ VERSION_LIST = [Twitter::Version::MAJOR, Twitter::Version::MINOR, Twitter::Versi
5
5
  EXPECTED_VERSION = VERSION_LIST.join('.')
6
6
  EXPECTED_NAME = VERSION_LIST.join('_')
7
7
 
8
- describe "Twitter::Version.to_version" do
8
+ describe Twitter::Version, ".to_version" do
9
9
  it "should return #{EXPECTED_VERSION}" do
10
10
  Twitter::Version.to_version.should eql(EXPECTED_VERSION)
11
11
  end
12
12
  end
13
13
 
14
- describe "Twitter::Version.to_name" do
14
+ describe Twitter::Version, ".to_name" do
15
15
  it "should return #{EXPECTED_NAME}" do
16
16
  Twitter::Version.to_name.should eql(EXPECTED_NAME)
17
17
  end
metadata CHANGED
@@ -3,12 +3,12 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: twitter4r
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.1
7
- date: 2007-06-25 00:00:00 -05:00
8
- summary: A clean Twitter client API in pure Ruby (not command-line client). Will include Twitter add-ons also in Ruby.
6
+ version: 0.2.0
7
+ date: 2007-07-08 00:00:00 -05:00
8
+ summary: A clean Twitter client API in pure Ruby. Will include Twitter add-ons also in Ruby.
9
9
  require_paths:
10
10
  - lib
11
- email: twitter4r-devel@rubyforge.org
11
+ email: twitter4r-users@googlegroups.com
12
12
  homepage: http://twitter4r.rubyforge.org
13
13
  rubyforge_project: twitter4r
14
14
  description:
@@ -18,9 +18,9 @@ bindir: bin
18
18
  has_rdoc: true
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- - - ">"
21
+ - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.0.0
23
+ version: 1.8.2
24
24
  version:
25
25
  platform: ruby
26
26
  signing_key:
@@ -30,13 +30,39 @@ authors:
30
30
  - Susan Potter
31
31
  files:
32
32
  - lib/twitter.rb
33
+ - lib/twitter/config.rb
34
+ - lib/twitter/extras.rb
33
35
  - lib/twitter/version.rb
36
+ - lib/twitter/client.rb
37
+ - lib/twitter/model.rb
34
38
  - lib/twitter/meta.rb
39
+ - lib/twitter/ext.rb
35
40
  - lib/twitter/core.rb
41
+ - lib/twitter/console.rb
42
+ - lib/twitter/client/user.rb
43
+ - lib/twitter/client/base.rb
44
+ - lib/twitter/client/status.rb
45
+ - lib/twitter/client/messaging.rb
46
+ - lib/twitter/client/timeline.rb
47
+ - lib/twitter/client/friendship.rb
48
+ - lib/twitter/ext/stdlib.rb
36
49
  - spec/spec_helper.rb
50
+ - spec/twitter/model_spec.rb
37
51
  - spec/twitter/core_spec.rb
52
+ - spec/twitter/client_spec.rb
53
+ - spec/twitter/extras_spec.rb
38
54
  - spec/twitter/version_spec.rb
55
+ - spec/twitter/console_spec.rb
39
56
  - spec/twitter/meta_spec.rb
57
+ - spec/twitter/config_spec.rb
58
+ - spec/twitter/deprecated_spec.rb
59
+ - spec/twitter/client/timeline_spec.rb
60
+ - spec/twitter/client/base_spec.rb
61
+ - spec/twitter/client/status_spec.rb
62
+ - spec/twitter/client/friendship_spec.rb
63
+ - spec/twitter/client/messaging_spec.rb
64
+ - spec/twitter/client/user_spec.rb
65
+ - spec/twitter/ext/stdlib_spec.rb
40
66
  test_files: []
41
67
 
42
68
  rdoc_options: []
@@ -47,7 +73,17 @@ executables: []
47
73
 
48
74
  extensions: []
49
75
 
50
- requirements: []
51
-
52
- dependencies: []
53
-
76
+ requirements:
77
+ - Ruby 1.8.4+
78
+ - json gem, version 0.4.3 or higher
79
+ - jcode (for unicode support)
80
+ dependencies:
81
+ - !ruby/object:Gem::Dependency
82
+ name: json
83
+ version_requirement:
84
+ version_requirements: !ruby/object:Gem::Version::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 0.4.3
89
+ version: