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 +144 -19
- data/bin/posterous +16 -10
- data/lib/posterous.rb +0 -23
- data/lib/posterous/association_proxy.rb +1 -1
- data/lib/posterous/inheritable.rb +1 -21
- data/lib/posterous/model.rb +16 -0
- data/lib/posterous/models/comment.rb +0 -1
- data/lib/posterous/models/external_site.rb +0 -1
- data/lib/posterous/models/like.rb +0 -1
- data/lib/posterous/models/link.rb +0 -1
- data/lib/posterous/models/link_category.rb +0 -1
- data/lib/posterous/models/page.rb +0 -1
- data/lib/posterous/models/post.rb +0 -1
- data/lib/posterous/models/profile.rb +0 -1
- data/lib/posterous/models/subscriber.rb +0 -1
- data/lib/posterous/models/subscription.rb +0 -1
- data/lib/posterous/models/tag.rb +0 -1
- data/lib/posterous/version.rb +1 -1
- metadata +3 -3
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
|
-
##
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
41
|
-
|
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
|
-
|
54
|
-
|
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
|
-
|
69
|
+
def current_user
|
70
|
+
@current_user ||= User.me
|
71
|
+
end
|
72
|
+
|
67
73
|
puts "*"*100
|
68
|
-
puts "Hi #{
|
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.
|
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, :
|
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
|
data/lib/posterous/model.rb
CHANGED
@@ -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
|
data/lib/posterous/models/tag.rb
CHANGED
data/lib/posterous/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
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-
|
17
|
+
date: 2011-04-26 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|