posterous 0.2.1 → 0.2.2

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.
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