socialcastr 0.0.1 → 0.1.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.
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
@@ -1,6 +1,7 @@
1
1
  module Socialcastr
2
2
  class Message < Base
3
3
 
4
+ id_element :id
4
5
  element :title
5
6
  element :body
6
7
  element :url
@@ -8,7 +9,6 @@ module Socialcastr
8
9
  element :action
9
10
  element :external_url
10
11
  element :icon
11
- element :id
12
12
  element :likable
13
13
  element :created_at
14
14
  element :updated_at
@@ -17,8 +17,8 @@ module Socialcastr
17
17
  element :thumbnail_url
18
18
  element :player_params
19
19
  element :user, :class => Socialcastr::User
20
- element :group, :class => Socialcastr::Group
21
- element :groups, :as => :group_list, :class => Socialcastr::GroupList
20
+ #element :group, :class => Socialcastr::Group
21
+ elements :group, :as => :groups, :class => Socialcastr::Group
22
22
  element :source, :class => Socialcastr::Source
23
23
 
24
24
  element :editable
@@ -26,7 +26,7 @@ module Socialcastr
26
26
  element :category_id
27
27
  element :subscribed
28
28
  # element :ratings_average
29
- element :flag
29
+ element :flag, :class => Socialcastr::Flag
30
30
  element :deletable
31
31
  element :comments_count
32
32
  element :verb
@@ -36,17 +36,51 @@ module Socialcastr
36
36
  # element :target_user
37
37
  element :ratable
38
38
  element :message_type
39
- element :recipients, :as => :recipient_list, :class => Socialcastr::RecipientList
39
+ elements :recipient, :as => :recipients, :class => Socialcastr::Recipient
40
40
 
41
- element :attachments, :as => :attachment_list, :class => Socialcastr::AttachmentList
42
- element :tags, :as => :tag_list, :class => Socialcastr::TagList
43
- element :likes, :as => :like_list, :class => Socialcastr::LikeList
44
- element :external_resources, :as => :external_resource_list, :class => Socialcastr::ExternalResourceList
45
- element :media_files, :as => :media_file_list, :class => Socialcastr::MediaFileList
41
+ elements :attachment, :as => :attachments, :class => Socialcastr::Attachment
42
+ elements :tag, :as => :tags, :class => Socialcastr::Tag
43
+ elements :like, :as => :likes, :class => Socialcastr::Like
44
+ elements :external_resource, :as => :external_resources, :class => Socialcastr::ExternalResource
45
+ elements :media_files, :as => :media_file, :class => Socialcastr::MediaFile
46
46
  element :likes_count
47
47
  element :hidden
48
48
 
49
- element :comments, :as => :comment_list, :class => Socialcastr::CommentList
49
+ elements :comment, :as => :comments, :class => Socialcastr::Comment
50
50
 
51
+ def flag!
52
+ return true if flagged?
53
+ flag.copy_attributes_from_object(Flag.parse(api.post(element_path + "/flags")))
54
+ end
55
+
56
+ def flagged?
57
+ !flag.id.nil?
58
+ end
59
+
60
+ def unflag!
61
+ return unless flagged?
62
+ api.delete(element_path + "/flags/#{flag.id}")
63
+ @flag = Flag.new
64
+ end
65
+
66
+ def like!
67
+ likes << Like.parse(api.post(element_path + "/likes"))
68
+ end
69
+
70
+ def unlike!
71
+ likes.reject! do |l|
72
+ l.unlikable && api.delete(element_path + "/likes/#{l.id}")
73
+ end
74
+ end
75
+
76
+ def comment!(arguments={})
77
+ comment = Socialcastr::Comment.new(arguments)
78
+ api.post(element_path + "/comments", comment.to_params)
79
+ end
80
+
81
+
82
+ def self.search(arguments={})
83
+ parse_collection(api.get(collection_path + "/search", arguments))
84
+ end
51
85
  end
52
86
  end
@@ -1,3 +1,3 @@
1
1
  module Socialcastr
