unfuddler 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  Unfuddler is a simple Ruby API to Unfuddle's projects and tickets. Primarily made for [ticketmaster](http://github.com/Sirupsen/ticketmaster).
4
4
 
5
+ ## Installation
6
+
7
+ The easiest way to install Unfuddler is via RubyGems:
8
+ # gem install unfuddler
9
+
10
+ If you live on the edge, clone this repository and run:
11
+ # rake install
12
+
5
13
  ## Usage
6
14
 
7
15
  First of all, authentiate with your information:
@@ -13,7 +21,7 @@ Now, find your project
13
21
  Get ALL the tickets from this project, where the status is "new"
14
22
  new_tickets = project.tickets(:status => "new")
15
23
 
16
- Let's close the last of these tickets, with a resolution.
24
+ Let's close the first of these tickets, with a resolution.
17
25
  new_tickets.first.close!(:resolution => "fixed", :description => "I fixed it!")
18
26
 
19
27
  ## Note on Patches/Pull Requests
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/lib/unfuddler.rb CHANGED
@@ -6,18 +6,17 @@
6
6
  active_support/core_ext/hash
7
7
  }.each {|lib| require lib}
8
8
 
9
-
10
9
  module Unfuddler
11
10
  class << self
12
11
  attr_accessor :username, :password, :subdomain, :http
13
12
 
14
13
  def authenticate(info)
15
- @username, @password, @subdomain = info[:username], info[:password], info[:subdomain]
14
+ @username, @password, @subdomain = info[:username] || info["username"], info[:password] || info["password"], info[:subdomain] || info["subdomain"]
16
15
  @http = Net::HTTP.new("#{@subdomain}.unfuddle.com", 80)
17
16
  end
18
17
 
19
18
  def request(type, url, data = nil)
20
- request = eval("Net::HTTP::#{type.capitalize}").new("/api/v1/#{url}", {'Content-type' => "application/xml"})
19
+ request = eval("Net::HTTP::#{type.to_s.capitalize}").new("/api/v1/#{url}", {'Content-type' => "application/xml"})
21
20
  request.basic_auth @username, @password
22
21
 
23
22
  request.body = data if data
@@ -31,21 +30,36 @@ module Unfuddler
31
30
  end
32
31
 
33
32
  [:get, :put, :post, :delete].each do |method|
34
- define_method(method) do |url, data = nil|
33
+ define_method(method) do |*args|
34
+ # Ruby 1.8 fix, in 1.9 we could just do define.. do |url, data = nil|
35
+ url, data = args
35
36
  request(method, url, data)
36
37
  end
37
38
  end
38
39
  end
39
40
 
40
41
  class Project < Hashie::Mash
41
- def self.find
42
+ def self.find(name = nil)
42
43
  projects = []
43
44
  Unfuddler.get("projects.xml")["projects"].each do |project|
44
45
  projects << Project.new(project)
45
46
  end
47
+
48
+ if name
49
+ right_project = nil
50
+ projects.each do |project|
51
+ right_project = project if project.short_name == name.to_s
52
+ end
53
+ return right_project
54
+ end
55
+
46
56
  projects
47
57
  end
48
58
 
59
+ def self.[](name = nil)
60
+ self.find(name)
61
+ end
62
+
49
63
  def tickets(argument = nil)
50
64
  Ticket.find(self.id, argument)
51
65
  end
@@ -109,14 +123,15 @@ module Unfuddler
109
123
 
110
124
  [:closed!, :new!, :unaccepted!, :reassigned!, :reopened!, :accepted!, :resolved!].each do |method|
111
125
  # Fix method names, e.g. #reassigned! => #reassign!
112
- length = method[0..-3] if method == :closed!
113
- length = method[0..-2] if [:new!, :resolved!].include?(method)
126
+ length = method.to_s[0..-3] if method == :closed!
127
+ length = method.to_s[0..-2] if [:new!, :resolved!].include?(method)
114
128
 
115
- define_method((length || method[0..-4]) + "!") do |resolution = {}|
116
- name = method[0..-2] # No "!"
129
+ define_method((length || method.to_s[0..-4]) + "!") do |*args|
130
+ name = method.to_s[0..-2] # No "!"
117
131
  update = {:status => name}
