vanity-source 0.9 → 0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 2010-08-26 v0.10 Tags and better messages
2
+
3
+ Activities can now include tags.
4
+
5
+ Improvement all around to all the HTML messages.
6
+
1
7
  2010-08-25 v0.9 Better Github commit message
2
8
 
3
9
  2010-08-24 v0.8 Minor API change
data/lib/vanity/source.rb CHANGED
@@ -69,6 +69,24 @@ module Vanity
69
69
  # be positive or negative. This is a hash where the keys are column ids (or
70
70
  # indexes), the values are integers or floats.
71
71
  # * timestamp -- The Time (if missing, uses the current system time).
72
+ # * activity -- Activity to show in the stream. See below.
73
+ #
74
+ # Activity can specify the following attributes:
75
+ # * uid -- Unique identifier (within the scope of this source). For example,
76
+ # if activity is a release, this could be the version number.
77
+ # * html -- HTML contents of the activity.
78
+ # * text -- Text contents of the activity (can be used instead of html).
79
+ # * url -- URL for original resource (e.g. blog post, tweet).
80
+ # * tags -- Any number of tags for filtering activities like this (e.g.
81
+ # twitter, mention). Tags are lowercased and can contain alphanumeric,
82
+ # dashes and underscore.
83
+ # * person -- Person who performed this activity. A hash with the (all
84
+ # optional) values :name, :email, :url and :photo.
85
+ # * timestamp -- Timestamp activity occurred.
86
+ #
87
+ # HTML can contain links (HTTP/S and email), images, bold, italics,
88
+ # paragraphs, block quotes, lists, tables, pre-formatted text, video and a few
89
+ # other elements. Scripts, objects, styles are obviously not allowed.
72
90
  #
73
91
  # Occasionally, the #meta method is called. This method is used to display
74
92
  # meta-data from the most recent state (i.e. last update). It returns an array
@@ -32,7 +32,12 @@ module Vanity
32
32
  new_ones = tweets.take_while { |tweet| tweet["tweet_id"] != last_tweet_id }.reverse
33
33
  new_ones.each do |tweet|
34
34
  handle, id = tweet["tweet_from_user"], tweet["tweet_id"]
