posterboard 0.1.0 → 0.2.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.
data/README.rdoc CHANGED
@@ -1,21 +1,28 @@
1
1
  = posterboard
2
2
 
3
- Ruby API for reading posts from your Posterous account.
3
+ Ruby API for reading posts from Posterous accounts.
4
4
 
5
5
  == How To
6
6
  Install the gem
7
- [sudo] gem install posterboard
7
+ [sudo] gem install posterboard
8
8
 
9
9
  Create a connection
10
- connection = Posterboard::Connection.new('turkey2000', 'g0bbl3g0bbl3')
10
+ connection = Posterboard::Connection.new('turkey2000', 'g0bbl3g0bbl3')
11
11
 
12
12
  Get posts by site name
13
- connection.turkey_blog.each do |post|
14
- title = post[:title]
15
- body = post[:body]
16
- end
13
+ posts = connection.turkey_blog
14
+
15
+ Get the posts' data...
16
+ posts.each do |post|
17
+ title = post.title
18
+ body = post.body
19
+ end
20
+
21
+ ...and do your thing!
17
22
 
18
23
  == Future features
24
+ * Posts by tag.
25
+ * Posts by Date range?
19
26
  * Command line tools for retrieving API token and site id. Library interfaces accepting these constants so they are not looked up on each request.
20
27
 
21
28
  == Note
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -1,5 +1,6 @@
1
1
  require 'httparty'
2
2
  require 'json'
3
+ require 'logger'
3
4
 
4
5
  module Posterboard
5
6
  class Connection
@@ -11,19 +12,29 @@ module Posterboard
11
12
  # get the API token
12
13
  response = Connection.get('/auth/token')
13
14
  Connection.default_params :api_token => response['api_token']
15
+
16
+ @logger = ::Logger.new(STDOUT)
17
+ @logger.level = ::Logger::DEBUG
18
+ @logger.debug("Created logger")
14
19
  end
15
20
 
16
21
  # try to find posts on a site with a name that matches the method name
17
22
  # posts are returned as an array of hashes each with a :title and :body
18
23
  def method_missing(name)
19
- site = sites.find { |site| site['name'] == name.to_s }
20
- # => TODO : Error checking that site is valid and has "id".
24
+ @logger.debug "Looking for site (#{name})."
25
+ site = sites.find do |site|
26
+ @logger.debug "Found (#{site["name"]})."
27
+ site['name'] == name.to_s
28
+ end
29
+ raise SiteNotFoundError unless site
30
+ raise MissingSiteIDError, "Is the Posterous service broken?" unless site.key? "id"
21
31
  response = Connection.get("/users/me/sites/#{site["id"]}/posts")
22
- posts = []
32
+ posts = []
23
33
  ::JSON.parse(response.body).each do |body|
24
- post = {}
25
- post[:title] = body['title']
26
- post[:body] = body['body_full']
34
+ # => TODO: BlankSlate and define these as methods on post, i.e. post.title, or use OpenStruct
35
+ post = OpenStruct.new
36
+ post.title = body['title']
37
+ post.body = body['body_full']
27
38
  posts << post
28
39
  end
29
40
  posts
@@ -0,0 +1,7 @@
1
+ module Posterboard
2
+ class SiteNotFoundError < Exception
3
+ end
4
+
5
+ class MissingSiteIDError < Exception
6
+ end
7
+ end
data/lib/posterboard.rb CHANGED
@@ -1 +1,2 @@
1
1
  require 'posterboard/connection'
2
+ require 'posterboard/error'
data/posterboard.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{posterboard}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Waylon Calabrese"]
12
- s.date = %q{2011-05-11}
12
+ s.date = %q{2011-05-12}
13
13
  s.description = %q{Ruby API for reading posts from your Posterous account.}
14
14
  s.email = %q{hiwaylon@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  "VERSION",
28
28
  "lib/posterboard.rb",
29
29
  "lib/posterboard/connection.rb",
30
+ "lib/posterboard/error.rb",
30
31
  "posterboard.gemspec",
31
32
  "spec/posterboard/connection_spec.rb",
32
33
  "spec/spec_helper.rb"
@@ -30,10 +30,29 @@ describe Posterboard::Connection do
30
30
 
31
31
  it "should should give access to the posts' data" do
32
32
  @connection.your_site_name.each do |post|
33
- post[:title].should_not be_nil
34
- post[:body].should_not be_nil
33
+ post.title.should_not be_nil
34
+ post.body.should_not be_nil
35
35
  end
36
36
  end
37
37
  end
38
+
39
+ context "when something goes wrong" do
40
+ it "should raise an error when requesting a site that does not exist" do
41
+ stub_request(:get, "http://user:pass@www.posterous.com/api/2/users/me/sites?api_token=").
42
+ to_return(:status => 200,
43
+ :body => [{"id" => "5432", "name" => "this_one"}, {"id" => "9876", "name" => "that_one"}])
44
+
45
+ lambda {@connection.but_not_this}.should raise_error(Posterboard::SiteNotFoundError)
46
+ end
47
+
48
+ it "should raise an error when the API returns a site without an id" do
49
+ stub_request(:get, "http://user:pass@www.posterous.com/api/2/users/me/sites?api_token=").
50
+ to_return(:status => 200,
51
+ :body => [{"id" => "99", "name" => "a_good_one"}, {"name" => "bad_site", "pointless" => "parameter"}])
52
+
53
+ lambda {@connection.bad_site}.should raise_error(Posterboard::MissingSiteIDError)
54
+ end
55
+ end
56
+
38
57
  end
39
58
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posterboard
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Waylon Calabrese
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-11 00:00:00 -05:00
18
+ date: 2011-05-12 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -148,6 +148,7 @@ files:
148
148
  - VERSION
149
149
  - lib/posterboard.rb
150
150
  - lib/posterboard/connection.rb
151
+ - lib/posterboard/error.rb
151
152
  - posterboard.gemspec
152
153
  - spec/posterboard/connection_spec.rb
153
154
  - spec/spec_helper.rb