taskmapper-redmine 0.4.0

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.
@@ -0,0 +1 @@
1
+ ticketmaster-redmine
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@taskmapper-redmine --create
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem "taskmapper", "~> 0.8"
7
+ # Add dependencies to develop your gem here.
8
+ # Include everything needed to run rake, tests, features, etc.
9
+ group :development do
10
+ gem "rspec", "~> 2.8"
11
+ gem "jeweler", "~> 1.6"
12
+ gem "simplecov", "~> 0.5", :platforms => :ruby_19
13
+ gem "rcov", "~> 1.0", :platforms => :ruby_18
14
+ end
@@ -0,0 +1,50 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.2.3)
5
+ activesupport (= 3.2.3)
6
+ builder (~> 3.0.0)
7
+ activeresource (3.2.3)
8
+ activemodel (= 3.2.3)
9
+ activesupport (= 3.2.3)
10
+ activesupport (3.2.3)
11
+ i18n (~> 0.6)
12
+ multi_json (~> 1.0)
13
+ builder (3.0.0)
14
+ diff-lcs (1.1.3)
15
+ git (1.2.5)
16
+ hashie (1.2.0)
17
+ i18n (0.6.0)
18
+ jeweler (1.6.4)
19
+ bundler (~> 1.0)
20
+ git (>= 1.2.5)
21
+ rake
22
+ multi_json (1.0.4)
23
+ rake (0.9.2.2)
24
+ rcov (1.0.0)
25
+ rspec (2.8.0)
26
+ rspec-core (~> 2.8.0)
27
+ rspec-expectations (~> 2.8.0)
28
+ rspec-mocks (~> 2.8.0)
29
+ rspec-core (2.8.0)
30
+ rspec-expectations (2.8.0)
31
+ diff-lcs (~> 1.1.2)
32
+ rspec-mocks (2.8.0)
33
+ simplecov (0.5.4)
34
+ multi_json (~> 1.0.3)
35
+ simplecov-html (~> 0.5.3)
36
+ simplecov-html (0.5.3)
37
+ taskmapper (0.8.0)
38
+ activeresource (~> 3.0)
39
+ activesupport (~> 3.0)
40
+ hashie (~> 1.2)
41
+
42
+ PLATFORMS
43
+ ruby
44
+
45
+ DEPENDENCIES
46
+ jeweler (~> 1.6)
47
+ rcov (~> 1.0)
48
+ rspec (~> 2.8)
49
+ simplecov (~> 0.5)
50
+ taskmapper (~> 0.8)
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2010 YOU
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ NONE
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,64 @@
1
+ # taskmapper-redmine
2
+
3
+ This is a provider for [taskmapper](http://ticketrb.com). It provides interoperability with [Redmine](http://www.redmine.org) and it's issue tracking system through the taskmapper gem.
4
+
5
+ # Usage and Examples
6
+
7
+ First we have to instantiate a new taskmapper instance, your redmine installation should have api access enable:
8
+ redmine = taskmapper.new(:redmine, {:server => 'http://redmine-server', :username => "foo", :password => "bar"})
9
+
10
+ If you do not pass in the server, username and password, you won't get any information.
11
+
12
+ == Finding Projects(Repositories)
13
+
14
+ You can find your own projects by doing:
15
+
16
+ projects = redmine.projects # Will return all your repositories
17
+ projects = redmine.projects(['your_repo1', 'your_repo2']) # You must use your projects identifier
18
+ project = redmine.project('your_repo') # Also use project identifier in here
19
+
20
+ == Finding Tickets(Issues)
21
+
22
+ tickets = project.tickets # All open issues
23
+ ticket = project.ticket(<issue_number>)
24
+
25
+ == Open Tickets
26
+
27
+ ticket = project.ticket!({:subject=> "New ticket", :description=> "Body for the very new ticket"})
28
+
29
+ = Update a ticket
30
+
31
+ ticket.subject = "New title"
32
+ ticket.description = "New Description"
33
+ ticket.save
34
+
35
+ ## Requirements
36
+
37
+ * rubygems (obviously)
38
+ * taskmapper gem (latest version preferred)
39
+ * jeweler gem (only if you want to repackage and develop)
40
+
41
+ The taskmapper gem should automatically be installed during the installation of this gem if it is not already installed.
42
+
43
+ ## Other Notes
44
+
45
+ Since this and the taskmapper gem is still primarily a work-in-progress, minor changes may be incompatible with previous versions. Please be careful about using and updating this gem in production.
46
+
47
+ If you see or find any issues, feel free to open up an issue report.
48
+
49
+
50
+ ## Note on Patches/Pull Requests
51
+
52
+ * Fork the project.
53
+ * Make your feature addition or bug fix.
54
+ * Add tests for it. This is important so we don't break it in a
55
+ future version unintentionally.
56
+ * Commit, do not mess with rakefile, version, or history.
57
+ (if you want to have your own version, that is fine but bump version in a commit by itself so we can ignore when I pull)
58
+ * Send us a pull request. Bonus points for topic branches.
59
+
60
+ ## Copyright
61
+
62
+ Copyright (c) 2010 The Hybrid Group. See LICENSE for details.
63
+
64
+
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "taskmapper-redmine"
8
+ gem.summary = %Q{taskmapper Provider for Redmine}
9
+ gem.description = %Q{Allows taskmapper to interact with Your System.}
10
+ gem.email = "rafael@hybridgroup.com"
11
+ gem.homepage = "http://github.com/hybridgroup/taskmapper-redmine"
12
+ gem.authors = ["Rafael George"]
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
15
+ Jeweler::GemcutterTasks.new
16
+ rescue LoadError
17
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
18
+ end
19
+
20
+ require 'rspec/core'
21
+ require 'rspec/core/rake_task'
22
+ RSpec::Core::RakeTask.new(:spec) do |spec|
23
+ spec.pattern = FileList['spec/**/*_spec.rb']
24
+ end
25
+
26
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
27
+ spec.pattern = 'spec/**/*_spec.rb'
28
+ spec.rcov = true
29
+ end
30
+
31
+ task :default => :spec
32
+
33
+ require 'rake/rdoctask'
34
+ Rake::RDocTask.new do |rdoc|
35
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
36
+
37
+ rdoc.rdoc_dir = 'rdoc'
38
+ rdoc.title = "taskmapper-redmine#{version}"
39
+ rdoc.rdoc_files.include('README*')
40
+ rdoc.rdoc_files.include('lib/**/*.rb')
41
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.4.0
@@ -0,0 +1,22 @@
1
+ #Reopening class to add ticket master espesific behavior without mixing it with RadmineAPI
2
+ class RedmineAPI::Issue
3
+ def to_ticket_hash
4
+ return :id => id.to_i,
5
+ :title => subject,
6
+ :created_at => created_on,
7
+ :updated_at => updated_on,
8
+ :project_id => project.id.to_i,
9
+ :status => status.name,
10
+ :priority => priority.name,
11
+ :priority_id => priority.id.to_i,
12
+ :requestor => author.name,
13
+ :assignee => author.name
14
+ end
15
+
16
+ def update_with(ticket)
17
+ self.subject = ticket.title
18
+ self.project_id = ticket.project_id
19
+ self.description = ticket.description
20
+ self
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ module TaskMapper::Provider
2
+ module Redmine
3
+ # The comment class for taskmapper-yoursystem
4
+ #
5
+ # Do any mapping between taskmapper and your system's comment model here
6
+ # versions of the ticket.
7
+ #
8
+ class Comment < TaskMapper::Provider::Base::Comment
9
+ # declare needed overloaded methods here
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,48 @@
1
+ module TaskMapper::Provider
2
+ module Redmine
3
+ # Project class for taskmapper-yoursystem
4
+ #
5
+ #
6
+ class Project < TaskMapper::Provider::Base::Project
7
+ # declare needed overloaded methods here
8
+ API = RedmineAPI::Project
9
+
10
+ def initialize(*object)
11
+ if object.first
12
+ object = object.first
13
+ unless object.is_a? Hash
14
+ hash = {:id => object.id,
15
+ :name => object.name,
16
+ :description => object.description,
17
+ :identifier => object.identifier,
18
+ :created_at => object.created_on,
19
+ :updated_at => object.updated_on}
20
+
21
+ else
22
+ hash = object
23
+ end
24
+ super hash
25
+ end
26
+ end
27
+
28
+ # copy from this.copy(that) copies that into this
29
+ def copy(project)
30
+ project.tickets.each do |ticket|
31
+ copy_ticket = self.ticket!(:title => ticket.title, :description => ticket.description)
32
+ ticket.comments.each do |comment|
33
+ copy_ticket.comment!(:body => comment.body)
34
+ sleep 1
35
+ end
36
+ end
37
+ end
38
+
39
+ def id
40
+ self[:id]
41
+ end
42
+
43
+ def identifier
44
+ self[:identifier]
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,32 @@
1
+ module TaskMapper::Provider
2
+ # This is the Yoursystem Provider for taskmapper
3
+ module Redmine
4
+ include TaskMapper::Provider::Base
5
+ PROJECT_API = RedmineAPI::Project
6
+ TICKET_API = RedmineAPI::Issue
7
+
8
+ # This is for cases when you want to instantiate using TaskMapper::Provider::Yoursystem.new(auth)
9
+ def self.new(auth = {})
10
+ TaskMapper.new(:redmine, auth)
11
+ end
12
+
13
+ # declare needed overloaded methods here
14
+ def authorize(auth = {})
15
+ @authentication ||= TaskMapper::Authenticator.new(auth)
16
+ auth = @authentication
17
+ if auth.server.blank? and auth.token.blank?
18
+ raise "Please you should provide server and token"
19
+ end
20
+
21
+ RedmineAPI.authenticate(auth.server, auth.token)
22
+ end
23
+
24
+ def valid?
25
+ begin
26
+ RedmineAPI::Project.find(:all).size >= 0
27
+ rescue
28
+ false
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,108 @@
1
+ module TaskMapper::Provider
2
+ module Redmine
3
+ # Ticket class for taskmapper-yoursystem
4
+ #
5
+ API = RedmineAPI::Issue
6
+
7
+ class Ticket < TaskMapper::Provider::Base::Ticket
8
+ # declare needed overloaded methods here
9
+
10
+ def initialize(*args)
11
+ case args.first
12
+ when Hash then super args.first
13
+ when RedmineAPI::Issue then super args.first.to_ticket_hash
14
+ else raise ArgumentError.new
15
+ end
16
+ end
17
+
18
+ def created_at
19
+ self[:created_on]
20
+ end
21
+
22
+ def updated_at
23
+ self[:updated_on]
24
+ end
25
+
26
+ def project_id
27
+ self[:project_id]
28
+ end
29
+
30
+ def status
31
+ self[:status].name
32
+ end
33
+
34
+ def priority
35
+ self[:priority].name
36
+ end
37
+
38
+ def requestor
39
+ self[:author].name
40
+ end
41
+
42
+ def assignee
43
+ self[:author].name
44
+ end
45
+
46
+ def id
47
+ self[:id].to_i
48
+ end
49
+
50
+ def description
51
+ self[:description]
52
+ end
53
+
54
+ def self.find_by_id(project_id, ticket_id)
55
+ self.new API.find(:first, :id => ticket_id)
56
+ end
57
+
58
+ def self.find_by_attributes(project_id, attributes = {})
59
+ issues = API.find(:all, attributes_for_request(project_id, attributes))
60
+ issues.collect { |issue| self.new issue }
61
+ end
62
+
63
+ def self.attributes_for_request(project_id, options)
64
+ hash = {:params => {:project_id => project_id}}.merge!(options)
65
+ end
66
+
67
+ def self.create(attributes)
68
+ ticket = self.new(attributes)
69
+ ticket if ticket.save
70
+ end
71
+
72
+ def save
73
+ to_issue.new? ? to_issue.save : update
74
+ end
75
+
76
+ def comments
77
+ warn "Redmine doesn't support comments"
78
+ []
79
+ end
80
+
81
+ def comment
82
+ warn "Redmine doesn't support comments"
83
+ nil
84
+ end
85
+
86
+ def comment!
87
+ warn "Redmine doesn't support comments"
88
+ []
89
+ end
90
+
91
+ private
92
+ def find_issue
93
+ issue = API.find id, :params => {:project_id => self.project_id}
94
+ raise TaskMapper::Exception.new "Ticket with #{id} was not found" unless issue
95
+ issue
96
+ end
97
+
98
+ def update
99
+ find_issue.update_with(self).save
100
+ end
101
+
102
+ def to_issue
103
+ API.new.update_with(self)
104
+ end
105
+
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,39 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_resource'
4
+
5
+
6
+ module RedmineAPI
7
+ class Error < StandardError; end
8
+
9
+ class << self
10
+ attr_reader :token
11
+ def authenticate(server, token)
12
+ @token = token
13
+ @server = server
14
+ self::Base.site = server
15
+ end
16
+
17
+ def resources
18
+ @resources ||= []
19
+ end
20
+ end
21
+
22
+ class Base < ActiveResource::Base
23
+ self.format = :xml
24
+ def self.inherited(base)
25
+ RedmineAPI.resources << base
26
+ end
27
+
28
+ def self.headers
29
+ {"X-Redmine-API-Key" => RedmineAPI.token}
30
+ end
31
+ end
32
+
33
+ class Issue < Base
34
+ end
35
+
36
+ class Project < Base
37
+ end
38
+
39
+ end
@@ -0,0 +1,6 @@
1
+ require File.dirname(__FILE__) + '/redmine/redmine-api'
2
+
3
+ %w{ redmine ticket project comment api-extensions }.each do |f|
4
+ require File.dirname(__FILE__) + '/provider/' + f + '.rb';
5
+ end
6
+
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe TaskMapper::Provider::Redmine::Comment do
4
+ it "should have specs for comments"
5
+ end
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><issues type="array" total_count="1" limit="25" offset="0"><issue><id>1</id><project name="test-repo" id="1"/><tracker name="Bug" id="1"/><status name="New" id="1"/><priority name="Normal" id="4"/><author name="Redmine Admin" id="1"/><subject>test-issue</subject><description></description><start_date>2010-12-22</start_date><due_date></due_date><done_ratio>0</done_ratio><estimated_hours></estimated_hours><created_on>2010-12-22T17:55:58-06:00</created_on><updated_on>2010-12-22T17:55:58-06:00</updated_on></issue></issues>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><issue><id>1</id><project name="test-repo" id="1"/><tracker name="Bug" id="1"/><status name="New" id="1"/><priority name="Normal" id="4"/><author name="Redmine Admin" id="1"/><subject>test-issue</subject><description></description><start_date>2010-12-22</start_date><due_date></due_date><done_ratio>0</done_ratio><estimated_hours></estimated_hours><spent_hours>0.0</spent_hours><created_on>2010-12-22T17:55:58-06:00</created_on><updated_on>2010-12-22T17:55:58-06:00</updated_on></issue>
@@ -0,0 +1,23 @@
1
+ <projects type="array">
2
+ <project>
3
+ <id>1</id>
4
+ <name>Redmine</name>
5
+ <identifier>redmine</identifier>
6
+ <description>
7
+ Redmine is a flexible project management web application written using Ruby on Rails framework.
8
+ </description>
9
+ <created_on>Sat Sep 29 12:03:04 +0200 2007</created_on>
10
+ <updated_on>Sun Mar 15 12:35:11 +0100 2009</updated_on>
11
+ </project>
12
+ <project>
13
+ <id>2</id>
14
+ <name>Redmine</name>
15
+ <identifier>redmine</identifier>
16
+ <description>
17
+ Redmine is a flexible project management web application written using Ruby on Rails framework.
18
+ </description>
19
+ <homepage></homepage>
20
+ <created_on>Sat Sep 29 12:03:04 +0200 2007</created_on>
21
+ <updated_on>Sun Mar 15 12:35:11 +0100 2009</updated_on>
22
+ </project>
23
+ </projects>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project id="1">
3
+ <name>Redmine</name>
4
+ <identifier>test-repo12</identifier>
5
+ <description>
6
+ Redmine is a flexible project management web application written using Ruby on Rails framework.
7
+ </description>
8
+ <homepage></homepage>
9
+ <created_on>Sat Sep 29 12:03:04 +0200 2007</created_on>
10
+ <updated_on>Sun Mar 15 12:35:11 +0100 2009</updated_on>
11
+ </project>
12
+
@@ -0,0 +1,58 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe TaskMapper::Provider::Redmine::Project do
4
+ before(:each) do
5
+ headers = {'X-Redmine-API-Key' => 'abcdefghijk', 'Accept' => 'application/xml'}
6
+ headers_post_put = {'Authorization' => 'Basic Y29yZWQ6MTIzNDU2', 'Content-Type' => 'application/xml'}
7
+ @project_id = '1'
8
+ ActiveResource::HttpMock.respond_to do |mock|
9
+ mock.get '/projects.xml', headers, fixture_for('projects'), 200
10
+ mock.get '/projects/1.xml', headers, fixture_for('projects/test-repo12'), 200
11
+ mock.put '/projects/1.xml', headers_post_put, '', 200
12
+ mock.post '/projects.xml', headers_post_put, '', 200
13
+ end
14
+
15
+ @taskmapper = TaskMapper.new :redmine, :server => 'http://demo.redmine.org/', :token => 'abcdefghijk'
16
+ @klass = TaskMapper::Provider::Redmine::Project
17
+ end
18
+
19
+ it "should be able to load all projects" do
20
+ @taskmapper.projects.should be_an_instance_of(Array)
21
+ @taskmapper.projects.first.should be_an_instance_of(@klass)
22
+ end
23
+
24
+ it "should be able to load projects from an array of id's" do
25
+ @projects = @taskmapper.projects([@project_id])
26
+ @projects.should be_an_instance_of(Array)
27
+ @projects.first.should be_an_instance_of(@klass)
28
+ @projects.first.id.should == @project_id
29
+ end
30
+
31
+ it "should be able to load all projects from attributes" do
32
+ @projects = @taskmapper.projects(:identifier => 'redmine')
33
+ @projects.should be_an_instance_of(Array)
34
+ @projects.first.should be_an_instance_of(@klass)
35
+ @projects.first.identifier.should == 'redmine'
36
+ end
37
+
38
+ it "should be able to find a project" do
39
+ @taskmapper.project.should == @klass
40
+ @taskmapper.project.find(@project_id).should be_an_instance_of(@klass)
41
+ end
42
+
43
+ it "should be able to find a project by identifier" do
44
+ @taskmapper.project(@project_id).should be_an_instance_of(@klass)
45
+ @taskmapper.project(@project_id).id.should == @project_id
46
+ end
47
+
48
+ it "should be able to update and save a project" do
49
+ pending
50
+ @project = @taskmapper.project(@project_id)
51
+ @project.update!(:name => 'named').should == true
52
+ end
53
+
54
+ it "should be able to create a new project" do
55
+ pending
56
+ @project = @taskmapper.project!(:name => 'newtest', :identifier => 'dumb', :description => 'hithere').should be_an_instance_of(@klass)
57
+ end
58
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,14 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rubygems'
4
+ require 'taskmapper'
5
+ require 'taskmapper-redmine'
6
+ require 'rspec'
7
+
8
+ RSpec.configure do |config|
9
+ config.color_enabled = true
10
+ end
11
+
12
+ def fixture_for(name)
13
+ File.read(File.dirname(__FILE__) + '/fixtures/' + name + '.xml')
14
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe TaskMapper::Provider::Redmine do
4
+
5
+ before :each do
6
+ headers = {'Authorization' => 'Basic Y29yZWQ6YWZkZA==', 'Accept' => 'application/xml'}
7
+ ActiveResource::HttpMock.respond_to do |mock|
8
+ mock.get '/projects.xml', headers, fixture_for('projects'), 200
9
+ end
10
+ end
11
+
12
+ it "should be able to instantiate a new instance" do
13
+ taskmapper = TaskMapper.new(:redmine, :server => 'http://redmine.server', :token => 'kdkjkladkaldj')
14
+ taskmapper.should be_an_instance_of(TaskMapper)
15
+ taskmapper.should be_a_kind_of(TaskMapper::Provider::Redmine)
16
+ end
17
+
18
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe TaskMapper::Provider::Redmine::Ticket do
4
+ before(:each) do
5
+ headers = {'X-Redmine-API-Key' => 'abcdefghijk', 'Accept' => 'application/xml'}
6
+ headers_post_put = {'X-Redmine-API-Key' => 'abcdefghijk', 'Content-Type' => 'application/xml'}
7
+ @project_id = 1
8
+ ActiveResource::HttpMock.respond_to do |mock|
9
+ mock.get '/projects.xml', headers, fixture_for('projects'), 200
10
+ mock.get '/projects/1.xml', headers, fixture_for('projects/test-repo12'), 200
11
+ mock.get '/issues.xml?project_id=1', headers, fixture_for('issues'), 200
12
+ mock.get '/issues.xml', headers, fixture_for('issues'), 200
13
+ mock.get '/issues/1.xml', headers, fixture_for('issues/1'), 200
14
+ mock.put '/issues/1.xml', headers_post_put, '', 200
15
+ mock.post '/issues.xml', headers_post_put, '', 200
16
+ end
17
+
18
+ @taskmapper = TaskMapper.new :redmine, :server => 'http://demo.redmine.org/', :token => 'abcdefghijk'
19
+ @project = @taskmapper.project(@project_id)
20
+ @klass = TaskMapper::Provider::Redmine::Ticket
21
+ end
22
+
23
+ it "should be able to load all tickets" do
24
+ @project.tickets.should be_an_instance_of(Array)
25
+ @project.tickets.first.should be_an_instance_of(@klass)
26
+ end
27
+
28
+ it "should be able to load all tickets based on an array of id's" do
29
+ @tickets = @project.tickets([1])
30
+ @tickets.should be_an_instance_of(Array)
31
+ @tickets.first.should be_an_instance_of(@klass)
32
+ @tickets.first.title.should == 'test-issue'
33
+ end
34
+
35
+ it "should be able to load all tickets based on attributes" do
36
+ @tickets = @project.tickets(:id => 1)
37
+ @tickets.should be_an_instance_of(Array)
38
+ @tickets.first.should be_an_instance_of(@klass)
39
+ @tickets.first.title.should == 'test-issue'
40
+ end
41
+
42
+ it "should return the ticket class" do
43
+ @project.ticket.should == @klass
44
+ end
45
+
46
+ it "should be able to load a single ticket" do
47
+ @ticket = @project.ticket(1)
48
+ @ticket.should be_an_instance_of(@klass)
49
+ @ticket.title.should == 'test-issue'
50
+ end
51
+
52
+ it "should be able to update and save a ticket" do
53
+ @ticket = @project.ticket(1)
54
+ @ticket.description = 'hello'
55
+ @ticket.save.should == true
56
+ end
57
+
58
+ it "should be able to create a ticket" do
59
+ @ticket = @project.ticket!(:title => 'Ticket #12', :description => 'Body')
60
+ @ticket.should be_an_instance_of(@klass)
61
+ @ticket.project_id.should_not be_nil
62
+ end
63
+
64
+ end
@@ -0,0 +1,77 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "taskmapper-redmine"
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Rafael George"]
12
+ s.date = "2012-04-19"
13
+ s.description = "Allows taskmapper to interact with Your System."
14
+ s.email = "rafael@hybridgroup.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".rbenv-gemsets",
21
+ ".rvmrc",
22
+ ".travis.yml",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE",
26
+ "README.md",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "lib/provider/api-extensions.rb",
30
+ "lib/provider/comment.rb",
31
+ "lib/provider/project.rb",
32
+ "lib/provider/redmine.rb",
33
+ "lib/provider/ticket.rb",
34
+ "lib/redmine/redmine-api.rb",
35
+ "lib/taskmapper-redmine.rb",
36
+ "spec/comments_spec.rb",
37
+ "spec/fixtures/issues.xml",
38
+ "spec/fixtures/issues/1.xml",
39
+ "spec/fixtures/projects.xml",
40
+ "spec/fixtures/projects/test-repo12.xml",
41
+ "spec/projects_spec.rb",
42
+ "spec/spec.opts",
43
+ "spec/spec_helper.rb",
44
+ "spec/taskmapper-redmine_spec.rb",
45
+ "spec/tickets_spec.rb",
46
+ "taskmapper-redmine.gemspec"
47
+ ]
48
+ s.homepage = "http://github.com/hybridgroup/taskmapper-redmine"
49
+ s.require_paths = ["lib"]
50
+ s.rubygems_version = "1.8.17"
51
+ s.summary = "taskmapper Provider for Redmine"
52
+
53
+ if s.respond_to? :specification_version then
54
+ s.specification_version = 3
55
+
56
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
57
+ s.add_runtime_dependency(%q<taskmapper>, ["~> 0.7.0"])
58
+ s.add_development_dependency(%q<rspec>, ["~> 2.8"])
59
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6"])
60
+ s.add_development_dependency(%q<simplecov>, ["~> 0.5"])
61
+ s.add_development_dependency(%q<rcov>, ["~> 1.0"])
62
+ else
63
+ s.add_dependency(%q<taskmapper>, ["~> 0.7.0"])
64
+ s.add_dependency(%q<rspec>, ["~> 2.8"])
65
+ s.add_dependency(%q<jeweler>, ["~> 1.6"])
66
+ s.add_dependency(%q<simplecov>, ["~> 0.5"])
67
+ s.add_dependency(%q<rcov>, ["~> 1.0"])
68
+ end
69
+ else
70
+ s.add_dependency(%q<taskmapper>, ["~> 0.7.0"])
71
+ s.add_dependency(%q<rspec>, ["~> 2.8"])
72
+ s.add_dependency(%q<jeweler>, ["~> 1.6"])
73
+ s.add_dependency(%q<simplecov>, ["~> 0.5"])
74
+ s.add_dependency(%q<rcov>, ["~> 1.0"])
75
+ end
76
+ end
77
+
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: taskmapper-redmine
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.4.0
6
+ platform: ruby
7
+ authors:
8
+ - Rafael George
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-05-14 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: taskmapper
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: "0.8"
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rspec
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: "2.8"
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: jeweler
39
+ requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: "1.6"
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: simplecov
50
+ requirement: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: "0.5"
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: rcov
61
+ requirement: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: "1.0"
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *id005
70
+ description: Allows taskmapper to interact with Your System.
71
+ email: rafael@hybridgroup.com
72
+ executables: []
73
+
74
+ extensions: []
75
+
76
+ extra_rdoc_files:
77
+ - LICENSE
78
+ - README.md
79
+ files:
80
+ - .rbenv-gemsets
81
+ - .rvmrc
82
+ - .travis.yml
83
+ - Gemfile
84
+ - Gemfile.lock
85
+ - LICENSE
86
+ - README.md
87
+ - Rakefile
88
+ - VERSION
89
+ - lib/provider/api-extensions.rb
90
+ - lib/provider/comment.rb
91
+ - lib/provider/project.rb
92
+ - lib/provider/redmine.rb
93
+ - lib/provider/ticket.rb
94
+ - lib/redmine/redmine-api.rb
95
+ - lib/taskmapper-redmine.rb
96
+ - spec/comments_spec.rb
97
+ - spec/fixtures/issues.xml
98
+ - spec/fixtures/issues/1.xml
99
+ - spec/fixtures/projects.xml
100
+ - spec/fixtures/projects/test-repo12.xml
101
+ - spec/projects_spec.rb
102
+ - spec/spec.opts
103
+ - spec/spec_helper.rb
104
+ - spec/taskmapper-redmine_spec.rb
105
+ - spec/tickets_spec.rb
106
+ - ticketmaster-redmine.gemspec
107
+ homepage: http://github.com/hybridgroup/taskmapper-redmine
108
+ licenses: []
109
+
110
+ post_install_message:
111
+ rdoc_options: []
112
+
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: "0"
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: "0"
127
+ requirements: []
128
+
129
+ rubyforge_project:
130
+ rubygems_version: 1.8.17
131
+ signing_key:
132
+ specification_version: 3
133
+ summary: taskmapper Provider for Redmine
134
+ test_files: []
135
+