posterous 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.gitignore +7 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +4 -0
  5. data/README.md +65 -0
  6. data/Rakefile +12 -0
  7. data/autotest/discovery.rb +1 -0
  8. data/bin/posterous +80 -0
  9. data/lib/posterous/association_proxy.rb +39 -0
  10. data/lib/posterous/connection.rb +52 -0
  11. data/lib/posterous/inheritable.rb +70 -0
  12. data/lib/posterous/model.rb +115 -0
  13. data/lib/posterous/models/comment.rb +6 -0
  14. data/lib/posterous/models/external_site.rb +6 -0
  15. data/lib/posterous/models/like.rb +6 -0
  16. data/lib/posterous/models/link.rb +6 -0
  17. data/lib/posterous/models/link_category.rb +8 -0
  18. data/lib/posterous/models/page.rb +6 -0
  19. data/lib/posterous/models/post.rb +9 -0
  20. data/lib/posterous/models/profile.rb +20 -0
  21. data/lib/posterous/models/site.rb +22 -0
  22. data/lib/posterous/models/subscriber.rb +6 -0
  23. data/lib/posterous/models/subscription.rb +10 -0
  24. data/lib/posterous/models/tag.rb +6 -0
  25. data/lib/posterous/models/user.rb +19 -0
  26. data/lib/posterous/version.rb +3 -0
  27. data/lib/posterous.rb +39 -0
  28. data/posterous.gemspec +28 -0
  29. data/spec/fixtures/metal.png +0 -0
  30. data/spec/helper.rb +11 -0
  31. data/spec/posterous.yml.sample +3 -0
  32. data/spec/unit/lib/posterous/association_proxy_spec.rb +40 -0
  33. data/spec/unit/lib/posterous/connection_spec.rb +41 -0
  34. data/spec/unit/lib/posterous/models/comment_spec.rb +53 -0
  35. data/spec/unit/lib/posterous/models/external_site_spec.rb +55 -0
  36. data/spec/unit/lib/posterous/models/like_spec.rb +45 -0
  37. data/spec/unit/lib/posterous/models/link_category_spec.rb +52 -0
  38. data/spec/unit/lib/posterous/models/link_spec.rb +53 -0
  39. data/spec/unit/lib/posterous/models/page_spec.rb +52 -0
  40. data/spec/unit/lib/posterous/models/post_spec.rb +52 -0
  41. data/spec/unit/lib/posterous/models/profile_spec.rb +32 -0
  42. data/spec/unit/lib/posterous/models/site_spec.rb +53 -0
  43. data/spec/unit/lib/posterous/models/subscriber_spec.rb +44 -0
  44. data/spec/unit/lib/posterous/models/user.rb +10 -0
  45. data/spec/unit/lib/posterous/models/user_spec.rb +20 -0
  46. data/spec/unit/lib/posterous_spec.rb +22 -0
  47. metadata +204 -0
