socialcastr 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/.gitignore +1 -0
  2. data/README.markdown +29 -6
  3. data/examples/parse_messages.rb +16 -0
  4. data/examples/post_comment.rb +11 -0
  5. data/examples/post_message.rb +15 -0
  6. data/examples/search.rb +19 -0
  7. data/lib/socialcastr/api.rb +70 -78
  8. data/lib/socialcastr/base.rb +151 -0
  9. data/lib/socialcastr/collection.rb +30 -0
  10. data/lib/socialcastr/comment.rb +2 -2
  11. data/lib/socialcastr/exceptions.rb +75 -0
  12. data/lib/socialcastr/external_resource.rb +2 -2
  13. data/lib/socialcastr/flag.rb +5 -0
  14. data/lib/socialcastr/like.rb +1 -1
  15. data/lib/socialcastr/message.rb +45 -11
  16. data/lib/socialcastr/version.rb +2 -2
  17. data/lib/socialcastr.rb +19 -11
  18. data/socialcastr.gemspec +2 -0
  19. data/spec/api_spec.rb +167 -0
  20. data/spec/base_spec.rb +235 -0
  21. data/spec/comment_spec.rb +4 -0
  22. data/spec/configuration_spec.rb +97 -0
  23. data/spec/fixtures/demo_config.yml +3 -0
  24. data/spec/fixtures/message.xml +69 -0
  25. data/spec/fixtures/messages.xml +3338 -0
  26. data/spec/message_spec.rb +173 -0
  27. data/spec/socialcastr_spec.rb +58 -0
  28. data/spec/spec_helper.rb +54 -0
  29. metadata +62 -19
  30. data/lib/socialcastr/attachment_list.rb +0 -5
  31. data/lib/socialcastr/comment_list.rb +0 -5
  32. data/lib/socialcastr/external_resource_list.rb +0 -5
  33. data/lib/socialcastr/group_list.rb +0 -5
  34. data/lib/socialcastr/group_membership_list.rb +0 -5
  35. data/lib/socialcastr/like_list.rb +0 -5
  36. data/lib/socialcastr/media_file_list.rb +0 -5
  37. data/lib/socialcastr/message_list.rb +0 -5
  38. data/lib/socialcastr/recipient_list.rb +0 -6
  39. data/lib/socialcastr/stream_list.rb +0 -5
  40. data/lib/socialcastr/tag_list.rb +0 -5
