caboodle 0.2.25 → 0.2.26
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/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.26
|
@@ -4,6 +4,13 @@ require 'weary'
|
|
4
4
|
require 'nokogiri'
|
5
5
|
|
6
6
|
module Caboodle
|
7
|
+
|
8
|
+
class PosterousPostNotFound < Exception
|
9
|
+
end
|
10
|
+
|
11
|
+
class PosterousProblem < Exception
|
12
|
+
end
|
13
|
+
|
7
14
|
class PosterousAPI < Weary::Base
|
8
15
|
|
9
16
|
def initialize(opts={})
|
@@ -31,6 +38,7 @@ module Caboodle
|
|
31
38
|
r.url = "http://posterous.com/api/getsites"
|
32
39
|
r.via = :get
|
33
40
|
r.authenticates = true
|
41
|
+
r.follows = true
|
34
42
|
r.headers = {'Accept' => 'application/xml'}
|
35
43
|
end
|
36
44
|
|
@@ -40,6 +48,7 @@ module Caboodle
|
|
40
48
|
r.with = [:site_id,:tag,:num_posts,:page]
|
41
49
|
r.requires = [:site_id]
|
42
50
|
r.authenticates = true
|
51
|
+
r.follows = true
|
43
52
|
r.headers = {'Accept' => 'application/xml'}
|
44
53
|
end
|
45
54
|
|
@@ -54,6 +63,7 @@ module Caboodle
|
|
54
63
|
end
|
55
64
|
|
56
65
|
def self.from_slug(slug)
|
66
|
+
puts "Looking for http://#{Site.posterous_sitename}.posterous.com/#{slug}"
|
57
67
|
doc = Caboodle.scrape("http://#{Site.posterous_sitename}.posterous.com/#{slug}")
|
58
68
|
puts doc
|
59
69
|
opts = {}
|
@@ -61,10 +71,14 @@ module Caboodle
|
|
61
71
|
opts["title"] = doc.css('title').inner_html.split(" - ").first
|
62
72
|
opts["link"] = "http://#{Site.posterous_sitename}.posterous.com/#{slug}"
|
63
73
|
perma = doc.css('.permalink').inner_html
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
74
|
+
begin
|
75
|
+
date = doc.css('article time').first["datetime"] if doc.css('article time').first
|
76
|
+
date ||= doc.css('.date .permalink').first.inner_html if doc.css('.date .permalink').first
|
77
|
+
opts["date"] = Date.parse(date) if date
|
78
|
+
rescue
|
79
|
+
opts["date"] = Date.parse(Time.now)
|
80
|
+
end
|
81
|
+
puts opts["date"]
|
68
82
|
PosterousPost.new(opts)
|
69
83
|
end
|
70
84
|
|
@@ -74,18 +88,26 @@ module Caboodle
|
|
74
88
|
end
|
75
89
|
|
76
90
|
def self.all(opts={})
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
91
|
+
begin
|
92
|
+
r = []
|
93
|
+
p = PosterousAPI.new
|
94
|
+
opts[:site_id] = Site.posterous_site_id
|
95
|
+
rsp = p.all(opts).perform.parse["rsp"]
|
96
|
+
posts = rsp["post"]
|
97
|
+
posts = [posts] if posts.class == Hash
|
98
|
+
posts.each{|a| r << PosterousPost.new(a) } if posts
|
99
|
+
r
|
100
|
+
rescue Exception => e
|
101
|
+
raise PosterousProblem.new(e.message)
|
102
|
+
end
|
85
103
|
end
|
86
104
|
|
87
105
|
def self.get(slug)
|
88
|
-
|
106
|
+
begin
|
107
|
+
PosterousPost.new(PosterousAPI.new.all().perform.parse)
|
108
|
+
rescue Exception => e
|
109
|
+
raise PosterousProblem.new(e.message)
|
110
|
+
end
|
89
111
|
end
|
90
112
|
|
91
113
|
def [] k
|
@@ -109,24 +131,26 @@ module Caboodle
|
|
109
131
|
def semantic_tags
|
110
132
|
a = tags.collect{|t| "tag-#{t}"}
|
111
133
|
a << "slug-#{slug}"
|
112
|
-
|
113
|
-
|
114
|
-
|
134
|
+
if date
|
135
|
+
a << "y#{date.year}"
|
136
|
+
a << "m#{date.month}"
|
137
|
+
a << "d#{date.day}"
|
138
|
+
end
|
115
139
|
a
|
116
140
|
end
|
117
141
|
|
118
142
|
def url
|
119
143
|
d = date
|
120
|
-
|
144
|
+
if d
|
145
|
+
"/#{d.year}/#{d.month}/#{slug}"
|
146
|
+
else
|
147
|
+
"/#{slug}"
|
148
|
+
end
|
121
149
|
end
|
122
150
|
|
123
151
|
def date
|
124
|
-
|
125
|
-
|
126
|
-
@date = Date.parse(attributes["date"])
|
127
|
-
else
|
128
|
-
@date = attributes["date"]
|
129
|
-
end
|
152
|
+
puts attributes.inspect
|
153
|
+
@date ||= attributes["date"]
|
130
154
|
end
|
131
155
|
|
132
156
|
def full_url
|
@@ -152,18 +176,28 @@ module Caboodle
|
|
152
176
|
haml :posts
|
153
177
|
end
|
154
178
|
|
155
|
-
get
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
179
|
+
get %r{/(\d+)/(\d+)/(.*$)} do |year, month, slug|
|
180
|
+
puts "Blog post: #{params.inspect}"
|
181
|
+
begin
|
182
|
+
post = PosterousPost.from_slug(slug)
|
183
|
+
@title = post.title
|
184
|
+
rescue Caboodle::PosterousPostNotFound
|
185
|
+
not_found unless post
|
186
|
+
rescue Caboodle::PosterousProblem
|
187
|
+
post = nil
|
188
|
+
end
|
161
189
|
haml :post, :locals => { :post => post }
|
162
190
|
end
|
163
191
|
|
164
192
|
menu "Blog", "/posterous" do
|
165
|
-
|
166
|
-
|
193
|
+
begin
|
194
|
+
@posts = PosterousPost.all(:page=>(params[:page] || 1))
|
195
|
+
rescue Caboodle::PosterousProblem
|
196
|
+
@posts = nil
|
197
|
+
puts "Problem accessing posts on Posterous.com"
|
198
|
+
end
|
199
|
+
|
200
|
+
haml :posts
|
167
201
|
end
|
168
202
|
|
169
203
|
stylesheets ["http://disqus.com/stylesheets/#{disqus}/disqus.css?v=2.0"] if disqus
|
@@ -1,5 +1,5 @@
|
|
1
1
|
- post = locals[:post]
|
2
|
-
|
2
|
+
|
3
3
|
%article.post.hentry.publish{:class=>post.semantic_tags}
|
4
4
|
- if locals[:full]
|
5
5
|
|
@@ -18,8 +18,9 @@
|
|
18
18
|
%a.url.fn.n{:href => "/about", :title => "About the author"}= Caboodle::Site.author
|
19
19
|
%span.meta-sep.meta-sep-entry-date |
|
20
20
|
%span.meta-prep.meta-prep-entry-date Published:
|
21
|
-
|
22
|
-
%
|
21
|
+
- if post.date
|
22
|
+
%span.entry-date
|
23
|
+
%abbr.published{:title => post.date.strftime("%d")}= post.date.strftime("%b")
|
23
24
|
%small
|
24
25
|
%span.tag-links
|
25
26
|
= post.linked_tags
|
@@ -1,9 +1,20 @@
|
|
1
1
|
- if ENV["RACK_ENV"] == "development"
|
2
2
|
:javascript
|
3
3
|
var disqus_developer = true;
|
4
|
+
|
4
5
|
|
5
6
|
%div.posterous
|
6
|
-
|
7
|
+
|
8
|
+
- if post.nil?
|
9
|
+
%h3
|
10
|
+
Sorry, there's a problem communicating with Posterous.com
|
11
|
+
%p
|
12
|
+
You can view this post at
|
13
|
+
%a{:href=>"http://#{Site.posterous_sitename}.posterous.com/#{params[:slug]}"}
|
14
|
+
= posterous_sitename
|
15
|
+
on Posterous.com
|
16
|
+
- else
|
17
|
+
= haml :_post, :locals=>{:post=>post, :full=>true}, :layout=>false
|
7
18
|
- if Caboodle::Site.disqus
|
8
19
|
#disqus_thread
|
9
20
|
%script{:src => "http://disqus.com/forums/#{Caboodle::Site.disqus}/embed.js", :type => "text/javascript"}
|
@@ -2,6 +2,11 @@
|
|
2
2
|
- if defined?(@posts) && @posts.nil?
|
3
3
|
%h3
|
4
4
|
Sorry, there's a problem communicating with Posterous.com
|
5
|
+
%p
|
6
|
+
You can view all of the posts at
|
7
|
+
%a{:href=>"http://#{Caboodle::Site.posterous_sitename}.posterous.com"}
|
8
|
+
= Caboodle::Site.posterous_sitename
|
9
|
+
on Posterous.com
|
5
10
|
- else
|
6
11
|
- @posts.each do |post|
|
7
12
|
- puts post.inspect
|
data/lib/caboodle/scrape.rb
CHANGED
@@ -1,10 +1,32 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
require 'hashie'
|
3
3
|
require 'net/http'
|
4
|
+
require 'open-uri'
|
4
5
|
|
5
6
|
module Caboodle
|
7
|
+
|
8
|
+
def self.round_time(integer, factor)
|
9
|
+
return integer if(integer % factor == 0)
|
10
|
+
return integer - (integer % factor)
|
11
|
+
end
|
12
|
+
|
6
13
|
def self.scrape url
|
7
|
-
|
14
|
+
begin
|
15
|
+
if HAS_MEMCACHE
|
16
|
+
timeout = 60*60*1000
|
17
|
+
sleepy = Memcached.new
|
18
|
+
response = sleepy.get("#{round_time(Time.new.to_i, timeout)}:#{url}") rescue nil
|
19
|
+
response ||= open(url).read
|
20
|
+
sleepy.set("#{round_time(Time.new.to_i, timeout)}:#{url}", response)
|
21
|
+
sleepy.set("0:#{url}", response)
|
22
|
+
else
|
23
|
+
response = open(url).read
|
24
|
+
end
|
25
|
+
::Nokogiri::HTML(response)
|
26
|
+
rescue Exception => e
|
27
|
+
puts e.inspect
|
28
|
+
::Nokogiri::HTML("")
|
29
|
+
end
|
8
30
|
end
|
9
31
|
|
10
32
|
def self.mash req
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboodle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 35
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 26
|
10
|
+
version: 0.2.26
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Stef Lewandowski
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-18 00:00:00 +01:00
|
19
19
|
default_executable: caboodle
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|