pivotal-tracker-client 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/VERSION +1 -1
- data/bin/pivotal-tracker-client +6 -0
- data/bin/pivotal-tracker-client-install +5 -0
- data/bin/pivotal-tracker-client.rb +14 -0
- data/lib/pivotal-tracker-client.rb +17 -13
- data/spec/data/latests_activities.xml +18 -2
- data/spec/pivotal-tracker-client_spec.rb +22 -19
- data/spec/spec_helper.rb +0 -1
- metadata +10 -5
- data/spec/data/newer_than_version.xml +0 -37
data/.gitignore
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -1,37 +1,41 @@
|
|
1
|
-
require '
|
1
|
+
require 'rest_client'
|
2
2
|
require 'crack/xml'
|
3
3
|
require 'rufus/scheduler'
|
4
4
|
|
5
5
|
class PivotalTrackerClient
|
6
|
-
include HTTParty
|
7
6
|
include Crack
|
8
7
|
|
9
|
-
attr_reader :
|
8
|
+
attr_reader :id
|
10
9
|
|
11
10
|
def self.init(token)
|
12
11
|
new token
|
13
12
|
end
|
14
13
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
def update
|
15
|
+
activities = fetch_activities
|
16
|
+
activities.reverse.each do |activity|
|
17
|
+
if activity['id'] > @id.to_i
|
18
|
+
system "growlnotify -t 'Pivotal Tracker' -m '#{activity['description']}'"
|
19
|
+
end
|
19
20
|
end
|
21
|
+
update_id_from activities
|
20
22
|
end
|
21
23
|
|
22
24
|
protected
|
23
25
|
|
24
26
|
def initialize(token)
|
25
27
|
@token = token
|
26
|
-
|
27
|
-
Rufus::Scheduler.start_new.every('30s') {
|
28
|
+
update_id_from fetch_activities
|
29
|
+
Rufus::Scheduler.start_new.every('30s') { update }
|
28
30
|
end
|
29
31
|
|
30
32
|
private
|
31
33
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
def update_id_from(activities)
|
35
|
+
@id = activities.first['id'].to_s
|
36
|
+
end
|
37
|
+
|
38
|
+
def fetch_activities
|
39
|
+
return XML.parse(RestClient.get("http://www.pivotaltracker.com/services/v3/activities?limit=10", 'X-TrackerToken' => @token).body)['activities']
|
36
40
|
end
|
37
41
|
end
|
@@ -7,7 +7,23 @@
|
|
7
7
|
<occurred_at type="datetime">2010/03/17 21:48:15 ARST</occurred_at>
|
8
8
|
<author>Superman</author>
|
9
9
|
<project_id type="integer">32498</project_id>
|
10
|
-
<description>Superman finished
|
10
|
+
<description>Superman finished lorem ipsum</description>
|
11
|
+
<stories>
|
12
|
+
<story>
|
13
|
+
<id type="integer">3934566</id>
|
14
|
+
<url>http://www.pivotaltracker.com/services/v3/projects/43498/stories/3934566</url>
|
15
|
+
<current_state>finished</current_state>
|
16
|
+
</story>
|
17
|
+
</stories>
|
18
|
+
</activity>
|
19
|
+
<activity>
|
20
|
+
<id type="integer">225906466</id>
|
21
|
+
<version type="integer">27585</version>
|
22
|
+
<event_type>story_update</event_type>
|
23
|
+
<occurred_at type="datetime">2010/03/17 21:48:15 ARST</occurred_at>
|
24
|
+
<author>SpongeBob</author>
|
25
|
+
<project_id type="integer">32498</project_id>
|
26
|
+
<description>SpongeBog finished lorem ipsum</description>
|
11
27
|
<stories>
|
12
28
|
<story>
|
13
29
|
<id type="integer">3934566</id>
|
@@ -23,7 +39,7 @@
|
|
23
39
|
<occurred_at type="datetime">2010/03/17 21:44:42 ARST</occurred_at>
|
24
40
|
<author>Spiderman</author>
|
25
41
|
<project_id type="integer">43498</project_id>
|
26
|
-
<description>
|
42
|
+
<description>Spiderman edited "I want to delete alert notifications from the main alert notification page"</description>
|
27
43
|
<stories>
|
28
44
|
<story>
|
29
45
|
<id type="integer">3935407</id>
|
@@ -6,16 +6,16 @@ describe PivotalTrackerClient do
|
|
6
6
|
Rufus::Scheduler.stub(:start_new).and_return(@scheduler = mock(Object, :every => nil))
|
7
7
|
end
|
8
8
|
|
9
|
-
it "should save the
|
9
|
+
it "should save the id of the latest activity" do
|
10
10
|
client = PivotalTrackerClient.init '123456789'
|
11
|
-
client.
|
11
|
+
client.id.should == '25906467'
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
it "should request the feed with the token" do
|
15
15
|
token = '34g43g4334g43g43'
|
16
|
-
|
17
|
-
opts[
|
18
|
-
latests_activities
|
16
|
+
RestClient.should_receive(:get) do |url, opts|
|
17
|
+
opts['X-TrackerToken'].should eql(token)
|
18
|
+
mock(Object, :body => latests_activities)
|
19
19
|
end
|
20
20
|
PivotalTrackerClient.init token
|
21
21
|
end
|
@@ -29,37 +29,40 @@ describe PivotalTrackerClient do
|
|
29
29
|
@scheduler.stub(:every) do |time, block|
|
30
30
|
block.call
|
31
31
|
end
|
32
|
-
|
32
|
+
RestClient.should_receive(:get).exactly(2).times do
|
33
|
+
mock(Object, :body => latests_activities)
|
34
|
+
end
|
33
35
|
PivotalTrackerClient.init 'fegegege'
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
|
-
context "on
|
39
|
+
context "on update" do
|
38
40
|
before :each do
|
39
41
|
@client = PivotalTrackerClient.init('fake')
|
40
42
|
@client.stub! :system
|
43
|
+
@client.instance_variable_set "@id", '25906311'
|
41
44
|
end
|
42
45
|
|
43
|
-
it "should get the
|
44
|
-
@client.
|
45
|
-
@client.
|
46
|
+
it "should get the new activities and update the id" do
|
47
|
+
@client.update
|
48
|
+
@client.id.should == '25906467'
|
46
49
|
end
|
47
50
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
51
|
+
it "should notifify about each new activity" do
|
52
|
+
@client.should_receive(:system).exactly(2).times
|
53
|
+
@client.update
|
54
|
+
end
|
53
55
|
|
56
|
+
context "on os x" do
|
54
57
|
it "should notify growl calling growlnotify with 'Pivotal Tracker' as the name the application, the author and the action" do
|
55
58
|
@client.should_receive(:system).with("growlnotify -t 'Pivotal Tracker' -m 'Superman finished lorem ipsum'")
|
56
|
-
@client.
|
59
|
+
@client.update
|
57
60
|
end
|
58
61
|
|
59
62
|
it "should notify newer activities at least" do
|
60
|
-
@client.should_receive(:system).with("growlnotify -t 'Pivotal Tracker' -m '
|
63
|
+
@client.should_receive(:system).with("growlnotify -t 'Pivotal Tracker' -m 'SpongeBog finished lorem ipsum'").ordered
|
61
64
|
@client.should_receive(:system).with("growlnotify -t 'Pivotal Tracker' -m 'Superman finished lorem ipsum'").ordered
|
62
|
-
@client.
|
65
|
+
@client.update
|
63
66
|
end
|
64
67
|
end
|
65
68
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -21,4 +21,3 @@ end
|
|
21
21
|
require 'fakeweb'
|
22
22
|
|
23
23
|
FakeWeb.register_uri(:get, "http://www.pivotaltracker.com/services/v3/activities?limit=10", :body => latests_activities)
|
24
|
-
FakeWeb.register_uri(:get, "http://www.pivotaltracker.com/services/v3/activities?newer_than_version=27585", :body => read('newer_than_version'))
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Diego Carrion
|
@@ -55,8 +55,11 @@ dependencies:
|
|
55
55
|
version_requirements: *id003
|
56
56
|
description: A client that listens to Pivotal Tracker activities and notifies them with Growl.
|
57
57
|
email: dc.rec1@gmail.com
|
58
|
-
executables:
|
59
|
-
|
58
|
+
executables:
|
59
|
+
- pivotal-tracker-client
|
60
|
+
- pivotal-tracker-client-install
|
61
|
+
- pivotal-tracker-client.rb
|
62
|
+
- pivotal-tracker-client.rb.pid
|
60
63
|
extensions: []
|
61
64
|
|
62
65
|
extra_rdoc_files:
|
@@ -69,9 +72,11 @@ files:
|
|
69
72
|
- README.textile
|
70
73
|
- Rakefile
|
71
74
|
- VERSION
|
75
|
+
- bin/pivotal-tracker-client
|
76
|
+
- bin/pivotal-tracker-client-install
|
77
|
+
- bin/pivotal-tracker-client.rb
|
72
78
|
- lib/pivotal-tracker-client.rb
|
73
79
|
- spec/data/latests_activities.xml
|
74
|
-
- spec/data/newer_than_version.xml
|
75
80
|
- spec/pivotal-tracker-client_spec.rb
|
76
81
|
- spec/spec.opts
|
77
82
|
- spec/spec_helper.rb
|
@@ -1,37 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<activities type="array">
|
3
|
-
<activity>
|
4
|
-
<id type="integer">25906467</id>
|
5
|
-
<version type="integer">28585</version>
|
6
|
-
<event_type>story_update</event_type>
|
7
|
-
<occurred_at type="datetime">2010/03/17 21:48:15 ARST</occurred_at>
|
8
|
-
<author>Superman</author>
|
9
|
-
<project_id type="integer">32498</project_id>
|
10
|
-
<description>Superman finished lorem ipsum</description>
|
11
|
-
<stories>
|
12
|
-
<story>
|
13
|
-
<id type="integer">3934566</id>
|
14
|
-
<url>http://www.pivotaltracker.com/services/v3/projects/43498/stories/3934566</url>
|
15
|
-
<current_state>finished</current_state>
|
16
|
-
</story>
|
17
|
-
</stories>
|
18
|
-
</activity>
|
19
|
-
<activity>
|
20
|
-
<id type="integer">25906311</id>
|
21
|
-
<version type="integer">27584</version>
|
22
|
-
<event_type>story_update</event_type>
|
23
|
-
<occurred_at type="datetime">2010/03/17 21:44:42 ARST</occurred_at>
|
24
|
-
<author>Spiderman</author>
|
25
|
-
<project_id type="integer">43498</project_id>
|
26
|
-
<description>Spiderman edited lorem ipsum</description>
|
27
|
-
<stories>
|
28
|
-
<story>
|
29
|
-
<id type="integer">3935407</id>
|
30
|
-
<url>http://www.pivotaltracker.com/services/v3/projects/43498/stories/3935407</url>
|
31
|
-
<description>In the main page, in place of the "Ignore" column, we will have a "Delete" column.
|
32
|
-
|
33
|
-
At the bottom, there should be a Deletar button, just like the "Aplicar" button (without the dropdown) in the Solicitacao management page. So, the user will be able to select many notifications and delete multiples at the same time.</description>
|
34
|
-
</story>
|
35
|
-
</stories>
|
36
|
-
</activity>
|
37
|
-
</activities>
|