118
-
119
- if resolution
132
+
133
+ resolution = args.first
134
+ unless resolution.empty?
120
135
  # The API wants resolution-description for a resolutions description,
121
136
  # to make it more user-friendly, we convert this automatically
122
137
  resolution[:"resolution-description"] = resolution.delete(:description)
@@ -1,7 +1,7 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestUnfuddler < Test::Unit::TestCase
4
- context "an Unfuddler project instance" do
4
+ context "an Unfuddler project" do
5
5
  setup do
6
6
  Unfuddler.authenticate(:username => "", :password => "", :subdomain => "ticketmaster")
7
7
  @project = Unfuddler::Project.find.first
@@ -11,6 +11,14 @@ class TestUnfuddler < Test::Unit::TestCase
11
11
  assert @project.is_a?(Unfuddler::Project)
12
12
  end
13
13
 
14
+ should "find a project with name Test" do
15
+ assert_instance_of Unfuddler::Project, Unfuddler::Project.find("testproject")
16
+ end
17
+
18
+ should "find a project with name Test" do
19
+ assert_instance_of Unfuddler::Project, Unfuddler::Project["testproject"]
20
+ end
21
+
14
22
  should "have authentication information" do
15
23
  assert Unfuddler.subdomain.is_a?(String)
16
24
  assert Unfuddler.username.is_a?(String)
@@ -23,11 +31,23 @@ class TestUnfuddler < Test::Unit::TestCase
23
31
  assert tickets.last.is_a?(Unfuddler::Ticket)
24
32
  end
25
33
 
26
- context "with a ticket instance" do
34
+ should "create a new ticket" do
35
+ assert @project.ticket.create(:priority => "3", :summary => "TestTicket", :description => "This is a description for a test ticket.").empty?
36
+ end
37
+
38
+ should "find tickets by summary and description" do
39
+ assert_instance_of Unfuddler::Ticket, @project.tickets.find(:summary => "TestTicket", :description => "This is a description for a test ticket.").first
40
+ end
41
+
42
+ context "with new ticket instance" do
27
43
  setup do
28
44
  @ticket = @project.tickets.last
29
45
  end
30
46
 
47
+ should "have right summary" do
48
+ assert_equal "TestTicket", @ticket.summary
49
+ end
50
+
31
51
  should "be a ticket" do
32
52
  assert @ticket.is_a?(Unfuddler::Ticket)
33
53
  end
@@ -36,14 +56,14 @@ class TestUnfuddler < Test::Unit::TestCase
36
56
  assert @ticket.close!(:resolution => "fixed", :description => "Fixed it").empty?
37
57
  end
38
58
 
39
- should "reopen the last ticket" do
40
- assert @ticket.reopen!
59
+ should "have new resolution description" do
60
+ assert_equal "Fixed it", @ticket.resolution_description
41
61
  end
42
62
 
43
- should "delete the last ticket" do
63
+ #should "delete the last ticket" do
44
64
  # Should return an empty hash on success
45
- assert @ticket.delete.empty?
46
- end
65
+ # assert @ticket.delete.empty?
66
+ #end
47
67
  end
48
68
  end
49
69
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unfuddler
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 3
10
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
11
10
  platform: ruby
12
11
  authors:
13
12
  - Sirupsen
@@ -15,18 +14,16 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-05-25 00:00:00 +02:00
17
+ date: 2010-06-11 00:00:00 +02:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: shoulda
23
22
  prerelease: false
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
24
  requirements:
27
25
  - - ">="
28
26
  - !ruby/object:Gem::Version
29
- hash: 3
30
27
  segments:
31
28
  - 0
32
29
  version: "0"
@@ -36,11 +33,9 @@ dependencies:
36
33
  name: hashie
37
34
  prerelease: false
38
35
  requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
36
  requirements:
41
37
  - - ">="
42
38
  - !ruby/object:Gem::Version
43
- hash: 23
44
39
  segments:
45
40
  - 0
46
41
  - 2
@@ -52,11 +47,9 @@ dependencies:
52
47
  name: crack
53
48
  prerelease: false
54
49
  requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
50
  requirements:
57
51
  - - ">="
