ticketmaster-trac 0.0.1 → 0.1.1
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 +4 -0
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/provider/comment.rb +17 -0
- data/lib/provider/ticket.rb +25 -6
- data/lib/provider/trac.rb +1 -1
- data/lib/ticketmaster-trac.rb +2 -0
- data/lib/trac/trac.rb +37 -1
- data/spec/comments_spec.rb +44 -1
- data/ticketmaster-trac.gemspec +82 -0
- metadata +19 -4
data/README.md
CHANGED
@@ -22,6 +22,10 @@ Right now Trac doesn't support project handling, that's why you will use a proje
|
|
22
22
|
|
23
23
|
ticket = project.ticket!({:summary => "New ticket", :description=> "Body for the very new ticket"}, attributes) # summary and description are mandatory fields the attributes hash will contain all the optional info that you need for your ticket, have to use the fields provided by Trac api.
|
24
24
|
|
25
|
+
== Finding comments
|
26
|
+
|
27
|
+
comments = project.tickets.first.comments # All the tickets facility for searchs are available for comments as well
|
28
|
+
|
25
29
|
|
26
30
|
## Requirements
|
27
31
|
|
data/Rakefile
CHANGED
@@ -16,6 +16,7 @@ begin
|
|
16
16
|
gem.add_dependency "activeresource", ">= 2.3.2"
|
17
17
|
gem.add_dependency "addressable", ">= 2.1.2"
|
18
18
|
gem.add_dependency "trac4r"
|
19
|
+
gem.add_dependency "nokogiri"
|
19
20
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
20
21
|
end
|
21
22
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.1.1
|
data/lib/provider/comment.rb
CHANGED
@@ -8,6 +8,23 @@ module TicketMaster::Provider
|
|
8
8
|
class Comment < TicketMaster::Provider::Base::Comment
|
9
9
|
# declare needed overloaded methods here
|
10
10
|
|
11
|
+
def initialize(*object)
|
12
|
+
if object.first
|
13
|
+
object = object.first
|
14
|
+
unless object.is_a? Hash
|
15
|
+
@system_data = {:client => object}
|
16
|
+
hash = {:id => object.id,
|
17
|
+
:author => object.author,
|
18
|
+
:body => object.body,
|
19
|
+
:ticket_id => object.ticket_id,
|
20
|
+
:created_at => object.created_at,
|
21
|
+
:updated_at => object.updated_at}
|
22
|
+
else
|
23
|
+
hash = object
|
24
|
+
end
|
25
|
+
super(hash)
|
26
|
+
end
|
27
|
+
end
|
11
28
|
end
|
12
29
|
end
|
13
30
|
end
|
data/lib/provider/ticket.rb
CHANGED
@@ -49,14 +49,33 @@ module TicketMaster::Provider
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
def comments
|
53
|
-
|
54
|
-
|
52
|
+
def comments(*options)
|
53
|
+
comments = CommentUtil.new(self.id).comments.collect { |comment| TicketMaster::Provider::Trac::Comment.new comment }
|
54
|
+
if options.first.is_a? Array
|
55
|
+
comments.select do |comment|
|
56
|
+
comment if options.first.any? { |id| id == comment.id }
|
57
|
+
end
|
58
|
+
elsif options.first.is_a? Hash
|
59
|
+
hash = options.first
|
60
|
+
comments.select do |key, value|
|
61
|
+
hash[key] == value
|
62
|
+
end
|
63
|
+
else
|
64
|
+
comments
|
65
|
+
end
|
55
66
|
end
|
56
67
|
|
57
|
-
def comment
|
58
|
-
|
59
|
-
|
68
|
+
def comment(*options)
|
69
|
+
comments = CommentUtil.new(self.id).comments.collect { |comment| TicketMaster::Provider::Trac::Comment.new comment }
|
70
|
+
if options.empty?
|
71
|
+
TicketMaster::Provider::Trac::Comment.new
|
72
|
+
elsif options.first.is_a? Fixnum
|
73
|
+
comments.select { |comment| comment[:id] == options.first }.first
|
74
|
+
elsif options.first.is_a? Hash
|
75
|
+
comments.select do |key, value|
|
76
|
+
options.first[key] == value
|
77
|
+
end.first
|
78
|
+
end
|
60
79
|
end
|
61
80
|
|
62
81
|
def comment!
|
data/lib/provider/trac.rb
CHANGED
@@ -12,7 +12,7 @@ module TicketMaster::Provider
|
|
12
12
|
@authentication ||= TicketMaster::Authenticator.new(auth)
|
13
13
|
auth = @authentication
|
14
14
|
@trac = ::Trac.new(auth.url, auth.username, auth.password)
|
15
|
-
TracAPI.new @trac, auth.url, auth.username
|
15
|
+
TracAPI.new @trac, auth.url, auth.username, auth.password
|
16
16
|
end
|
17
17
|
|
18
18
|
# declare needed overloaded methods here
|
data/lib/ticketmaster-trac.rb
CHANGED
data/lib/trac/trac.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# code to communicate with your backend goes here...
|
2
2
|
|
3
3
|
class TracAPI
|
4
|
-
def initialize(trac, username,
|
4
|
+
def initialize(trac, url, username, password)
|
5
5
|
@@api = trac
|
6
6
|
@@username = username
|
7
7
|
@@url = url
|
8
|
+
@@password = password
|
8
9
|
end
|
9
10
|
|
10
11
|
def self.api
|
@@ -18,6 +19,41 @@ class TracAPI
|
|
18
19
|
def self.username
|
19
20
|
@@username
|
20
21
|
end
|
22
|
+
|
23
|
+
def self.password
|
24
|
+
@@password
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class CommentUtil
|
29
|
+
|
30
|
+
def initialize(ticket_id)
|
31
|
+
@doc = Nokogiri::HTML(open("#{TracAPI.url}/ticket/#{ticket_id}", :http_basic_authentication=>[TracAPI.username, TracAPI.password]))
|
32
|
+
end
|
33
|
+
|
34
|
+
def comments
|
35
|
+
comment_id = 0
|
36
|
+
@doc.css('h3.change a.timeline').collect do |value|
|
37
|
+
body = @doc.css('div.comment p')
|
38
|
+
comment_id += 1
|
39
|
+
build_comment_hash(value, comment_id, body[comment_id-1].text)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def build_comment_hash(value, comment_id, body)
|
45
|
+
comment = {}
|
46
|
+
comment[:created_at] = date_from_attributes(value)
|
47
|
+
comment[:updated_at] = date_from_attributes(value)
|
48
|
+
comment[:ticket_id] = @ticket_id
|
49
|
+
comment[:body] = body
|
50
|
+
comment[:id] = comment_id
|
51
|
+
comment
|
52
|
+
end
|
53
|
+
|
54
|
+
def date_from_attributes(value)
|
55
|
+
value.attributes["title"].value.split(/\s/)[0]
|
56
|
+
end
|
21
57
|
end
|
22
58
|
|
23
59
|
|
data/spec/comments_spec.rb
CHANGED
@@ -1,5 +1,48 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe "Ticketmaster::Provider::Trac::Comment" do
|
4
|
-
|
4
|
+
before(:each) do
|
5
|
+
@ticketmaster = TicketMaster.new(:trac, {:username => 'george.rafael@gmail.com', :password => '123456', :url => 'http://pl3.projectlocker.com/cored/testrepo/trac'})
|
6
|
+
@project = @ticketmaster.projects.first
|
7
|
+
@ticket = @project.tickets.first
|
8
|
+
@klass = TicketMaster::Provider::Trac::Comment
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should load all comments from a ticket" do
|
12
|
+
@ticket.comments.should be_an_instance_of(Array)
|
13
|
+
@ticket.comments.first.should be_an_instance_of(@klass)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should be able to load all comments based on id's" do
|
17
|
+
@comments = @ticket.comments([1,2])
|
18
|
+
@comments.should be_an_instance_of(Array)
|
19
|
+
@comments.first.id.should == 1
|
20
|
+
@comments.last.id.should == 2
|
21
|
+
@comments[1].should be_an_instance_of(@klass)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be able to load comments throught attributes" do
|
25
|
+
@comments = @ticket.comments(:ticket_id => 1)
|
26
|
+
@comments.should be_an_instance_of(Array)
|
27
|
+
@comments.first.id.should == 1
|
28
|
+
@comments.last.id.should == 2
|
29
|
+
@comments[1].should be_an_instance_of(@klass)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should be able to load a comment based on id" do
|
33
|
+
@comment = @ticket.comment(2)
|
34
|
+
@comment.should be_an_instance_of(@klass)
|
35
|
+
@comment.id.should == 2
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return the comment class" do
|
39
|
+
@ticket.comment.should be_an_instance_of(@klass)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should be able to load a comment using attributes" do
|
43
|
+
@comment = @ticket.comment(:ticket_id => 1)
|
44
|
+
@comment.should be_an_instance_of(@klass)
|
45
|
+
@comment.id.should == 1
|
46
|
+
end
|
47
|
+
|
5
48
|
end
|
@@ -0,0 +1,82 @@
|
|
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 = %q{ticketmaster-trac}
|
8
|
+
s.version = "0.1.1"
|
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 = %q{2011-01-06}
|
13
|
+
s.description = %q{Allows ticketmaster to interact with Your System.}
|
14
|
+
s.email = %q{george.rafael@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
"LICENSE",
|
21
|
+
"README.md",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"lib/provider/comment.rb",
|
25
|
+
"lib/provider/project.rb",
|
26
|
+
"lib/provider/ticket.rb",
|
27
|
+
"lib/provider/trac.rb",
|
28
|
+
"lib/ticketmaster-trac.rb",
|
29
|
+
"lib/trac/trac.rb",
|
30
|
+
"spec/comments_spec.rb",
|
31
|
+
"spec/fixtures/tickets.xml",
|
32
|
+
"spec/projects_spec.rb",
|
33
|
+
"spec/spec.opts",
|
34
|
+
"spec/spec_helper.rb",
|
35
|
+
"spec/ticketmaster-trac_spec.rb",
|
36
|
+
"spec/tickets_spec.rb",
|
37
|
+
"ticketmaster-trac.gemspec"
|
38
|
+
]
|
39
|
+
s.homepage = %q{http://bandw.tumblr.com}
|
40
|
+
s.require_paths = ["lib"]
|
41
|
+
s.rubygems_version = %q{1.3.7}
|
42
|
+
s.summary = %q{Ticketmaster Provider for Trac}
|
43
|
+
s.test_files = [
|
44
|
+
"spec/comments_spec.rb",
|
45
|
+
"spec/projects_spec.rb",
|
46
|
+
"spec/spec_helper.rb",
|
47
|
+
"spec/ticketmaster-trac_spec.rb",
|
48
|
+
"spec/tickets_spec.rb"
|
49
|
+
]
|
50
|
+
|
51
|
+
if s.respond_to? :specification_version then
|
52
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
53
|
+
s.specification_version = 3
|
54
|
+
|
55
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
56
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
57
|
+
s.add_runtime_dependency(%q<ticketmaster>, [">= 0.1.0"])
|
58
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 2.3.2"])
|
59
|
+
s.add_runtime_dependency(%q<activeresource>, [">= 2.3.2"])
|
60
|
+
s.add_runtime_dependency(%q<addressable>, [">= 2.1.2"])
|
61
|
+
s.add_runtime_dependency(%q<trac4r>, [">= 0"])
|
62
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
63
|
+
else
|
64
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
65
|
+
s.add_dependency(%q<ticketmaster>, [">= 0.1.0"])
|
66
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.2"])
|
67
|
+
s.add_dependency(%q<activeresource>, [">= 2.3.2"])
|
68
|
+
s.add_dependency(%q<addressable>, [">= 2.1.2"])
|
69
|
+
s.add_dependency(%q<trac4r>, [">= 0"])
|
70
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
71
|
+
end
|
72
|
+
else
|
73
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
74
|
+
s.add_dependency(%q<ticketmaster>, [">= 0.1.0"])
|
75
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.2"])
|
76
|
+
s.add_dependency(%q<activeresource>, [">= 2.3.2"])
|
77
|
+
s.add_dependency(%q<addressable>, [">= 2.1.2"])
|
78
|
+
s.add_dependency(%q<trac4r>, [">= 0"])
|
79
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ticketmaster-trac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rafael George
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-06 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -112,6 +112,20 @@ dependencies:
|
|
112
112
|
version: "0"
|
113
113
|
type: :runtime
|
114
114
|
version_requirements: *id006
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: nokogiri
|
117
|
+
prerelease: false
|
118
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
hash: 3
|
124
|
+
segments:
|
125
|
+
- 0
|
126
|
+
version: "0"
|
127
|
+
type: :runtime
|
128
|
+
version_requirements: *id007
|
115
129
|
description: Allows ticketmaster to interact with Your System.
|
116
130
|
email: george.rafael@gmail.com
|
117
131
|
executables: []
|
@@ -139,6 +153,7 @@ files:
|
|
139
153
|
- spec/spec_helper.rb
|
140
154
|
- spec/ticketmaster-trac_spec.rb
|
141
155
|
- spec/tickets_spec.rb
|
156
|
+
- ticketmaster-trac.gemspec
|
142
157
|
has_rdoc: true
|
143
158
|
homepage: http://bandw.tumblr.com
|
144
159
|
licenses: []
|