tdiary-contrib 4.1.2 → 4.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +13 -0
- data/lib/tdiary/contrib/version.rb +1 -1
- data/plugin/comment_pushbullet.rb +67 -0
- data/plugin/google_map.rb +15 -4
- data/plugin/profile.rb +196 -183
- data/plugin/tatsu_zine.rb +2 -3
- data/spec/fixtures/gravatar.json +1 -0
- data/spec/profile_spec.rb +11 -21
- metadata +6 -5
- data/spec/fixtures/friendfeed.xml +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dad562683f3ef04d5be651c704d813ae64c34aae
|
4
|
+
data.tar.gz: 17a8e5702e650f9e613fbcb964bc5205bbb11f0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 177f717e43f0448a05f5e923288e915f7e65e029422bbd12a16b7293b38e723a5223c80ad970d818fc1c043ca701582781b85617db3f0f6f3b5043a0c5f4925a
|
7
|
+
data.tar.gz: be994ffdfa8e0976b04730cc84858ab6542b50bc50369899c09f48d14c6f96ce601b8c5b139e24895006473231a3fa38653a216372fb0d5d6c262a9cbed72eaf
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -7,13 +7,19 @@ GEM
|
|
7
7
|
safe_yaml (~> 1.0.0)
|
8
8
|
diff-lcs (1.2.5)
|
9
9
|
docile (1.1.5)
|
10
|
+
json (1.8.3)
|
10
11
|
method_source (0.8.2)
|
12
|
+
mime-types (2.6.1)
|
11
13
|
multi_json (1.10.1)
|
14
|
+
netrc (0.10.3)
|
12
15
|
pry (0.10.1)
|
13
16
|
coderay (~> 1.1.0)
|
14
17
|
method_source (~> 0.8.1)
|
15
18
|
slop (~> 3.4)
|
16
19
|
rake (10.4.2)
|
20
|
+
rest-client (1.7.3)
|
21
|
+
mime-types (>= 1.16, < 3.0)
|
22
|
+
netrc (~> 0.7)
|
17
23
|
rspec (3.2.0)
|
18
24
|
rspec-core (~> 3.2.0)
|
19
25
|
rspec-expectations (~> 3.2.0)
|
@@ -27,6 +33,9 @@ GEM
|
|
27
33
|
diff-lcs (>= 1.2.0, < 2.0)
|
28
34
|
rspec-support (~> 3.2.0)
|
29
35
|
rspec-support (3.2.1)
|
36
|
+
ruby-pushbullet (0.1.3)
|
37
|
+
json
|
38
|
+
rest-client (~> 1.7.2)
|
30
39
|
safe_yaml (1.0.4)
|
31
40
|
simplecov (0.9.1)
|
32
41
|
docile (~> 1.1.0)
|
@@ -49,6 +58,10 @@ DEPENDENCIES
|
|
49
58
|
pry
|
50
59
|
rake
|
51
60
|
rspec
|
61
|
+
ruby-pushbullet
|
52
62
|
simplecov
|
53
63
|
tdiary (~> 4.1.0)
|
54
64
|
webmock
|
65
|
+
|
66
|
+
BUNDLED WITH
|
67
|
+
1.10.3
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# comment_pushbullet.rb
|
3
|
+
#
|
4
|
+
# メールの代わりにPushbulletサービスを使ってツッコミを知らせる
|
5
|
+
# プラグインを有効にした上で、Access Tokenを設定する
|
6
|
+
#
|
7
|
+
# Options:
|
8
|
+
# 設定画面から指定できるもの
|
9
|
+
# @options['comment_pushbullet.access_token']
|
10
|
+
# 自分のPushbulletアカウントのAccess Token https://www.pushbullet.com/account
|
11
|
+
# 設定画面から指定できるもの(ツッコミメールと共通)
|
12
|
+
# @options['comment_mail.enable']
|
13
|
+
# メールを送るかどうかを指定する。true(送る)かfalse(送らない)。
|
14
|
+
# 無指定時はfalse。
|
15
|
+
# @options['comment_mail.header']
|
16
|
+
# メールのSubjectに使う文字列。振り分け等に便利なように指定する。
|
17
|
+
# 実際のSubjectは「指定文字列:日付-1」のように、日付とコメント番号が
|
18
|
+
# 付く。ただし指定文字列中に、%に続く英字があった場合、それを
|
19
|
+
# 日付フォーマット指定を見なす。つまり「日付」の部分は
|
20
|
+
# 自動的に付加されなくなる(コメント番号は付加される)。
|
21
|
+
# 無指定時には空文字。
|
22
|
+
#
|
23
|
+
# tdiary.confでのみ指定できるもの:
|
24
|
+
#
|
25
|
+
# Copyright (c) 2015 TADA Tadashi <t@tdtds.jp>
|
26
|
+
# You can distribute this file under the GPL2 or any later version.
|
27
|
+
#
|
28
|
+
def comment_pushbullet
|
29
|
+
require 'pushbullet'
|
30
|
+
|
31
|
+
header = (@conf['comment_mail.header'] || '').dup
|
32
|
+
header << ":#{@conf.date_format}" unless /%[a-zA-Z%]/ =~ header
|
33
|
+
serial = @diaries[@date.strftime('%Y%m%d')].count_comments(true)
|
34
|
+
title = %Q|#{@date.strftime(header)}-#{serial} #{@comment.name}|
|
35
|
+
body = @comment.body.sub( /[\r\n]+\Z/, '' )
|
36
|
+
|
37
|
+
Pushbullet.api_token = @conf['comment_pushbullet.access_token']
|
38
|
+
Pushbullet::Contact.me.push_note(title, body)
|
39
|
+
end
|
40
|
+
|
41
|
+
add_update_proc do
|
42
|
+
comment_pushbullet if @mode == 'comment'
|
43
|
+
end
|
44
|
+
|
45
|
+
add_conf_proc( 'comment_mail', comment_mail_conf_label, 'tsukkomi' ) do
|
46
|
+
comment_mail_basic_setting
|
47
|
+
comment_mail_basic_html
|
48
|
+
end
|
49
|
+
|
50
|
+
add_conf_proc( 'comment_pushbullet', 'Pushbullet', 'tsukkomi' ) do
|
51
|
+
if @mode == 'saveconf' then
|
52
|
+
@conf['comment_pushbullet.access_token'], = @cgi.params['comment_pushbullet.access_token']
|
53
|
+
end
|
54
|
+
|
55
|
+
<<-HTML
|
56
|
+
<h3 class="subtitle">Pushbullet Access Token</h3>
|
57
|
+
<p>Access Token (see <a href="https://www.pushbullet.com/account">https://www.pushbullet.com/account</a>)</p>
|
58
|
+
<p><input name="comment_pushbullet.access_token" value="#{h @conf['comment_pushbullet.access_token']}" size="50"></p>
|
59
|
+
HTML
|
60
|
+
end
|
61
|
+
|
62
|
+
# Local Variables:
|
63
|
+
# mode: ruby
|
64
|
+
# indent-tabs-mode: t
|
65
|
+
# tab-width: 3
|
66
|
+
# ruby-indent-level: 3
|
67
|
+
# End:
|
data/plugin/google_map.rb
CHANGED
@@ -32,10 +32,21 @@ def google_map_common(params)
|
|
32
32
|
|
33
33
|
if feed?
|
34
34
|
require 'cgi'
|
35
|
-
|
36
|
-
url
|
37
|
-
|
38
|
-
|
35
|
+
|
36
|
+
url = nil
|
37
|
+
if params[:lat].nonzero? && params[:lon].nonzero?
|
38
|
+
query = "#{params[:lat]},#{params[:lon]}"
|
39
|
+
url = %Q|http://maps.google.com/maps?q=#{CGI::escape(query)}|
|
40
|
+
|
41
|
+
elsif params[:address] != nil
|
42
|
+
query = params[:address]
|
43
|
+
url = %Q|http://maps.google.com/maps?q=#{CGI::escape(query)}|
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
return %Q|<a href="#{url}">#{url}</a>| if url
|
48
|
+
|
49
|
+
end
|
39
50
|
return 'not support this environment.' if @conf.mobile_agent?
|
40
51
|
|
41
52
|
dom_id = "#{@gmap_date.strftime("%Y%m%d")}_#{@gmap_count}"
|
data/plugin/profile.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# profile(id[, service = :twitter])
|
6
6
|
# - id: user ID for profile service
|
7
7
|
# - service: profile service (default is :twitter)
|
8
|
-
# Choose from :github, :twitter, :
|
8
|
+
# Choose from :github, :twitter, :gravatar
|
9
9
|
#
|
10
10
|
# Copyright (C) 2009 by MATSUOKA Kohei < http://www.machu.jp/ >
|
11
11
|
# Distributed under the GPL.
|
@@ -17,191 +17,204 @@ require 'digest/md5'
|
|
17
17
|
require 'pstore'
|
18
18
|
|
19
19
|
module ::Profile
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
20
|
+
module Service
|
21
|
+
# base class for profile services
|
22
|
+
class Base
|
23
|
+
# default attributes
|
24
|
+
attr_reader :id
|
25
|
+
attr_reader :image
|
26
|
+
attr_reader :name
|
27
|
+
attr_reader :mail
|
28
|
+
attr_reader :description
|
29
|
+
attr_reader :link
|
30
|
+
|
31
|
+
# class instance variables
|
32
|
+
class << self
|
33
|
+
attr_reader :properties
|
34
|
+
attr_reader :endpoint_proc
|
35
|
+
end
|
36
|
+
|
37
|
+
# set property and xpath pair for parse XML document
|
38
|
+
def self.property(property, path)
|
39
|
+
@properties ||= {}
|
40
|
+
@properties[property] = path
|
41
|
+
end
|
42
|
+
|
43
|
+
# set endpoint proc (this proc is called by initialize method with id)
|
44
|
+
def self.endpoint(&block)
|
45
|
+
@endpoint_proc = block
|
46
|
+
end
|
47
|
+
|
48
|
+
def initialize(id, options = {})
|
49
|
+
@id = id
|
50
|
+
@options = options
|
51
|
+
|
52
|
+
if self.class.endpoint_proc
|
53
|
+
endpoint = self.class.endpoint_proc.call(id)
|
54
|
+
doc = fetch(endpoint)
|
55
|
+
parse(doc)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# get a XML document from endpoint and create REXML::Document instance
|
60
|
+
def fetch(endpoint)
|
61
|
+
timeout(5) do
|
62
|
+
open(endpoint) do |f|
|
63
|
+
doc = REXML::Document.new(f)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# parse XML document with properties
|
69
|
+
def parse(doc)
|
70
|
+
self.class.properties.each do |property, path|
|
71
|
+
if doc.elements[path]
|
72
|
+
value = doc.elements[path].text
|
73
|
+
instance_variable_set("@#{property}", value)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# github.com
|
80
|
+
class GitHub < Base
|
81
|
+
property :name, 'name'
|
82
|
+
property :mail, 'email'
|
83
|
+
endpoint {|id| "https://api.github.com/users/#{id}" }
|
84
|
+
|
85
|
+
def image
|
86
|
+
# "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(@mail)}.jpg"
|
87
|
+
Gravatar.new(@mail, @options).image
|
88
|
+
end
|
89
|
+
|
90
|
+
def link
|
91
|
+
"http://github.com/#{@id}"
|
92
|
+
end
|
93
|
+
|
94
|
+
def fetch(endpoint)
|
95
|
+
require 'json'
|
96
|
+
timeout(5) do
|
97
|
+
doc = open(endpoint) {|f| JSON.parse(f.read) }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def parse(doc)
|
102
|
+
self.class.properties.each do |property, key|
|
103
|
+
instance_variable_set("@#{property}", doc[key]) if doc[key]
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# twitter.com
|
109
|
+
class Twitter < Base
|
110
|
+
property :name, '//user/name'
|
111
|
+
property :image, '//user/profile_image_url'
|
112
|
+
property :description, '//user/description'
|
113
|
+
endpoint {|id| "http://twitter.com/users/show/#{id}.xml" }
|
114
|
+
|
115
|
+
def link
|
116
|
+
"http://twitter.com/#{@id}"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# iddy.jp, for backward compatibility
|
121
|
+
class Iddy < Base
|
122
|
+
# dummy class
|
123
|
+
end
|
124
|
+
|
125
|
+
# gravatar.com
|
126
|
+
class Gravatar < Base
|
127
|
+
endpoint {|id|
|
128
|
+
hash = Digest::MD5.hexdigest(id.downcase)
|
129
|
+
"https://www.gravatar.com/#{hash}.json"
|
130
|
+
}
|
131
|
+
|
132
|
+
def image
|
133
|
+
size = @options[:size] ? "?s=#{@options[:size]}" : ""
|
134
|
+
"#{@image_base}#{size}"
|
135
|
+
end
|
136
|
+
|
137
|
+
def fetch(endpoint)
|
138
|
+
require 'json'
|
139
|
+
timeout(5) do
|
140
|
+
begin
|
141
|
+
doc = open(endpoint) {|f| JSON.parse(f.read) }
|
142
|
+
rescue RuntimeError => err
|
143
|
+
if err.message =~ /^redirection forbidden: /
|
144
|
+
endpoint.sub!(/www/, @options[:lang])
|
145
|
+
retry
|
146
|
+
else
|
147
|
+
raise
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def parse(doc)
|
154
|
+
instance_variable_set("@name", doc['entry'][0]['displayName'])
|
155
|
+
instance_variable_set("@mail", @id)
|
156
|
+
instance_variable_set("@image_base", doc['entry'][0]['thumbnailUrl'])
|
157
|
+
instance_variable_set("@link", doc['entry'][0]['profileUrl'])
|
158
|
+
instance_variable_set("@description", doc['entry'][0]['aboutMe'])
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
class Hatena < Base
|
163
|
+
def image
|
164
|
+
prefix = id[0..1]
|
165
|
+
"http://www.hatena.ne.jp/users/#{prefix}/#{id}/profile.gif"
|
166
|
+
end
|
167
|
+
|
168
|
+
def link
|
169
|
+
"http://www.hatena.ne.jp/#{id}/"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
159
173
|
end
|
160
174
|
|
161
175
|
PROFILE_VERSION = '20090909'
|
162
176
|
|
163
177
|
def profile(id, service = :twitter, options = {})
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
html << %Q{ </a></div> }
|
178
|
+
html = ''
|
179
|
+
|
180
|
+
service_class = {
|
181
|
+
:twitter => Profile::Service::Twitter,
|
182
|
+
:github => Profile::Service::GitHub,
|
183
|
+
:gravatar => Profile::Service::Gravatar,
|
184
|
+
:hatena => Profile::Service::Hatena,
|
185
|
+
}[service.to_s.downcase.to_sym] || Profile::Service::Twitter
|
186
|
+
|
187
|
+
# TODO: create cache manager class
|
188
|
+
|
189
|
+
# cache = "#{@cache_path}/profile.yaml"
|
190
|
+
cache = "#{@cache_path}/profile.pstore"
|
191
|
+
profile = nil
|
192
|
+
# db = YAML::Store.new(cache)
|
193
|
+
db = PStore.new(cache)
|
194
|
+
db.transaction do
|
195
|
+
key = service_class.name
|
196
|
+
db[key] ||= {} # initialize db
|
197
|
+
updated = db[key][:updated]
|
198
|
+
if updated && (Time::now < updated + 60 * 60) && db[key][:version] == PROFILE_VERSION
|
199
|
+
# use cache
|
200
|
+
profile = db[key][:profile]
|
201
|
+
else
|
202
|
+
# get latest date and update cache
|
203
|
+
begin
|
204
|
+
profile = service_class.new(id, options.merge(lang: @conf.lang))
|
205
|
+
rescue Timeout::Error, StandardError
|
206
|
+
return html << %Q{ <div class="profile">no profile</div> }
|
207
|
+
end
|
208
|
+
db[key][:updated] = Time::now
|
209
|
+
db[key][:profile] = profile
|
210
|
+
db[key][:version] = PROFILE_VERSION
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
html << %Q{ <div class="profile"><a href="#{CGI.escapeHTML profile.link}"> }
|
215
|
+
html << %Q{ <span class="profile-image"><img src="#{CGI.escapeHTML profile.image}" alt="profile image"></span> } if profile.image
|
216
|
+
html << %Q{ <span class="profile-name">#{CGI.escapeHTML profile.name}</span> } if profile.name
|
217
|
+
html << %Q{ <span class="profile-mail">#{CGI.escapeHTML profile.mail}</span> } if profile.mail
|
218
|
+
html << %Q{ <span class="profile-description">#{CGI.escapeHTML profile.description}</span> } if profile.description
|
219
|
+
html << %Q{ </a></div> }
|
207
220
|
end
|
data/plugin/tatsu_zine.rb
CHANGED
@@ -36,9 +36,8 @@ def tatsu_zine( id, doc = nil )
|
|
36
36
|
doc ||= open( link ).read
|
37
37
|
title = doc.match(%r|<meta property="og:title" content="(.*)">|).to_a[1]
|
38
38
|
image = doc.match(%r|<meta property="og:image" content="(.*)">|).to_a[1]
|
39
|
-
price = doc.match(%r|<
|
40
|
-
|
41
|
-
author = doc.match(%r|<p class="author">(.*)</p>|).to_a[1]
|
39
|
+
price = doc.match(%r|<meta name="twitter:data2" content="(.*)JPY">|).to_a[1]
|
40
|
+
author = doc.match(%r|<meta name="twitter:data1" content="(.*)">|).to_a[1]
|
42
41
|
|
43
42
|
result = <<-EOS
|
44
43
|
<a class="amazon-detail" href="#{h link}"><span class="amazon-detail">
|
@@ -0,0 +1 @@
|
|
1
|
+
{"entry":[{"id":"7329339","hash":"3b3be63a4c2a439b013787725dfce802","requestHash":"3b3be63a4c2a439b013787725dfce802","profileUrl":"http:\/\/gravatar.com\/tdiary","preferredUsername":"tdiary","thumbnailUrl":"http:\/\/2.gravatar.com\/avatar\/3b3be63a4c2a439b013787725dfce802","photos":[{"value":"http:\/\/2.gravatar.com\/avatar\/3b3be63a4c2a439b013787725dfce802","type":"thumbnail"},{"value":"http:\/\/2.gravatar.com\/userimage\/7329339\/3b3be63a4c2a439b013787725dfce802"}],"profileBackground":{"color":"#e78736"},"name":{"givenName":"diary","familyName":"t","formatted":"tDiary"},"displayName":"tDiary","aboutMe":"The tDiary system","currentLocation":"JAPAN","emails":[{"primary":"true","value":"iHaveAn@email.com"}],"urls":[{"value":"http:\/\/www.tdiary.org","title":"tDiary"}]}]}
|
data/spec/profile_spec.rb
CHANGED
@@ -8,6 +8,7 @@ describe "Profile::Service" do
|
|
8
8
|
before do
|
9
9
|
require 'json'
|
10
10
|
allow_any_instance_of(Profile::Service::GitHub).to receive(:fetch).and_return(JSON.parse(File.read("spec/fixtures/github.json")))
|
11
|
+
allow_any_instance_of(Profile::Service::Gravatar).to receive(:fetch).and_return(JSON.parse(File.read("spec/fixtures/gravatar.json")))
|
11
12
|
|
12
13
|
# workaround for run spec on various environment.
|
13
14
|
require 'openssl'
|
@@ -20,7 +21,7 @@ describe "Profile::Service" do
|
|
20
21
|
it "should include name, mail, image properties" do
|
21
22
|
expect(@profile.name).to eq("Scott Chacon")
|
22
23
|
expect(@profile.mail).to eq("schacon@gmail.com")
|
23
|
-
expect(@profile.image).to eq("http://
|
24
|
+
expect(@profile.image).to eq("http://2.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?s=40")
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -39,30 +40,19 @@ describe "Profile::Service" do
|
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
42
|
-
describe "FriendFeed" do
|
43
|
-
before do
|
44
|
-
allow_any_instance_of(Profile::Service::FriendFeed).to receive(:fetch).and_return(REXML::Document.new(File.read("spec/fixtures/friendfeed.xml")))
|
45
|
-
|
46
|
-
# http://friendfeed.com/api/documentation#summary
|
47
|
-
@profile = Profile::Service::FriendFeed.new("bret")
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should include name, description, image properties" do
|
51
|
-
expect(@profile.name).to eq("Bret Taylor")
|
52
|
-
expect(@profile.description).to eq("Ex-CTO of Facebook. Previously co-founder and CEO of FriendFeed. Programmer, food lover.")
|
53
|
-
expect(@profile.image).to eq("http://friendfeed-api.com/v2/picture/bret")
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
43
|
describe "Gravatar" do
|
58
|
-
# http://ja.gravatar.com/site/implement/
|
44
|
+
# http://ja.gravatar.com/site/implement/hash/
|
59
45
|
|
60
46
|
before do
|
47
|
+
require 'json'
|
48
|
+
allow_any_instance_of(Profile::Service::Gravatar).to receive(:fetch).and_return(JSON.parse(File.read("spec/fixtures/gravatar.json")))
|
49
|
+
|
61
50
|
@profile = Profile::Service::Gravatar.new("iHaveAn@email.com")
|
62
51
|
end
|
63
|
-
|
64
|
-
|
65
|
-
expect(@profile.
|
52
|
+
it "should include name, mail, image properties" do
|
53
|
+
expect(@profile.name).to eq("tDiary")
|
54
|
+
expect(@profile.mail).to eq("iHaveAn@email.com")
|
55
|
+
expect(@profile.image).to eq("http://2.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802")
|
66
56
|
end
|
67
57
|
|
68
58
|
context 'with options' do
|
@@ -71,7 +61,7 @@ describe "Profile::Service" do
|
|
71
61
|
end
|
72
62
|
|
73
63
|
it "should specify size option" do
|
74
|
-
expect(@profile.image).to eq("http://
|
64
|
+
expect(@profile.image).to eq("http://2.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802?s=40")
|
75
65
|
end
|
76
66
|
end
|
77
67
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tdiary-contrib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tDiary contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tdiary
|
@@ -190,6 +190,7 @@ files:
|
|
190
190
|
- plugin/code-prettify.rb
|
191
191
|
- plugin/coderay.rb
|
192
192
|
- plugin/coderwall.rb
|
193
|
+
- plugin/comment_pushbullet.rb
|
193
194
|
- plugin/datepicker.rb
|
194
195
|
- plugin/day2section.rb
|
195
196
|
- plugin/del_footer.rb
|
@@ -329,8 +330,8 @@ files:
|
|
329
330
|
- spec/apple_webclip_spec.rb
|
330
331
|
- spec/fixtures/flickr/5950109223.flickr.photos.getInfo.xml
|
331
332
|
- spec/fixtures/flickr/5950109223.flickr.photos.getSizes.xml
|
332
|
-
- spec/fixtures/friendfeed.xml
|
333
333
|
- spec/fixtures/github.json
|
334
|
+
- spec/fixtures/gravatar.json
|
334
335
|
- spec/fixtures/my_hotentry/entrylist-empty.xml
|
335
336
|
- spec/fixtures/my_hotentry/entrylist.xml
|
336
337
|
- spec/fixtures/twitter.xml
|
@@ -463,7 +464,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
463
464
|
version: '0'
|
464
465
|
requirements: []
|
465
466
|
rubyforge_project:
|
466
|
-
rubygems_version: 2.
|
467
|
+
rubygems_version: 2.4.5
|
467
468
|
signing_key:
|
468
469
|
specification_version: 4
|
469
470
|
summary: tDiary contributions package
|
@@ -471,8 +472,8 @@ test_files:
|
|
471
472
|
- spec/apple_webclip_spec.rb
|
472
473
|
- spec/fixtures/flickr/5950109223.flickr.photos.getInfo.xml
|
473
474
|
- spec/fixtures/flickr/5950109223.flickr.photos.getSizes.xml
|
474
|
-
- spec/fixtures/friendfeed.xml
|
475
475
|
- spec/fixtures/github.json
|
476
|
+
- spec/fixtures/gravatar.json
|
476
477
|
- spec/fixtures/my_hotentry/entrylist-empty.xml
|
477
478
|
- spec/fixtures/my_hotentry/entrylist.xml
|
478
479
|
- spec/fixtures/twitter.xml
|
@@ -1,2 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
2
|
-
<feed><sup_id>44123b23</sup_id><description>Ex-CTO of Facebook. Previously co-founder and CEO of FriendFeed. Programmer, food lover.</description><type>user</type><id>bret</id><name>Bret Taylor</name><entry><body>FriendFeed Blog: Ben Darnell joins FriendFeed: Ben++! - <a rel="nofollow" href="http://blog.friendfeed.com/2009/07/ben-darnell-joins-friendfeed-ben.html" title="http://blog.friendfeed.com/2009/07/ben-darnell-joins-friendfeed-ben.html">http://blog.friendfeed.com/2009...</a></body><via><url>http://friendfeed.com/share/bookmarklet</url><name>Bookmarklet</name></via><from><type>user</type><name>Bret Taylor</name><id>bret</id></from><thumbnail><url>http://m.friendfeed-media.com/d8a3d0cffc2d534fb6c7e87912928dd4ee8695b1</url><width>109</width><link>http://blog.friendfeed.com/2009/07/ben-darnell-joins-friendfeed-ben.html</link><height>175</height></thumbnail><url>http://friendfeed.com/friendfeed-news/c970e279/friendfeed-blog-ben-darnell-joins</url><comment><date>2009-07-27T22:52:09Z</date><body>Welcome, Ben!</body><from><type>user</type><id>kfury</id><name>Kevin Fox</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/affd43519b134e2f8b0175f97267affd</id></comment><comment><date>2009-07-27T22:52:53Z</date><body>Right on! Congrats, Ben.</body><from><type>user</type><id>micahwittman</id><name>Micah</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/3ae682d1abd74d9cbec58d8614d34c9f</id></comment><comment><date>2009-07-27T22:54:13Z</date><body>Congrats Ben! Also, congrats to FF you are lucky to have him!</body><from><type>user</type><id>shellen</id><name>Jason Shellen</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/a297cd5ec49d4196855bd042dbb8ae98</id></comment><comment><date>2009-07-27T23:14:34Z</date><body>Data storage and scalability rock. :)</body><from><type>user</type><id>louisgray</id><name>Louis Gray</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/0c562741868248cd80fe1b70c041fe64</id></comment><comment><date>2009-07-27T23:42:50Z</date><body>Ben's feed is here: <a href="http://friendfeed.com/bdarnell">http://friendfeed.com/bdarnell</a></body><from><type>user</type><name>Bret Taylor</name><id>bret</id></from><id>e/c970e27954f349869b58d30a2b75631a/c/31a62c1498c446c090ed63594205c226</id></comment><comment><date>2009-07-27T23:51:54Z</date><body>Congrats, Ben! :-)</body><from><type>user</type><id>koltregaskes</id><name>Kol Tregaskes</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/e79d0783d7b347a88f3905b722f5d776</id></comment><comment><date>2009-07-28T00:17:50Z</date><body>Yeah Ben!!!</body><from><type>user</type><id>phoenix</id><name>Rachel Lea Fox</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/28ca4607a72c4289ab196230d03e6f74</id></comment><comment><date>2009-07-28T00:41:58Z</date><body>so i finally get my answer to this :) <a href="http://friendfeed.com/chris/3870e6df/v-excited-about-my-friend-new-job-his" title="http://friendfeed.com/chris/3870e6df/v-excited-about-my-friend-new-job-his">http://friendfeed.com/chris...</a></body><from><type>user</type><id>parislemon</id><name>MG Siegler</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/0dce0a67de704224b0215da71a2ba408</id></comment><comment><date>2009-07-28T00:44:52Z</date><body>Yeah, sorry I couldn't respond to that one before. :-)</body><from><type>user</type><id>kfury</id><name>Kevin Fox</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/2d9ae52ed9d942f988a18a028d4dc215</id></comment><comment><date>2009-07-28T01:01:55Z</date><body>well i be darned .... we now can rejoice, since fast paced additions to already good product are surely fastly coming about off the feedpipe ... it'l be a hectic season of finest upgrades ... I'm sure they'l start with keyboard shortcutze. ... I mean Google Reader rules on that. Intelligent to the extreme. ..Google.com, on the other hand - are we sleeping? .. not even &quot;/&quot; ??.. and that is the first page on the planet! .. i'l be darned. ..... then, lets boost them blogging facilities ! ... i mean, how hard internet programming could be ???</body><from><type>user</type><id>petrbuben</id><name>pb:</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/c17c8d9235a34d238c3ab4376f1b84ab</id></comment><comment><date>2009-07-28T01:21:05Z</date><body>Congrats Ben! Totally agree with Jason. Our latest project wouldn't have become feasible without Ben -- I'm just so glad we managed to get a fraction of his time before he left! :)</body><from><type>user</type><id>stong</id><name>Simon</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/e7e1b7c2bcbc4c3cb9c112238fb41108</id></comment><comment><date>2009-07-28T02:40:46Z</date><body>Congratulations, Ben! You're joining an awesome team.</body><from><type>user</type><id>abouey</id><name>Anne Bouey</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/c0428e7432994c73b40365644bf22f7e</id></comment><comment><date>2009-07-28T03:31:25Z</date><body>Woohoo! Another Googler :)</body><from><type>user</type><id>timhoeck</id><name>Tim Hoeck</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/14daa1eeb6f043b1b58f2213e75971f6</id></comment><comment><date>2009-07-28T03:59:39Z</date><body>Congrats, you are now a &quot;big company&quot;! ;))))</body><from><type>user</type><id>yogar</id><name>K.D.</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/9d52f70158314758a604daad75732657</id></comment><comment><date>2009-07-28T06:44:21Z</date><body>That's not my picture! They got the picture wrong! In fact, I didn't get the letter of hire either. :( Oh, Hi there, Ben...if that's your real name. ;)</body><from><type>user</type><id>joshhaley</id><private>True</private><name>Josh Haley</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/531163c5e9e34b9f92c0db5f9d3888c6</id></comment><comment><date>2009-07-28T07:03:07Z</date><body>Good luck Ben! With you our preferred service will go more interesting</body><via><url>http://www.fftogo.com/</url><name>fftogo</name></via><from><type>user</type><id>postoditacco</id><private>True</private><name>Roberto</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/d2aeb1623ed14f089dc567f50f2c418c</id></comment><comment><date>2009-07-28T10:13:27Z</date><body>you're building a friendfeed army there :-)</body><from><type>user</type><id>dobata</id><name>Dobromir Hadzhiev</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/81b72085bac844868ac7321a6d6ebf07</id></comment><comment><date>2009-07-28T10:50:24Z</date><body>Congrats</body><from><type>user</type><id>portakal</id><name>Özkan Altuner</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/c04066a9eec842508018999185260fd4</id></comment><comment><date>2009-07-28T12:42:29Z</date><body>Nice, any former Google Reader-er is a friend of mine.</body><from><type>user</type><id>mikereynolds</id><name>Mike Reynolds</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/833416de1ee14f3a88eb25b3a7ec21cc</id></comment><comment><date>2009-07-28T13:35:08Z</date><body>gratz Ben!</body><from><type>user</type><id>timepilot</id><name>timepilot</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/b9d20666d611497abf9be5213eb15b16</id></comment><comment><date>2009-07-28T18:09:12Z</date><body>Welcome Bret!</body><from><type>user</type><id>jamessmith24</id><name>Michael_techie</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/04cdf733ae664d1f853698aa70090a42</id></comment><comment><date>2009-08-10T20:14:31Z</date><body>So, Facebook...?</body><from><type>user</type><id>dpritchett</id><private>True</private><name>Daniel J. Pritchett</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/4c811104219a47d0be72b60a46493336</id></comment><comment><date>2009-08-10T21:16:06Z</date><body>Poor Ben Darnell. The last to enter are always the first to leave in mergers.</body><from><type>user</type><id>beersage</id><name>beersage</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/d6c86c49e7a84536821f3627f3debd07</id></comment><comment><date>2009-08-11T06:49:41Z</date><body>Hiring new staff while in secret acquisition talks, not exactly classy guys. I hope Ben knew what he was getting into</body><from><type>user</type><id>dalziel</id><name>Glenn Slaven</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/7858bb2711894dc7ba792ac22a369c4b</id></comment><comment><date>2009-08-14T05:21:51Z</date><body>Why on earth does he use the Duck Hunt theme?</body><from><type>user</type><id>vzx</id><name>Vezquex</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/99acd29f314b4d9d821866b5d85770bc</id></comment><comment><date>2009-08-14T05:23:45Z</date><body>I don't know.. but it is awesome! :)</body><from><type>user</type><id>timhoeck</id><name>Tim Hoeck</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/bed22ee3baa84233a2a54a25d26e1756</id></comment><comment><date>2012-01-30T23:16:12Z</date><body>Wow, looks like somebody bumped this!</body><from><type>user</type><id>kfury</id><name>Kevin Fox</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/c52b519e6cb04a268f76c9ecb84b0be1</id></comment><comment><date>2012-01-30T23:21:48Z</date><body>I think there were a bunch of spam comments made to some 2009-era posts by FF employees. For some reason even after the spam is nuked, the post stays bumped.</body><from><type>user</type><id>zeigen</id><name>Stephen Mack</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/0ebcf885818a442bbf773526e4927268</id></comment><comment><date>2012-01-30T23:23:23Z</date><body>Yes, I blocked a spammer that was bumping old posts about FF themes and what not.</body><from><type>user</type><id>zoblue</id><name>Zulema ❧ spicy cocoa tart</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/18fcc8e1b02f46fc8a21589681cf0b92</id></comment><comment><date>2012-01-30T23:26:01Z</date><body>OH HAI!</body><from><type>user</type><id>cstechcast</id><name>Eric - Drop That Beat</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/244f5398cd4b4d4b9ca344fe66509ca9</id></comment><comment><date>2012-01-30T23:30:29Z</date><body>Well, let's see this as an opportunity to raise a virtual glass to Ben and FriendFeed-that-was!</body><from><type>user</type><id>kfury</id><name>Kevin Fox</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/5afdbcf261d047b392bed56298492e55</id></comment><comment><date>2012-01-30T23:32:55Z</date><body>It probably had something to do with the Tornado 2.2 release. I noticed Ben was the one who posted about the release on HN earlier. Edit: Or it could have just been a spammer. *shrugs*</body><from><type>user</type><id>jimminy</id><private>True</private><name>Jimminy, CoG of FF</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/93fc5948d22d4e469ca400e41327b48b</id></comment><comment><date>2012-01-31T01:17:40Z</date><body>I don't think it had anything to do with the tornado release - a spammer bumped a bunch of Bret's old posts today.</body><from><type>user</type><id>bdarnell</id><name>Ben Darnell</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/2e2bccd6de854ebd8ed345bb15236f5c</id></comment><comment><date>2012-05-07T17:34:07Z</date><body>Here, let me save future spammers some time: Hello my name is ____ and I am an attractive young ____ _____ and I would like to contact with you so that together you and I can ___ with ____ while _____ in a highly ____ manner. Please to be responding as soon as is practical. Without your help, the _____ in U.S. dollars will go unclaimed, and the herbal ______ remedy will wither and die. Yours in all urgent seriousness, _____.</body><from><type>user</type><id>zeigen</id><name>Stephen Mack</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/7eed38db1bb44c3d90ce6a817ae8c1f6</id></comment><comment><date>2012-05-09T03:10:07Z</date><body>:D, Stephen!</body><from><type>user</type><id>abouey</id><name>Anne Bouey</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/f349034ca1804b3388ca2804156887a3</id></comment><comment><date>2012-08-21T14:40:59Z</date><body>so sweet))lol</body><from><type>user</type><id>solncee</id><name>solncee</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/9ea20c4da85f4c539e02d6e24ac94f45</id></comment><comment><date>2012-09-02T08:06:01Z</date><body>Awesome Photo :)</body><from><type>user</type><id>adiprcike</id><name>Adi Prcike</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/53cbf054f1b446fe8c473ef103d101ae</id></comment><comment><date>2012-09-03T01:06:48Z</date><body>Which shows up more, this pic or the Asian gentlemen on the beach?</body><via><url>http://friendfeed.com/about/tools</url><name>iPhone</name></via><from><type>user</type><id>zeigen</id><name>Stephen Mack</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/21725041bf364346840c39853efa3829</id></comment><comment><date>2012-09-14T15:39:14Z</date><body>bret neler oluyor dostum? kardeşi kardeşe kırdıracaksın canım ülkemde!!! işinin başına dön lütfen..</body><from><type>user</type><id>aynebilm</id><name>aynebilim</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/4d3788ce9afb420fb95c25ee5ae2d2da</id></comment><comment><date>2012-09-14T16:03:55Z</date><body>testa di cazzo se arcasca tutto te veniamo a cercà e non saremo teneri come i musulmani</body><from><type>user</type><id>bonzo</id><private>True</private><name>Francesco M.</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/63f44ef4d4c7481187d0a199eae11a7c</id></comment><comment><date>2012-09-14T16:17:29Z</date><body>kime dedin onu francesco?</body><from><type>user</type><id>aynebilm</id><name>aynebilim</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/9298bbd497ff49699e6bdf9f23f7809e</id></comment><comment><date>2012-09-14T16:33:20Z</date><body>Bence de Friendfeede sahip çıksın artık...</body><from><type>user</type><id>koleksiyoner</id><name>koleksiyoner</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/890dfb635e734e2f9d0e68fc2ac806da</id></comment><comment><date>2012-09-14T17:47:38Z</date><body>Welcome, Ben!</body><from><type>user</type><id>kfury</id><name>Kevin Fox</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/ce9ad2c73c784595929fe89601aab957</id></comment><comment><date>2012-09-14T17:54:48Z</date><body><a href="http://friendfeed.com/search?q=%23timewarp">#timewarp</a></body><from><type>user</type><id>worldofhiglet</id><private>True</private><name>WoH: Fairy Surreal</name></from><id>e/c970e27954f349869b58d30a2b75631a/c/29a9cf0c27cd42628fe5192c349c4944</id></comment><to><type>user</type><name>Bret's feed</name><id>bret</id></to><to><type>group</type><id>friendfeed-news</id><name>FriendFeed News</name></to><like><date>2012-09-27T18:45:20Z</date><from><type>user</type><id>gerantamala</id><name>Tamala Geran</name></from></like><like><date>2012-09-17T05:12:36Z</date><from><type>user</type><id>thelarimarshop</id><name>thelarimarshop</name></from></like><like><date>2012-09-14T17:59:05Z</date><from><type>user</type><id>jobbler</id><private>True</private><name>Joe Silence</name></from></like><like><date>2012-09-14T16:07:47Z</date><from><type>user</type><id>kkapp</id><name>Alex Kapranoff</name></from></like><like><date>2012-09-14T15:39:22Z</date><from><type>user</type><id>aynebilm</id><name>aynebilim</name></from></like><like><date>2012-09-03T09:46:26Z</date><from><type>user</type><id>nganguemvictor</id><private>True</private><name>nganguem victor</name></from></like><like><date>2012-08-11T14:14:57Z</date><from><type>user</type><id>goroprask</id><name>Goro Prask</name></from></like><like><date>2012-06-29T07:02:56Z</date><from><type>user</type><id>ageuferraz</id><name>Ageu Ferraz</name></from></like><like><date>2012-06-05T08:53:02Z</date><from><type>user</type><id>hewoilsneed</id><name>hewoilsneed</name></from></like><like><date>2012-06-04T06:39:34Z</date><from><type>user</type><id>florrygrip</id><name>florrygrip</name></from></like><like><date>2012-05-24T00:30:59Z</date><from><type>user</type><id>hcivelek</id><name>HasanCivelek</name></from></like><like><date>2012-05-07T17:42:47Z</date><from><type>user</type><id>worldofhiglet</id><private>True</private><name>WoH: Fairy Surreal</name></from></like><like><date>2012-05-07T17:38:23Z</date><from><type>user</type><id>jeffdoug</id><private>True</private><name>Jeff (Team マクダジ )</name></from></like><like><date>2012-05-02T11:57:09Z</date><from><type>user</type><id>angelramon</id><name>Angel</name></from></like><like><date>2012-04-30T08:21:22Z</date><from><type>user</type><id>sogoo</id><name>/sg</name></from></like><like><date>2012-04-24T06:17:16Z</date><from><type>user</type><id>alidafeian</id><private>True</private><name>علی دافعیان</name></from></like><like><date>2012-04-24T06:11:00Z</date><from><type>user</type><id>amitkumar47</id><name>amit Kumar</name></from></like><like><date>2012-04-20T21:45:37Z</date><from><type>user</type><id>polymath22</id><private>True</private><name>polymath22</name></from></like><like><date>2012-04-14T19:49:34Z</date><from><type>user</type><id>cy6erbr4in</id><name>Cy6erBr4in</name></from></like><like><date>2012-04-02T10:37:30Z</date><from><type>user</type><id>lisalenea</id><private>True</private><name>Lisa L. Seifert | FHG™</name></from></like><like><date>2012-03-24T10:32:02Z</date><from><type>user</type><id>aidr86</id><private>True</private><name>aid@</name></from></like><like><date>2012-02-20T06:40:47Z</date><from><type>user</type><id>mitchnielsen</id><name>Mitch Nielsen</name></from></like><like><date>2012-02-14T16:09:31Z</date><from><type>user</type><id>katiao</id><name>инопланетянин со стажем</name></from></like><like><date>2012-02-14T14:07:33Z</date><from><type>user</type><id>adamspring</id><name>Adam Spring</name></from></like><like><date>2012-01-31T00:46:09Z</date><from><type>user</type><id>kmohr25</id><name>Kevin Mohr</name></from></like><like><date>2012-01-30T23:32:13Z</date><from><type>user</type><id>jimminy</id><private>True</private><name>Jimminy, CoG of FF</name></from></like><like><date>2009-12-25T20:16:40Z</date><from><type>user</type><id>bebekvegebelik</id><name>"Serhat Ozan"</name></from></like><like><date>2009-08-11T12:11:30Z</date><from><type>user</type><id>iphigenie</id><name>Iphigenie</name></from></like><like><date>2009-08-11T06:53:06Z</date><from><type>user</type><id>mortonfox</id><name>Morton Fox</name></from></like><like><date>2009-08-11T05:28:21Z</date><from><type>user</type><id>yogamama</id><name>amelia arapoff</name></from></like><like><date>2009-08-10T22:27:13Z</date><from><type>user</type><id>vmlemon</id><name>Tyson Key</name></from></like><like><date>2009-08-10T22:15:39Z</date><from><type>user</type><id>kierancrotty</id><name>Kieran Crotty</name></from></like><like><date>2009-08-10T21:31:59Z</date><from><type>user</type><id>angusb</id><name>Angus Burton</name></from></like><like><date>2009-08-10T21:20:26Z</date><from><type>user</type><id>berkeleyisbetter</id><name>Kelly</name></from></like><like><date>2009-08-10T20:14:47Z</date><from><type>user</type><id>svartling</id><name>Svartling</name></from></like><like><date>2009-08-01T09:35:59Z</date><from><type>user</type><id>tandriamirado</id><name>Thierry R. Andriamirado</name></from></like><like><date>2009-07-28T20:14:18Z</date><from><type>user</type><id>durukanduru</id><name>Durukan Duru</name></from></like><like><date>2009-07-28T19:45:16Z</date><from><type>user</type><id>silas216</id><name>Steven Perez</name></from></like><like><date>2009-07-28T18:54:10Z</date><from><type>user</type><id>v9y</id><private>True</private><name>Vinay | विनय</name></from></like><like><date>2009-07-28T18:30:17Z</date><from><type>user</type><id>stanjourdan</id><name>stanjourdan</name></from></like><like><date>2009-07-28T18:12:39Z</date><from><type>user</type><id>kamath</id><name>The Fat Oracle</name></from></like><like><date>2009-07-28T18:00:07Z</date><from><type>user</type><id>minusone</id><name>minus-one</name></from></like><like><date>2009-07-28T16:40:19Z</date><from><type>user</type><id>oflaherty</id><name>Paul OFlaherty</name></from></like><like><date>2009-07-28T14:10:49Z</date><from><type>user</type><id>dpritchett</id><private>True</private><name>Daniel J. Pritchett</name></from></like><like><date>2009-07-28T14:00:48Z</date><from><type>user</type><id>silpol</id><name>A. T.</name></from></like><like><date>2009-07-28T13:51:27Z</date><from><type>user</type><id>ajkohn</id><name>AJ Kohn</name></from></like><like><date>2009-07-28T13:44:54Z</date><from><type>user</type><id>dannyrowley</id><private>True</private><name>Daniel Rowley</name></from></like><like><date>2009-07-28T13:40:01Z</date><from><type>user</type><id>ajbatac</id><name>AJ Batac</name></from></like><like><date>2009-07-28T12:33:25Z</date><from><type>user</type><id>stevefarnworth</id><name>Steve Farnworth</name></from></like><like><date>2009-07-28T12:23:08Z</date><from><type>user</type><id>bjtitus</id><name>Brandon Titus</name></from></like><like><date>2009-07-28T12:09:31Z</date><from><type>user</type><id>nzbuu</id><name>James Myatt</name></from></like><like><date>2009-07-28T11:11:08Z</date><from><type>user</type><id>lookon</id><name>kang</name></from></like><like><date>2009-07-28T11:08:50Z</date><from><type>user</type><id>lutao</id><name>Lu Tao</name></from></like><like><date>2009-07-28T11:07:33Z</date><from><type>user</type><id>pellesjoqvist</id><name>Pelle Sjoqvist</name></from></like><like><date>2009-07-28T10:27:09Z</date><from><type>user</type><id>pastas9</id><private>True</private><name>pastas9</name></from></like><like><date>2009-07-28T10:19:33Z</date><from><type>user</type><id>amberspence</id><private>True</private><name>The Amber</name></from></like><like><date>2009-07-28T10:18:31Z</date><from><type>user</type><id>ourielohayon</id><name>Ouriel Ohayon</name></from></like><like><date>2009-07-28T10:12:49Z</date><from><type>user</type><id>dobata</id><name>Dobromir Hadzhiev</name></from></like><like><date>2009-07-28T09:40:43Z</date><from><type>user</type><id>zijperspace</id><name>Ton Zijp</name></from></like><like><date>2009-07-28T08:50:42Z</date><from><type>user</type><id>simonwicks</id><name>Simon Wicks</name></from></like><like><date>2009-07-28T07:12:26Z</date><from><type>user</type><id>dffrnt</id><name>vijay</name></from></like><like><date>2009-07-28T07:00:56Z</date><from><type>user</type><id>bfoster</id><name>Bonnie Foster</name></from></like><like><date>2009-07-28T06:54:08Z</date><from><type>user</type><id>jrivero</id><name>Jordi Rivero</name></from></like><like><date>2009-07-28T06:51:55Z</date><from><type>user</type><id>postoditacco</id><private>True</private><name>Roberto</name></from></like><like><date>2009-07-28T06:51:24Z</date><from><type>user</type><id>niron</id><name>Nir Ben Yona</name></from></like><like><date>2009-07-28T06:44:26Z</date><from><type>user</type><id>joshhaley</id><private>True</private><name>Josh Haley</name></from></like><like><date>2009-07-28T05:54:52Z</date><from><type>user</type><id>bdarnell</id><name>Ben Darnell</name></from></like><like><date>2009-07-28T05:02:43Z</date><from><type>user</type><id>mirthnadir</id><name>Amani</name></from></like><like><date>2009-07-28T05:02:11Z</date><from><type>user</type><id>kof2002</id><name>HealingBrush</name></from></like><like><date>2009-07-28T04:59:02Z</date><from><type>user</type><id>susanbeebe</id><name>Susan Beebe</name></from></like><like><date>2009-07-28T04:57:19Z</date><from><type>user</type><id>izuzak</id><name>Ivan Zuzak</name></from></like><like><date>2009-07-28T04:54:41Z</date><from><type>user</type><id>krynsky</id><name>Mark Krynsky</name></from></like><like><date>2009-07-28T04:23:31Z</date><from><type>user</type><id>clare</id><name>Clare Dibble</name></from></like><like><date>2009-07-28T04:12:16Z</date><from><type>user</type><id>ruchira</id><name>Ruchira S. Datta</name></from></like><like><date>2009-07-28T04:06:16Z</date><from><type>user</type><id>malaparte</id><name>Andrei M. Marinescu</name></from></like><like><date>2009-07-28T03:56:13Z</date><from><type>user</type><id>yogar</id><name>K.D.</name></from></like><like><date>2009-07-28T03:42:31Z</date><from><type>user</type><id>1geeky</id><private>True</private><name>I /-\li</name></from></like><like><date>2009-07-28T03:41:02Z</date><from><type>user</type><id>derek</id><name>Derek Collison</name></from></like><like><date>2009-07-28T03:40:11Z</date><from><type>user</type><id>majento</id><name>Majento</name></from></like><like><date>2009-07-28T03:40:08Z</date><from><type>user</type><id>eldiablo</id><name>Pete D</name></from></like><like><date>2009-07-28T03:37:44Z</date><from><type>user</type><id>bhc3</id><name>Hutch Carpenter</name></from></like><like><date>2009-07-28T03:33:46Z</date><from><type>user</type><id>monasfeed</id><name>Mona Nomura</name></from></like><like><date>2009-07-28T03:30:49Z</date><from><type>user</type><id>timhoeck</id><name>Tim Hoeck</name></from></like><like><date>2009-07-28T03:28:26Z</date><from><type>user</type><id>seanpercival</id><private>True</private><name>sean percival</name></from></like><like><date>2009-07-28T03:18:41Z</date><from><type>user</type><id>mehmetakif</id><name>Mehmet ALP</name></from></like><like><date>2009-07-28T03:15:31Z</date><from><type>user</type><id>changeforge</id><name>Ken Stewart | ChangeForge</name></from></like><like><date>2009-07-28T03:13:56Z</date><from><type>user</type><id>karen</id><name>Karen Padham Taylor</name></from></like><like><date>2009-07-28T02:47:11Z</date><from><type>user</type><id>ericflo</id><name>Eric Florenzano</name></from></like><like><date>2009-07-28T02:44:25Z</date><from><type>user</type><id>imabonehead</id><name>imabonehead</name></from></like><like><date>2009-07-28T02:41:22Z</date><from><type>user</type><id>rodfather</id><private>True</private><name>Rodfather</name></from></like><like><date>2009-07-28T01:51:24Z</date><from><type>user</type><id>lizunlong</id><name>Lizunlong</name></from></like><like><date>2009-07-28T01:38:39Z</date><from><type>user</type><id>pattonroberta</id><private>True</private><name>RAPatton</name></from></like><like><date>2009-07-28T01:09:26Z</date><from><type>user</type><id>nimaa</id><private>True</private><name>Nimaa</name></from></like><like><date>2009-07-28T01:02:49Z</date><from><type>user</type><id>looppacosmos</id><name>Johni Fisher</name></from></like><like><date>2009-07-28T00:56:42Z</date><from><type>user</type><id>stong</id><name>Simon</name></from></like><like><date>2009-07-28T00:42:18Z</date><from><type>user</type><id>banane</id><name>anna sauce</name></from></like><like><date>2009-07-28T00:42:11Z</date><from><type>user</type><id>parislemon</id><name>MG Siegler</name></from></like><like><date>2009-07-28T00:32:40Z</date><from><type>user</type><id>bettydarnell</id><private>True</private><name>Betty Darnell</name></from></like><like><date>2009-07-28T00:22:50Z</date><from><type>user</type><id>jworthington</id><name>Johnny</name></from></like><like><date>2009-07-28T00:19:19Z</date><from><type>user</type><id>leblondb</id><name>BEX</name></from></like><like><date>2009-07-28T00:18:17Z</date><from><type>user</type><id>dalziel</id><name>Glenn Slaven</name></from></like><like><date>2009-07-28T00:15:00Z</date><from><type>user</type><id>phoenix</id><name>Rachel Lea Fox</name></from></like><like><date>2009-07-28T00:10:05Z</date><from><type>user</type><id>romanzolotarev</id><name>romanzolotarev</name></from></like><like><date>2009-07-28T00:04:42Z</date><from><type>user</type><id>eskimo</id><name>April Buchheit</name></from></like><like><date>2009-07-28T00:04:15Z</date><from><type>user</type><id>teb</id><name>tunahan</name></from></like><like><date>2009-07-27T23:59:04Z</date><from><type>user</type><id>ryanmassie</id><name>Ryan Massie</name></from></like><like><date>2009-07-27T23:58:52Z</date><from><type>user</type><id>thejbf</id><private>True</private><name>Burcu Dogan</name></from></like><like><date>2009-07-27T23:58:24Z</date><from><type>user</type><id>mihai</id><name>Mihai Parparita</name></from></like><like><date>2009-07-27T23:56:55Z</date><from><type>user</type><id>travispuk</id><name>travispuk</name></from></like><like><date>2009-07-27T23:55:08Z</date><from><type>user</type><id>mokargas</id><private>True</private><name>Mo Kargas</name></from></like><like><date>2009-07-27T23:50:45Z</date><from><type>user</type><id>koltregaskes</id><name>Kol Tregaskes</name></from></like><like><date>2009-07-27T23:50:04Z</date><from><type>user</type><id>itafroma</id><name>Mark Trapp</name></from></like><like><date>2009-07-27T23:43:39Z</date><from><type>user</type><id>vadim</id><name>Vadim Spivak</name></from></like><like><date>2009-07-27T23:21:04Z</date><from><type>user</type><id>gotti</id><name>GOTTi</name></from></like><like><date>2009-07-27T23:16:10Z</date><from><type>user</type><id>lanjackal</id><name>LANjackal</name></from></like><like><date>2009-07-27T23:14:24Z</date><from><type>user</type><id>louisgray</id><name>Louis Gray</name></from></like><like><date>2009-07-27T23:12:43Z</date><from><type>user</type><id>tudor</id><name>Tudor Bosman</name></from></like><like><date>2009-07-27T23:09:38Z</date><from><type>user</type><id>hberberoglu</id><name>Hüseyin Berberoğlu</name></from></like><like><date>2009-07-27T23:07:55Z</date><from><type>user</type><id>casey</id><name>Casey Muller</name></from></like><like><date>2009-07-27T23:03:21Z</date><from><type>user</type><id>scobleizer</id><name>Robert Scoble</name></from></like><like><date>2009-07-27T23:02:17Z</date><from><type>user</type><id>colladude</id><name>Kishore Balakrishnan</name></from></like><like><date>2009-07-27T23:02:15Z</date><from><type>user</type><id>bgolub</id><name>Benjamin Golub</name></from></like><like><date>2009-07-27T22:58:04Z</date><from><type>user</type><id>ginger</id><name>Ginger Makela Riker</name></from></like><like><date>2009-07-27T22:54:45Z</date><from><type>user</type><id>erensoydas</id><name>Eren Soydaş</name></from></like><like><date>2009-07-27T22:54:31Z</date><from><type>user</type><id>atul</id><name>Atul Arora</name></from></like><like><date>2009-07-27T22:53:02Z</date><from><type>user</type><id>thehenry</id><name>TheHenry</name></from></like><like><date>2009-07-27T22:52:40Z</date><from><type>user</type><id>hdiwan</id><name>Prolific Programmer</name></from></like><like><date>2009-07-27T22:52:40Z</date><from><type>user</type><id>paul</id><name>Paul Buchheit</name></from></like><like><date>2009-07-27T22:52:37Z</date><from><type>user</type><id>jeffisageek</id><name>(jeff)isageek</name></from></like><like><date>2009-07-27T22:52:11Z</date><from><type>user</type><id>dhsiao</id><name>Dan Hsiao</name></from></like><like><date>2009-07-27T22:52:11Z</date><from><type>user</type><id>kfury</id><name>Kevin Fox</name></from></like><like><date>2009-07-27T22:52:05Z</date><from><type>user</type><id>ross</id><name>Ross Miller</name></from></like><date>2009-07-27T22:52:01Z</date><id>e/c970e27954f349869b58d30a2b75631a</id></entry></feed>
|