58
52
  - !ruby/object:Gem::Version
59
- hash: 23
60
53
  segments:
61
54
  - 0
62
55
  - 1
@@ -68,11 +61,9 @@ dependencies:
68
61
  name: activesupport
69
62
  prerelease: false
70
63
  requirement: &id004 !ruby/object:Gem::Requirement
71
- none: false
72
64
  requirements:
73
65
  - - ">="
74
66
  - !ruby/object:Gem::Version
75
- hash: 9
76
67
  segments:
77
68
  - 2
78
69
  - 3
@@ -99,7 +90,6 @@ files:
99
90
  - lib/unfuddler.rb
100
91
  - test/helper.rb
101
92
  - test/test_unfuddler.rb
102
- - unfuddler.gemspec
103
93
  has_rdoc: true
104
94
  homepage: http://github.com/Sirupsen/unfuddler
105
95
  licenses: []
@@ -110,30 +100,26 @@ rdoc_options:
110
100
  require_paths:
111
101
  - lib
112
102
  required_ruby_version: !ruby/object:Gem::Requirement
113
- none: false
114
103
  requirements:
115
104
  - - ">="
116
105
  - !ruby/object:Gem::Version
117
- hash: 3
118
106
  segments:
119
107
  - 0
120
108
  version: "0"
121
109
  required_rubygems_version: !ruby/object:Gem::Requirement
122
- none: false
123
110
  requirements:
124
111
  - - ">="
125
112
  - !ruby/object:Gem::Version
126
- hash: 3
127
113
  segments:
128
114
  - 0
129
115
  version: "0"
130
116
  requirements: []
131
117
 
132
118
  rubyforge_project:
133
- rubygems_version: 1.3.7
119
+ rubygems_version: 1.3.6
134
120
  signing_key:
135
121
  specification_version: 3
136
122
  summary: Provides a simple Ruby API to Unfuddle.
137
123
  test_files:
138
- - test/helper.rb
139
124
  - test/test_unfuddler.rb
125
+ - test/helper.rb
data/unfuddler.gemspec DELETED
@@ -1,63 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{unfuddler}
8
- s.version = "0.0.3"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Sirupsen"]
12
- s.date = %q{2010-05-25}
13
- s.description = %q{Provides a simple Ruby API to Unfuddle.}
14
- s.email = %q{sirup@sirupsen.dk}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.md"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.md",
24
- "Rakefile",
25
- "VERSION",
26
- "lib/unfuddler.rb",
27
- "test/helper.rb",
28
- "test/test_unfuddler.rb",
29
- "unfuddler.gemspec"
30
- ]
31
- s.homepage = %q{http://github.com/Sirupsen/unfuddler}
32
- s.rdoc_options = ["--charset=UTF-8"]
33
- s.require_paths = ["lib"]
34
- s.rubygems_version = %q{1.3.7}
35
- s.summary = %q{Provides a simple Ruby API to Unfuddle.}
36
- s.test_files = [
37
- "test/helper.rb",
38
- "test/test_unfuddler.rb"
39
- ]
40
-
41
- if s.respond_to? :specification_version then
42
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
43
- s.specification_version = 3
44
-
45
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
- s.add_development_dependency(%q<shoulda>, [">= 0"])
47
- s.add_runtime_dependency(%q<hashie>, [">= 0.2.0"])
48
- s.add_runtime_dependency(%q<crack>, [">= 0.1.6"])
49
- s.add_runtime_dependency(%q<activesupport>, [">= 2.3.5"])
50
- else
51
- s.add_dependency(%q<shoulda>, [">= 0"])
52
- s.add_dependency(%q<hashie>, [">= 0.2.0"])
53
- s.add_dependency(%q<crack>, [">= 0.1.6"])
54
- s.add_dependency(%q<activesupport>, [">= 2.3.5"])
55
- end
56
- else
57
- s.add_dependency(%q<shoulda>, [">= 0"])
58
- s.add_dependency(%q<hashie>, [">= 0.2.0"])
59
- s.add_dependency(%q<crack>, [">= 0.1.6"])
60
- s.add_dependency(%q<activesupport>, [">= 2.3.5"])
61
- end
62
- end
63
-