ticketmaster-zendesk 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Binary file
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,67 @@
1
+ # ticketmaster-redmine
2
+
3
+ This is a provider for [ticketmaster](http://ticketrb.com). It provides interoperability with [Zendesk](http://www.zendesk.com) and it's issue tracking system through the ticketmaster gem.
4
+
5
+ Right now this provider only supports reading operations.
6
+
7
+ # Usage and Examples
8
+
9
+ First we have to instantiate a new ticketmaster instance:
10
+
11
+ zendesk = TicketMaster.new(:zendesk, {:account => 'hybridgroup', :username => "foo", :password => "bar"})
12
+
13
+ If you do not pass in account, username and password, you won't get any information.
14
+
15
+ ## Finding Projects
16
+
17
+ You can find your own projects by doing:
18
+
19
+ projects = zendesk.projects # Will return all your repositories
20
+ projects = zendesk.projects(['your_repo1']) # You must use your projects identifier
21
+ project = zendesk.project('your_repo') # Also use project identifier in here
22
+
23
+ Note: Zendesk dosen't support a projects which means this is a ticketmaster place holder object, you will always get the same project name as follows: 'accountname-project'.
24
+
25
+
26
+ ## Finding Tickets
27
+
28
+ tickets = project.tickets # All open issues
29
+ tickets = project.tickets([1,2]) # An array of tickets with the specified id's
30
+ ticket = project.ticket(<issue_number>)
31
+
32
+ ## Finding Comments
33
+
34
+ comments = tickets.comments
35
+ comments = tickets.comments([1,2]) # An array of comments with the specified id's
36
+
37
+
38
+ ## Requirements
39
+
40
+ * rubygems (obviously)
41
+ * ticketmaster gem (latest version preferred)
42
+ * jeweler gem (only if you want to repackage and develop)
43
+
44
+ The ticketmaster gem should automatically be installed during the installation of this gem if it is not already installed.
45
+
46
+ ## Other Notes
47
+
48
+ Since this and the ticketmaster 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.
49
+
50
+ If you see or find any issues, feel free to open up an issue report.
51
+
52
+
53
+ ## Note on Patches/Pull Requests
54
+
55
+ * Fork the project.
56
+ * Make your feature addition or bug fix.
57
+ * Add tests for it. This is important so we don't break it in a
58
+ future version unintentionally.
59
+ * Commit, do not mess with rakefile, version, or history.
60
+ (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)
61
+ * Send us a pull request. Bonus points for topic branches.
62
+
63
+ ## Copyright
64
+
65
+ Copyright (c) 2010 The Hybrid Group. See LICENSE for details.
66
+
67
+
@@ -0,0 +1,50 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "ticketmaster-zendesk"
8
+ gem.summary = %Q{Ticketmaster Provider for Zendesk}
9
+ gem.description = %Q{Allows ticketmaster to interact with Your System.}
10
+ gem.email = "george.rafael@gmail.com"
11
+ gem.homepage = "http://bandw.tumblr.com"
12
+ gem.authors = ["Rafael George"]
13
+ gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ gem.add_dependency "ticketmaster", ">= 0.1.0"
15
+ gem.add_dependency "activesupport", ">= 2.3.2"
16
+ gem.add_dependency "activeresource", ">= 2.3.2"
17
+ gem.add_dependency "addressable", ">= 2.1.2"
18
+ gem.add_dependency "i18n"
19
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
20
+ end
21
+ Jeweler::GemcutterTasks.new
22
+ rescue LoadError
23
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
24
+ end
25
+
26
+ require 'spec/rake/spectask'
27
+ Spec::Rake::SpecTask.new(:spec) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.spec_files = FileList['spec/**/*_spec.rb']
30
+ end
31
+
32
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
33
+ spec.libs << 'lib' << 'spec'
34
+ spec.pattern = 'spec/**/*_spec.rb'
35
+ spec.rcov = true
36
+ end
37
+
38
+ task :spec => :check_dependencies
39
+
40
+ task :default => :spec
41
+
42
+ require 'rake/rdoctask'
43
+ Rake::RDocTask.new do |rdoc|
44
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
45
+
46
+ rdoc.rdoc_dir = 'rdoc'
47
+ rdoc.title = "ticketmaster-yourprovider #{version}"
48
+ rdoc.rdoc_files.include('README*')
49
+ rdoc.rdoc_files.include('lib/**/*.rb')
50
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
Binary file
@@ -0,0 +1,70 @@
1
+ module TicketMaster::Provider
2
+ module Zendesk
3
+ # The comment class for ticketmaster-zendesk
4
+ #
5
+ # Do any mapping between Ticketmaster and your system's comment model here
6
+ # versions of the ticket.
7
+ #
8
+ class Comment < TicketMaster::Provider::Base::Comment
9
+ # declare needed overloaded methods here
10
+
11
+ def initialize(*object)
12
+ if object.first
13
+ object = object.first
14
+ ticket_id = object.shift
15
+ project_id = object.shift
16
+ comment_id = object.shift
17
+ object = object.shift
18
+ @system_data = {:client => object}
19
+ unless object.is_a? Hash
20
+ hash = {:author => object.author_id,
21
+ :body => object.value,
22
+ :id => comment_id,
23
+ :created_at => object.created_at,
24
+ :updated_at => object.created_at,
25
+ :ticket_id => ticket_id,
26
+ :project_id => project_id}
27
+ else
28
+ hash = object
29
+ end
30
+ super hash
31
+ end
32
+ end
33
+
34
+ def created_at
35
+ Time.parse(self[:created_at])
36
+ end
37
+
38
+ def updated_at
39
+ Time.parse(self[:updated_at])
40
+ end
41
+
42
+ def self.find_all(*options)
43
+ project_id = options.shift
44
+ ticket_id = options.shift
45
+ comment_id = 0
46
+ ZendeskAPI::Ticket.find(ticket_id).comments.collect do |comment|
47
+ comment_id += 1
48
+ Comment.new [ticket_id, project_id, comment_id, comment]
49
+ end
50
+ end
51
+
52
+ def self.find_by_attributes(project_id, ticket_id, attributes = {})
53
+ self.find_all(project_id, ticket_id).select do |comment|
54
+ attributes.inject(true) do |memo, kv|
55
+ break unless memo
56
+ key, value = kv
57
+ begin
58
+ memo &= comment.send(key) == value
59
+ rescue NoMethodError
60
+ memo = false
61
+ end
62
+ memo
63
+ end
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,64 @@
1
+ module TicketMaster::Provider
2
+ module Zendesk
3
+ # Project class for ticketmaster-zendesk
4
+ #
5
+ #
6
+ class Project < TicketMaster::Provider::Base::Project
7
+ attr_accessor :prefix_options
8
+ #API = ZendeskAPI::Organization
9
+ # declare needed overloaded methods here
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 = {:repository => object.account,
17
+ :user => object.username,
18
+ :name => object.name}
19
+ else
20
+ hash = object
21
+ end
22
+ super hash
23
+ end
24
+ end
25
+
26
+ # copy from this.copy(that) copies that into this
27
+ def copy(project)
28
+ project.tickets.each do |ticket|
29
+ copy_ticket = self.ticket!(:title => ticket.title, :description => ticket.description)
30
+ ticket.comments.each do |comment|
31
+ copy_ticket.comment!(:body => comment.body)
32
+ sleep 1
33
+ end
34
+ end
35
+ end
36
+
37
+ def tickets(*options)
38
+ if options.empty?
39
+ Ticket.find_all(self.name).collect { |ticket| Ticket.new [ticket, self.name]}
40
+ elsif options.first.is_a? Array
41
+ Ticket.find_all(self.name).select { |ticket| ticket if options.first.any? { |ticket_id| ticket_id == ticket.id }}
42
+ elsif options.first.is_a? Hash
43
+ Ticket.find_by_attributes(self.name, options.first)
44
+ end
45
+ end
46
+
47
+ def ticket(*options)
48
+ if options.first.is_a? Fixnum
49
+ ticket_id = options.first
50
+ Ticket.find_by_id(ticket_id)
51
+ elsif options.first.is_a? Hash
52
+ Ticket.find_by_attributes(self.name, options.first).first
53
+ else
54
+ TicketMaster::Provider::Zendesk::Ticket
55
+ end
56
+ end
57
+
58
+ def ticket!(*options)
59
+ Ticket.new [ZendeskAPI::Ticket.create(options.first), self.name]
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,101 @@
1
+
2
+ module TicketMaster::Provider
3
+ module Zendesk
4
+
5
+ class Ticket < TicketMaster::Provider::Base::Ticket
6
+ # declare needed overloaded methods here
7
+
8
+ SEARCH_API = ZendeskAPI::Search
9
+ API = ZendeskAPI::Ticket
10
+
11
+ def initialize(*object)
12
+ if object.first
13
+ args = object.first
14
+ object = args.shift
15
+ project_id = args.shift
16
+ @system_data = {:client => object}
17
+ unless object.is_a? Hash
18
+ hash = {:id => object.nice_id,
19
+ :status => object.status_id,
20
+ :title => object.subject,
21
+ :created_at => object.created_at,
22
+ :updated_at => object.updated_at,
23
+ :description => object.description,
24
+ :assignee => object.assignee_id,
25
+ :requestor => object.requester_id,
26
+ :priority => object.priority_id,
27
+ :project_id => project_id}
28
+ else
29
+ hash = object
30
+ end
31
+ super hash
32
+ end
33
+ end
34
+
35
+ def created_at
36
+ Time.parse(self[:created_at])
37
+ end
38
+
39
+ def updated_at
40
+ Time.parse(self[:updated_at])
41
+ end
42
+
43
+ def self.find_all(*options)
44
+ project_id = options.first
45
+ SEARCH_API.find(:all, :params => {:query => "status:open"}).collect { |ticket| self.new [ticket, project_id]}
46
+ end
47
+
48
+ def self.find_by_id(*options)
49
+ id = options.shift
50
+ project_id = options.shift
51
+ self.new [API.find(id), project_id]
52
+ end
53
+
54
+ def self.find_by_attributes(project_id, attributes = {})
55
+ self.find_all(project_id).select do |ticket|
56
+ attributes.inject(true) do |memo, kv|
57
+ break unless memo
58
+ key, value = kv
59
+ begin
60
+ memo &= ticket.send(key) == value
61
+ rescue NoMethodError
62
+ memo = false
63
+ end
64
+ memo
65
+ end
66
+ end
67
+ end
68
+
69
+ def comments(*options)
70
+ if options.first.is_a? Array
71
+ ticket_comments.select do |comment|
72
+ comment if options.first.any? { |comment_id| comment_id == comment.id }
73
+ end
74
+ elsif options.first.is_a? Hash
75
+ comments_find_by_attributes(options.first)
76
+ else
77
+ ticket_comments
78
+ end
79
+ end
80
+
81
+ def comment(*options)
82
+ unless options.first.is_a? Hash
83
+ ticket_comments.select { |comment| comment.id == options.first }.first
84
+ else
85
+ comments_find_by_attributes(options.first).first
86
+ end
87
+ end
88
+
89
+ private
90
+ def ticket_comments
91
+ Comment.find_all(self[:project_id], self[:id])
92
+ end
93
+
94
+ def comments_find_by_attributes(attributes)
95
+ Comment.find_by_attributes(self[:project_id], self[:id], attributes)
96
+ end
97
+
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,36 @@
1
+ require 'ticketmaster'
2
+ module TicketMaster::Provider
3
+ # This is the Zendesk Provider for ticketmaster
4
+ module Zendesk
5
+ include TicketMaster::Provider::Base
6
+ #PROJECT_API = ZendeskAPI::Organization
7
+
8
+ # This is for cases when you want to instantiate using TicketMaster::Provider::Yoursystem.new(auth)
9
+ def self.new(auth = {})
10
+ TicketMaster.new(:zendesk, auth)
11
+ end
12
+
13
+ # The authorize and initializer for this provider
14
+ def authorize(auth = {})
15
+ @authentication ||= TicketMaster::Authenticator.new(auth)
16
+ auth = @authentication
17
+ if (auth.account.nil? and auth.username.nil? and auth.password.nil?)
18
+ raise "Please provide at least an url (subdomain), username and password)"
19
+ end
20
+ ZendeskAPI.authenticate(auth.account, auth.username, auth.password)
21
+ end
22
+
23
+ def projects(*options)
24
+ [Project.new({:account => @authentication.account, :username => @authentication.username, :name => "#{@authentication.account}-project"})]
25
+ end
26
+
27
+ def project(*options)
28
+ unless options.empty?
29
+ Project.new({:account => @authentication.account, :username => @authentication.username, :name => "#{@authentication.account}-project"})
30
+ else
31
+ TicketMaster::Provider::Zendesk::Project
32
+ end
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,6 @@
1
+ require File.dirname(__FILE__) + '/zendesk/zendesk-api'
2
+
3
+ %w{ zendesk ticket project comment }.each do |f|
4
+ require File.dirname(__FILE__) + '/provider/' + f + '.rb';
5
+ end
6
+
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_resource'
4
+
5
+ module ZendeskAPI
6
+ class Error < StandardError; end
7
+
8
+ class << self
9
+
10
+ def authenticate(account, username, password)
11
+ @username = username
12
+ @password = password
13
+ self::Base.user = username
14
+ self::Base.password = password
15
+ self::Base.site = "http://#{account}.zendesk.com"
16
+ end
17
+
18
+ def resources
19
+ @resources ||= []
20
+ end
21
+
22
+ end
23
+
24
+ class Base < ActiveResource::Base
25
+ self.format = :json
26
+ def self.inherited(base)
27
+ ZendeskAPI.resources << base
28
+ super
29
+ end
30
+ end
31
+
32
+ class Search < Base
33
+
34
+ def self.collection_path(prefix_options = {}, query_options = nil)
35
+ prefix_options, query_options = split_options(prefix_options) if query_options.nil?
36
+ "#{prefix(prefix_options)}search.#{format.extension}#{query_string(query_options)}"
37
+ end
38
+
39
+ def self.element_path(id, prefix_options = {}, query_options = nil)
40
+ prefix_options, query_options = split_options(prefix_options) if query_options.nil?
41
+ "#{prefix(prefix_options)}search.#{format.extension}#{query_string(query_options)}"
42
+ end
43
+
44
+ end
45
+
46
+ class Ticket < Base
47
+ end
48
+
49
+ end
Binary file
@@ -0,0 +1,53 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Ticketmaster::Provider::Zendesk::Comment" do
4
+
5
+ before(:all) do
6
+ @project_id = 'hybridgroup-project'
7
+ @ticket_id = 1
8
+ headers = {'Authorization' => 'Basic cmFmYWVsQGh5YnJpZGdyb3VwLmNvbToxMjM0NTY=','Accept' => 'application/json'}
9
+ ActiveResource::HttpMock.respond_to do |mock|
10
+ mock.get '/tickets/1.json', headers, fixture_for('ticket','json'), 200
11
+ end
12
+ end
13
+
14
+ before(:each) do
15
+ @ticketmaster = TicketMaster.new(:zendesk, :account => 'hybridgroup', :username => 'rafael@hybridgroup.com', :password => '123456')
16
+ project = @ticketmaster.project(@project_id)
17
+ @ticket = project.ticket(@ticket_id)
18
+ @klass = TicketMaster::Provider::Zendesk::Comment
19
+ end
20
+
21
+ it "should be able to load all comments" do
22
+ comments = @ticket.comments
23
+ comments.should be_an_instance_of(Array)
24
+ comments.first.should be_an_instance_of(@klass)
25
+ end
26
+
27
+ it "should be able to load all comments based on an array of id's" do
28
+ comments = @ticket.comments([1])
29
+ comments.should be_an_instance_of(Array)
30
+ comments.first.should be_an_instance_of(@klass)
31
+ comments.first.id.should == 1
32
+ end
33
+
34
+ it "should be able to load all comments based on attributes" do
35
+ comments = @ticket.comments(:ticket_id => @ticket.id)
36
+ comments.should be_an_instance_of(Array)
37
+ comments.first.should be_an_instance_of(@klass)
38
+ comments.first.id.should == 1
39
+ end
40
+
41
+ it "should be able to load a comment based on id" do
42
+ comment = @ticket.comment(1)
43
+ comment.should be_an_instance_of(@klass)
44
+ comment.id.should == 1
45
+ end
46
+
47
+ it "should be able to load a ticket based on attributes" do
48
+ comment = @ticket.comment(:ticket_id => 1)
49
+ comment.should be_an_instance_of(@klass)
50
+ comment.id.should == 1
51
+ end
52
+
53
+ end
Binary file
@@ -0,0 +1 @@
1
+ {"nice_id":1,"initially_assigned_at":"2011/01/31 14:09:12 -0400","entry_id":null,"created_at":"2011/01/31 14:09:12 -0400","resolution_time":null,"priority_id":1,"current_tags":null,"assignee_id":26218414,"channel":null,"updated_at":"2011/01/31 14:09:12 -0400","ticket_type_id":3,"status_updated_at":"2011/01/31 14:09:12 -0400","solved_at":null,"original_recipient_address":null,"external_id":null,"assigned_at":"2011/01/31 14:09:12 -0400","via_id":0,"subject":"Testing","recipient":null,"group_id":121752,"comments":[{"created_at":"2011/01/31 14:09:12 -0400","via_id":0,"value":"Testing","type":"Comment","is_public":true,"author_id":26218414,"attachments":[]}],"linkings":[],"submitter_id":26218414,"base_score":18,"latest_recipients":null,"due_date":null,"current_collaborators":null,"status_id":1,"description":"Testing","ticket_field_entries":[],"problem_id":null,"score":18,"organization_id":457249,"updated_by_type_id":0,"requester_id":26218414}
@@ -0,0 +1 @@
1
+ [{"nice_id":1,"initially_assigned_at":"2011/01/31 14:09:12 -0400","entry_id":null,"created_at":"2011/01/31 14:09:12 -0400","resolution_time":null,"priority_id":1,"current_tags":null,"assignee_id":26218414,"channel":null,"updated_at":"2011/01/31 14:09:12 -0400","ticket_type_id":3,"status_updated_at":"2011/01/31 14:09:12 -0400","solved_at":null,"original_recipient_address":null,"external_id":null,"assigned_at":"2011/01/31 14:09:12 -0400","via_id":0,"subject":"Testing","recipient":null,"group_id":121752,"comments":[{"created_at":"2011/01/31 14:09:12 -0400","via_id":0,"value":"Testing","type":"Comment","is_public":true,"author_id":26218414,"attachments":[]}],"linkings":[],"submitter_id":26218414,"base_score":18,"latest_recipients":null,"due_date":null,"current_collaborators":null,"status_id":1,"description":"Testing","ticket_field_entries":[],"problem_id":null,"score":18,"organization_id":457249,"updated_by_type_id":0,"requester_id":26218414},{"nice_id":2,"initially_assigned_at":"2011/01/31 14:30:31 -0400","entry_id":null,"created_at":"2011/01/31 14:30:31 -0400","resolution_time":null,"priority_id":0,"current_tags":null,"assignee_id":26218414,"channel":null,"updated_at":"2011/01/31 14:30:31 -0400","ticket_type_id":0,"status_updated_at":"2011/01/31 14:30:31 -0400","solved_at":null,"original_recipient_address":null,"external_id":null,"assigned_at":"2011/01/31 14:30:31 -0400","via_id":4,"subject":"Welcome to Zendesk, You've Got a Ticket!","recipient":"support@hybridgroup.zendesk.com","group_id":121752,"comments":[{"created_at":"2011/01/31 14:30:31 -0400","via_id":4,"value":"You've got a new ticket!\n\nTo help you get started learning how your zendesk simplifies ticket workflow, I emailed you at support@hybridgroup.zendesk.com and this ticket was created in your zendesk. Neat!\n\nYou can answer this ticket in one of two ways:\n\nBy Email: If you are looking at this in your email inbox, simply hit \"Reply\"\n\nBy Zendesk: If you are looking at this ticket in your zendesk:\n\n* Enter a comment (e.g. \"How am I doing?\")\n* Change status from Open to Pending (now, you’re waiting for me to get back to you!)\n* Click submit\n\nEither way, both your reply and follow-ups will be added to the ticket history and organized in your zendesk.\n\nYou’re eligible for 24-hour support throughout your trial. Please don’t hesitate to call or email our customer advocate team:\n\n*(e) support@zendesk.com\n*(p) +1 415.418.7506\n\nThank you for using Zendesk,\n\nKelly\nCustomer Advocate at Zendesk","type":"Comment","is_public":true,"author_id":26220353,"attachments":[]}],"linkings":[],"submitter_id":26220353,"base_score":108,"latest_recipients":null,"due_date":null,"current_collaborators":null,"status_id":1,"description":"You've got a new ticket!\n\nTo help you get started learning how your zendesk simplifies ticket workflow, I emailed you at support@hybridgroup.zendesk.com and this ticket was created in your zendesk. Neat!\n\nYou can answer this ticket in one of two ways:\n\nBy Email: If you are looking at this in your email inbox, simply hit \"Reply\"\n\nBy Zendesk: If you are looking at this ticket in your zendesk:\n\n* Enter a comment (e.g. \"How am I doing?\")\n* Change status from Open to Pending (now, you’re waiting for me to get back to you!)\n* Click submit\n\nEither way, both your reply and follow-ups will be added to the ticket history and organized in your zendesk.\n\nYou’re eligible for 24-hour support throughout your trial. Please don’t hesitate to call or email our customer advocate team:\n\n*(e) support@zendesk.com\n*(p) +1 415.418.7506\n\nThank you for using Zendesk,\n\nKelly\nCustomer Advocate at Zendesk","ticket_field_entries":[],"problem_id":null,"score":108,"organization_id":null,"updated_by_type_id":1,"requester_id":26220353}]
@@ -0,0 +1,145 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <records type="array" count="2">
3
+ <record>
4
+ <assigned-at type="datetime">2011-01-31T14:09:12-04:00</assigned-at>
5
+ <assignee-id type="integer">26218414</assignee-id>
6
+ <base-score type="integer">12</base-score>
7
+ <created-at type="datetime">2011-01-31T14:09:12-04:00</created-at>
8
+ <current-collaborators nil="true"></current-collaborators>
9
+ <current-tags nil="true"></current-tags>
10
+ <description>Testing</description>
11
+ <due-date type="datetime" nil="true"></due-date>
12
+ <entry-id type="integer" nil="true"></entry-id>
13
+ <external-id nil="true"></external-id>
14
+ <group-id type="integer">121752</group-id>
15
+ <initially-assigned-at type="datetime">2011-01-31T14:09:12-04:00</initially-assigned-at>
16
+ <latest-recipients nil="true"></latest-recipients>
17
+ <nice-id type="integer">1</nice-id>
18
+ <organization-id type="integer">457249</organization-id>
19
+ <original-recipient-address nil="true"></original-recipient-address>
20
+ <priority-id type="integer">1</priority-id>
21
+ <recipient nil="true"></recipient>
22
+ <requester-id type="integer">26218414</requester-id>
23
+ <resolution-time type="integer" nil="true"></resolution-time>
24
+ <solved-at type="datetime" nil="true"></solved-at>
25
+ <status-id type="integer">1</status-id>
26
+ <status-updated-at type="datetime">2011-01-31T14:09:12-04:00</status-updated-at>
27
+ <subject>Testing</subject>
28
+ <submitter-id type="integer">26218414</submitter-id>
29
+ <ticket-type-id type="integer">3</ticket-type-id>
30
+ <updated-at type="datetime">2011-01-31T14:09:12-04:00</updated-at>
31
+ <updated-by-type-id type="integer">0</updated-by-type-id>
32
+ <via-id type="integer">0</via-id>
33
+ <score type="integer">12</score>
34
+ <problem-id nil="true"></problem-id>
35
+ <comments type="array">
36
+ <comment>
37
+ <author-id type="integer">26218414</author-id>
38
+ <created-at type="datetime">2011-01-31T14:09:12-04:00</created-at>
39
+ <is-public type="boolean">true</is-public>
40
+ <type>Comment</type>
41
+ <value>Testing</value>
42
+ <via-id type="integer">0</via-id>
43
+ <attachments type="array"/>
44
+ </comment>
45
+ </comments>
46
+ <linkings type="array"/>
47
+ <ticket-field-entries type="array"/>
48
+ <channel nil="true"></channel>
49
+ </record>
50
+ <record>
51
+ <assigned-at type="datetime">2011-01-31T14:30:31-04:00</assigned-at>
52
+ <assignee-id type="integer">26218414</assignee-id>
53
+ <base-score type="integer">72</base-score>
54
+ <created-at type="datetime">2011-01-31T14:30:31-04:00</created-at>
55
+ <current-collaborators nil="true"></current-collaborators>
56
+ <current-tags nil="true"></current-tags>
57
+ <description>You've got a new ticket!
58
+
59
+ To help you get started learning how your zendesk simplifies ticket workflow, I emailed you at support@hybridgroup.zendesk.com and this ticket was created in your zendesk. Neat!
60
+
61
+ You can answer this ticket in one of two ways:
62
+
63
+ By Email: If you are looking at this in your email inbox, simply hit &quot;Reply&quot;
64
+
65
+ By Zendesk: If you are looking at this ticket in your zendesk:
66
+
67
+ * Enter a comment (e.g. &quot;How am I doing?&quot;)
68
+ * Change status from Open to Pending (now, you&#8217;re waiting for me to get back to you!)
69
+ * Click submit
70
+
71
+ Either way, both your reply and follow-ups will be added to the ticket history and organized in your zendesk.
72
+
73
+ You&#8217;re eligible for 24-hour support throughout your trial. Please don&#8217;t hesitate to call or email our customer advocate team:
74
+
75
+ *(e) support@zendesk.com
76
+ *(p) +1 415.418.7506
77
+
78
+ Thank you for using Zendesk,
79
+
80
+ Kelly
81
+ Customer Advocate at Zendesk</description>
82
+ <due-date type="datetime" nil="true"></due-date>
83
+ <entry-id type="integer" nil="true"></entry-id>
84
+ <external-id nil="true"></external-id>
85
+ <group-id type="integer">121752</group-id>
86
+ <initially-assigned-at type="datetime">2011-01-31T14:30:31-04:00</initially-assigned-at>
87
+ <latest-recipients nil="true"></latest-recipients>
88
+ <nice-id type="integer">2</nice-id>
89
+ <organization-id type="integer" nil="true"></organization-id>
90
+ <original-recipient-address nil="true"></original-recipient-address>
91
+ <priority-id type="integer">0</priority-id>
92
+ <recipient>support@hybridgroup.zendesk.com</recipient>
93
+ <requester-id type="integer">26220353</requester-id>
94
+ <resolution-time type="integer" nil="true"></resolution-time>
95
+ <solved-at type="datetime" nil="true"></solved-at>
96
+ <status-id type="integer">1</status-id>
97
+ <status-updated-at type="datetime">2011-01-31T14:30:31-04:00</status-updated-at>
98
+ <subject>Welcome to Zendesk, You've Got a Ticket!</subject>
99
+ <submitter-id type="integer">26220353</submitter-id>
100
+ <ticket-type-id type="integer">0</ticket-type-id>
101
+ <updated-at type="datetime">2011-01-31T14:30:31-04:00</updated-at>
102
+ <updated-by-type-id type="integer">1</updated-by-type-id>
103
+ <via-id type="integer">4</via-id>
104
+ <score type="integer">72</score>
105
+ <problem-id nil="true"></problem-id>
106
+ <comments type="array">
107
+ <comment>
108
+ <author-id type="integer">26220353</author-id>
109
+ <created-at type="datetime">2011-01-31T14:30:31-04:00</created-at>
110
+ <is-public type="boolean">true</is-public>
111
+ <type>Comment</type>
112
+ <value>You've got a new ticket!
113
+
114
+ To help you get started learning how your zendesk simplifies ticket workflow, I emailed you at support@hybridgroup.zendesk.com and this ticket was created in your zendesk. Neat!
115
+
116
+ You can answer this ticket in one of two ways:
117
+
118
+ By Email: If you are looking at this in your email inbox, simply hit &quot;Reply&quot;
119
+
120
+ By Zendesk: If you are looking at this ticket in your zendesk:
121
+
122
+ * Enter a comment (e.g. &quot;How am I doing?&quot;)
123
+ * Change status from Open to Pending (now, you&#8217;re waiting for me to get back to you!)
124
+ * Click submit
125
+
126
+ Either way, both your reply and follow-ups will be added to the ticket history and organized in your zendesk.
127
+
128
+ You&#8217;re eligible for 24-hour support throughout your trial. Please don&#8217;t hesitate to call or email our customer advocate team:
129
+
130
+ *(e) support@zendesk.com
131
+ *(p) +1 415.418.7506
132
+
133
+ Thank you for using Zendesk,
134
+
135
+ Kelly
136
+ Customer Advocate at Zendesk</value>
137
+ <via-id type="integer">4</via-id>
138
+ <attachments type="array"/>
139
+ </comment>
140
+ </comments>
141
+ <linkings type="array"/>
142
+ <ticket-field-entries type="array"/>
143
+ <channel nil="true"></channel>
144
+ </record>
145
+ </records>
@@ -0,0 +1,52 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ticket>
3
+ <assigned-at>2007-06-03T22:15:44Z</assigned-at>
4
+ <assignee-id>4</assignee-id>
5
+ <assignee-updated-at/>
6
+ <created-at>2007-06-03T20:15:44Z</created-at>
7
+ <subject></subject>
8
+ <description>My printer is not working</description>
9
+ <external-id/>
10
+ <group-id>2</group-id>
11
+ <id>2</id>
12
+ <linked-id/>
13
+ <priority-id>3</priority-id>
14
+ <submitter-id>3</submitter-id>
15
+ <status-id>1</status-id>
16
+ <status-updated-at>2007-06-03T22:15:44Z</status-updated-at>
17
+ <requester-id>3</requester-id>
18
+ <requester-updated-at>2007-06-03T22:15:44Z</requester-updated-at>
19
+ <ticket-type-id>2</ticket-type-id>
20
+ <updated-at>2007-06-03T20:15:45Z</updated-at>
21
+ <via-id>0</via-id>
22
+ <current-tags>printer hp</current-tags>
23
+ <score>28</score>
24
+ <comments type="array">
25
+ <comment>
26
+ <author-id>3</author-id>
27
+ <created-at>2007-06-03T20:15:45Z</created-at>
28
+ <is-public>true</is-public>
29
+ <value>This is a comment</value>
30
+ <via-id>0</via-id>
31
+ <via-reference-id/>
32
+ </comment>
33
+ <comment>
34
+ <author-id>5</author-id>
35
+ <created-at>2007-06-04T10:07:02Z</created-at>
36
+ <is-public>true</is-public>
37
+ <value>Make sure it is plugged in</value>
38
+ <via-id>0</via-id>
39
+ <via-reference-id/>
40
+ </comment>
41
+ </comments>
42
+ <ticket-field-entries type="array">
43
+ <ticket-field-entry>
44
+ <ticket-field-id>139</ticket-field-id>
45
+ <value>Please contact me by phone during work hours</value>
46
+ </ticket-field-entry>
47
+ <ticket-field-entry>
48
+ <ticket-field-id>141</ticket-field-id>
49
+ <value>true</value>
50
+ </ticket-field-entry>
51
+ </ticket-field-entries>
52
+ </ticket>
@@ -0,0 +1,78 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ticket>
3
+ <assigned-user-id type="integer" nil="true"></assigned-user-id>
4
+ <attachments-count type="integer">0</attachments-count>
5
+ <closed type="boolean">false</closed>
6
+ <created-at type="datetime">2010-07-03T05:01:48Z</created-at>
7
+ <creator-id type="integer">67916</creator-id>
8
+ <milestone-due-on type="datetime" nil="true"></milestone-due-on>
9
+ <milestone-id type="integer" nil="true"></milestone-id>
10
+ <number type="integer">5</number>
11
+ <permalink>tehantuehn</permalink>
12
+ <priority type="integer">3</priority>
13
+ <project-id type="integer">54448</project-id>
14
+ <raw-data type="binary" encoding="base64" nil="true"></raw-data>
15
+ <state>new</state>
16
+ <tag nil="true"></tag>
17
+ <title>tehantuehn</title>
18
+ <updated-at type="datetime">2010-07-08T02:11:21Z</updated-at>
19
+ <user-id type="integer">67916</user-id>
20
+ <user-name>Kia Kroas</user-name>
21
+ <creator-name>Kia Kroas</creator-name>
22
+ <url>http://ticketmaster.lighthouseapp.com/projects/54448/tickets/5</url>
23
+ <original-body>cheuasoht atesuhn</original-body>
24
+ <latest-body>cheuasoht atesuhn</latest-body>
25
+ <original-body-html>&lt;div&gt;&lt;p&gt;cheuasoht atesuhn&lt;/p&gt;&lt;/div&gt;</original-body-html>
26
+ <versions type="array">
27
+ <version type="Ticket::Version">
28
+ <assigned-user-id type="integer" nil="true"></assigned-user-id>
29
+ <attachments-count type="integer">0</attachments-count>
30
+ <body>cheuasoht atesuhn</body>
31
+ <body-html>&lt;div&gt;&lt;p&gt;cheuasoht atesuhn&lt;/p&gt;&lt;/div&gt;</body-html>
32
+ <closed type="boolean">false</closed>
33
+ <created-at type="datetime">2010-07-03T05:01:48Z</created-at>
34
+ <creator-id type="integer">67916</creator-id>
35
+ <diffable-attributes type="yaml">--- {}
36
+
37
+ </diffable-attributes>
38
+ <milestone-id type="integer" nil="true"></milestone-id>
39
+ <number type="integer">5</number>
40
+ <permalink>tehantuehn</permalink>
41
+ <priority type="integer">3</priority>
42
+ <project-id type="integer">54448</project-id>
43
+ <state>new</state>
44
+ <tag nil="true"></tag>
45
+ <title>tehantuehn</title>
46
+ <updated-at type="datetime">2010-07-03T05:01:51Z</updated-at>
47
+ <user-id type="integer">67916</user-id>
48
+ <user-name>Kia Kroas</user-name>
49
+ <creator-name>Kia Kroas</creator-name>
50
+ <url>http://ticketmaster.lighthouseapp.com/projects/54448/tickets/5</url>
51
+ </version>
52
+ <version type="Ticket::Version">
53
+ <assigned-user-id type="integer" nil="true"></assigned-user-id>
54
+ <attachments-count type="integer">0</attachments-count>
55
+ <body>New Body</body>
56
+ <body-html>&lt;div&gt;&lt;p&gt;New Body&lt;/p&gt;&lt;/div&gt;</body-html>
57
+ <closed type="boolean">false</closed>
58
+ <created-at type="datetime">2010-07-08T02:11:17Z</created-at>
59
+ <creator-id type="integer">67916</creator-id>
60
+ <diffable-attributes type="yaml">--- {}
61
+
62
+ </diffable-attributes>
63
+ <milestone-id type="integer" nil="true"></milestone-id>
64
+ <number type="integer">5</number>
65
+ <permalink>tehantuehn</permalink>
66
+ <priority type="integer">3</priority>
67
+ <project-id type="integer">54448</project-id>
68
+ <state>new</state>
69
+ <tag nil="true"></tag>
70
+ <title>tehantuehn</title>
71
+ <updated-at type="datetime">2010-07-08T02:11:21Z</updated-at>
72
+ <user-id type="integer">67916</user-id>
73
+ <user-name>Kia Kroas</user-name>
74
+ <creator-name>Kia Kroas</creator-name>
75
+ <url>http://ticketmaster.lighthouseapp.com/projects/54448/tickets/5</url>
76
+ </version>
77
+ </versions>
78
+ </ticket>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ticket>
3
+ <assigned-at>2007-06-03T22:15:44Z</assigned-at>
4
+ <assignee-id>4</assignee-id>
5
+ <assignee-updated-at/>
6
+ <created-at>2007-06-03T20:15:44Z</created-at>
7
+ <subject></subject>
8
+ <description>My printer is not working</description>
9
+ <external-id/>
10
+ <group-id>2</group-id>
11
+ <id>2</id>
12
+ <linked-id/>
13
+ <priority-id>3</priority-id>
14
+ <submitter-id>3</submitter-id>
15
+ <status-id>1</status-id>
16
+ <status-updated-at>2007-06-03T22:15:44Z</status-updated-at>
17
+ <requester-id>3</requester-id>
18
+ <requester-updated-at>2007-06-03T22:15:44Z</requester-updated-at>
19
+ <ticket-type-id>2</ticket-type-id>
20
+ <updated-at>2007-06-03T20:15:45Z</updated-at>
21
+ <via-id>0</via-id>
22
+ <current-tags>printer hp</current-tags>
23
+ <score>28</score>
24
+ </ticket>
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Ticketmaster::Provider::Zendesk::Project" do
4
+ before(:all) do
5
+ @project_id = 'foobar-project'
6
+ end
7
+
8
+ before(:each) do
9
+ @ticketmaster = TicketMaster.new(:zendesk, {:account => 'hybridgroup', :username => 'foobar', :password => '123456'})
10
+ @klass = TicketMaster::Provider::Zendesk::Project
11
+ end
12
+
13
+ it "should be able to load all projects" do
14
+ @ticketmaster.projects.should be_an_instance_of(Array)
15
+ @ticketmaster.projects.first.should be_an_instance_of(@klass)
16
+ end
17
+
18
+ it "should be able to load all projects from an array of id's" do
19
+ @projects = @ticketmaster.projects([@project_id])
20
+ @projects.should be_an_instance_of(Array)
21
+ @projects.first.should be_an_instance_of(@klass)
22
+ end
23
+
24
+ it "should be able to load a single project by id" do
25
+ @project = @ticketmaster.project(@project_id)
26
+ @project.should be_an_instance_of(@klass)
27
+ end
28
+
29
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rubygems'
4
+ require 'ticketmaster'
5
+ require 'ticketmaster-zendesk'
6
+ require 'spec'
7
+ require 'spec/autorun'
8
+
9
+
10
+ Spec::Runner.configure do |config|
11
+
12
+ end
13
+
14
+ def fixture_for(name, format = 'xml')
15
+ File.read(File.dirname(__FILE__) + '/fixtures/' + name + ".#{format}")
16
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Ticketmaster::Provider::Zendesk" do
4
+
5
+ it "should be able to instantiate a new instance" do
6
+ @ticketmaster = TicketMaster.new(:zendesk, {:account => 'ticketmaster', :username => 'foo', :password => '000000'})
7
+ @ticketmaster.should be_an_instance_of(TicketMaster)
8
+ @ticketmaster.should be_a_kind_of(TicketMaster::Provider::Zendesk)
9
+ end
10
+
11
+ end
@@ -0,0 +1,57 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Ticketmaster::Provider::Zendesk::Ticket" do
4
+
5
+ before(:all) do
6
+ @project_id = "hybridgroup-project"
7
+
8
+ headers = {'Authorization' => 'Basic cmFmYWVsQGh5YnJpZGdyb3VwLmNvbToxMjM0NTY=','Accept' => 'application/json'}
9
+ ActiveResource::HttpMock.respond_to do |mock|
10
+ mock.get '/search.json?query=status%3Aopen', headers, fixture_for('tickets', 'json'), 200
11
+ mock.get '/tickets/1.json', headers, fixture_for('ticket', 'json'), 200
12
+ end
13
+ end
14
+
15
+ before(:each) do
16
+ @ticketmaster = TicketMaster.new(:zendesk, :account => 'hybridgroup', :username => 'rafael@hybridgroup.com', :password => '123456')
17
+ @klass = TicketMaster::Provider::Zendesk::Ticket
18
+ @project = @ticketmaster.project(@project_id)
19
+ end
20
+
21
+ it "should be able to load all tickets" do
22
+ @project.tickets.should be_an_instance_of(Array)
23
+ @project.tickets.first.should be_an_instance_of(@klass)
24
+ end
25
+
26
+ it "should be able to load all tickets based on an array of id's" do
27
+ tickets = @project.tickets([1])
28
+ tickets.should be_an_instance_of(Array)
29
+ tickets.first.should be_an_instance_of(@klass)
30
+ tickets.size.should == 1
31
+ tickets.first.title.should == "Testing"
32
+ end
33
+
34
+ it "should be able to load all tickets based on attributes" do
35
+ tickets = @project.tickets(:id => 1)
36
+ tickets.should be_an_instance_of(Array)
37
+ tickets.first.should be_an_instance_of(@klass)
38
+ tickets.first.title.should == "Testing"
39
+ end
40
+
41
+ it "should be able to load a single ticket" do
42
+ ticket = @project.ticket(1)
43
+ ticket.should be_an_instance_of(@klass)
44
+ ticket.title.should == "Testing"
45
+ end
46
+
47
+ it "should be able to find a ticket by attributes" do
48
+ ticket = @project.ticket(:id => 1)
49
+ ticket.should be_an_instance_of(@klass)
50
+ ticket.title.should == "Testing"
51
+ end
52
+
53
+ it "should return the ticket class without parameter in the ticket method" do
54
+ @project.ticket.should == @klass
55
+ end
56
+
57
+ end
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ticketmaster-zendesk
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Rafael George
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-02-07 00:00:00 +00:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 13
30
+ segments:
31
+ - 1
32
+ - 2
33
+ - 9
34
+ version: 1.2.9
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: ticketmaster
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 27
46
+ segments:
47
+ - 0
48
+ - 1
49
+ - 0
50
+ version: 0.1.0
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: activesupport
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 7
62
+ segments:
63
+ - 2
64
+ - 3
65
+ - 2
66
+ version: 2.3.2
67
+ type: :runtime
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: activeresource
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 7
78
+ segments:
79
+ - 2
80
+ - 3
81
+ - 2
82
+ version: 2.3.2
83
+ type: :runtime
84
+ version_requirements: *id004
85
+ - !ruby/object:Gem::Dependency
86
+ name: addressable
87
+ prerelease: false
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ hash: 15
94
+ segments:
95
+ - 2
96
+ - 1
97
+ - 2
98
+ version: 2.1.2
99
+ type: :runtime
100
+ version_requirements: *id005
101
+ - !ruby/object:Gem::Dependency
102
+ name: i18n
103
+ prerelease: false
104
+ requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ hash: 3
110
+ segments:
111
+ - 0
112
+ version: "0"
113
+ type: :runtime
114
+ version_requirements: *id006
115
+ description: Allows ticketmaster to interact with Your System.
116
+ email: george.rafael@gmail.com
117
+ executables: []
118
+
119
+ extensions: []
120
+
121
+ extra_rdoc_files:
122
+ - LICENSE
123
+ - README.md
124
+ files:
125
+ - .DS_Store
126
+ - LICENSE
127
+ - README.md
128
+ - Rakefile
129
+ - VERSION
130
+ - lib/.DS_Store
131
+ - lib/provider/comment.rb
132
+ - lib/provider/project.rb
133
+ - lib/provider/ticket.rb
134
+ - lib/provider/zendesk.rb
135
+ - lib/ticketmaster-zendesk.rb
136
+ - lib/zendesk/zendesk-api.rb
137
+ - spec/.DS_Store
138
+ - spec/comments_spec.rb
139
+ - spec/fixtures/.DS_Store
140
+ - spec/fixtures/ticket.json
141
+ - spec/fixtures/tickets.json
142
+ - spec/fixtures/tickets.xml
143
+ - spec/fixtures/tickets/2.xml
144
+ - spec/fixtures/tickets/5.xml
145
+ - spec/fixtures/tickets/create.xml
146
+ - spec/projects_spec.rb
147
+ - spec/spec.opts
148
+ - spec/spec_helper.rb
149
+ - spec/ticketmaster-zendesk_spec.rb
150
+ - spec/tickets_spec.rb
151
+ has_rdoc: true
152
+ homepage: http://bandw.tumblr.com
153
+ licenses: []
154
+
155
+ post_install_message:
156
+ rdoc_options: []
157
+
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ hash: 3
166
+ segments:
167
+ - 0
168
+ version: "0"
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ hash: 3
175
+ segments:
176
+ - 0
177
+ version: "0"
178
+ requirements: []
179
+
180
+ rubyforge_project:
181
+ rubygems_version: 1.3.7
182
+ signing_key:
183
+ specification_version: 3
184
+ summary: Ticketmaster Provider for Zendesk
185
+ test_files:
186
+ - spec/comments_spec.rb
187
+ - spec/projects_spec.rb
188
+ - spec/spec_helper.rb
189
+ - spec/ticketmaster-zendesk_spec.rb
190
+ - spec/tickets_spec.rb