track-r 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/config/config.yml CHANGED
@@ -1,2 +1,2 @@
1
- ---
2
- :api_location: http://www.pivotaltracker.com/services/v2
1
+ ---
2
+ :api_url: "https://www.pivotaltracker.com/services/v2/"
data/lib/track-r.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # Load configuration globals
2
+ require 'yaml'
3
+ CONFIG = YAML.load_file(File.join(File.dirname(__FILE__), '/../config/config.yml'))
1
4
  $:.unshift(File.dirname(__FILE__))
2
5
  require File.join(File.dirname(__FILE__), '/../config/environment.rb')
3
6
  require 'track-r/project'
@@ -7,6 +10,3 @@ require 'track-r/token'
7
10
  require 'track-r/tracker'
8
11
  require 'cgi'
9
12
  require 'net/http'
10
-
11
- # Load configuration globals
12
- CONFIG = YAML.load_file(File.join(File.dirname(__FILE__), '/../config/config.yml'))
@@ -9,7 +9,7 @@ class Project
9
9
  if options.include?(:project_id) && options.include?(:token)
10
10
  @id = options[:project_id]
11
11
  @token = options[:token].to_s
12
- @api_url = "http://www.pivotaltracker.com/services/v2/projects/#{@id}"
12
+ @api_url = "#{CONFIG[:api_url]}projects/#{@id}"
13
13
  @url = "http://www.pivotaltracker.com/projects/#{@id}"
14
14
  @project = Hpricot(open(@api_url, {"X-TrackerToken" => @token}))
15
15
  @stories = nil
@@ -34,7 +34,7 @@ class Project
34
34
  # Returns a Story object
35
35
  # TODO: Validate attributes
36
36
  def create_story(attributes = {})
37
- api_url = URI.parse("http://www.pivotaltracker.com/services/v2/projects/#{@id}/stories")
37
+ api_url = URI.parse("#{CONFIG[:api_url]}projects/#{@id}/stories")
38
38
  query_string = attributes.map { |key, value| "story[#{key}]=#{CGI::escape(value)}"}.join('&')
39
39
  response = Net::HTTP.start(api_url.host, api_url.port) do |http|
40
40
  http.post(api_url.path, query_string.concat("&token=#{@token}"))
@@ -47,9 +47,9 @@ class Project
47
47
  # Deletes a story given a Story object or a story_id
48
48
  def delete_story(story)
49
49
  if story.is_a?(Story)
50
- api_url = URI.parse("http://www.pivotaltracker.com/services/v2/projects/#{@id}/stories/#{story.id}")
50
+ api_url = URI.parse("#{CONFIG[:api_url]}projects/#{@id}/stories/#{story.id}")
51
51
  elsif story.is_a?(Integer) || story.to_i.is_a?(Integer)
52
- api_url = URI.parse("http://www.pivotaltracker.com/services/v2/projects/#{@id}/stories/#{story}")
52
+ api_url = URI.parse("#{CONFIG[:api_url]}projects/#{@id}/stories/#{story}")
53
53
  else
54
54
  raise ArgumentError, "Should receive a story id or a Story object."
55
55
  end
@@ -86,7 +86,7 @@ class Project
86
86
  # @project
87
87
  def build_project
88
88
  @id ||= @project.at('id').inner_html
89
- @api_url ||= "http://www.pivotaltracker.com/services/v2/projects/#{@id}"
89
+ @api_url ||= "#{CONFIG[:api_url]}projects/#{@id}"
90
90
  @url ||= "http://www.pivotaltracker.com/projects/#{@id}"
91
91
  @name = @project.at('name').inner_html
92
92
  @iteration_length = @project.at('iteration_length').inner_html
@@ -96,7 +96,7 @@ class Project
96
96
 
97
97
  # Builds an array containing the project's stories
98
98
  def get_stories
99
- api_url = "#{CONFIG[:api_location]}/projects/#{@id}/stories"
99
+ api_url = "#{CONFIG[:api_url]}projects/#{@id}/stories"
100
100
  @stories = (Hpricot(open(api_url, {"X-TrackerToken" => @token.to_s}))/:story).map {|story| Story.new(:story => story, :project_id => @id, :token => @token)}
101
101
  end
102
102
 
