tdiary-contrib 4.1.2 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>