2
- VERSION = "0.0.1"
3
- end
2
+ VERSION = "0.1.0"
3
+ end
data/lib/socialcastr.rb CHANGED
@@ -1,41 +1,48 @@
1
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
2
2
 
3
+ require 'socialcastr/exceptions'
3
4
  require 'socialcastr/base'
5
+ require 'socialcastr/collection'
4
6
  require 'socialcastr/api'
5
7
  require 'socialcastr/attachment'
6
- require 'socialcastr/attachment_list'
7
8
  require 'socialcastr/avatar_list'
8
9
  require 'socialcastr/user'
10
+ require 'socialcastr/flag'
9
11
  require 'socialcastr/like'
10
- require 'socialcastr/like_list'
11
12
  require 'socialcastr/comment'
12
- require 'socialcastr/comment_list'
13
13
  require 'socialcastr/group'
14
- require 'socialcastr/group_list'
15
14
  require 'socialcastr/group_membership'
16
- require 'socialcastr/group_membership_list'
17
15
  require 'socialcastr/stream'
18
- require 'socialcastr/stream_list'
19
16
  require 'socialcastr/source'
20
17
  require 'socialcastr/tag'
21
- require 'socialcastr/tag_list'
22
18
  require 'socialcastr/recipient'
23
- require 'socialcastr/recipient_list'
24
19
  require 'socialcastr/thumbnail_list'
25
20
  require 'socialcastr/media_file'
26
- require 'socialcastr/media_file_list'
27
21
  require 'socialcastr/external_resource'
28
- require 'socialcastr/external_resource_list'
29
22
  require 'socialcastr/message'
30
- require 'socialcastr/message_list'
31
23
 
32
24
  require 'singleton'
25
+ require 'yaml'
33
26
 
34
27
  module Socialcastr
28
+
29
+ class MissingConfiguration < StandardError; end;
30
+
35
31
  class Configuration
36
32
  include Singleton
37
33
  ATTRIBUTES = [:domain, :username, :password, :config_file]
38
34
  attr_accessor *ATTRIBUTES
35
+
36
+ def ready?
37
+ [@domain, @username, @password].map(&:nil?).none?
38
+ end
39
+
40
+ def reset
41
+ ATTRIBUTES.each do |attribute|
42
+ send(attribute.to_s + "=", nil)
43
+ end
44
+ return self
45
+ end
39
46
  end
40
47
 
41
48
  def self.configuration
@@ -53,6 +60,7 @@ module Socialcastr
53
60
 
54
61
  def self.api
55
62
  config = Configuration.instance
63
+ raise MissingConfiguration unless config.username
56
64
  API.new(config.username, config.password, config.domain)
57
65
  end
58
66
 
data/socialcastr.gemspec CHANGED
@@ -4,6 +4,8 @@ require File.expand_path('../lib/socialcastr/version', __FILE__)
4
4
  Gem::Specification.new do |s|
5
5
  s.add_development_dependency('rake', '~> 0.8')
6
6
  s.add_development_dependency('rspec', '~> 2.5')
7
+ s.add_development_dependency('yard')
8
+ s.add_development_dependency('artifice')
7
9
  s.add_runtime_dependency('sax-machine')
8
10
  s.authors = ["Riccardo Cambiassi"]
9
11
  s.description = %q{A Ruby wrapper for the Socialcast REST API}