@@ -104,9 +104,9 @@ class Project
104
104
  def get_stories_by_iteration(name)
105
105
  case name
106
106
  when "icebox"
107
- api_url = "http://www.pivotaltracker.com/services/v2/projects/#{@id}/stories?filter=current_state%3Aunscheduled"
107
+ api_url = "#{CONFIG[:api_url]}projects/#{@id}/stories?filter=current_state%3Aunscheduled"
108
108
  else
109
- api_url = "http://www.pivotaltracker.com/services/v2/projects/#{@id}/iterations/#{name}"
109
+ api_url = "#{CONFIG[:api_url]}projects/#{@id}/iterations/#{name}"
110
110
  end
111
111
  @stories = (Hpricot(open(api_url, {"X-TrackerToken" => @token.to_s}))/:story).map {|story| Story.new(:story => story, :project_id => @id, :token => @token)}
112
112
  end
data/lib/track-r/story.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  class Story
3
3
  attr_accessor :story_type, :estimate, :current_state,
4
4
  :description, :name, :requested_by, :owned_by, :created_at, :accepted_at,
5
- :labels, :project_id, :comments
5
+ :labels, :project_id, :comments, :story
6
6
 
7
7
  attr_reader :id, :url
8
8
 
@@ -12,7 +12,7 @@ class Story
12
12
  @id = options[:story_id]
13
13
  @project_id = options[:project_id]
14
14
  @url = "http://www.pivotaltracker.com/story/show/#{@id}"
15
- @api_url = "http://www.pivotaltracker.com/services/v2/projects/#{@project_id}/stories/#{@id}"
15
+ @api_url = "#{CONFIG[:api_url]}projects/#{@project_id}/stories/#{@id}"
16
16
  @story = Hpricot(open(@api_url, {"X-TrackerToken" => @token}))
17
17
  elsif options.include?(:story) && options.include?(:project_id) && options.include?(:token)
18
18
  @project_id = options[:project_id]
@@ -24,9 +24,9 @@ class Story
24
24
  end
25
25
 
26
26
  def build_story
27
- @id ||= @story.at('id').inner_html
27
+ @id ||= @story.at('id').inner_html if @story.at('id')
28
28
  @url ||= "http://www.pivotaltracker.com/story/show/#{@id}"
29
- @api_url ||= "http://www.pivotaltracker.com/services/v2/projects/#{@project_id}/stories/#{@id}"
29
+ @api_url ||= "#{CONFIG[:api_url]}projects/#{@project_id}/stories/#{@id}"
30
30
  @story_type = @story.at('story_type').inner_html unless @story.at('story_type').nil?
31
31
  @estimate = @story.at('estimate').inner_html unless @story.at('estimate').nil?
32
32
  @current_state = @story.at('current_state').inner_html unless @story.at('current_state').nil?
@@ -57,7 +57,7 @@ class Story
57
57
 
58
58
  def save
59
59
  parameters = build_story_xml
60
- api_url = URI.parse("http://www.pivotaltracker.com/services/v2/projects/#{@project_id}/stories/#{@id}")
60
+ api_url = URI.parse("#{CONFIG[:api_url]}projects/#{@project_id}/stories/#{@id}")
61
61
  response = Net::HTTP.start(api_url.host, api_url.port) do |http|
62
62
  http.put(api_url.path, parameters, {'X-TrackerToken' => @token, 'Content-Type' => 'application/xml'})
63
63
  end
@@ -68,7 +68,7 @@ class Story
68
68
 
69
69
  # TODO: test this method:
70
70
  def destroy
71
- api_url = URI.parse("http://www.pivotaltracker.com/services/v2/projects/#{@project_id}/stories/#{@id}")
71
+ api_url = URI.parse("#{CONFIG[:api_url]}projects/#{@project_id}/stories/#{@id}")
72
72
  response = Net::HTTP.start(api_url.host, api_url.port) do |http|
73
73
  http.delete(api_url.path, {"X-TrackerToken" => @token})
74
74
  end
@@ -43,7 +43,7 @@ class Tracker
43
43
  # Fills @projects. NOTE: call sync method to refill/sync @projects
44
44
  # Returns an Array stored in @projects
45
45
  def get_projects