35
- block.call :activity=>{ :uid=>id, :html=>tweet["tweet_text"], :url=>"http://twitter.com/#{handle}/#{id}",
35
+ url = "http://twitter.com/#{handle}/#{id}"
36
+ html = <<-HTML
37
+ <a href="#{url}">tweeted</a>:
38
+ <blockquote>#{tweet["tweet_text"]}</blockquote>
39
+ HTML
40
+ block.call :activity=>{ :uid=>id, :url=>url, :html=>html, :tags=>%w{twitter mention},
36
41
  :timestamp=>Time.parse(tweet["tweet_created_at"]).utc,
37
42
  :person=>{ :name=>handle, :url=>"http://twitter.com/#{handle}", :photo=>tweet["tweet_profile_image_url"] } }
38
43
  end
@@ -54,11 +54,11 @@ module Vanity
54
54
  new_ones = commits.take_while { |commit| commit["id"] != last_seen_id }
55
55
  new_ones.reverse.each do |commit|
56
56
  committer = commit["committer"]
57
- message = <<-HTML
58
- <p>committed to <code>#{h context["repo"]}</code> in branch <code>#{h context["branch"]}</code>:</p>
59
- <pre>#{h commit["message"]}</pre>
57
+ html = <<-HTML
58
+ pushed to #{h context["branch"]} at <a href="http://github.com/#{context["repo"]}">#{h context["repo"]}</a>:
59
+ <blockquote><a href="#{commit["url"]}">#{commit["id"][0,7]}</a> #{h commit["message"]}</blockquote>
60
60
  HTML
61
- block.call :activity=>{ :uid=>commit["id"], :html=>message, :url=>commit["url"],
61
+ block.call :activity=>{ :uid=>commit["id"], :html=>html, :url=>commit["url"], :tags=>"push",
62
62
  :timestamp=>Time.parse(commit["committed_date"]).utc,
63
63
  :person=>{ :name=>committer["name"], :url=>"http://github.com/#{committer["name"]}",
64
64
  :email=>committer["email"] } }
@@ -37,9 +37,13 @@ module Vanity
37
37
  if open_ids = context["open-ids"]
38
38
  open.reject { |issue| open_ids.include?(issue["number"]) }.reverse.each do |issue|
39
39
  sha = Digest::SHA1.hexdigest([context["repo"], "open", issue["number"], issue["updated_at"]].join(":"))
40
- block.call :activity=>{ :uid=>sha, :text=>"New issue opened: #{issue["title"]}",
41
- :url=>"http://github.com/#{context["repo"]}/issues#issue/#{issue["number"]}",
42
- :timestamp=>Time.parse(issue["created_at"]).utc }
40
+ url = "http://github.com/#{context["repo"]}/issues#issue/#{issue["number"]}"
41
+ html = <<-HTML
42
+ opened <a href="#{url}">issue #{issue["number"]}</a> on #{context["repo"]}:
43
+ <blockquote>#{h issue["title"]}</blockquote>
44
+ HTML
45
+ block.call :activity=>{ :uid=>sha, :url=>url, :html=>html, :tags=>%w{issue opened},
46
+ :timestamp=>Time.parse(issue["created_at"]).utc }
43
47
  end
44
48
  end
45
49
  context["open-ids"] = open.map { |issue| issue["number"] }
@@ -54,9 +58,13 @@ module Vanity
54
58
  if closed_ids = context["closed-ids"]
55
59
  closed.reject { |issue| closed_ids.include?(issue["number"]) }.reverse.each do |issue|
56
60
  sha = Digest::SHA1.hexdigest([context["repo"], "closed", issue["number"], issue["updated_at"]].join(":"))
57
- block.call :activity=>{ :uid=>sha, :text=>"Issue closed: #{issue["title"]}",
58
- :url=>"http://github.com/#{context["repo"]}/issues#issue/#{issue["number"]}",
59
- :timestamp=>Time.parse(issue["closed_at"]).utc }
61
+ url = "http://github.com/#{context["repo"]}/issues#issue/#{issue["number"]}"
62
+ html = <<-HTML
63
+ closed <a href="#{url}">issue #{issue["number"]}</a> on #{context["repo"]}:
64
+ <blockquote>#{h issue["title"]}</blockquote>
65
+ HTML
66
+ block.call :activity=>{ :uid=>sha, :url=>url, :html=>html, :tags=>%w{issue closed},
67
+ :timestamp=>Time.parse(issue["closed_at"]).utc }
60
68
  end
61
69
  end
62
70
  context["closed-ids"] = closed.map { |issue| issue["number"] }
@@ -33,8 +33,9 @@ module Vanity
33
33
  if context["version"]
34
34
  current, latest = Gem::Version.new(context["version"]), Gem::Version.new(json["version"])
35
35
  if latest > current
36
+ html = "released <a href=\"http://rubygems.org/gems/#{gem_name}/versions/#{latest}\">#{gem_name} version #{latest}</a>."
36
37
  yield :activity=>{ :uid=>"#{gem_name}-#{latest}", :url=>"http://rubygems.org/gems/#{gem_name}",
37
- :html=>"Released <a href=\"http://rubygems.org/gems/#{gem_name}/versions/#{latest}\">#{gem_name} version #{latest}</a>" }
38
+ :html=>html, :tags=>%w{release} }
38
39
  end
39
40
  end
40
41
  context["version"] = json["version"]
@@ -90,7 +90,10 @@ test Vanity::Source::Backtweets do
90
90
  end
91
91
 
92
92
  should "capture tweet text" do
93
- assert_equal "Super awesome <a href=\"http://vanity.labnotes.org/\">http://j.mp/aOrUnsz</a>", activity.html
93
+ assert_equal <<-HTML, activity.html
94
+ <a href="http://twitter.com/assaf/20959239300">tweeted</a>:
95
+ <blockquote>Super awesome <a href="http://vanity.labnotes.org/">http://j.mp/aOrUnsz</a></blockquote>
96
+ HTML
94
97
  end
95
98
 
96
99
  should "capture tweet URL" do
@@ -113,6 +116,10 @@ test Vanity::Source::Backtweets do
113
116
  assert_equal "http://twitter.com/account/profile_image/assaf", activity.person.photo
114
117
  end
115
118
 
119
+ should "tag as tweeter and mention" do
120
+ assert_contains activity.tags, "twitter"
121
+ assert_contains activity.tags, "mention"
122
+ end
116
123
  end
117
124
 
118
125
  end
@@ -129,7 +129,15 @@ test Vanity::Source::GithubIssues do
129
129
  end
130
130
 
131
131
  should "capture issue title" do
132
- assert_equal "New issue opened: Option to use Google Analytics for A/B testing", @open.text
132
+ assert_equal <<-HTML, @open.html
133
+ opened <a href="http://github.com/assaf/vanity/issues#issue/22">issue 22</a> on assaf/vanity:
134
+ <blockquote>Option to use Google Analytics for A/B testing</blockquote>
135
+ HTML
136
+ end
137
+
138
+ should "tag as issue and open" do
139
+ assert_contains @open.tags, "issue"
140
+ assert_contains @open.tags, "opened"
133
141
  end
134
142
  end
135
143
 
@@ -151,7 +159,15 @@ test Vanity::Source::GithubIssues do
151
159
  end
152
160
 
153
161
  should "capture issue title" do
154
- assert_equal "Issue closed: Passwords not supported for the Redis config", @closed.text
162
+ assert_equal <<-HTML, @closed.html
163
+ closed <a href="http://github.com/assaf/vanity/issues#issue/19">issue 19</a> on assaf/vanity:
164
+ <blockquote>Passwords not supported for the Redis config</blockquote>
165
+ HTML
166
+ end
167
+
168
+ should "tag as issue and closed" do
169
+ assert_contains @closed.tags, "issue"
170
+ assert_contains @closed.tags, "closed"
155
171
  end
156
172
  end
157
173
 
data/test/github_test.rb CHANGED
@@ -139,10 +139,10 @@ test Vanity::Source::Github do
139
139
  assert_equal Time.parse("2010-08-06T00:22:01-07:00 UTC"), activity.timestamp
140
140
  end
141
141
 
142
- should "capture commit message" do
142
+ should "capture commit message and SHA1" do
143
143
  assert_equal <<-HTML, activity.html
144
- <p>committed to <code>assaf/vanity</code> in branch <code>master</code>:</p>
145
- <pre>Third &amp; last</pre>
144
+ pushed to master at <a href="http://github.com/assaf/vanity">assaf/vanity</a>:
145
+ <blockquote><a href="http://github.com/assaf/vanity/commit/dd154a9fdd2ac534b62b55b8acac2fd092d65439">dd154a9</a> Third &amp; last</blockquote>
146
146
  HTML
147
147
  end
148
148
 
@@ -154,6 +154,9 @@ test Vanity::Source::Github do
154
154
  assert_equal "assaf@labnotes.org", activity.person.email
155
155
  end
156
156
 
157
+ should "tag as push" do
158
+ assert_contains activity.tags, "push"
159
+ end
157
160
  end
158
161
 
159
162
  end
@@ -92,13 +92,19 @@ test Vanity::Source::RubyGems do
92
92
  assert_equal "vanity-2.1.0", activity.uid
93
93
  end
94
94
 
95
- should "capture have body denoting release" do
96
- assert_equal "Released <a href=\"http://rubygems.org/gems/vanity/versions/2.1.0\">vanity version 2.1.0</a>", activity.html
95
+ should "report release number" do
96
+ assert_equal <<-HTML.strip, activity.html
97
+ released <a href=\"http://rubygems.org/gems/vanity/versions/2.1.0\">vanity version 2.1.0</a>.
98
+ HTML
97
99
  end
98
100
 
99
101
  should "link to project page" do
100
102
  assert_equal "http://rubygems.org/gems/vanity", activity.url
101
103
  end
104
+
105
+ should "tag as release" do
106
+ assert_contains activity.tags, "release"
107
+ end
102
108
  end
103
109
  end
104
110
  end
data/test/test.log CHANGED
@@ -350,3 +350,153 @@ Backtweets: 200
350
350
  Backtweets: 500
351
351
  RubyGems: 200
352
352
  RubyGems: 500
353
+ Backtweets: 500
354
+ Backtweets: 200
355
+ Backtweets: 200
356
+ Backtweets: 500
357
+ RubyGems: 200
358
+ RubyGems: 500
359
+ Backtweets: 500
360
+ Backtweets: 200
361
+ Backtweets: 200
362
+ Backtweets: 500
363
+ RubyGems: 200
364
+ RubyGems: 500
365
+ Backtweets: 500
366
+ Backtweets: 200
367
+ Backtweets: 200
368
+ Backtweets: 500
369
+ RubyGems: 200
370
+ RubyGems: 500
371
+ Backtweets: 500
372
+ Backtweets: 200
373
+ Backtweets: 200
374
+ Backtweets: 500
375
+ RubyGems: 200
376
+ RubyGems: 500
377
+ Backtweets: 500
378
+ Backtweets: 200
379
+ Backtweets: 200
380
+ Backtweets: 500
381
+ RubyGems: 200
382
+ RubyGems: 500
383
+ Backtweets: 500
384
+ Backtweets: 200
385
+ Backtweets: 200
386
+ Backtweets: 500
387
+ RubyGems: 200
388
+ RubyGems: 500
389
+ Backtweets: 500
390
+ Backtweets: 200
391
+ Backtweets: 200
392
+ Backtweets: 500
393
+ RubyGems: 200
394
+ RubyGems: 500
395
+ Backtweets: 500
396
+ Backtweets: 200
397
+ Backtweets: 200
398
+ Backtweets: 500
399
+ RubyGems: 200
400
+ RubyGems: 500
401
+ Backtweets: 500
402
+ Backtweets: 200
403
+ Backtweets: 200
404
+ Backtweets: 500
405
+ RubyGems: 200
406
+ RubyGems: 500
407
+ Backtweets: 500
408
+ Backtweets: 200
409
+ Backtweets: 200
410
+ Backtweets: 500
411
+ RubyGems: 200
412
+ RubyGems: 500
413
+ Backtweets: 500
414
+ Backtweets: 200
415
+ Backtweets: 200
416
+ Backtweets: 500
417
+ RubyGems: 200
418
+ RubyGems: 500
419
+ Backtweets: 500
420
+ Backtweets: 200
421
+ Backtweets: 200
422
+ Backtweets: 500
423
+ RubyGems: 200
424
+ RubyGems: 500
425
+ Backtweets: 500
426
+ Backtweets: 200
427
+ Backtweets: 200
428
+ Backtweets: 500
429
+ RubyGems: 200
430
+ RubyGems: 500
431
+ Backtweets: 500
432
+ Backtweets: 200
433
+ Backtweets: 200
434
+ Backtweets: 500
435
+ RubyGems: 200
436
+ RubyGems: 500
437
+ Backtweets: 500
438
+ Backtweets: 200
439
+ Backtweets: 200
440
+ Backtweets: 500
441
+ RubyGems: 200
442
+ RubyGems: 500
443
+ Backtweets: 500
444
+ Backtweets: 200
445
+ Backtweets: 200
446
+ Backtweets: 500
447
+ RubyGems: 200
448
+ RubyGems: 500
449
+ Backtweets: 500
450
+ Backtweets: 200
451
+ Backtweets: 200
452
+ Backtweets: 500
453
+ RubyGems: 200
454
+ RubyGems: 500
455
+ Backtweets: 500
456
+ Backtweets: 200
457
+ Backtweets: 200
458
+ Backtweets: 500
459
+ RubyGems: 200
460
+ RubyGems: 500
461
+ Backtweets: 500
462
+ Backtweets: 200
463
+ Backtweets: 200
464
+ Backtweets: 500
465
+ RubyGems: 200
466
+ RubyGems: 500
467
+ Backtweets: 500
468
+ Backtweets: 200
469
+ Backtweets: 200
470
+ Backtweets: 500
471
+ RubyGems: 200
472
+ RubyGems: 500
473
+ Backtweets: 500
474
+ Backtweets: 200
475
+ Backtweets: 200
476
+ Backtweets: 500
477
+ RubyGems: 200
478
+ RubyGems: 500
479
+ Backtweets: 500
480
+ Backtweets: 200
481
+ Backtweets: 200
482
+ Backtweets: 500
483
+ RubyGems: 200
484
+ RubyGems: 500
485
+ Backtweets: 500
486
+ Backtweets: 200
487
+ Backtweets: 200
488
+ Backtweets: 500
489
+ RubyGems: 200
490
+ RubyGems: 500
491
+ Backtweets: 500
492
+ Backtweets: 200
493
+ Backtweets: 200
494
+ Backtweets: 500
495
+ RubyGems: 200
496
+ RubyGems: 500
497
+ Backtweets: 500
498
+ Backtweets: 200
499
+ Backtweets: 200
500
+ Backtweets: 500
501
+ RubyGems: 200
502
+ RubyGems: 500
data/test/test_helper.rb CHANGED
@@ -44,7 +44,7 @@ module Vanity
44
44
  module Source
45
45
  module TestHelpers
46
46
  # Represents an activity.
47
- Activity = Struct.new(:uid, :html, :text, :url, :timestamp, :person)
47
+ Activity = Struct.new(:uid, :html, :text, :url, :timestamp, :tags, :person)
48
48
 
49
49
  # Represents person associated with activity.
50
50
  Person = Struct.new(:name, :email, :url, :photo)
@@ -117,7 +117,7 @@ module Vanity
117
117
  totals[name] += value
118
118
  end
119
119
  elsif args[:activity]
120
- values = args[:activity].values_at(:uid, :html, :text, :url, :timestamp)
120
+ values = args[:activity].values_at(:uid, :html, :text, :url, :timestamp, :tags)
121
121
  if person = args[:activity][:person]
122
122
  values << Person.new(*person.values_at(:name, :email, :url, :photo))
123
123
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "vanity-source"
3
- spec.version = "0.9"
3
+ spec.version = "0.10"
4
4
  spec.author = "Assaf Arkin"
5
5
  spec.email = "assaf@labnotes.org"
6
6
  spec.homepage = "http://vanitydash.com"
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vanity-source
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 9
9
- version: "0.9"
8
+ - 10
9
+ version: "0.10"
10
10
  platform: ruby
11
11
  authors:
12
12
  - Assaf Arkin
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-25 00:00:00 -07:00
17
+ date: 2010-08-26 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -105,7 +105,7 @@ licenses: []
105
105
  post_install_message:
106
106
  rdoc_options:
107
107
  - --title
108
- - Vanity::Source 0.9
108
+ - Vanity::Source 0.10
109
109
  - --main
110
110
  - README.rdoc
111
111
  - --webcvs