posterous 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,31 +1,156 @@
1
1
  # Posterous #
2
2
 
3
+ ## Dependencies ##
4
+
5
+ Typhoeus [https://github.com/dbalatero/typhoeus](https://github.com/dbalatero/typhoeus)
6
+
3
7
  ## Installation ##
4
8
 
5
9
  gem install posterous
10
+
11
+ ## Rails ##
12
+
13
+ In you Gemfile:
14
+
15
+ gem 'posterous'
16
+
17
+ Create `config/initializers/posterous.rb`.
18
+
19
+ ```ruby
20
+ Posterous.config = {
21
+ 'username' => '<username>',
22
+ 'password' => '<password>',
23
+ 'api_token' => '<api_token>'
24
+ }
25
+ ```
6
26
 
7
- ## Basic Usage ##
8
-
9
- require 'posterous'
10
-
11
- Posterous.config = {
12
- 'username' => <username>,
13
- 'password' => <password>,
14
- 'api_token' => '<api_token>'
15
- }
16
-
17
- include Posterous
27
+ ## Elsewhere ##
18
28
 
19
- ### Sites ###
20
- p Site.all
21
- p Site.primary
22
- p Site.find('twoism')
29
+ ```ruby
30
+ require 'posterous'
31
+
32
+ Posterous.config = {
33
+ 'username' => '<username>',
34
+ 'password' => '<password>',
35
+ 'api_token' => '<api_token>'
36
+ }
37
+
38
+ include Posterous
39
+ ```
40
+
41
+
42
+ ## API ##
43
+
44
+ ## User ##
45
+
46
+ **Current user info**
47
+
48
+ > User.me
49
+ => <#<Posterous::User:0x00000100cacbe0> {:last_activity=>"2011/04/25 20:33:50 -0700",
50
+ :nickname=>"postertester", :lastname=>nil, :id=>1288737, :firstname=>nil,
51
+ :profile_pic=>"http://posterous.com/images/profile/unknown75.gif"}>
52
+
53
+ **Favorites**
54
+
55
+ > @user = User.me
56
+ > @user.favorites(:page => 1)
57
+ => [<#<Posterous::Post:0x00000100c2c7b0>...]
58
+
59
+ **Subscriptions**
60
+
61
+ > @user = User.me
62
+ > @user.subscriptions(:page => 1)
63
+ => [<#<Posterous::Site:0x00000100c2c7b0>...]
64
+
65
+ **Subscription Posts**
66
+
67
+ > @user = User.me
68
+ > @user.subscriptions.posts(:page => 1)
69
+ => [<#<Posterous::Post:0x00000100c2c7b0>...]
70
+
71
+ ## Sites ##
72
+
73
+ **Find a primary site**
74
+
75
+ > Site.primary
76
+ => <#<Posterous::Site:0x00000100c22490> {:header_image=>nil, :name=>"postertester's posterous" ... }>
23
77
 
24
- ### Posts ###
25
- p Site.primary.posts
26
- p Site.primary.posts.create(:title => 'New Post', :body => 'From posterous API', :media => [File.open('/path/to/file')])
78
+ **Find a Site by its hostname**
79
+
80
+ > Site.find('twoism')
81
+ => <#<Posterous::Site:0x00000100c22490> {:header_image=>nil, :name=>"postertester's posterous" ... }>
82
+
83
+ **Find all of the current user's Sites**
84
+
85
+ > Site.all(:page => 1)
86
+ => [<#<Posterous::Site:0x00000100c22490> {:header_image=>nil, :name=>"postertester's posterous" ... }>]
87
+
88
+ **Creating a new Site**
27
89
 
90
+ > @site = Site.create(:hostname => 'superawesome',:is_private => false)
91
+ => <#<Posterous::Site:0x00000100c22490> {:header_image=>nil, :name=>"superawesome's posterous" ... }>
92
+
93
+ **Updating a Site**
28
94
 
95
+ > @site = Site.primary
96
+ => @site.hostname = 'anotherawesomesite'
97
+ => @site.save
98
+
99
+ **Deleting a Site**
100
+
101
+ > @site = Site.find('sitetodelete')
102
+ => @site.destroy
103
+
104
+
105
+ ## Posts ##
106
+
107
+ **Creating Posts**
108
+
109
+ > @site = Site.primary
110
+ > @post = @site.posts.create(:title => 'New Post', :body => 'From posterous API',
111
+ :media => [File.open('/path/to/file')], :autopost => true)
112
+ => <#<Posterous::Post:0x00000100c2c7b0>
113
+
114
+ **Updating Posts**
115
+
116
+ > @post = @site.posts.find(<id>)
117
+ > @post.title = 'Kittens are radical!'
118
+ > @post.save
119
+
120
+ **Deleting Posts**
121
+
122
+ > @post = @site.posts.find(<id>)
123
+ > @post.destroy
124
+
125
+ **Retrieving Posts**
126
+
127
+ # paginated
128
+ > @site.posts(:page => 1)
129
+
130
+ # paginated since a given id
131
+ > @site.posts(:page => 3, :since_id => 123)
132
+
133
+ ## Commenting ##
134
+
135
+ > @site = Site.find('someawesomesite')
136
+ > @site.posts.first.comments.create(:body => "Yes, kittens are very
137
+ > radical")
138
+
139
+ ## Liking ##
140
+
141
+ > @site = Site.find('someawesomesite')
142
+ > @site.posts.first.likes.create
143
+
144
+ ## Subscribers ##
145
+
146
+ > @site = Site.find('someawesomesite')
147
+ > @site.subscribers(:page => 1)
148
+
149
+ ## External Sites / Autopost ##
150
+
151
+ > @site.external_sites(:page => 1)
152
+ => [<#<Posterous::ExternalSite:0x00000100c2c7b0>]
153
+
29
154
  ## Interactive Console Usage ##
30
155
 
31
156
  In your terminal type...
@@ -62,4 +187,4 @@
62
187
  => <#<Posterous::Post:0x00000101398670>
63
188
  > post.comments.create(:body => 'Kittens are radical!')
64
189
  => <#<Posterous::Comment:0x0000010135f758> ... }>
65
-
190
+
data/bin/posterous CHANGED
@@ -37,12 +37,8 @@ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
37
37
 
38
38
  %w{posterous irb}.each { |f| require f }
39
39
 
40
- if File.exists?(RC_PATH)
41
- rc = File.open(RC_PATH, 'r')
42
- yml = YAML.load_file(RC_PATH)
43
- else
44
- rc = File.open(RC_PATH, 'w')
45
- end
40
+ rc = File.exists?(RC_PATH) ? File.open(RC_PATH, 'r') : File.open(RC_PATH, 'w')
41
+ yml = YAML.load_file(RC_PATH)
46
42
 
47
43
  if yml.is_a?(Hash)
48
44
  cfg = yml
@@ -50,22 +46,32 @@ else
50
46
  cfg = {}
51
47
  puts "Email Address:"
52
48
  cfg['username'] = gets.chomp
53
- puts "Password:"
54
- cfg['password'] = gets.chomp
49
+ begin
50
+ puts "Password:"
51
+ system('stty -echo')
52
+ cfg['password'] = gets.chomp
53
+ rescue
54
+ ensure
55
+ system('stty echo')
56
+ end
55
57
  puts "Api Token:"
56
58
  cfg['api_token'] = gets.chomp
57
59
  rc.puts cfg.to_yaml
58
60
  end
59
61
 
62
+ rc.puts cfg.to_yaml
60
63
  rc.close
61
64
 
62
65
  Posterous.config = cfg
63
66
 
64
67
  include Posterous
65
68
 
66
- @user = User.me
69
+ def current_user
70
+ @current_user ||= User.me
71
+ end
72
+
67
73
  puts "*"*100
68
- puts "Hi #{@user.nickname}, welcome to the Posterous API Console! For help type `newb`.\n"
74
+ puts "Hi #{current_user.nickname}, welcome to the Posterous API Console! For help type `newb`.\n"
69
75
  puts "*"*100
70
76
 
71
77
  IRB.setup(nil)
data/lib/posterous.rb CHANGED
@@ -1,28 +1,5 @@
1
1
  %w[typhoeus yaml json ostruct].each { |lib| require lib }
2
2
 
3
- require 'pathname'
4
-
5
- dir = Pathname(__FILE__).dirname.expand_path
6
-
7
- require dir + 'posterous/connection'
8
- require dir + 'posterous/inheritable'
9
- require dir + 'posterous/model'
10
- require dir + 'posterous/models/tag'
11
- require dir + 'posterous/models/subscriber'
12
- require dir + 'posterous/models/subscription'
13
- require dir + 'posterous/models/comment'
14
- require dir + 'posterous/models/like'
15
- require dir + 'posterous/models/post'
16
- require dir + 'posterous/models/page'
17
- require dir + 'posterous/models/link'
18
- require dir + 'posterous/models/link_category'
19
- require dir + 'posterous/models/external_site'
20
- require dir + 'posterous/models/user'
21
- require dir + 'posterous/models/profile'
22
- require dir + 'posterous/models/site'
23
- require dir + 'posterous/association_proxy'
24
-
25
-
26
3
  module Posterous
27
4
  BASE_API_URL = 'http://posterous.com/api/v2'
28
5
 
@@ -9,7 +9,7 @@ module Posterous
9
9
  @proxied = proxied
10
10
  @association = nil
11
11
 
12
- @association_klass.finder_opts[klass.parent_resource] = proxied.id
12
+ @association_klass.finder_opts[klass.resource_url_keys.last] = proxied.id
13
13
  @association_klass.finder_opts.merge!(@proxied.finder_opts)
14
14
 
15
15
  load_method = association_type == :many ? :all : :load
@@ -6,7 +6,7 @@ module Posterous
6
6
  extend ClassMethods
7
7
  include InstanceMethods
8
8
 
9
- inherited_attributes :finder_opts, :parent_resource, :resource_path
9
+ inherited_attributes :finder_opts, :resource_path
10
10
  @finder_opts ||= {}
11
11
  end
12
12
  end
@@ -34,32 +34,12 @@ module Posterous
34
34
  @resource_path = path
35
35
  end
36
36
 
37
- def parent sym
38
- @parent_resource = sym
39
- end
40
-
41
- def many collection_name, klass
42
- define_method collection_name do |*args|
43
- AssociationProxy.new self, klass, :many, *args
44
- end
45
- end
46
-
47
- def one collection_name, klass
48
- define_method collection_name do |*args|
49
- AssociationProxy.new self, klass, :one, *args
50
- end
51
- end
52
-
53
37
  end
54
38
 
55
39
  module InstanceMethods
56
40
  def resource_path
57
41
  self.class.resource_path
58
42
  end
59
-
60
- def parent_resource
61
- self.class.parent_resource
62
- end
63
43
 
64
44
  def finder_opts
65
45
  self.class.finder_opts
@@ -4,6 +4,18 @@ module Posterous
4
4
  extend Connection
5
5
 
6
6
  attr_reader :struct
7
+
8
+ def self.many collection_name, klass
9
+ define_method collection_name do |*args|
10
+ AssociationProxy.new self, klass, :many, *args
11
+ end
12
+ end
13
+
14
+ def self.one collection_name, klass
15
+ define_method collection_name do |*args|
16
+ AssociationProxy.new self, klass, :one, *args
17
+ end
18
+ end
7
19
 
8
20
  # hack for ruby 1.8.7
9
21
  def id
@@ -87,6 +99,10 @@ module Posterous
87
99
  def parsed_resource_url
88
100
  self.class.parsed_resource_url
89
101
  end
102
+
103
+ def self.resource_url_keys
104
+ resource_path.scan(/:(\w+)/).flatten.collect(&:to_sym)
105
+ end
90
106
 
91
107
  def initialize struct
92
108
  @struct = struct
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Comment < Posterous::Model
3
- parent :post_id
4
3
  resource "/sites/:site_id/posts/:post_id/comments"
5
4
  end
6
5
  end
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class ExternalSite < Posterous::Model
3
- parent :site_id
4
3
  resource "/sites/:site_id/external_sites"
5
4
  end
6
5
  end
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Like < Posterous::Model
3
- parent :post_id
4
3
  resource "/sites/:site_id/posts/:post_id/likes"
5
4
  end
6
5
  end
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Link < Posterous::Model
3
- parent :link_category_id
4
3
  resource "/sites/:site_id/link_categories/:link_category_id/links"
5
4
  end
6
5
  end
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class LinkCategory < Posterous::Model
3
- parent :site_id
4
3
  resource "/sites/:site_id/link_categories"
5
4
 
6
5
  many :links, Link
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Page < Posterous::Model
3
- parent :site_id
4
3
  resource "/sites/:site_id/pages"
5
4
  end
6
5
  end
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Post < Posterous::Model
3
- parent :site_id
4
3
  resource "/sites/:site_id/posts"
5
4
 
6
5
  many :comments, Comment
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Profile < Posterous::Model
3
- parent :site_id
4
3
  resource "/sites/:site_id/profile"
5
4
 
6
5
  def self.param_scope
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Subscriber < Posterous::Model
3
- parent :site_id
4
3
  resource "/sites/:site_id/subscribers"
5
4
  end
6
5
  end
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Subscription < Posterous::Model
3
- parent :user_id
4
3
  resource "/users/:user_id/subscriptions"
5
4
 
6
5
  def self.posts params={}
@@ -1,6 +1,5 @@
1
1
  module Posterous
2
2
  class Tag < Posterous::Model
3
- parent :site_id
4
3
  resource "/sites/:site_id/tags"
5
4
  end
6
5
  end
@@ -1,3 +1,3 @@
1
1
  module Posterous
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Christopher Burnett @twoism
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-04-25 00:00:00 -07:00
17
+ date: 2011-04-26 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency