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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7410e628979a4cbc25c8a0aa882935065c5364f2
4
- data.tar.gz: 6f9b381d1c3c7d7d108ee5b6b5e0ba604d2f4962
3
+ metadata.gz: dad562683f3ef04d5be651c704d813ae64c34aae
4
+ data.tar.gz: 17a8e5702e650f9e613fbcb964bc5205bbb11f0e
5
5
  SHA512:
6
- metadata.gz: d270a15ecf5b5409a0e706bc800dbd08ff8919f8f8032e4b38d96d3a92ea0009475b23fcc2c68f2ba529b2aae3cd9c94503247f72f07269e756d1511993a8244
7
- data.tar.gz: 1c981dc013b58bdf3dd221541435c72caa2644f758bff3b83f8e82b2303a2f3625cab4ec14f12b90509e2abecb960266bbca0fd572e0a2e435c1a0156bb466e8
6
+ metadata.gz: 177f717e43f0448a05f5e923288e915f7e65e029422bbd12a16b7293b38e723a5223c80ad970d818fc1c043ca701582781b85617db3f0f6f3b5043a0c5f4925a
7
+ data.tar.gz: be994ffdfa8e0976b04730cc84858ab6542b50bc50369899c09f48d14c6f96ce601b8c5b139e24895006473231a3fa38653a216372fb0d5d6c262a9cbed72eaf
data/Gemfile CHANGED
@@ -3,6 +3,7 @@ source 'https://rubygems.org'
3
3
  gem 'tdiary', '~> 4.1.0'
4
4
 
5
5
  gem 'rake'
6
+ gem 'ruby-pushbullet'
6
7
 
7
8
  group :test do
8
9
  gem 'rspec'
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
@@ -1,5 +1,5 @@
1
1
  module TDiary
2
2
  class Contrib
3
- VERSION = "4.1.2"
3
+ VERSION = "4.1.3"
4
4
  end
5
5
  end
@@ -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
- query = params[:lat] && params[:lon] ? "#{params[:lat]},#{params[:lon]}" : params[:address]
36
- url = %Q|http://maps.google.com/maps?q=#{CGI::escape(query)}|
37
- return %Q|<a href="#{url}">#{url}</a>|
38
- end
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, :friendfeed
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
- 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
- # friendfeed.com
121
- class FriendFeed < Base
122
- property :name, '//feed/name'
123
- property :description, '//feed/description'
124
- endpoint {|id| "http://friendfeed-api.com/v2/feed/#{id}?format=xml&num=0" }
125
-
126
- def image
127
- "http://friendfeed-api.com/v2/picture/#{id}"
128
- end
129
-
130
- def link
131
- "http://friendfeed.com/#{@id}"
132
- end
133
- end
134
-
135
- # iddy.jp, for backward compatibility
136
- class Iddy < Base
137
- # dummy class
138
- end
139
-
140
- # gravatar.com
141
- class Gravatar < Base
142
- def image
143
- size = @options[:size] ? "?s=#{@options[:size]}" : ""
144
- "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(@id.downcase)}.jpg#{size}"
145
- end
146
- end
147
-
148
- class Hatena < Base
149
- def image
150
- prefix = id[0..1]
151
- "http://www.hatena.ne.jp/users/#{prefix}/#{id}/profile.gif"
152
- end
153
-
154
- def link
155
- "http://www.hatena.ne.jp/#{id}/"
156
- end
157
- end
158
- end
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
- html = ''
165
-
166
- service_class = {
167
- :twitter => Profile::Service::Twitter,
168
- :github => Profile::Service::GitHub,
169
- :friendfeed => Profile::Service::FriendFeed,
170
- :gravatar => Profile::Service::Gravatar,
171
- :hatena => Profile::Service::Hatena,
172
- }[service.to_s.downcase.to_sym] || Profile::Service::Twitter
173
-
174
- # TODO: create cache manager class
175
-
176
- # cache = "#{@cache_path}/profile.yaml"
177
- cache = "#{@cache_path}/profile.pstore"
178
- profile = nil
179
- # db = YAML::Store.new(cache)
180
- db = PStore.new(cache)
181
- db.transaction do
182
- key = service_class.name
183
- db[key] ||= {} # initialize db
184
- updated = db[key][:updated]
185
- if updated && (Time::now < updated + 60 * 60) && db[key][:version] == PROFILE_VERSION
186
- # use cache
187
- profile = db[key][:profile]
188
- else
189
- # get latest date and update cache
190
- begin
191
- profile = service_class.new(id, options)
192
- rescue Timeout::Error, StandardError
193
- return html << %Q{ <div class="profile">no profile</div> }
194
- end
195
- db[key][:updated] = Time::now
196
- db[key][:profile] = profile
197
- db[key][:version] = PROFILE_VERSION
198
- end
199
- end
200
-
201
- html << %Q{ <div class="profile"><a href="#{CGI.escapeHTML profile.link}"> }
202
- html << %Q{ <span class="profile-image"><img src="#{CGI.escapeHTML profile.image}" alt="profile image"></span> } if profile.image
203
- html << %Q{ <span class="profile-name">#{CGI.escapeHTML profile.name}</span> } if profile.name
204
- html << %Q{ <span class="profile-mail">#{CGI.escapeHTML profile.mail}</span> } if profile.mail
205
- html << %Q{ <span class="profile-description">#{CGI.escapeHTML profile.description}</span> } if profile.description
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|<p class="price">[\r\n]?(.*?)[\r\n]?</p>|m).to_a[1].
40
- gsub(/\s/, '')
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://www.gravatar.com/avatar/9375a9529679f1b42b567a640d775e7d.jpg?s=40")
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/url
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
- it "should include image property" do
65
- expect(@profile.image).to eq("http://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802.jpg")
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://www.gravatar.com/avatar/3b3be63a4c2a439b013787725dfce802.jpg?s=40")
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.2
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-03-28 00:00:00.000000000 Z
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.2.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++! - &lt;a rel=&quot;nofollow&quot; href=&quot;http://blog.friendfeed.com/2009/07/ben-darnell-joins-friendfeed-ben.html&quot; title=&quot;http://blog.friendfeed.com/2009/07/ben-darnell-joins-friendfeed-ben.html&quot;&gt;http://blog.friendfeed.com/2009...&lt;/a&gt;</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: &lt;a href=&quot;http://friendfeed.com/bdarnell&quot;&gt;http://friendfeed.com/bdarnell&lt;/a&gt;</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 :) &lt;a href=&quot;http://friendfeed.com/chris/3870e6df/v-excited-about-my-friend-new-job-his&quot; title=&quot;http://friendfeed.com/chris/3870e6df/v-excited-about-my-friend-new-job-his&quot;&gt;http://friendfeed.com/chris...&lt;/a&gt;</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 &amp;quot;/&amp;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 &amp;quot;big company&amp;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>&lt;a href=&quot;http://friendfeed.com/search?q=%23timewarp&quot;&gt;#timewarp&lt;/a&gt;</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>&quot;Serhat Ozan&quot;</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>