vanity-source 0.11 → 0.12

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,11 @@
1
+ 2010-08-30 v0.12 Github data source merges related commits
2
+
3
+ Github data source merges related commits (same committer/time) into single
4
+ activity and shows first line of all commit messages.
5
+
6
+ Changed to coding/testing with Ruby 1.9.2, since this is the target
7
+ environment.
8
+
1
9
  2010-08-30 v0.11 Changes to activity person, AS 3.0 support
2
10
 
3
11
  Activity's person name is now fullname, photo is photo_url and url is no
data/Gemfile CHANGED
@@ -7,6 +7,8 @@ group :development do
7
7
  end
8
8
 
9
9
  group :test do
10
+ gem "awesome_print"
11
+ gem "nokogiri"
10
12
  gem "shoulda"
11
13
  gem "timecop"
12
14
  gem "vcr"
@@ -37,7 +37,7 @@ module Vanity
37
37
  <a href="#{url}">tweeted</a>:
38
38
  <blockquote>#{tweet["tweet_text"]}</blockquote>
39
39
  HTML
40
- person = { :fullname=>handle, :identities=>%{twitter.com:#{handle}}, :photo_url=>tweet["tweet_profile_image_url"] }
40
+ person = { :fullname=>handle, :identities=>%W{twitter.com:#{handle}}, :photo_url=>tweet["tweet_profile_image_url"] }
41
41
  block.call :activity=>{ :uid=>id, :url=>url, :html=>html, :tags=>%w{twitter mention},
42
42
  :timestamp=>Time.parse(tweet["tweet_created_at"]).utc, :person=>person }
43
43
  end
@@ -52,15 +52,24 @@ module Vanity
52
52
  last_seen_id = context["last_commit"]["id"] if context["last_commit"]
53
53
  if last_seen_id
54
54
  new_ones = commits.take_while { |commit| commit["id"] != last_seen_id }
55
- new_ones.reverse.each do |commit|
56
- committer = commit["committer"]
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
- HTML
61
- person = { :fullname=>committer["name"], :identities=>%{github.com:#{committer["name"]}}, :email=>committer["email"] }
62
- block.call :activity=>{ :uid=>commit["id"], :html=>html, :url=>commit["url"], :tags=>"push",
63
- :timestamp=>Time.parse(commit["committed_date"]).utc, :person=>person }
55
+ merged = new_ones.inject([]) do |all, commit|
56
+ last = all.last.last unless all.empty?
57
+ if last && last["committer"]["email"] == commit["committer"]["email"] && last["committed_date"] == commit["committed_date"]
58
+ all.last << commit
59
+ else
60
+ all << [commit]
61
+ end
62
+ all
63
+ end
64
+
65
+ merged.reverse.each do |commits|
66
+ first = commits.first
67
+ committer = first["committer"]
68
+ person = { :fullname=>committer["name"], :identities=>%W{github.com:#{committer["name"]}}, :email=>committer["email"] }
69
+ messages = commits.map { |commit| %{<blockquote><a href="#{commit["url"]}">#{commit["id"][0,7]}</a> #{h commit["message"].strip.split(/[\n\r]/).first[0,50]}</blockquote>} }
70
+ html = %{pushed to #{h context["branch"]} at <a href="http://github.com/#{context["repo"]}">#{h context["repo"]}</a>:\n#{messages.join("\n")}}
71
+ block.call :activity=>{ :uid=>first["id"], :html=>html, :url=>first["url"], :tags=>%w{push},
72
+ :timestamp=>Time.parse(first["committed_date"]).utc, :person=>person }
64
73
  end
65
74
  block.call :inc=>{ :commits=>new_ones.count }
66
75
  else
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + "/setup"
1
+ require_relative "setup"
2
2
 
3
3
  test Vanity::Source::Backtweets do
4
4
  context "setup" do
@@ -102,20 +102,25 @@
102
102
  body: |-
103
103
  { "commits": [
104
104
  { "url": "http://github.com/assaf/vanity/commit/dd154a9fdd2ac534b62b55b8acac2fd092d65439",
105
- "id": "dd154a9fdd2ac534b62b55b8acac2fd092d65439",
105
+ "id": "cc156a9fdd2ac534b62b55b8acac2fd092d65439",
106
106
  "committed_date": "2010-08-06T00:22:01-07:00",
107
- "message": "Third & last",
107
+ "message": "Most recent commit",
108
108
  "committer": { "name": "Assaf Arkin", "login": "assaf", "email": "assaf@labnotes.org" } },
109
109
  { "url": "http://github.com/assaf/vanity/commit/dd154a9fdd2ac534b62b55b8acac2fd092d6543b",
110
- "id": "dd154a9fdd2ac534b62b55b8acac2fd092d6543b",
110
+ "id": "dd156a9fdd2ac534b62b55b8acac2fd092d6543b",
111
111
  "committed_date": "2010-08-06T00:22:01-07:00",
112
- "message": "The second commit",
112
+ "message": "Not most recent commit",
113
113
  "committer": { "name": "Assaf Arkin", "login": "assaf", "email": "assaf@labnotes.org" } },
114
114
  { "url": "http://github.com/assaf/vanity/commit/dd154a9fdd2ac534b62b55b8acac2fd092d6543a",
115
- "id": "dd154a9fdd2ac534b62b55b8acac2fd092d6543a",
116
- "committed_date": "2010-08-06T00:18:01-07:00",
117
- "message": "Gemfile changes necessary to pass test suite.",
118
- "committer": { "name": "Assaf Arkin", "login": "assaf", "email": "assaf@labnotes.org" } }
115
+ "id": "ee156a9fdd2ac534b62b55b8acac2fd092d6543a",
116
+ "committed_date": "2010-08-06T00:22:01-07:00",
117
+ "message": "Different committer",
118
+ "committer": { "name": "Assaf Arkin", "login": "assaf", "email": "not.assaf@labnotes.org" } },
119
+ { "url": "http://github.com/assaf/vanity/commit/dd154a9fdd2ac534b62b55b8acac2fd092d6543a",
120
+ "id": "ff156a9fdd2ac534b62b55b8acac2fd092d6543a",
121
+ "committed_date": "2010-08-06T00:15:01-07:00",
122
+ "message": "Different push",
123
+ "committer": { "name": "Assaf Arkin", "login": "assaf", "email": "not.assaf@labnotes.org" } }
119
124
  ]
120
125
  }
121
126
 
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + "/setup"
1
+ require_relative "setup"
2
2
 
3
3
  test Vanity::Source::GithubIssues do
4
4
  context "setup" do
data/test/github_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + "/setup"
1
+ require_relative "setup"
2
2
 
3
3
  test Vanity::Source::Github do
4
4
  context "setup" do
@@ -122,11 +122,7 @@ test Vanity::Source::Github do
122
122
  end
123
123
 
124
124
  should "capture new number of commits" do
125
- assert_equal 37, totals[:commits]
126
- end
127
-
128
- should "create activity for each commit" do
129
- assert_equal 2, activities.count
125
+ assert_equal 39, totals[:commits]
130
126
  end
131
127
 
132
128
  context "activity" do
@@ -137,18 +133,15 @@ test Vanity::Source::Github do
137
133
  end
138
134
 
139
135
  should "capture commit SHA" do
140
- assert_equal "dd154a9fdd2ac534b62b55b8acac2fd092d65439", subject.uid
136
+ assert_equal "cc156a9fdd2ac534b62b55b8acac2fd092d65439", subject.uid
141
137
  end
142
138
 
143
139
  should "capture timestamp" do
144
140
  assert_equal Time.parse("2010-08-06T00:22:01-07:00 UTC"), subject.timestamp
145
141
  end
146
142
 
147
- should "capture commit message and SHA1" do
148
- assert_equal <<-HTML, subject.html
149
- pushed to master at <a href="http://github.com/assaf/vanity">assaf/vanity</a>:
150
- <blockquote><a href="http://github.com/assaf/vanity/commit/dd154a9fdd2ac534b62b55b8acac2fd092d65439">dd154a9</a> Third &amp; last</blockquote>
151
- HTML
143
+ should "capture push" do
144
+ assert_match %{pushed to master at <a href="http://github.com/assaf/vanity">assaf/vanity</a>:}, subject.html
152
145
  end
153
146
 
154
147
  should "tag as push" do
@@ -156,6 +149,7 @@ pushed to master at <a href="http://github.com/assaf/vanity">assaf/vanity</a>:
156
149
  end
157
150
 
158
151
  should "be valid" do
152
+ subject.validate
159
153
  assert subject.valid?
160
154
  end
161
155
 
@@ -170,6 +164,55 @@ pushed to master at <a href="http://github.com/assaf/vanity">assaf/vanity</a>:
170
164
  assert_equal "assaf@labnotes.org", subject.email
171
165
  end
172
166
  end
167
+
168
+ context "commit message" do
169
+ subject { (Nokogiri::HTML(activity.html)/"blockquote").inner_text.strip }
170
+
171
+ should "start with commit SHA" do
172
+ assert_match /^cc156a9 /, subject
173
+ end
174
+
175
+ should "include first 50 characters of message" do
176
+ with_message "This is a very long message and we're only going to show the first 50 characters of it."
177
+ assert_equal 50, subject[/\s(.*)/, 1].length
178
+ end
179
+
180
+ should "use only first line of message" do
181
+ with_message "This message is made\nof two lines"
182
+ assert_match "This message is made", subject[/\s(.*)/, 1]
183
+ end
184
+
185
+ def with_message(message)
186
+ commits = interactions.select { |i| i.uri =~ /commits\/list/ }
187
+ commit = JSON.parse(commits.first.response.body)["commits"].first
188
+ commit["message"] = message
189
+ stub_request(:get, commits.first.uri).to_return :body=>{ :commits=>[commit] }.to_json
190
+ update_source
191
+ end
192
+ end
193
+
194
+ context "multiple commits" do
195
+ setup do
196
+ interaction = interactions.select { |i| i.uri =~ /commits\/list/ }.last
197
+ stub_request(:get, interaction.uri).to_return :body=>interaction.response.body
198
+ update_source
199
+ end
200
+ subject { (Nokogiri::HTML(activity.html)/"blockquote") }
201
+
202
+ should "show as multiple activities" do
203
+ assert_equal 3, activities.count # 4 commits -> 3 activities
204
+ end
205
+
206
+ should "merge related commits into single activity" do
207
+ assert_equal 2, subject.length # last one has two commits
208
+ end
209
+
210
+ should "merge related commits in order they were listed" do
211
+ first, second = subject.map { |bq| bq.inner_text.strip }
212
+ assert_equal "cc156a9 Most recent commit", first
213
+ assert_equal "dd156a9 Not most recent commit", second
214
+ end
215
+ end
173
216
  end
174
217
 
175
218
  end
data/test/helpers/test.rb CHANGED
@@ -6,7 +6,7 @@
6
6
  # . . .
7
7
  # end
8
8
  def test(klass, &block)
9
- returning Class.new(Test::Unit::TestCase) do |test_case|
9
+ Class.new(Test::Unit::TestCase).tap do |test_case|
10
10
  test_case.class_eval do
11
11
  include WebMock
12
12
  include Vanity::Source::TestHelpers
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + "/setup"
1
+ require_relative "setup"
2
2
 
3
3
  test Vanity::Source::RubyGems do
4
4
  context "setup" do
data/test/setup.rb CHANGED
@@ -2,11 +2,16 @@ require "test/unit"
2
2
  require "shoulda"
3
3
  require "webmock/test_unit"
4
4
  require "vcr"
5
+ require "ap"
6
+ require "logger"
5
7
 
6
- require "test/helpers/test"
7
- require "test/helpers/person"
8
- require "test/helpers/activity"
9
- require "test/helpers/metric"
8
+ require "nokogiri"
9
+ require "active_support/all"
10
+
11
+ require_relative "helpers/test"
12
+ require_relative "helpers/person"
13
+ require_relative "helpers/activity"
14
+ require_relative "helpers/metric"
10
15
 
11
16
 
12
17
  require File.dirname(__FILE__) + "/../lib/vanity/source"
data/test/test.log CHANGED
@@ -612,3 +612,79 @@ Backtweets: 200
612
612
  Backtweets: 500
613
613
  RubyGems: 200
614
614
  RubyGems: 500
615
+ Backtweets: 200
616
+ Backtweets: 500
617
+ Backtweets: 200
618
+ Backtweets: 500
619
+ Backtweets: 200
620
+ Backtweets: 500
621
+ Backtweets: 200
622
+ Backtweets: 500
623
+ Backtweets: 200
624
+ Backtweets: 500
625
+ Backtweets: 200
626
+ Backtweets: 500
627
+ Backtweets: 200
628
+ Backtweets: 500
629
+ Backtweets: 200
630
+ Backtweets: 500
631
+ Backtweets: 500
632
+ Backtweets: 200
633
+ Backtweets: 200
634
+ Backtweets: 500
635
+ RubyGems: 200
636
+ RubyGems: 500
637
+ Backtweets: 500
638
+ Backtweets: 200
639
+ Backtweets: 200
640
+ Backtweets: 500
641
+ RubyGems: 200
642
+ RubyGems: 500
643
+ Backtweets: 500
644
+ Backtweets: 200
645
+ Backtweets: 200
646
+ Backtweets: 500
647
+ RubyGems: 200
648
+ RubyGems: 500
649
+ Backtweets: 500
650
+ Backtweets: 200
651
+ Backtweets: 500
652
+ Backtweets: 200
653
+ Backtweets: 200
654
+ Backtweets: 500
655
+ RubyGems: 200
656
+ RubyGems: 500
657
+ Backtweets: 500
658
+ Backtweets: 200
659
+ Backtweets: 200
660
+ Backtweets: 500
661
+ RubyGems: 200
662
+ RubyGems: 500
663
+ Backtweets: 200
664
+ Backtweets: 500
665
+ Backtweets: 200
666
+ Backtweets: 500
667
+ Backtweets: 200
668
+ Backtweets: 500
669
+ Backtweets: 200
670
+ Backtweets: 500
671
+ Backtweets: 200
672
+ Backtweets: 500
673
+ Backtweets: 200
674
+ Backtweets: 500
675
+ Backtweets: 200
676
+ Backtweets: 500
677
+ Backtweets: 200
678
+ Backtweets: 500
679
+ Backtweets: 500
680
+ Backtweets: 200
681
+ Backtweets: 200
682
+ Backtweets: 500
683
+ RubyGems: 200
684
+ RubyGems: 500
685
+ Backtweets: 500
686
+ Backtweets: 200
687
+ Backtweets: 200
688
+ Backtweets: 500
689
+ RubyGems: 200
690
+ RubyGems: 500
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "vanity-source"
3
- spec.version = "0.11"
3
+ spec.version = "0.12"
4
4
  spec.author = "Assaf Arkin"
5
5
  spec.email = "assaf@labnotes.org"
6
6
  spec.homepage = "http://vanitydash.com"
@@ -17,4 +17,5 @@ Gem::Specification.new do |spec|
17
17
  spec.add_dependency "activesupport"
18
18
  spec.add_dependency "json"
19
19
  spec.add_dependency "rack"
20
+ spec.add_dependency "i18n"
20
21
  end
metadata CHANGED
@@ -1,12 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vanity-source
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 11
9
- version: "0.11"
7
+ - 12
8
+ version: "0.12"
10
9
  platform: ruby
11
10
  authors:
12
11
  - Assaf Arkin
@@ -14,7 +13,7 @@ autorequire:
14
13
  bindir: bin
15
14
  cert_chain: []
16
15
 
17
- date: 2010-08-30 00:00:00 -07:00
16
+ date: 2010-08-31 00:00:00 -07:00
18
17
  default_executable:
19
18
  dependencies:
20
19
  - !ruby/object:Gem::Dependency
@@ -25,7 +24,6 @@ dependencies:
25
24
  requirements:
26
25
  - - ">="
27
26
  - !ruby/object:Gem::Version
28
- hash: 3
29
27
  segments:
30
28
  - 0
31
29
  version: "0"
@@ -39,7 +37,6 @@ dependencies:
39
37
  requirements:
40
38
  - - ">="
41
39
  - !ruby/object:Gem::Version
42
- hash: 3
43
40
  segments:
44
41
  - 0
45
42
  version: "0"
@@ -53,12 +50,24 @@ dependencies:
53
50
  requirements:
54
51
  - - ">="
55
52
  - !ruby/object:Gem::Version
56
- hash: 3
57
53
  segments:
58
54
  - 0
59
55
  version: "0"
60
56
  type: :runtime
61
57
  version_requirements: *id003
58
+ - !ruby/object:Gem::Dependency
59
+ name: i18n
60
+ prerelease: false
61
+ requirement: &id004 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ type: :runtime
70
+ version_requirements: *id004
62
71
  description:
63
72
  email: assaf@labnotes.org
64
73
  executables: []
@@ -106,7 +115,7 @@ licenses: []
106
115
  post_install_message:
107
116
  rdoc_options:
108
117
  - --title
109
- - Vanity::Source 0.11
118
+ - Vanity::Source 0.12
110
119
  - --main
111
120
  - README.rdoc
112
121
  - --webcvs
@@ -118,7 +127,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
127
  requirements:
119
128
  - - ">="
120
129
  - !ruby/object:Gem::Version
121
- hash: 57
122
130
  segments:
123
131
  - 1
124
132
  - 8
@@ -129,7 +137,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
137
  requirements:
130
138
  - - ">="
131
139
  - !ruby/object:Gem::Version
132
- hash: 3
133
140
  segments:
134
141
  - 0
135
142
  version: "0"