Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 15
- Log:
Attempt to update Typo to a Typo SVN HEAD release from around the
time the prototype installation was set up on the RISC OS Open Limited
web site. Timestamps place this at 04-Jul so a revision from 05-Jul or
earlier was pulled and copied over the 2.6.0 tarball stable code.
- Author:
- adh
- Date:
- Sat Jul 22 23:27:35 +0100 2006
- Size:
- 2921 Bytes
1 | require 'rexml/document' |
2 | |
3 | class Ping < ActiveRecord::Base |
4 | belongs_to :article |
5 | |
6 | class Pinger |
7 | def send_pingback_or_trackback |
8 | begin |
9 | @response = Net::HTTP.get_response(URI.parse(ping.url)) |
10 | send_pingback or send_trackback |
11 | rescue Timeout::Error => err |
12 | return |
13 | rescue => err |
14 | raise err |
15 | # Ignore |
16 | end |
17 | end |
18 | |
19 | def pingback_url |
20 | if @response["X-Pingback"] |
21 | @response["X-Pingback"] |
22 | elsif |
23 | response.body =~ /<link rel="pingback" href="([^"]+)" ?\/?>/ |
24 | $1 |
25 | else |
26 | nil |
27 | end |
28 | end |
29 | |
30 | def origin_url |
31 | @origin_url |
32 | end |
33 | |
34 | def response |
35 | @response |
36 | end |
37 | |
38 | def ping |
39 | @ping |
40 | end |
41 | |
42 | def article |
43 | ping.article |
44 | end |
45 | |
46 | def config |
47 | ping.config |
48 | end |
49 | |
50 | def send_xml_rpc(*args) |
51 | ping.send(:send_xml_rpc, *args) |
52 | end |
53 | |
54 | def trackback_url |
55 | rdfs = response.body.scan(/<rdf:RDF.*?<\/rdf:RDF>/m) |
56 | rdfs.each do |rdf| |
57 | xml = REXML::Document.new(rdf) |
58 | xml.elements.each("//rdf:Description") do |desc| |
59 | if rdfs.size == 1 || desc.attributes["dc:identifier"] == ping.url |
60 | return desc.attributes["trackback:ping"] |
61 | end |
62 | end |
63 | end |
64 | # Didn't find a trackback url, so fall back to the url itself. |
65 | @ping.url |
66 | end |
67 | |
68 | def send_pingback |
69 | if pingback_url |
70 | send_xml_rpc(pingback_url, "pingback.ping", origin_url, ping.url) |
71 | return true |
72 | else |
73 | return false |
74 | end |
75 | end |
76 | |
77 | def send_trackback |
78 | ping.send_trackback(trackback_url, origin_url) |
79 | end |
80 | |
81 | private |
82 | |
83 | def initialize(origin_url, ping) |
84 | @origin_url = origin_url |
85 | @ping = ping |
86 | end |
87 | end |
88 | |
89 | def send_pingback_or_trackback(origin_url) |
90 | Pinger.new(origin_url, self).send_pingback_or_trackback |
91 | end |
92 | |
93 | def send_trackback(trackback_url, origin_url) |
94 | trackback_uri = URI.parse(trackback_url) |
95 | |
96 | post = "title=#{URI.escape(article.title)}" |
97 | post << "&excerpt=#{URI.escape(article.body_html.strip_html[0..254])}" |
98 | post << "&url=#{origin_url}" |
99 | post << "&blog_name=#{URI.escape(article.blog.blog_name)}" |
100 | |
101 | Net::HTTP.start(trackback_uri.host, trackback_uri.port) do |http| |
102 | path = trackback_uri.path |
103 | path += "?#{trackback_uri.query}" if trackback_uri.query |
104 | http.post(path, post, 'Content-type' => 'application/x-www-form-urlencoded; charset=utf-8') |
105 | end |
106 | end |
107 | |
108 | |
109 | |
110 | def send_weblogupdatesping(server_url, origin_url) |
111 | send_xml_rpc(self.url, "weblogUpdates.ping", article.blog.blog_name, server_url, origin_url) |
112 | end |
113 | |
114 | protected |
115 | |
116 | def send_xml_rpc(xml_rpc_url, name, *args) |
117 | begin |
118 | server = XMLRPC::Client.new2(URI.parse(xml_rpc_url).to_s) |
119 | |
120 | begin |
121 | result = server.call(name, *args) |
122 | rescue XMLRPC::FaultException => e |
123 | logger.error(e) |
124 | end |
125 | rescue Exception => e |
126 | logger.error(e) |
127 | end |
128 | end |
129 | end |