46
- api_url = "#{CONFIG[:api_location]}/projects/"
46
+ api_url = "#{CONFIG[:api_url]}projects/"
47
47
  @projects ||= (Hpricot(open(api_url, {"X-TrackerToken" => @token.to_s}))/:project).map {|project| Project.new(:project => project, :token => @token)}
48
48
  end
49
49
 
data/test/test_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'shoulda'
3
+ require 'yaml'
3
4
  require 'test/unit'
4
5
  require File.join(File.dirname(__FILE__), '/../lib/track-r.rb')
5
6
  require File.join(File.dirname(__FILE__), '/../config/environment.rb')
@@ -14,14 +14,14 @@ class ProjectTest < Test::Unit::TestCase
14
14
  assert_equal $config[:project_1][:story_count], @project.stories.size
15
15
  end
16
16
 
17
- should "show a story with @project.story and passing the story id as argument" do
17
+ should "show a story with @project.story and passing the story id as argument" do
18
18
  assert_equal $config[:story_1][:name], @project.story($config[:story_1][:id]).name
19
19
  end
20
20
 
21
- should "be able to add and remove a story" do
21
+ should "be able to add and remove a story" do
22
22
  story_count = @project.stories.size
23
23
  attributes = { :name => "Finish Track-R (sorry for cluttering :))",
24
- :requested_by => "Jose Felix Gomez",
24
+ :requested_by => "Jose Felix Gomez",
25
25
  :description => "This story was made with Track-R library. Sorry for the clutter, you're free to delete me." }
26
26
  new_story = @project.create_story(attributes)
27
27
  assert_equal "Finish Track-R (sorry for cluttering :))", new_story.name
@@ -29,12 +29,12 @@ class ProjectTest < Test::Unit::TestCase
29
29
  assert_equal story_count, @project.stories.size
30
30
  end
31
31
 
32
- should "be able to get the backlog stories" do
32
+ should "be able to get the backlog stories" do
33
33
  story_count = $config[:project_1][:backlog_stories]
34
34
  assert_equal story_count, @project.backlog.size
35
35
  end
36
36
 
37
- should "be able to get the current iteration stories" do
37
+ should "be able to get the current iteration stories" do
38
38
  story_count = $config[:project_1][:current_stories]
39
39
  assert_equal story_count, @project.current.size
40
40
  end
@@ -2,15 +2,15 @@ require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
3
  class TestStoryTest < Test::Unit::TestCase
4
4
 
5
- context "A given story" do
5
+ context "A given story" do
6
6
 
7
- setup do
7
+ setup do
8
8
  token_options = {:username => $config[:username], :password => $config[:password]}
9
9
  @tracker = Tracker.new(Token.new(token_options))
10
10
  @project_id = $config[:project_1][:id]
11
11
  @project = @tracker.project(@project_id)
12
12
  attributes = { :name => "Finish Track-R (sorry for cluttering :))",
13
- :requested_by => "Jose Felix Gomez",
13
+ :requested_by => "Jose Felix Gomez",
14
14
  :description => "This story was made with Track-R library. Sorry for the clutter, you're free to delete me." }
15
15
  @story = @project.create_story(attributes)
16
16
  end
@@ -19,12 +19,12 @@ class TestStoryTest < Test::Unit::TestCase
19
19
  @project.delete_story(@story)
20
20
  end
21
21
 
22
- should "be updated after story.save call" do
22
+ should "be updated after story.save call" do
23
23
  @story.name = "More power to the shields"
24
24
  @story.description = "ZOMG!"
25
25
  @story.save
26
26
 
27
- assert_equal "More power to the shields", @project.story(@story.id).name
27
+ assert_equal "Combo Koombea ma&#241;aneo???", @project.story(@story.id).name
28
28
  end
29
29
 
30
30
  end
data/track-r.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{track-r}
5
- s.version = "1.7.0"
5
+ s.version = "1.8.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Jose Felix Gomez"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: track-r
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Felix Gomez
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  requirements: []
69
69
 
70
70
  rubyforge_project:
71
- rubygems_version: 1.3.3
71
+ rubygems_version: 1.3.5
72
72
  signing_key:
73
73
  specification_version: 3
74
74
  summary: A wrapper library for pivotal tracker's API