@@ -0,0 +1,173 @@
1
+ require 'spec_helper'
2
+
3
+ describe Socialcastr::Message do
4
+ context "fetching a specific message from socialcast" do
5
+ before :all do
6
+ fake_socialcast_api_for(:message) do
7
+ @message = Socialcastr::Message.find(425)
8
+ end
9
+ end
10
+
11
+ it "should return a Message object" do
12
+ @message.class.should == Socialcastr::Message
13
+ end
14
+
15
+ it "should have a proper title" do
16
+ @message.title.should == "trying out the api"
17
+ end
18
+
19
+ it "should have an id" do
20
+ @message.id.should_not be_nil
21
+ @message.id.should == 425
22
+ end
23
+ it "should have a body" do
24
+ @message.body.should_not be_nil
25
+ end
26
+
27
+ it "should have a user" do
28
+ @message.user.should_not be_nil
29
+ @message.user.class.should == Socialcastr::User
30
+ end
31
+
32
+ it "should have a collection of groups" do
33
+ @message.groups.class.should == Array
34
+ end
35
+
36
+ it "should belong to a well formed group" do
37
+ @message.groups.first.class.should == Socialcastr::Group
38
+ end
39
+
40
+ it "should have a source" do
41
+ @message.source.should_not be_nil
42
+ @message.source.class.should == Socialcastr::Source
43
+ end
44
+
45
+ end
46
+
47
+ context "fetching a page's worth of messages" do
48
+ before :each do
49
+ fake_socialcast_api_for(:messages) do
50
+ @messages = Socialcastr::Message.all
51
+ end
52
+ end
53
+
54
+ it "should be an instance of MessageList" do
55
+ @messages.class.should == MessageList
56
+ end
57
+
58
+ it "should be a collection of 20 Socialcastr::Message objects" do
59
+ @messages.size.should == 20
60
+ end
61
+
62
+ it "should be possible to fetch the first item" do
63
+ @messages.first.should_not be_nil
64
+ @messages.first.class.should == Socialcastr::Message
65
+ end
66
+
67
+ it "should contain well formed Message objects" do
68
+ @messages.first.title.should == "trying out the api"
69
+ end
70
+ end
71
+
72
+ context 'flagging a message' do
73
+ before :each do
74
+ fake_socialcast_api_for(:message) do
75
+ @message = Socialcastr::Message.find(425)
76
+ end
77
+ @api = mock(:api)
78
+ response = "<flag><id>3333</id></flag>"
79
+ Socialcastr::Message.stub!(:api).and_return(@api)
80
+ @api.stub!(:post).and_return(response)
81
+ end
82
+
83
+ it "should assign an id to the Flag" do
84
+ @message.flag!
85
+ @message.flag.id.should == 3333
86
+ end
87
+
88
+ context "unflagging the message" do
89
+ before :each do
90
+ @message.flag!
91
+ @api.should_receive(:delete).with("/messages/425/flags/3333").and_return("")
92
+ end
93
+
94
+ it "should not have a flag afterwards" do
95
+ @message.unflag!
96
+ @message.flag.id.should be_nil
97
+ end
98
+ end
99
+ end
100
+
101
+ context 'liking a message' do
102
+ before :each do
103
+ fake_socialcast_api_for :message do
104
+ @message = Socialcastr::Message.find(425)
105
+ end
106
+
107
+ @api = mock(:api)
108
+ response = "<like><id>2222</id><unlikable>true</unlikable></like>"
109
+ Socialcastr::Message.stub!(:api).and_return(@api)
110
+ @api.stub!(:post).and_return(response)
111
+ end
112
+
113
+ it 'should create a new like' do
114
+ old_count = @message.likes.count
115
+ @message.like!
116
+ @message.likes.count.should == old_count + 1
117
+ end
118
+
119
+ it 'should assign an id the the new like' do
120
+ @message.like!
121
+ @message.likes.last.id.should == 2222
122
+ end
123
+ end
124
+
125
+ context "unliking a message" do
126
+ before :each do
127
+ fake_socialcast_api_for :message do
128
+ @message = Socialcastr::Message.find(425)
129
+ end
130
+
131
+ @api = mock(:api)
132
+ response = "<like><id>2222</id><unlikable>true</unlikable></like>"
133
+ Socialcastr::Message.stub!(:api).and_return(@api)
134
+ @api.stub!(:post).and_return(response)
135
+ @api.stub!(:delete).and_return("")
136
+ @message.like!
137
+ end
138
+
139
+ it "should remove a like" do
140
+ old_count = @message.likes.count
141
+ @message.unlike!
142
+ @message.likes.count.should == old_count -1
143
+ end
144
+ end
145
+
146
+ context "searching for messages matching 'trying'" do
147
+ before :each do
148
+ fake_socialcast_api_for :message
149
+ end
150
+
151
+ it "should return a message" do
152
+ @messages = Socialcastr::Message.search(:q=>"trying")
153
+ @messages.size.should == 1
154
+ end
155
+ end
156
+
157
+ context "commenting a message" do
158
+ before :each do
159
+ fake_socialcast_api_for :message do
160
+ @message = Socialcastr::Message.find(425)
161
+ end
162
+ end
163
+
164
+ it "should post to messages/425/comments.xml" do
165
+ @api = mock(:api)
166
+ response = "<comment></comment>"
167
+ Socialcastr::Message.stub!(:api).and_return(@api)
168
+ @api.should_receive(:post).with("/messages/425/comments", {:text => "hallo world"}).and_return(response)
169
+ @message.comment! :text => "hallo world"
170
+ end
171
+
172
+ end
173
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Socialcastr do
4
+ context 'configuration' do
5
+ context 'called without a block' do
6
+ before :each do
7
+ @config = Socialcastr.configuration
8
+ end
9
+ it 'should return a Socialcastr::Configuration instance' do
10
+ @config.class.should == Socialcastr::Configuration
11
+ end
12
+ end
13
+ context 'called with a block' do
14
+ before :each do
15
+ @called = nil
16
+ Socialcastr.configuration do |config|
17
+ @called = config
18
+ end
19
+ end
20
+ it 'should call the block' do
21
+ @called.should_not be_nil
22
+ end
23
+ it 'should pass a configuration instance to the block' do
24
+ @called.equal?(Socialcastr::Configuration.instance).should be_true
25
+ end
26
+ context 'pointing to a yaml ile' do
27
+ before :each do
28
+ Socialcastr.configuration do |config|
29
+ config.config_file = File.join(File.dirname(__FILE__), 'fixtures', 'demo_config.yml')
30
+ end
31
+ end
32
+
33
+ it 'should load the configuration attributes from the file' do
34
+ Socialcastr.configuration.username.should == "file_demo"
35
+ Socialcastr.configuration.password.should == "password"
36
+ Socialcastr.configuration.domain.should == "demo.socialcast.com"
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ context 'api' do
43
+ context 'called without having configured Socialcastr' do
44
+ it 'should raise an error' do
45
+ lambda { Socialcastr.api }.should raise_error
46
+ end
47
+ end
48
+ context 'called after configuring Socialcastr' do
49
+ before :each do
50
+ configure_socialcastr
51
+ @api = Socialcastr.api
52
+ end
53
+ it 'should return a new Socialcastr::API instance' do
54
+ @api.class.should == Socialcastr::API
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,54 @@
1
+ require "rubygems"
2
+ require "bundler"
3
+ Bundler.setup
4
+
5
+ require 'rspec'
6
+ require 'artifice'
7
+
8
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
9
+ require 'socialcastr'
10
+
11
+ RSpec.configure do |config|
12
+ config.before :each do
13
+ Socialcastr.configuration.reset
14
+ end
15
+ end
16
+ def generate_fake_endpoint(response, code=200)
17
+ return proc { |env|
18
+ [code, {"Content-Type" => "text/html",
19
+ "X-Test-Method" => env["REQUEST_METHOD"],
20
+ "X-Test-Input" => env["rack.input"].read,
21
+ "X-Test-Scheme" => env["rack.url_scheme"],
22
+ "X-Test-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
23
+ "X-Test-Port" => env["SERVER_PORT"]},
24
+ [response]
25
+ ]
26
+ }
27
+ end
28
+
29
+ def configure_socialcastr
30
+ Socialcastr.configuration do |c|
31
+ c.username = "demo"
32
+ c.password = "password"
33
+ c.domain = "demo.socialcast.com"
34
+ end
35
+ end
36
+
37
+ def fake_socialcast_api_for(type, &block)
38
+ configure_socialcastr
39
+ case type
40
+ when :message
41
+ responsefile = "message.xml"
42
+ when :messages
43
+ responsefile = "messages.xml"
44
+ end
45
+ response = File.read(File.join(File.dirname(__FILE__), 'fixtures', responsefile))
46
+ endpoint = generate_fake_endpoint(response)
47
+ if block
48
+ Artifice.activate_with(generate_fake_endpoint(response)) do
49
+ block.call
50
+ end
51
+ else
52
+ Artifice.activate_with(generate_fake_endpoint(response))
53
+ end
54
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: socialcastr
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Riccardo Cambiassi
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-12 00:00:00 +01:00
18
+ date: 2011-05-10 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -49,7 +49,7 @@ dependencies:
49
49
  type: :development