Binary file
data/spec/helper.rb ADDED
@@ -0,0 +1,11 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
+
3
+ require 'posterous'
4
+
5
+ SAMPLE_CONFIG = File.open(File.dirname(__FILE__) + '/posterous.yml')
6
+ SAMPLE_IMAGE = File.open(File.dirname(__FILE__) + '/fixtures/metal.png')
7
+ Posterous.config = SAMPLE_CONFIG
8
+
9
+ RSpec.configure do |config|
10
+ end
11
+
@@ -0,0 +1,3 @@
1
+ username: foo@bar.com
2
+ password: 123foobar
3
+ api_token: 12345
@@ -0,0 +1,40 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::AssociationProxy do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @site = Site.find('primary')
8
+ end
9
+
10
+ describe "#posts" do
11
+ it "without params should be a Posterous::Post" do
12
+ @site.posts.should == Posterous::Post
13
+ end
14
+
15
+ it "should load posts with params" do
16
+ @site.posts(:page => 1).length.should be > 0
17
+ end
18
+ end
19
+
20
+ #describe "#parsed_resource_url" do
21
+ #it "builds the resource url" do
22
+ #@posts.first.parsed_resource_url.should == "/sites/#{@primary.id}/posts"
23
+ #end
24
+ #end
25
+
26
+ #describe "when chained" do
27
+ #it "should forward the finder opts" do
28
+ #@primary.posts.all.first.comments.all.should be_an Array
29
+ #end
30
+ #end
31
+
32
+ #describe "#posts.create" do
33
+ #it "creates a post for the site" do
34
+ ##post = @primary.posts.create(:title => 'from proxy')
35
+ ##post.title.should == 'from proxy'
36
+ ##post.destroy
37
+ #end
38
+ #end
39
+
40
+ end
@@ -0,0 +1,41 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Connection do
4
+ include Posterous::Connection
5
+
6
+ it "should handle GET requests" do
7
+ pending
8
+ get('/sites/primary').should be_an OpenStruct
9
+ get('/sites/primary/posts').should be_an Array
10
+ end
11
+
12
+ it "should handle POST requests" do
13
+ pending
14
+ new_post = post('/sites/primary/posts', {
15
+ :post => {
16
+ :title => "from posterous",
17
+ :body => 'OMGWTFBBQ'
18
+ },
19
+ :media => { '0' => SAMPLE_IMAGE }
20
+ })
21
+ new_post.title.should == 'from posterous'
22
+ new_post.body_full.should =~ /OMGWTFBBQ/
23
+ new_post.media[2]['images'].length.should == 1
24
+ end
25
+
26
+ it "should handle PUT requests" do
27
+ pending
28
+ new_post = put('/sites/primary/posts/27561123', {
29
+ :post => {
30
+ :title => "from posterous",
31
+ :body => 'OMGWTFBBQ'
32
+ },
33
+ :media => { '0' => SAMPLE_IMAGE }
34
+ })
35
+ new_post.title.should == 'from posterous'
36
+ new_post.body_full.should =~ /OMGWTFBBQ/
37
+ new_post.media[2]['images'].length.should == 1
38
+ end
39
+
40
+
41
+ end
@@ -0,0 +1,53 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Comment do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @primary = Site.find('primary')
8
+ @post = @primary.posts.all.first
9
+ end
10
+
11
+ describe "#all" do
12
+ before(:all) do
13
+ @comments = @post.comments.all
14
+ end
15
+
16
+ it "finds the comments" do
17
+ @comments.should be_an Array
18
+ @comments.each{|p| p.id.should_not be_nil }
19
+ end
20
+ end
21
+
22
+ describe "CRUD" do
23
+ before(:all) do
24
+ @comment = @post.comments.create({:body => 'kittens are rad!'})
25
+ @comment_id = @comment.id
26
+ end
27
+
28
+ describe "#create" do
29
+ it "creates a comment" do
30
+ @comment.body.should == 'kittens are rad!'
31
+ end
32
+ end
33
+
34
+ describe "#save" do
35
+ it "updates a comment" do
36
+ @comment.body = 'updated via commently'
37
+ @comment.save
38
+ @comment.reload.body.should == 'updated via commently'
39
+ end
40
+ end
41
+
42
+ describe "#destroy" do
43
+ it "deletes a comment and raises a Connection error when not found" do
44
+ @comment.destroy
45
+ lambda {
46
+ @post.comments.find(@comment.id)
47
+ }.should raise_error Posterous::Connection::ConnectionError
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+
@@ -0,0 +1,55 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::ExternalSite do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @primary = Site.find('primary')
8
+ end
9
+
10
+ describe "#all" do
11
+ before(:all) do
12
+ @external_sites = @primary.external_sites.all
13
+ end
14
+
15
+ it "finds the external_sites" do
16
+ @external_sites.should be_an Array
17
+ @external_sites.each{|p| p.id.should_not be_nil }
18
+ end
19
+ end
20
+
21
+ describe "CRUD" do
22
+ before(:all) do
23
+ @external_site = @primary.external_sites.create({
24
+ :site_url => 'http://chrisburnett.tumblr.com',
25
+ :service_type => 'ExtTumblr',
26
+ :username => 'foo'
27
+ })
28
+ @external_site_id = @external_site.id
29
+ end
30
+
31
+ describe "#create" do
32
+ it "creates a external_site" do
33
+ @external_site.site_url.should == 'http://chrisburnett.tumblr.com'
34
+ end
35
+ end
36
+
37
+ #describe "#save" do
38
+ #it "updates a external_site" do
39
+ #@external_site.site_url = 'http://chrisburnett.tumblr.com'
40
+ #@external_site.save
41
+ #@external_site.reload.blogid.should == 'bar'
42
+ #end
43
+ #end
44
+
45
+ describe "#destroy" do
46
+ it "deletes a external_site and raises a Connection error when not found" do
47
+ @external_site.destroy
48
+ lambda {
49
+ @primary.external_sites.find(@external_site.id)
50
+ }.should raise_error Posterous::Connection::ConnectionError
51
+ end
52
+ end
53
+ end
54
+
55
+ end
@@ -0,0 +1,45 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Like do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @primary = Site.find('primary')
8
+ @post = @primary.posts.all.first
9
+ end
10
+
11
+ describe "#all" do
12
+ before(:all) do
13
+ @likes = @post.likes.all
14
+ end
15
+
16
+ it "finds the likes" do
17
+ @likes.should be_an Array
18
+ @likes.each{|p| p.id.should_not be_nil }
19
+ end
20
+ end
21
+
22
+ describe "CRUD" do
23
+ before(:all) do
24
+ @like = @post.likes.create
25
+ @like_id = @like.id
26
+ end
27
+
28
+ describe "#create" do
29
+ it "creates a like" do
30
+ @like.id.should_not be_nil
31
+ end
32
+ end
33
+
34
+ describe "#destroy" do
35
+ it "deletes a like and raises a Connection error when not found" do
36
+ @like.destroy
37
+ lambda {
38
+ @post.likes.find(@like.id)
39
+ }.should raise_error Posterous::Connection::ConnectionError
40
+ end
41
+ end
42
+ end
43
+
44
+ end
45
+
@@ -0,0 +1,52 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::LinkCategory do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @primary = Site.find('primary')
8
+ end
9
+
10
+ describe "#all" do
11
+ before(:all) do
12
+ @link_categories = @primary.link_categories.all
13
+ end
14
+
15
+ it "finds the link_categories" do
16
+ @link_categories.should be_an Array
17
+ @link_categories.each{|p| p.id.should_not be_nil }
18
+ end
19
+ end
20
+
21
+ describe "CRUD" do
22
+ before(:all) do
23
+ @link_category = @primary.link_categories.create({:title => 'from posterous', :display_order => 1 })
24
+ @link_category_id = @link_category.id
25
+ end
26
+
27
+ describe "#create" do
28
+ it "creates a post" do
29
+ @link_category.title.should == 'from posterous'
30
+ end
31
+ end
32
+
33
+ describe "#save" do
34
+ it "updates a link_category" do
35
+ @link_category.title = 'updated via posterous'
36
+ @link_category.save
37
+ @link_category.reload.title.should == 'updated via posterous'
38
+ end
39
+ end
40
+
41
+ describe "#destroy" do
42
+ it "deletes a link_category and raises a Connection error when not found" do
43
+ @count = @primary.link_categories.all.count
44
+ @link_category.destroy
45
+ lambda {
46
+ @primary.link_categories.find(@link_category.id)
47
+ }.should raise_error Posterous::Connection::ConnectionError
48
+ end
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,53 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Link do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @primary = Site.find('primary')
8
+ @link_category = @primary.link_categories.all.first
9
+ end
10
+
11
+ describe "#all" do
12
+ before(:all) do
13
+ @links = @link_category.links.all
14
+ end
15
+
16
+ it "finds the links" do
17
+ @links.should be_an Array
18
+ @links.each{|p| p.id.should_not be_nil }
19
+ end
20
+ end
21
+
22
+ describe "CRUD" do
23
+ before(:all) do
24
+ @link = @link_category.links.create({:title => 'kittens are rad!', :url => 'http://google.com'})
25
+ @link_id = @link.id
26
+ end
27
+
28
+ describe "#create" do
29
+ it "creates a link" do
30
+ @link.title.should == 'kittens are rad!'
31
+ end
32
+ end
33
+
34
+ describe "#save" do
35
+ it "updates a link" do
36
+ @link.title = 'updated via posterous'
37
+ @link.save
38
+ @link.reload.title.should == 'updated via posterous'
39
+ end
40
+ end
41
+
42
+ describe "#destroy" do
43
+ it "deletes a link and raises a Connection error when not found" do
44
+ @link.destroy
45
+ lambda {
46
+ @link_category.links.find(@link.id)
47
+ }.should raise_error Posterous::Connection::ConnectionError
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+
@@ -0,0 +1,52 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Page do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @primary = Site.find('primary')
8
+ end
9
+
10
+ describe "#all" do
11
+ before(:all) do
12
+ @pages = @primary.pages.all
13
+ end
14
+
15
+ it "finds the pages" do
16
+ @pages.should be_an Array
17
+ @pages.each{|p| p.id.should_not be_nil }
18
+ end
19
+ end
20
+
21
+ describe "CRUD" do
22
+ before(:all) do
23
+ @page = @primary.pages.create({:title => 'from posterous', :body => 'kittens are rad!'})
24
+ @page_id = @page.id
25
+ end
26
+
27
+ describe "#create" do
28
+ it "creates a post" do
29
+ @page.title.should == 'from posterous'
30
+ end
31
+ end
32
+
33
+ describe "#save" do
34
+ it "updates a page" do
35
+ @page.title = 'updated via posterous'
36
+ @page.save
37
+ @page.reload.title.should == 'updated via posterous'
38
+ end
39
+ end
40
+
41
+ describe "#destroy" do
42
+ it "deletes a page and raises a Connection error when not found" do
43
+ @count = @primary.pages.all.count
44
+ @page.destroy
45
+ lambda {
46
+ @primary.pages.find(@page.id)
47
+ }.should raise_error Posterous::Connection::ConnectionError
48
+ end
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,52 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Post do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @primary = Site.find('primary')
8
+ end
9
+
10
+ describe "#all" do
11
+ before(:all) do
12
+ @posts = @primary.posts.all
13
+ end
14
+
15
+ it "finds the posts" do
16
+ @posts.should be_an Array
17
+ @posts.each{|p| p.id.should_not be_nil }
18
+ end
19
+ end
20
+
21
+ describe "CRUD" do
22
+ before(:all) do
23
+ @post = @primary.posts.create({:title => 'from posterous', :body => 'kittens are rad!'})
24
+ @post_id = @post.id
25
+ end
26
+
27
+ describe "#create" do
28
+ it "creates a post" do
29
+ @post.title.should == 'from posterous'
30
+ end
31
+ end
32
+
33
+ describe "#save" do
34
+ it "updates a post" do
35
+ @post.title = 'updated via posterous'
36
+ @post.save
37
+ @post.reload.title.should == 'updated via posterous'
38
+ end
39
+ end
40
+
41
+ describe "#destroy" do
42
+ it "deletes a post and raises a Connection error when not found" do
43
+ @count = @primary.posts.all.count
44
+ @post.destroy
45
+ lambda {
46
+ @primary.posts.find(@post.id)
47
+ }.should raise_error Posterous::Connection::ConnectionError
48
+ end
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,32 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Profile do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @site = Site.find('primary')
8
+ @site.profile.destroy rescue nil
9
+ @profile = @site.profile.create(:group_profile_name => 'some profile name')
10
+ end
11
+
12
+ describe "#load" do
13
+ it "should get the profile" do
14
+ @profile.group_profile_name.should == 'some profile name'
15
+ end
16
+ end
17
+
18
+ describe "#save" do
19
+ it "should update the profile" do
20
+ @profile.body = 'updated'
21
+ @profile.save
22
+ @profile.body.should == 'updated'
23
+ end
24
+ end
25
+
26
+ describe "#destroy" do
27
+ it "destroys the profile" do
28
+ @profile.destroy
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,53 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Site do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @primary = Site.find('primary')
8
+ end
9
+
10
+ it "should find the primary site" do
11
+ @primary.name.should =~ /postertester/
12
+ end
13
+
14
+ describe "#all" do
15
+ it "finds all the users sites" do
16
+ @sites = Site.all(:page => 1)
17
+ @sites.should be_an Array
18
+ end
19
+ end
20
+
21
+ describe "CRUD" do
22
+
23
+ before(:all) do
24
+ @site = Site.create(:hostname => "newposterous#{Time.now.to_i}")
25
+ @site_id = @site.id
26
+ end
27
+
28
+ describe "#create" do
29
+ it "creates the site" do
30
+ @site.name.should =~ /posterous/
31
+ end
32
+ end
33
+
34
+ describe "#save" do
35
+ it "updates a site" do
36
+ @site.is_private = true
37
+ @site.save
38
+ @site.reload.is_private.should be_true
39
+ end
40
+ end
41
+
42
+ describe "#destroy" do
43
+ it "deletes the site" do
44
+ @site.destroy.should be_nil
45
+ lambda {
46
+ Site.find(@site_id)
47
+ }.should raise_error Posterous::Connection::ConnectionError
48
+ end
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,44 @@
1
+ require 'helper'
2
+
3
+ FAKE_USER_ID = 637118
4
+
5
+ describe Posterous::Subscriber do
6
+ include Posterous
7
+
8
+ before(:all) do
9
+ @primary = Site.find('primary')
10
+ end
11
+
12
+ describe "#all" do
13
+ before(:all) do
14
+ @subscribers = @primary.subscribers.all
15
+ end
16
+
17
+ it "finds the subscribers" do
18
+ @subscribers.should be_an Array
19
+ @subscribers.each{|p| p.id.should_not be_nil }
20
+ end
21
+ end
22
+
23
+ describe "CRUD" do
24
+ before(:all) do
25
+ @subscriber = @primary.subscribers.create({:user_id => FAKE_USER_ID})
26
+ end
27
+
28
+ describe "#create" do
29
+ it "creates a subscriber" do
30
+ @primary.subscribers.all.first.id.should == FAKE_USER_ID
31
+ end
32
+ end
33
+
34
+ describe "#destroy" do
35
+ it "deletes a subscriber and raises a Connection error when not found" do
36
+ @primary.subscribers.first.destroy
37
+ lambda {
38
+ @primary.subscribers.find(FAKE_USER_ID)
39
+ }.should raise_error Posterous::Connection::ConnectionError
40
+ end
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,10 @@
1
+ module Posterous
2
+ class User < Posterous::Model
3
+ resource "/users/"
4
+
5
+ def self.me
6
+ find('me')
7
+ end
8
+ end
9
+ end
10
+
@@ -0,0 +1,20 @@
1
+ require 'helper'
2
+
3
+ describe Posterous::Site do
4
+ include Posterous
5
+
6
+ before(:all) do
7
+ @user = User.me
8
+ end
9
+
10
+ it "should find me" do
11
+ @user.nickname.should =~ /postertester/
12
+ end
13
+
14
+ describe "#favorites" do
15
+ it "finds all the users favorites" do
16
+ @user.favorites.should be_an Array
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,22 @@
1
+ require 'helper'
2
+
3
+ describe Posterous do
4
+ describe "#config=" do
5
+ describe "with hash" do
6
+ before do
7
+ Posterous.config = {'user' => 'me@foo.com','passsword' => 'foobar'}
8
+ end
9
+ it "should set the config" do
10
+ Posterous.config.should be_a Hash
11
+ end
12
+ end
13
+ describe "with file" do
14
+ before do
15
+ Posterous.config = SAMPLE_CONFIG
16
+ end
17
+ it "should set the config" do
18
+ Posterous.config.should be_a Hash
19
+ end
20
+ end
21
+ end
22
+ end