data/spec/api_spec.rb ADDED
@@ -0,0 +1,167 @@
1
+ require 'spec_helper'
2
+
3
+ describe Socialcastr::API do
4
+ before :each do
5
+ @api = Socialcastr::API.new("demo", "password", "demo.socialcast.com")
6
+ end
7
+
8
+ context "trying to use an invalid HTTP method" do
9
+ it "should raise an InvalidMethod exception" do
10
+ lambda {@api.https_request(:wrong, nil, nil)}.should raise_error(Socialcastr::InvalidMethod)
11
+ end
12
+ end
13
+ context "trying to access a non existing resource" do
14
+ it "should throw a ResourceNotFound exception" do
15
+ Artifice.activate_with(generate_fake_endpoint("", 404)) do
16
+ lambda { @api.get :messages }.should raise_error(Socialcastr::ResourceNotFound)
17
+ end
18
+ end
19
+ end
20
+ context "being redirected" do
21
+ it "should throw a Redirection exception" do
22
+ Artifice.activate_with(generate_fake_endpoint("", 301)) do
23
+ lambda { @api.get :messages }.should raise_error(Socialcastr::Redirection)
24
+ end
25
+ end
26
+ end
27
+ context "receiving a bad request response" do
28
+ it "should throw a BadRequest exception" do
29
+ Artifice.activate_with(generate_fake_endpoint("", 400)) do
30
+ lambda { @api.get :messages }.should raise_error(Socialcastr::BadRequest)
31
+ end
32
+ end
33
+ end
34
+ context "receiving a unauthorized access response" do
35
+ it "should throw a Unauthorized exception" do
36
+ Artifice.activate_with(generate_fake_endpoint("", 401)) do
37
+ lambda { @api.get :messages }.should raise_error(Socialcastr::UnauthorizedAccess)
38
+ end
39
+ end
40
+ end
41
+ context "receiving a forbidden access response" do
42
+ it "should throw a ForbiddenAccess xception" do
43
+ Artifice.activate_with(generate_fake_endpoint("", 403)) do
44
+ lambda { @api.get :messages }.should raise_error(Socialcastr::ForbiddenAccess)
45
+ end
46
+ end
47
+ end
48
+ context "receiving a method not allowed response" do
49
+ it "should throw a MethodNotAllowed exception" do
50
+ Artifice.activate_with(generate_fake_endpoint("", 405)) do
51
+ lambda { @api.get :messages }.should raise_error(Socialcastr::MethodNotAllowed)
52
+ end
53
+ end
54
+ end
55
+ context "receiving a resource conflict response" do
56
+ it "should throw a ResourceConflict exception" do
57
+ Artifice.activate_with(generate_fake_endpoint("", 409)) do
58
+ lambda { @api.get :messages }.should raise_error(Socialcastr::ResourceConflict)
59
+ end
60
+ end
61
+ end
62
+ context "receiving a resource gone response" do
63
+ it "should throw a ResourceGone exception" do
64
+ Artifice.activate_with(generate_fake_endpoint("", 410)) do
65
+ lambda { @api.get :messages }.should raise_error(Socialcastr::ResourceGone)
66
+ end
67
+ end
68
+ end
69
+ context "receiving a resource invalid response" do
70
+ it "should throw a ResourceInvalid exception" do
71
+ Artifice.activate_with(generate_fake_endpoint("", 422)) do
72
+ lambda { @api.get :messages }.should raise_error(Socialcastr::ResourceInvalid)
73
+ end
74
+ end
75
+ end
76
+ context "receiving a server error response" do
77
+ it "should throw a ServerError exception" do
78
+ Artifice.activate_with(generate_fake_endpoint("", 500)) do
79
+ lambda { @api.get :messages }.should raise_error(Socialcastr::ServerError)
80
+ end
81
+ end
82
+ end
83
+ context "#get" do
84
+ it "should call Net::HTTP::Get" do
85
+ req = Net::HTTP::Get.new("/")
86
+ Net::HTTP::Get.should_receive(:new).and_return(req)
87
+ @messages = nil
88
+ fake_socialcast_api_for :message do
89
+ @messages = @api.get :message
90
+ end
91
+ end
92
+
93
+ it "should return an xml string" do
94
+ fake_socialcast_api_for :message do
95
+ @messages = @api.get :message
96
+ end
97
+
98
+ @messages.should_not be_nil
99
+ @messages.class.should == String
100
+ end
101
+ end
102
+
103
+ context "#put" do
104
+ it "should call Net::HTTP::Get" do
105
+ req = Net::HTTP::Put.new("/")
106
+ Net::HTTP::Put.should_receive(:new).and_return(req)
107
+ @messages = nil
108
+ fake_socialcast_api_for :message do
109
+ @messages = @api.put :message
110
+ end
111
+ end
112
+ end
113
+
114
+ context "#post" do
115
+ it "should call Net::HTTP::Get" do
116
+ req = Net::HTTP::Post.new("/")
117
+ Net::HTTP::Post.should_receive(:new).and_return(req)
118
+ @messages = nil
119
+ fake_socialcast_api_for :message do
120
+ @messages = @api.post :message
121
+ end
122
+ end
123
+ end
124
+
125
+ context "#delete" do
126
+ it "should call Net::HTTP::Get" do
127
+ req = Net::HTTP::Delete.new("/")
128
+ Net::HTTP::Delete.should_receive(:new).and_return(req)
129
+ @messages = nil
130
+ fake_socialcast_api_for :message do
131
+ @messages = @api.delete :message
132
+ end
133
+ end
134
+ end
135
+
136
+ context "#setup_https" do
137
+ before :each do
138
+ @https = @api.setup_https
139
+ end
140
+
141
+ it "should return an instance of Net::HTTP" do
142
+ @https.class.should == Net::HTTP
143
+ end
144
+ it "should use ssl" do
145
+ @https.use_ssl.should be_true
146
+ end
147
+ it "should not verify SSL" do
148
+ @https.verify_mode.should == OpenSSL::SSL::VERIFY_NONE
149
+ end
150
+
151
+ end
152
+
153
+ context "#build_query_string" do
154
+ it "should return a string" do
155
+ @api.build_query_string("").class.should == String
156
+ end
157
+ it "should prepend /api/ to the path" do
158
+ @api.build_query_string("test").should match(/^\/api\/test/)
159
+ end
160
+ it "should append the format to the path" do
161
+ @api.build_query_string("test").should match(/test\.xml$/)
162
+ end
163
+ it "should append a well formed query string when passing a parameters hash" do
164
+ @api.build_query_string("test", :hallo => "world").should match(/\?hallo=world$/)
165
+ end
166
+ end
167
+ end
data/spec/base_spec.rb ADDED
@@ -0,0 +1,235 @@
1
+ require 'spec_helper'
2
+
3
+ describe Socialcastr::Base do
4
+ context 'api' do
5
+ context 'when Socialcastr has not been configured' do
6
+ it 'should raise an exception' do
7
+ lambda { Socialcastr::Base.api }.should raise_error
8
+ end
9
+ end
10
+ context 'when Socialcastr has been configured' do
11
+ before :each do
12
+ configure_socialcastr
13
+ end
14
+ it "should return the instance of Socialcastr::API" do
15
+ Socialcastr::Base.api.class.should == Socialcastr::API
16
+ end
17
+ end
18
+ end
19
+
20
+ context 'creating a new object with new()' do
21
+ it 'should return a new instance' do
22
+ class Post < Socialcastr::Base; end
23
+ post = Post.new
24
+ post.should_not be_nil
25
+ post.class.should == Post
26
+ end
27
+
28
+ context 'for a class that has an element \'author\'' do
29
+ before :each do
30
+ class Post < Socialcastr::Base
31
+ element 'author'
32
+ end
33
+ @post = Post.new
34
+ end
35
+
36
+ it 'should be possible to access the author attribute' do
37
+ lambda { @post.author }.should_not raise_error
38
+ end
39
+
40
+ it 'should not initialize the author attribute' do
41
+ @post.author.should be_nil
42
+ end
43
+ end
44
+ end
45
+
46
+ context 'initializing a new object with author="john doe"' do
47
+ before :each do
48
+ class Post < Socialcastr::Base
49
+ id_element :id
50
+ element 'author'
51
+ end
52
+ @post = Post.new(:author => "john doe")
53
+ end
54
+
55
+ context '#author' do
56
+ it 'should return "john doe"' do
57
+ @post.author.should == "john doe"
58
+ end
59
+ end
60
+
61
+ context '#new?' do
62
+ it 'should return true' do
63
+ @post.new?.should be_true
64
+ end
65
+ end
66
+
67
+ context '#id' do
68
+ it 'should be nil' do
69
+ @post.id.should be_nil
70
+ end
71
+ end
72
+
73
+ context '#to_params' do
74
+ it 'should return a Hash ' do
75
+ @post.to_params.class.should == Hash
76
+ end
77
+ end
78
+
79
+ context '#param_name' do
80
+ it 'should return a string like model_name[variable_name]' do
81
+ @post.param_name("@author").should == "post[author]"
82
+ end
83
+ end
84
+
85
+ context "#copy_attributes_from_object" do
86
+ it "should copy the instance variables of on another object's to the current one" do
87
+ @another_post = Post.new(:author => "jane doe")
88
+ @post.copy_attributes_from_object(@another_post)
89
+ @post.author.should == "jane doe"
90
+ end
91
+ end
92
+
93
+ context 'saving it with #save' do
94
+ before :each do
95
+ @api = mock('api', :post => "")
96
+ Socialcastr.stub!(:api).and_return(@api)
97
+ end
98
+ it 'should POST to the socialcast api' do
99
+ response = "<post><id>4</id><author>john doe</author></post>"
100
+ @api.should_receive(:post).and_return(response)
101
+ @post.save
102
+ @post.id.should == 4
103
+ end
104
+
105
+ end
106
+ end
107
+
108
+ context 'find_single or find(id)' do
109
+ before :each do
110
+ fake_socialcast_api_for(:message) do
111
+ @message = Socialcastr::Message.find(425)
112
+ end
113
+ end
114
+
115
+ it 'should return a Socialcastr::Base object' do
116
+ @message.class.should == Socialcastr::Message
117
+ end
118
+
119
+ it 'should not be new' do
120
+ @message.new?.should be_false
121
+ end
122
+
123
+ context 'after modifying one attribute' do
124
+ before :each do
125
+ @message.title = 'new title'
126
+ end
127
+
128
+ it 'the attribute should be changed' do
129
+ @message.title.should == "new title"
130
+ end
131
+
132
+ context 'saving the object with #save' do
133
+ it 'should PUT to the Socialcast API' do
134
+ @api = mock('api', :post => "")
135
+ Socialcastr::Message.stub!(:api).and_return(@api)
136
+ response = "<message></message>"
137
+ @api.should_receive(:put).and_return(response)
138
+ @message.save
139
+ end
140
+ end
141
+ end
142
+ end
143
+
144
+ context 'find_every or find(:all)' do
145
+ before :each do
146
+ fake_socialcast_api_for(:message) do
147
+ @messages = Socialcastr::Base.find(:all)
148
+ end
149
+ end
150
+
151
+ it 'should return an enumerable' do
152
+ @messages.class.should == BaseList
153
+ lambda { @messages.first }.should_not raise_error
154
+ end
155
+ end
156
+ context 'first or find(:first)' do
157
+ before :each do
158
+ fake_socialcast_api_for(:message) do
159
+ @message = Socialcastr::Message.first
160
+ end
161
+ end
162
+
163
+ it 'should return an object' do
164
+ @message.class.should == Socialcastr::Message
165
+ end
166
+ end
167
+
168
+ context 'last or find(:last)' do
169
+ before :each do
170
+ fake_socialcast_api_for(:message) do
171
+ @message = Socialcastr::Message.last
172
+ end
173
+ end
174
+
175
+ it 'should return an object' do
176
+ @message.class.should == Socialcastr::Message
177
+ end
178
+ end
179
+
180
+ context 'model_name' do
181
+ it 'should return a lowercase string containing the object\'s classname' do
182
+ class Tree < Socialcastr::Base; end
183
+ Tree.model_name.should == 'Tree'
184
+ end
185
+
186
+ it 'should not include any module or prefix' do
187
+ class Socialcastr::Tree < Socialcastr::Base; end
188
+ Socialcastr::Tree.model_name.should == 'Tree'
189
+ end
190
+ end
191
+
192
+ context 'prefix' do
193
+ context 'being passed {:post_id => 3} as arguments' do
194
+ it 'should return posts/3/' do
195
+ Socialcastr::Base.prefix(:post_id => 3).should == 'posts/3/'
196
+ end
197
+ end
198
+ end
199
+
200
+ context 'collection_name' do
201
+ it 'should return a pluralized and downcase string' do
202
+ Socialcastr::Base.collection_name.should == 'bases'
203
+ end
204
+ end
205
+
206
+ context 'collection_class' do
207
+ before do
208
+ class Post < Socialcastr::Base; end
209
+ end
210
+ it 'should return a class' do
211
+ Post.collection_class.class.should == Class
212
+ end
213
+
214
+ it 'should return a class that inherits from Socialcastr::Collection' do
215
+ Post.collection_class.superclass.should == Socialcastr::Collection
216
+ end
217
+ end
218
+
219
+ context 'element_path' do
220
+ context 'with 5 as an argument' do
221
+ it 'should return collection_name/5' do
222
+ class Post < Socialcastr::Base; end
223
+ Post.element_path(5).should == '/posts/5'
224
+ end
225
+ end
226
+ end
227
+
228
+ context 'collection_path' do
229
+ it 'should return collection_name' do
230
+ class Post < Socialcastr::Base; end
231
+ Post.collection_path.should == '/posts'
232
+ end
233
+ end
234
+
235
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe Socialcastr::Comment do
4
+ end
@@ -0,0 +1,97 @@
1
+ require 'spec_helper'
2
+
3
+ describe Socialcastr::Configuration do
4
+
5
+ it 'should be a singleton' do
6
+ lambda {Socialcastr::Configuration.new }.should raise_error
7
+
8
+ config1 = Socialcastr::Configuration.instance
9
+ config2 = Socialcastr::Configuration.instance
10
+ config1.equal?(config2).should be_true
11
+ end
12
+
13
+ context 'when called for the first time' do
14
+ before :each do
15
+ @config = Socialcastr::Configuration.instance
16
+ end
17
+ it 'should not set a username' do
18
+ @config.username.should be_nil
19
+ end
20
+
21
+ it 'should not set a password' do
22
+ @config.password.should be_nil
23
+ end
24
+
25
+ it 'should not set a domain' do
26
+ @config.domain.should be_nil
27
+ end
28
+
29
+ it 'should not be ready' do
30
+ @config.ready?.should be_false
31
+ end
32
+
33
+ context 'then setting the username' do
34
+ before :each do
35
+ @config.username = "demo"
36
+ end
37
+
38
+ it 'should have a username' do
39
+ @config.username.should == "demo"
40
+ end
41
+ end
42
+
43
+ context 'then setting the password' do
44
+ before :each do
45
+ @config.password = "password"
46
+ end
47
+
48
+ it 'should have a username' do
49
+ @config.password.should == "password"
50
+ end
51
+ end
52
+
53
+ context 'then setting the domain' do
54
+ before :each do
55
+ @config.domain = "demo"
56
+ end
57
+
58
+ it 'should have a username' do
59
+ @config.domain.should == "demo"
60
+ end
61
+ end
62
+ end
63
+
64
+ context 'when properly configured' do
65
+ before do
66
+ @config = Socialcastr::Configuration.instance
67
+ @config.username = "demo"
68
+ @config.password = "password"
69
+ @config.domain = "demo.socialcast.com"
70
+ end
71
+
72
+ it 'should be ready' do
73
+ @config.ready?.should be_true
74
+ end
75
+ context '#reset' do
76
+ before :each do
77
+ @config.reset
78
+ end
79
+
80
+ it 'should have no password' do
81
+ @config.password.should be_nil
82
+ end
83
+ it 'should have no username' do
84
+ @config.username.should be_nil
85
+ end
86
+
87
+ it 'should have no domain' do
88
+ @config.domain.should be_nil
89
+ end
90
+ it 'should not be ready' do
91
+ @config.ready?.should be_false
92
+ end
93
+ end
94
+
95
+ end
96
+
97
+ end
@@ -0,0 +1,3 @@
1
+ username: file_demo
2
+ password: password
3
+ domain: demo.socialcast.com