50
50
  version_requirements: *id002
51
51
  - !ruby/object:Gem::Dependency
52
- name: sax-machine
52
+ name: yard
53
53
  prerelease: false
54
54
  requirement: &id003 !ruby/object:Gem::Requirement
55
55
  none: false
@@ -60,8 +60,36 @@ dependencies:
60
60
  segments:
61
61
  - 0
62
62
  version: "0"
63
- type: :runtime
63
+ type: :development
64
64
  version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: artifice
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ type: :development
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: sax-machine
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ hash: 3
88
+ segments:
89
+ - 0
90
+ version: "0"
91
+ type: :runtime
92
+ version_requirements: *id005
65
93
  description: A Ruby wrapper for the Socialcast REST API
66
94
  email:
67
95
  - bru@codewitch.org
@@ -77,37 +105,43 @@ files:
77
105
  - LICENSE.markdown
78
106
  - README.markdown
79
107
  - Rakefile
108
+ - examples/parse_messages.rb
109
+ - examples/post_comment.rb
110
+ - examples/post_message.rb
111
+ - examples/search.rb
80
112
  - lib/socialcastr.rb
81
113
  - lib/socialcastr/api.rb
82
114
  - lib/socialcastr/attachment.rb
83
- - lib/socialcastr/attachment_list.rb
84
115
  - lib/socialcastr/avatar_list.rb
85
116
  - lib/socialcastr/base.rb
117
+ - lib/socialcastr/collection.rb
86
118
  - lib/socialcastr/comment.rb
87
- - lib/socialcastr/comment_list.rb
119
+ - lib/socialcastr/exceptions.rb
88
120
  - lib/socialcastr/external_resource.rb
89
- - lib/socialcastr/external_resource_list.rb
121
+ - lib/socialcastr/flag.rb
90
122
  - lib/socialcastr/group.rb
91
- - lib/socialcastr/group_list.rb
92
123
  - lib/socialcastr/group_membership.rb
93
- - lib/socialcastr/group_membership_list.rb
94
124
  - lib/socialcastr/like.rb
95
- - lib/socialcastr/like_list.rb
96
125
  - lib/socialcastr/media_file.rb
97
- - lib/socialcastr/media_file_list.rb
98
126
  - lib/socialcastr/message.rb
99
- - lib/socialcastr/message_list.rb
100
127
  - lib/socialcastr/recipient.rb
101
- - lib/socialcastr/recipient_list.rb
102
128
  - lib/socialcastr/source.rb
103
129
  - lib/socialcastr/stream.rb
104
- - lib/socialcastr/stream_list.rb
105
130
  - lib/socialcastr/tag.rb
106
- - lib/socialcastr/tag_list.rb
107
131
  - lib/socialcastr/thumbnail_list.rb
108
132
  - lib/socialcastr/user.rb
109
133
  - lib/socialcastr/version.rb
110
134
  - socialcastr.gemspec
135
+ - spec/api_spec.rb
136
+ - spec/base_spec.rb
137
+ - spec/comment_spec.rb
138
+ - spec/configuration_spec.rb
139
+ - spec/fixtures/demo_config.yml
140
+ - spec/fixtures/message.xml
141
+ - spec/fixtures/messages.xml
142
+ - spec/message_spec.rb
143
+ - spec/socialcastr_spec.rb
144
+ - spec/spec_helper.rb
111
145
  has_rdoc: true
112
146
  homepage: https://github.com/bru/socialcastr
113
147
  licenses: []
@@ -153,5 +187,14 @@ rubygems_version: 1.5.3
153
187
  signing_key:
154
188
  specification_version: 3
155
189
  summary: Ruby wrapper for the Socialcast API
156
- test_files: []
157
-
190
+ test_files:
191
+ - spec/api_spec.rb
192
+ - spec/base_spec.rb
193
+ - spec/comment_spec.rb
194
+ - spec/configuration_spec.rb
195
+ - spec/fixtures/demo_config.yml
196
+ - spec/fixtures/message.xml
197
+ - spec/fixtures/messages.xml
198
+ - spec/message_spec.rb
199
+ - spec/socialcastr_spec.rb
200
+ - spec/spec_helper.rb
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class AttachmentList < Base
3
- elements :attachment, :as => :attachments, :class => Attachment
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class CommentList < Base
3
- element :comment, :as => :comments, :class => Socialcastr::Comment
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class ExternalResourceList < Base
3
- elements :external_resource, :as => :external_resources, :class => ExternalResource
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class GroupList < Base
3
- elements :group, :as => :groups, :class => Socialcastr::Group
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class GroupMembershipList < Base
3
- elements :group_membership, :as => :group_memberships, :class => Socialcastr::GroupMembership
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class LikeList < Base
3
- element :like, :as => :likes, :class => Socialcastr::Like
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class MediaFileList < Base
3
- elements :media_file, :as => :media_files, :class => Socialcastr::MediaFile
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class MessageList < Base
3
- elements :message, :as => :messages, :class => Message
4
- end
5
- end
@@ -1,6 +0,0 @@
1
- module Socialcastr
2
- class RecipientList < Base
3
- elements :recipient, :as => :recipients, :class => Socialcastr::Recipient
4
- end
5
- end
6
-
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class StreamList < Base
3
- elements :stream, :as => :streams, :class => Socialcastr::Stream
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module Socialcastr
2
- class TagList < Base
3
- elements :tag, :as => :tags, :class => Socialcastr::Tag
4
- end
5
- end