help_spot 0.0.2 → 0.0.3
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/.gitignore +1 -1
- data/README.rdoc +11 -9
- data/Rakefile +13 -13
- data/TODO +35 -0
- data/lib/help_spot/version.rb +3 -0
- data/lib/help_spot.rb +82 -195
- data/spec/fixtures/error.xml +7 -0
- data/spec/fixtures/filter.get.xml +53 -0
- data/spec/fixtures/request.get.xml +89 -0
- data/spec/fixtures/request.getCategories.xml +46 -0
- data/spec/fixtures/request.getCustomFields.xml +52 -0
- data/spec/fixtures/request.getStatusTypes.xml +35 -0
- data/spec/fixtures/request.id.xml +4 -0
- data/spec/fixtures/request.search.xml +52 -0
- data/spec/fixtures/version.xml +4 -0
- data/spec/help_spot_spec.rb +83 -3
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +48 -5
- metadata +48 -10
- data/History.txt +0 -14
- data/VERSION +0 -1
- data/config/help_spot.yml.sample +0 -6
- data/help_spot.gemspec +0 -54
data/.gitignore
CHANGED
data/README.rdoc
CHANGED
@@ -6,20 +6,22 @@ For information on HelpSpot: http://www.userscape.com/products/helpspot/
|
|
6
6
|
|
7
7
|
Details of HelpSpot's API are at: http://www.userscape.com/helpdesk/index.php?pg=kb.book&id=6
|
8
8
|
|
9
|
-
|
9
|
+
= Installation
|
10
10
|
|
11
|
-
|
11
|
+
A gem has been pushed to gemcutter[http://gemcutter.org/]
|
12
12
|
|
13
|
-
|
13
|
+
Once you have gemcutter setup as a gem source:
|
14
14
|
|
15
|
-
|
15
|
+
gem install help_spot
|
16
16
|
|
17
|
-
|
17
|
+
= Usage
|
18
18
|
|
19
|
-
|
19
|
+
help_spot = HelpSpot.new("https://support.yourwebsite.com/api/", "user@localhost.com", "sekrit")
|
20
20
|
|
21
|
-
|
21
|
+
== Documentation
|
22
22
|
|
23
|
-
|
23
|
+
Documentation is hosted at rdoc.info[http://rdoc.info/projects/jnewland/help_spot]
|
24
|
+
|
25
|
+
== License
|
24
26
|
|
25
|
-
|
27
|
+
Licensed under the MIT License. See the included LICENSE file.
|
data/Rakefile
CHANGED
@@ -1,21 +1,25 @@
|
|
1
|
-
|
2
|
-
require '
|
1
|
+
$LOAD_PATH.unshift 'lib'
|
2
|
+
require 'help_spot/version'
|
3
3
|
|
4
4
|
begin
|
5
5
|
require 'jeweler'
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.version = HelpSpot::VERSION
|
7
8
|
gem.name = "help_spot"
|
8
|
-
gem.summary = %Q{
|
9
|
-
gem.description = %Q{
|
9
|
+
gem.summary = %Q{API wrapper for HelpSpot}
|
10
|
+
gem.description = %Q{API wrapper for HelpSpot}
|
10
11
|
gem.email = "jnewland@gmail.com"
|
11
12
|
gem.homepage = "http://github.com/jnewland/help_spot"
|
12
|
-
gem.authors = ["
|
13
|
-
gem.add_development_dependency "rspec"
|
13
|
+
gem.authors = ["Jesse Newland"]
|
14
|
+
gem.add_development_dependency "rspec", "= 1.3.0"
|
15
|
+
gem.add_development_dependency "fakeweb"
|
16
|
+
gem.add_dependency "hashie", "~> 0.1.8"
|
17
|
+
gem.add_dependency "httparty", "~> 0.5.0"
|
14
18
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
19
|
end
|
16
20
|
Jeweler::GemcutterTasks.new
|
17
21
|
rescue LoadError
|
18
|
-
puts "Jeweler (or a dependency) not available. Install it with:
|
22
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
19
23
|
end
|
20
24
|
|
21
25
|
require 'spec/rake/spectask'
|
@@ -36,14 +40,10 @@ task :default => :spec
|
|
36
40
|
|
37
41
|
require 'rake/rdoctask'
|
38
42
|
Rake::RDocTask.new do |rdoc|
|
39
|
-
|
40
|
-
version = File.read('VERSION')
|
41
|
-
else
|
42
|
-
version = ""
|
43
|
-
end
|
43
|
+
version = HelpSpot::VERSION
|
44
44
|
|
45
45
|
rdoc.rdoc_dir = 'rdoc'
|
46
46
|
rdoc.title = "help_spot #{version}"
|
47
47
|
rdoc.rdoc_files.include('README*')
|
48
48
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
49
|
-
end
|
49
|
+
end
|
data/TODO
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
Unimplemented API Methods
|
2
|
+
|
3
|
+
private.customer.getPasswordByEmail
|
4
|
+
private.customer.setPasswordByEmail
|
5
|
+
private.request.addTimeEvent
|
6
|
+
private.request.deleteTimeEvent
|
7
|
+
private.request.getTimeEvents
|
8
|
+
private.request.getMailboxes
|
9
|
+
private.request.merge
|
10
|
+
private.filter.getColumnNames
|
11
|
+
private.timetracker.search
|
12
|
+
private.user.getFilters
|
13
|
+
private.user.preferences
|
14
|
+
private.util.getActiveStaff
|
15
|
+
customer.getRequests
|
16
|
+
request.create
|
17
|
+
request.update
|
18
|
+
request.getCategories
|
19
|
+
request.getCustomFields
|
20
|
+
request.get
|
21
|
+
forums.list
|
22
|
+
forums.get
|
23
|
+
forums.getTopics
|
24
|
+
forums.getPosts
|
25
|
+
forums.createTopic
|
26
|
+
forums.createPost
|
27
|
+
forums.search
|
28
|
+
kb.list
|
29
|
+
kb.get
|
30
|
+
kb.getBookTOC
|
31
|
+
kb.getPage
|
32
|
+
kb.search
|
33
|
+
kb.voteHelpful
|
34
|
+
kb.voteNotHelpful
|
35
|
+
util.getFieldLabels
|
data/lib/help_spot.rb
CHANGED
@@ -1,200 +1,87 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
#
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
:sLastName => args[:last_name],
|
71
|
-
:sUserId => args[:user_id],
|
72
|
-
:sEmail => args[:email],
|
73
|
-
:sPhone => args[:phone],
|
74
|
-
:fUrgent => args[:urgent]}.reject!{|k,v| v == nil}
|
75
|
-
|
76
|
-
JSON.parse(api_request('request.create', 'POST', help_form))['xRequest'] rescue []
|
77
|
-
end
|
78
|
-
|
79
|
-
# Returns an array of tickets belonging to a given user id.
|
80
|
-
#
|
81
|
-
# == Authentication
|
82
|
-
# This method does require authentication.
|
83
|
-
#
|
84
|
-
# == Options
|
85
|
-
# * user_id
|
86
|
-
# The user who's tickets you wish to view.
|
87
|
-
#
|
88
|
-
def get_by_user_id(args)
|
89
|
-
JSON.parse(api_request('private.request.search', 'GET', {:sUserId => args[:user_id]}))['request'] rescue nil
|
90
|
-
end
|
91
|
-
|
92
|
-
# Returns ticket categories.
|
93
|
-
#
|
94
|
-
# == Authentication
|
95
|
-
# This method does require authentication.
|
96
|
-
#
|
97
|
-
# == Options
|
98
|
-
# * include_deleted
|
99
|
-
# true if you want to include deleted categories.
|
100
|
-
#
|
101
|
-
def categories(args={})
|
102
|
-
res = api_request('private.request.getCategories', 'GET')
|
103
|
-
res = JSON.parse(res)['category'] rescue []
|
104
|
-
|
105
|
-
unless args[:include_deleted] and args[:include_deleted] == true
|
106
|
-
res.reject!{|k, v| v['fDeleted'] == '1'} rescue []
|
107
|
-
end
|
108
|
-
|
109
|
-
return res
|
110
|
-
end
|
111
|
-
|
112
|
-
# Returns an array of non-deleted categories, as key value pairs. Useful for select lists.
|
113
|
-
#
|
114
|
-
# == Authentication
|
115
|
-
# This method does require authentication.
|
116
|
-
#
|
117
|
-
def category_key_value_pairs
|
118
|
-
categories.collect{|k,v| [k,v['sCategory']]} rescue []
|
119
|
-
end
|
120
|
-
|
121
|
-
# Returns non-deleted categories, with a list of predefined categories removed
|
122
|
-
#
|
123
|
-
def category_key_value_pairs_without(categories=nil)
|
124
|
-
categories ||= @config['hidden_categories'] rescue nil
|
125
|
-
|
126
|
-
orig_categories = category_key_value_pairs
|
127
|
-
if categories
|
128
|
-
categories.each do |category|
|
129
|
-
orig_categories.reject!{|i| i[1] == category}
|
130
|
-
end
|
131
|
-
end
|
132
|
-
orig_categories
|
133
|
-
end
|
134
|
-
|
135
|
-
# Returns an array of forums
|
136
|
-
#
|
137
|
-
def forums_list
|
138
|
-
JSON.parse(HelpSpot.api_request('forums.list'))['forum'] rescue []
|
139
|
-
end
|
140
|
-
|
141
|
-
# Returns an array of forums
|
142
|
-
#
|
143
|
-
# == Options
|
144
|
-
# * forum_id
|
145
|
-
# The numeric id of the forum you want.
|
146
|
-
def forum_get(args)
|
147
|
-
JSON.parse(HelpSpot.api_request('forums.get', 'GET', :xForumId => args[:forum_id])) rescue []
|
1
|
+
require 'hashie'
|
2
|
+
require 'httparty'
|
3
|
+
require 'help_spot/version'
|
4
|
+
|
5
|
+
class HelpSpot
|
6
|
+
include HTTParty
|
7
|
+
format :xml
|
8
|
+
mattr_inheritable :base
|
9
|
+
|
10
|
+
def initialize(base, user, pass)
|
11
|
+
self.class.base_uri base
|
12
|
+
self.class.basic_auth user, pass
|
13
|
+
end
|
14
|
+
|
15
|
+
# Verify authentication credentials
|
16
|
+
#
|
17
|
+
def authenticated?
|
18
|
+
version = api_request(:get, 'private.version')
|
19
|
+
return false if version.errors
|
20
|
+
return true if version.results.version
|
21
|
+
false
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_request(options = {})
|
25
|
+
raise ArgumentError unless options[:tNote] && options[:xCategory]
|
26
|
+
raise ArgumentError unless options[:sFirstName] || options[:sLastName] || options[:sUserId] || options[:sEmail] || options[:sPhone]
|
27
|
+
api_request(:post, 'private.request.create', options, :item => 'request').xRequest.to_i
|
28
|
+
end
|
29
|
+
|
30
|
+
def update_request(id, options = {})
|
31
|
+
api_request(:post, 'private.request.update', options.merge(:xRequest => id), :item => 'request').xRequest.to_i
|
32
|
+
end
|
33
|
+
|
34
|
+
def request(id, options = {})
|
35
|
+
response = api_request(:get, 'private.request.get', options.merge(:xRequest => id), :item => 'request')
|
36
|
+
#munge even further the request history
|
37
|
+
response.request_history = response.request_history.map { |item| item[1].first }
|
38
|
+
response
|
39
|
+
end
|
40
|
+
|
41
|
+
def search_requests(options = {})
|
42
|
+
api_request(:get, 'private.request.search', options, {:collection => 'requests', :item => 'request'})
|
43
|
+
end
|
44
|
+
|
45
|
+
def categories
|
46
|
+
api_request(:get, 'private.request.getCategories', {:fDeleted => 0}, {:collection => 'categories', :item => 'category'})
|
47
|
+
end
|
48
|
+
|
49
|
+
def status_types
|
50
|
+
api_request(:get, 'private.request.getStatusTypes', {:fActiveOnly => 1}, {:collection => 'results', :item => 'status'})
|
51
|
+
end
|
52
|
+
|
53
|
+
def custom_fields(options = {})
|
54
|
+
api_request(:get, 'private.request.getCustomFields', options, {:collection => 'customfields', :item => 'field'})
|
55
|
+
end
|
56
|
+
|
57
|
+
def filter(id, options = {})
|
58
|
+
api_request(:get, 'private.filter.get', options.merge(:xFilter => id), {:collection => 'filter', :item => 'request'})
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def api_request(http_method, method, options = {}, munge_options = {})
|
64
|
+
parsed_options = {}
|
65
|
+
if http_method == :get
|
66
|
+
parsed_options[:query] = options
|
67
|
+
else
|
68
|
+
parsed_options[:query] = {}
|
69
|
+
parsed_options[:body] = options
|
148
70
|
end
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
# * start
|
156
|
-
# record set position to start at
|
157
|
-
# * length
|
158
|
-
# how many records to return
|
159
|
-
#
|
160
|
-
def forum_get_topics(args={})
|
161
|
-
JSON.parse(HelpSpot.api_request('forums.getTopics', 'GET', {:xForumId => args[:forum_id]}.merge(args)))['topic'] rescue []
|
162
|
-
end
|
163
|
-
|
164
|
-
# Returns an array of posts from a given topic
|
165
|
-
#
|
166
|
-
# == Options
|
167
|
-
# * topic_id
|
168
|
-
# The numeric id of the topic
|
169
|
-
#
|
170
|
-
def forum_get_topic_posts(args={})
|
171
|
-
JSON.parse(HelpSpot.api_request('forums.getPosts', 'GET', :xTopicId => args[:topic_id]))['post'] rescue []
|
172
|
-
end
|
173
|
-
|
174
|
-
def api_request(api_method, http_method='POST', args={})
|
175
|
-
api_params = {:method => api_method, :output => 'json'}.merge(args)
|
176
|
-
query_params = api_params.collect{|k,v| [k.to_s, v.to_s]} # [URI.encode(k.to_s),URI.encode(v.to_s.gsub(/\ /, '+'))]
|
177
|
-
built_query = query_params.collect{|i| i.join('=')}.join('&') # make a query string
|
178
|
-
|
179
|
-
ru = URI::parse(@config['root_url']) # where ru = ROOT_URL
|
180
|
-
merged_query = [built_query, (ru.query == '' ? nil : ru.query)].compact.join('&') # merge our generated query string with the ROOT_URL's query string
|
181
|
-
|
182
|
-
url = URI::HTTP.new(ru.scheme, ru.userinfo, ru.host, ru.port, ru.registry, ru.path, ru.opaque, merged_query, ru.fragment)
|
183
|
-
|
184
|
-
request = nil
|
185
|
-
if http_method == 'POST'
|
186
|
-
request = Net::HTTP::Post.new(url.path)
|
187
|
-
request.set_form_data(query_params)
|
71
|
+
parsed_options[:query].merge!(:method => method)
|
72
|
+
response = self.class.send(http_method, '/index.php', parsed_options)
|
73
|
+
if munge_options[:collection]
|
74
|
+
return [] unless collection = response[munge_options[:collection]][munge_options[:item]]
|
75
|
+
if collection.is_a?(Array)
|
76
|
+
collection.map { |item| Hashie::Mash.new(item) }
|
188
77
|
else
|
189
|
-
|
78
|
+
Hashie::Mash.new(collection)
|
190
79
|
end
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
response.body
|
80
|
+
elsif munge_options[:item]
|
81
|
+
Hashie::Mash.new(response[munge_options[:item]])
|
82
|
+
else
|
83
|
+
Hashie::Mash.new(response)
|
197
84
|
end
|
85
|
+
end
|
198
86
|
|
199
|
-
|
200
|
-
end # module
|
87
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<filter>
|
3
|
+
<request>
|
4
|
+
<xRequest>12624</xRequest>
|
5
|
+
<fOpenedVia>Email</fOpenedVia>
|
6
|
+
<xOpenedViaId>Customer.Service</xOpenedViaId>
|
7
|
+
<xPersonOpenedBy />
|
8
|
+
<xPersonAssignedTo>Henry Yount</xPersonAssignedTo>
|
9
|
+
<fOpen>1</fOpen>
|
10
|
+
<xStatus>Active</xStatus>
|
11
|
+
<fUrgent>0</fUrgent>
|
12
|
+
<xCategory>Feature Request</xCategory>
|
13
|
+
<dtGMTOpened>July 12, 2007</dtGMTOpened>
|
14
|
+
<dtGMTClosed />
|
15
|
+
<sRequestPassword>pgupzu</sRequestPassword>
|
16
|
+
<sTitle>Upload documents over 1gig</sTitle>
|
17
|
+
<sUserId>8389332</sUserId>
|
18
|
+
<sFirstName>Harry</sFirstName>
|
19
|
+
<sLastName>Waterman</sLastName>
|
20
|
+
<sEmail>hw@example.com</sEmail>
|
21
|
+
<sPhone>845.555.1234</sPhone>
|
22
|
+
<iLastReplyBy>0</iLastReplyBy>
|
23
|
+
<fTrash>0</fTrash>
|
24
|
+
<dtGMTTrashed />
|
25
|
+
<fullname>Harry Waterman</fullname>
|
26
|
+
<tNote>I would like to be able to upload documents over 1 gigabyte.</tNote>
|
27
|
+
</request>
|
28
|
+
<request>
|
29
|
+
<xRequest>12451</xRequest>
|
30
|
+
<fOpenedVia>Phone</fOpenedVia>
|
31
|
+
<xOpenedViaId />
|
32
|
+
<xPersonOpenedBy>Tiffany Prince</xPersonOpenedBy>
|
33
|
+
<xPersonAssignedTo>Henry Yount</xPersonAssignedTo>
|
34
|
+
<fOpen>0</fOpen>
|
35
|
+
<xStatus>Problem Solved</xStatus>
|
36
|
+
<fUrgent>0</fUrgent>
|
37
|
+
<xCategory>Feature Request</xCategory>
|
38
|
+
<dtGMTOpened>September 19, 2007</dtGMTOpened>
|
39
|
+
<dtGMTClosed>September 30, 2007</dtGMTClosed>
|
40
|
+
<sRequestPassword>vyzfua</sRequestPassword>
|
41
|
+
<sTitle>Improved searching</sTitle>
|
42
|
+
<sUserId />
|
43
|
+
<sFirstName>Sarah</sFirstName>
|
44
|
+
<sLastName>Ryan</sLastName>
|
45
|
+
<sEmail />
|
46
|
+
<sPhone />
|
47
|
+
<iLastReplyBy>0</iLastReplyBy>
|
48
|
+
<fTrash>0</fTrash>
|
49
|
+
<dtGMTTrashed />
|
50
|
+
<fullname>Sarah Ryan</fullname>
|
51
|
+
<tNote>I would like to see the searching imrpoved in the upcoming release.</tNote>
|
52
|
+
</request>
|
53
|
+
</filter>
|
@@ -0,0 +1,89 @@
|
|
1
|
+
<request>
|
2
|
+
<xRequest>12745</xRequest>
|
3
|
+
<fOpenedVia>Web Service</fOpenedVia>
|
4
|
+
<xOpenedViaId>0</xOpenedViaId>
|
5
|
+
<xPersonOpenedBy />
|
6
|
+
<xPersonAssignedTo>Ian Landsman</xPersonAssignedTo>
|
7
|
+
<fOpen>1</fOpen>
|
8
|
+
<xStatus>Active</xStatus>
|
9
|
+
<fUrgent>0</fUrgent>
|
10
|
+
<xCategory>Bugs</xCategory>
|
11
|
+
<dtGMTOpened>September 24, 2007</dtGMTOpened>
|
12
|
+
<dtGMTClosed />
|
13
|
+
<sRequestPassword>itetxb</sRequestPassword>
|
14
|
+
<sTitle />
|
15
|
+
<sUserId>12345</sUserId>
|
16
|
+
<sFirstName />
|
17
|
+
<sLastName />
|
18
|
+
<sEmail />
|
19
|
+
<sPhone />
|
20
|
+
<iLastReplyBy>Ian Landsman</iLastReplyBy>
|
21
|
+
<fTrash>0</fTrash>
|
22
|
+
<dtGMTTrashed />
|
23
|
+
<fullname> </fullname>
|
24
|
+
<request_history>
|
25
|
+
<item>
|
26
|
+
<xRequestHistory>1378</xRequestHistory>
|
27
|
+
<xRequest>12745</xRequest>
|
28
|
+
<xPerson>Ian Landsman</xPerson>
|
29
|
+
<dtGMTChange>Tue, September 25, 2007, 11:00 AM</dtGMTChange>
|
30
|
+
<fPublic>1</fPublic>
|
31
|
+
<fInitial>0</fInitial>
|
32
|
+
<tLog />
|
33
|
+
<tNote><p>An HTML note example</p></tNote>
|
34
|
+
<tEmailHeaders />
|
35
|
+
<fNoteIsHTML>1</fNoteIsHTML>
|
36
|
+
<fMergedFromRequest>0</fMergedFromRequest>
|
37
|
+
<files>
|
38
|
+
<file>
|
39
|
+
<sFileMimeType>application/pdf</sFileMimeType>
|
40
|
+
<sFilename>Invoice.pdf</sFilename>
|
41
|
+
<xDocumentId>60</xDocumentId>
|
42
|
+
<public_url>http://www.domain.com/index.php?pg=file&from=3&id=60&reqid=12745&reqhisid=1378</public_url>
|
43
|
+
<private_url>http://www.domain.com/admin.php?pg=file&from=0&id=60&showfullsize=1&download=1</private_url>
|
44
|
+
</file>
|
45
|
+
</files>
|
46
|
+
</item>
|
47
|
+
<item>
|
48
|
+
<xRequestHistory>1377</xRequestHistory>
|
49
|
+
<xRequest>12745</xRequest>
|
50
|
+
<xPerson>Ian Landsman</xPerson>
|
51
|
+
<dtGMTChange>Tue, September 25, 2007, 11:00 AM</dtGMTChange>
|
52
|
+
<fPublic>0</fPublic>
|
53
|
+
<fInitial>0</fInitial>
|
54
|
+
<tLog>Category changed from "" to "Bugs"</tLog>
|
55
|
+
<tNote />
|
56
|
+
<tEmailHeaders />
|
57
|
+
<fNoteIsHTML>0</fNoteIsHTML>
|
58
|
+
<fMergedFromRequest>0</fMergedFromRequest>
|
59
|
+
</item>
|
60
|
+
<item>
|
61
|
+
<xRequestHistory>1376</xRequestHistory>
|
62
|
+
<xRequest>12745</xRequest>
|
63
|
+
<xPerson> </xPerson>
|
64
|
+
<dtGMTChange>Mon, September 24, 2007, 08:03 PM</dtGMTChange>
|
65
|
+
<fPublic>1</fPublic>
|
66
|
+
<fInitial>0</fInitial>
|
67
|
+
<tLog />
|
68
|
+
<tNote>Plain text update to the request.</tNote>
|
69
|
+
<tEmailHeaders />
|
70
|
+
<fNoteIsHTML>0</fNoteIsHTML>
|
71
|
+
<fMergedFromRequest>0</fMergedFromRequest>
|
72
|
+
<files />
|
73
|
+
</item>
|
74
|
+
<item>
|
75
|
+
<xRequestHistory>1375</xRequestHistory>
|
76
|
+
<xRequest>12745</xRequest>
|
77
|
+
<xPerson> </xPerson>
|
78
|
+
<dtGMTChange>Mon, September 24, 2007, 07:44 PM</dtGMTChange>
|
79
|
+
<fPublic>1</fPublic>
|
80
|
+
<fInitial>1</fInitial>
|
81
|
+
<tLog />
|
82
|
+
<tNote>This is the request.</tNote>
|
83
|
+
<tEmailHeaders />
|
84
|
+
<fNoteIsHTML>0</fNoteIsHTML>
|
85
|
+
<fMergedFromRequest>0</fMergedFromRequest>
|
86
|
+
<files />
|
87
|
+
</item>
|
88
|
+
</request_history>
|
89
|
+
</request>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<categories>
|
3
|
+
<category>
|
4
|
+
<xCategory>1</xCategory>
|
5
|
+
<sCategory>Pre Sales Question</sCategory>
|
6
|
+
<fDeleted>0</fDeleted>
|
7
|
+
<fAllowPublicSubmit>1</fAllowPublicSubmit>
|
8
|
+
<xPersonDefault>1</xPersonDefault>
|
9
|
+
<fAutoAssignTo>0</fAutoAssignTo>
|
10
|
+
<sPersonList>
|
11
|
+
<person>
|
12
|
+
<xPerson>3</xPerson>
|
13
|
+
<fullname>Steve Benson</fullname>
|
14
|
+
<assigned_requests>6</assigned_requests>
|
15
|
+
</person>
|
16
|
+
<person>
|
17
|
+
<xPerson>4</xPerson>
|
18
|
+
<fullname>Tiffany Prince</fullname>
|
19
|
+
<assigned_requests>7</assigned_requests>
|
20
|
+
</person>
|
21
|
+
<person>
|
22
|
+
<xPerson>5</xPerson>
|
23
|
+
<fullname>Henry Yount</fullname>
|
24
|
+
<assigned_requests>8</assigned_requests>
|
25
|
+
</person>
|
26
|
+
</sPersonList>
|
27
|
+
<sCustomFieldList>
|
28
|
+
<xCustomField>2</xCustomField>
|
29
|
+
<xCustomField>13</xCustomField>
|
30
|
+
</sCustomFieldList>
|
31
|
+
<reportingTags>
|
32
|
+
<tag>
|
33
|
+
<xReportingTag>5</xReportingTag>
|
34
|
+
<sReportingTag>Pricing</sReportingTag>
|
35
|
+
</tag>
|
36
|
+
<tag>
|
37
|
+
<xReportingTag>9</xReportingTag>
|
38
|
+
<sReportingTag>Support Options</sReportingTag>
|
39
|
+
</tag>
|
40
|
+
<tag>
|
41
|
+
<xReportingTag>7</xReportingTag>
|
42
|
+
<sReportingTag>System Requirements</sReportingTag>
|
43
|
+
</tag>
|
44
|
+
</reportingTags>
|
45
|
+
</category>
|
46
|
+
</categories>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<customfields>
|
3
|
+
<field>
|
4
|
+
<xCustomField>10</xCustomField>
|
5
|
+
<fieldName>Ajax Lookup</fieldName>
|
6
|
+
<isRequired>1</isRequired>
|
7
|
+
<isPublic>0</isPublic>
|
8
|
+
<fieldType>ajax</fieldType>
|
9
|
+
<iOrder>0</iOrder>
|
10
|
+
<sTxtSize />
|
11
|
+
<lrgTextRows />
|
12
|
+
<listItems />
|
13
|
+
<iDecimalPlaces>0</iDecimalPlaces>
|
14
|
+
<sRegex />
|
15
|
+
<sAjaxUrl>http://www.domain.com/ajax_field_lookup.php</sAjaxUrl>
|
16
|
+
<isAlwaysVisible>0</isAlwaysVisible>
|
17
|
+
</field>
|
18
|
+
<field>
|
19
|
+
<xCustomField>7</xCustomField>
|
20
|
+
<fieldName>VIP Customer</fieldName>
|
21
|
+
<isRequired>0</isRequired>
|
22
|
+
<isPublic>1</isPublic>
|
23
|
+
<fieldType>checkbox</fieldType>
|
24
|
+
<iOrder>0</iOrder>
|
25
|
+
<sTxtSize />
|
26
|
+
<lrgTextRows />
|
27
|
+
<listItems />
|
28
|
+
<iDecimalPlaces>0</iDecimalPlaces>
|
29
|
+
<sRegex />
|
30
|
+
<sAjaxUrl />
|
31
|
+
<isAlwaysVisible>0</isAlwaysVisible>
|
32
|
+
</field>
|
33
|
+
<field>
|
34
|
+
<xCustomField>2</xCustomField>
|
35
|
+
<fieldName>Database Type</fieldName>
|
36
|
+
<isRequired>0</isRequired>
|
37
|
+
<isPublic>1</isPublic>
|
38
|
+
<fieldType>select</fieldType>
|
39
|
+
<iOrder>0</iOrder>
|
40
|
+
<sTxtSize />
|
41
|
+
<lrgTextRows />
|
42
|
+
<listItems>
|
43
|
+
<item>MySQL</item>
|
44
|
+
<item>MS SQL Server</item>
|
45
|
+
<item>PostgreSQL</item>
|
46
|
+
</listItems>
|
47
|
+
<iDecimalPlaces>0</iDecimalPlaces>
|
48
|
+
<sRegex />
|
49
|
+
<sAjaxUrl />
|
50
|
+
<isAlwaysVisible>0</isAlwaysVisible>
|
51
|
+
</field>
|
52
|
+
</customfields>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<results>
|
3
|
+
<status>
|
4
|
+
<sStatus>Active</sStatus>
|
5
|
+
<xStatus>1</xStatus>
|
6
|
+
</status>
|
7
|
+
<status>
|
8
|
+
<sStatus>Problem Solved</sStatus>
|
9
|
+
|
10
|
+
<xStatus>3</xStatus>
|
11
|
+
</status>
|
12
|
+
<status>
|
13
|
+
<sStatus>Not Fixable</sStatus>
|
14
|
+
<xStatus>4</xStatus>
|
15
|
+
</status>
|
16
|
+
<status>
|
17
|
+
|
18
|
+
<sStatus>Customer Unreachable</sStatus>
|
19
|
+
<xStatus>5</xStatus>
|
20
|
+
</status>
|
21
|
+
<status>
|
22
|
+
<sStatus>Customer Found Solution</sStatus>
|
23
|
+
<xStatus>6</xStatus>
|
24
|
+
</status>
|
25
|
+
|
26
|
+
<status>
|
27
|
+
<sStatus>Software Bug</sStatus>
|
28
|
+
<xStatus>7</xStatus>
|
29
|
+
</status>
|
30
|
+
<status>
|
31
|
+
<sStatus>SPAM</sStatus>
|
32
|
+
<xStatus>2</xStatus>
|
33
|
+
|
34
|
+
</status>
|
35
|
+
</results>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<requests>
|
2
|
+
<request>
|
3
|
+
<xRequest>12650</xRequest>
|
4
|
+
<fOpenedVia>Phone</fOpenedVia>
|
5
|
+
<xOpenedViaId>0</xOpenedViaId>
|
6
|
+
<xPersonOpenedBy>Ian Landsman</xPersonOpenedBy>
|
7
|
+
<xPersonAssignedTo>Ian Landsman</xPersonAssignedTo>
|
8
|
+
<fOpen>1</fOpen>
|
9
|
+
<xStatus>Active</xStatus>
|
10
|
+
<fUrgent>1</fUrgent>
|
11
|
+
<xCategory>Bugs</xCategory>
|
12
|
+
<dtGMTOpened>January 16, 2006</dtGMTOpened>
|
13
|
+
<dtGMTClosed />
|
14
|
+
<sRequestPassword>oxvgys</sRequestPassword>
|
15
|
+
<sTitle>RE: Update on Your Request</sTitle>
|
16
|
+
<sUserId />
|
17
|
+
<sFirstName />
|
18
|
+
<sLastName>landsman</sLastName>
|
19
|
+
<sEmail />
|
20
|
+
<sPhone />
|
21
|
+
<iLastReplyBy>0</iLastReplyBy>
|
22
|
+
<fTrash>0</fTrash>
|
23
|
+
<dtGMTTrashed />
|
24
|
+
<fullname> landsman</fullname>
|
25
|
+
<tNote><span class="initsubject">Some text here</span> - Help with printer issue please.</tNote>
|
26
|
+
</request>
|
27
|
+
<request>
|
28
|
+
<xRequest>12733</xRequest>
|
29
|
+
<fOpenedVia>Web Service</fOpenedVia>
|
30
|
+
<xOpenedViaId>0</xOpenedViaId>
|
31
|
+
<xPersonOpenedBy />
|
32
|
+
<xPersonAssignedTo>Ian Landsman</xPersonAssignedTo>
|
33
|
+
<fOpen>1</fOpen>
|
34
|
+
<xStatus>Active</xStatus>
|
35
|
+
<fUrgent>0</fUrgent>
|
36
|
+
<xCategory>Bugs</xCategory>
|
37
|
+
<dtGMTOpened>September 13, 2007</dtGMTOpened>
|
38
|
+
<dtGMTClosed />
|
39
|
+
<sRequestPassword>bwpkqv</sRequestPassword>
|
40
|
+
<sTitle />
|
41
|
+
<sUserId>567</sUserId>
|
42
|
+
<sFirstName />
|
43
|
+
<sLastName />
|
44
|
+
<sEmail />
|
45
|
+
<sPhone />
|
46
|
+
<iLastReplyBy>0</iLastReplyBy>
|
47
|
+
<fTrash>0</fTrash>
|
48
|
+
<dtGMTTrashed />
|
49
|
+
<fullname> </fullname>
|
50
|
+
<tNote><span class="initsubject">Text Here</span> - Need printer assistance.</tNote>
|
51
|
+
</request>
|
52
|
+
</requests>
|
data/spec/help_spot_spec.rb
CHANGED
@@ -1,7 +1,87 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe "HelpSpot" do
|
4
|
-
it "
|
5
|
-
|
4
|
+
it "should provide a version constant" do
|
5
|
+
HelpSpot::VERSION.should be_instance_of(String)
|
6
6
|
end
|
7
|
-
|
7
|
+
before :each do
|
8
|
+
@help_spot = HelpSpot.new("https://support.local/api/", "foobar@localhost.com", "sekrit")
|
9
|
+
end
|
10
|
+
describe "verifying authentcation" do
|
11
|
+
it "returns true when properly authenticated" do
|
12
|
+
@help_spot.stub_get('/api/index.php?method=private.version', 'version.xml')
|
13
|
+
@help_spot.authenticated?.should be_true
|
14
|
+
end
|
15
|
+
it "returns false when not properly authenticated" do
|
16
|
+
@help_spot.stub_http_response_with('error.xml')
|
17
|
+
@help_spot.authenticated?.should be_false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'requests' do
|
22
|
+
describe "being created" do
|
23
|
+
before(:each) do
|
24
|
+
@help_spot.stub_post('/api/index.php?method=private.request.create', 'request.id.xml')
|
25
|
+
end
|
26
|
+
it "require a note, a category, and some contact info" do
|
27
|
+
lambda { @help_spot.create_request() }.should raise_exception
|
28
|
+
lambda { @help_spot.create_request(:tNote => 'foo') }.should raise_exception
|
29
|
+
lambda { @help_spot.create_request(:xCategory => 1) }.should raise_exception
|
30
|
+
lambda { @help_spot.create_request(:tNote => 'foo', :xCategory => 1) }.should raise_exception
|
31
|
+
%w(sFirstName sLastName sUserId sEmail sPhone).each do |valid_contact_info|
|
32
|
+
lambda { @help_spot.create_request(:tNote => 'foo', :xCategory => 1, valid_contact_info.intern => 'foo') }.should_not raise_exception
|
33
|
+
end
|
34
|
+
end
|
35
|
+
it "return the request id" do
|
36
|
+
@help_spot.create_request(:tNote => 'foo', :xCategory => 1, :sEmail => 'needy@customer.com').should == 12746
|
37
|
+
end
|
38
|
+
end
|
39
|
+
describe "being updated" do
|
40
|
+
before(:each) do
|
41
|
+
@help_spot.stub_post('/api/index.php?method=private.request.update', 'request.id.xml')
|
42
|
+
end
|
43
|
+
it "return the request id" do
|
44
|
+
@help_spot.update_request(12746, :tNote => 'foo', :xCategory => 1, :sEmail => 'needy@customer.com').should == 12746
|
45
|
+
end
|
46
|
+
end
|
47
|
+
it "should be accessible" do
|
48
|
+
@help_spot.stub_get('/api/index.php?method=private.request.get&xRequest=12745', 'request.get.xml')
|
49
|
+
request = @help_spot.request(12745)
|
50
|
+
request.xPersonAssignedTo.should == 'Ian Landsman'
|
51
|
+
request.request_history.first.xPerson.should == 'Ian Landsman'
|
52
|
+
end
|
53
|
+
it "should be searchable" do
|
54
|
+
@help_spot.stub_get('/api/index.php?method=private.request.search&sSearch=printer', 'request.search.xml')
|
55
|
+
requests = @help_spot.search_requests(:sSearch => 'printer')
|
56
|
+
requests.first.xPersonAssignedTo.should == 'Ian Landsman'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
describe 'categories' do
|
60
|
+
it "can be listed" do
|
61
|
+
@help_spot.stub_get('/api/index.php?method=private.request.getCategories&fDeleted=0', 'request.getCategories.xml')
|
62
|
+
categories = @help_spot.categories
|
63
|
+
categories.sCategory.should == 'Pre Sales Question'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
describe 'statuses' do
|
67
|
+
it "can be listed" do
|
68
|
+
@help_spot.stub_get('/api/index.php?method=private.request.getStatusTypes&fActiveOnly=1', 'request.getStatusTypes.xml')
|
69
|
+
statues = @help_spot.status_types
|
70
|
+
statues.first.sStatus.should == 'Active'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
describe 'custom fields' do
|
74
|
+
it "can be listed" do
|
75
|
+
@help_spot.stub_get('/api/index.php?method=private.request.getCustomFields', 'request.getCustomFields.xml')
|
76
|
+
fields = @help_spot.custom_fields
|
77
|
+
fields.first.fieldName.should == 'Ajax Lookup'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
describe 'filters' do
|
81
|
+
it "can have their requests retrieved" do
|
82
|
+
@help_spot.stub_get('/api/index.php?method=private.filter.get&xFilter=1234', 'filter.get.xml')
|
83
|
+
requests = @help_spot.filter(1234)
|
84
|
+
requests.first.tNote.should == 'I would like to be able to upload documents over 1 gigabyte.'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--backtrace
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,52 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
1
|
require 'help_spot'
|
4
2
|
require 'spec'
|
5
3
|
require 'spec/autorun'
|
4
|
+
require 'fakeweb'
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
FakeWeb.allow_net_connect = false
|
7
|
+
|
8
|
+
class HelpSpot
|
9
|
+
|
10
|
+
def help_spot_url(path)
|
11
|
+
uri = URI.parse(self.class.default_options[:base_uri])
|
12
|
+
uri.path, uri.query = path.split('?')
|
13
|
+
uri.userinfo = "#{self.class.default_options[:basic_auth][:username]}:#{self.class.default_options[:basic_auth][:password]}".gsub(/@/, '%40')
|
14
|
+
uri.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def file_fixture(filename)
|
18
|
+
open(File.join(File.dirname(__FILE__), 'fixtures', "#{filename.to_s}")).read
|
19
|
+
end
|
20
|
+
|
21
|
+
def stub_get(path, filename, status=nil)
|
22
|
+
options = {:body => file_fixture(filename)}
|
23
|
+
options.merge!({:status => status}) unless status.nil?
|
24
|
+
FakeWeb.register_uri(:get, help_spot_url(path), options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def stub_post(path, filename)
|
28
|
+
FakeWeb.register_uri(:post, help_spot_url(path), :body => file_fixture(filename))
|
29
|
+
end
|
30
|
+
|
31
|
+
def stub_put(path, filename)
|
32
|
+
FakeWeb.register_uri(:put, help_spot_url(path), :body => file_fixture(filename))
|
33
|
+
end
|
34
|
+
|
35
|
+
def stub_delete(path, filename)
|
36
|
+
FakeWeb.register_uri(:delete, help_spot_url(path), :body => file_fixture(filename))
|
37
|
+
end
|
38
|
+
|
39
|
+
def stub_http_response_with(filename)
|
40
|
+
format = filename.split('.').last.intern
|
41
|
+
data = file_fixture(filename)
|
42
|
+
|
43
|
+
response = Net::HTTPOK.new("1.1", 200, "Content for you")
|
44
|
+
response.stub!(:body).and_return(data)
|
45
|
+
|
46
|
+
http_request = HTTParty::Request.new(Net::HTTP::Get, 'http://localhost', :format => format)
|
47
|
+
http_request.stub!(:perform_actual_request).and_return(response)
|
48
|
+
|
49
|
+
HTTParty::Request.should_receive(:new).at_least(1).and_return(http_request)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,58 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: help_spot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Jamie Wilson
|
8
7
|
- Jesse Newland
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
11
|
|
13
|
-
date:
|
12
|
+
date: 2010-01-24 00:00:00 -05:00
|
14
13
|
default_executable:
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: rspec
|
18
17
|
type: :development
|
19
18
|
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - "="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.3.0
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: fakeweb
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
20
29
|
version_requirements: !ruby/object:Gem::Requirement
|
21
30
|
requirements:
|
22
31
|
- - ">="
|
23
32
|
- !ruby/object:Gem::Version
|
24
33
|
version: "0"
|
25
34
|
version:
|
26
|
-
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: hashie
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.1.8
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: httparty
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.5.0
|
54
|
+
version:
|
55
|
+
description: API wrapper for HelpSpot
|
27
56
|
email: jnewland@gmail.com
|
28
57
|
executables: []
|
29
58
|
|
@@ -32,17 +61,26 @@ extensions: []
|
|
32
61
|
extra_rdoc_files:
|
33
62
|
- LICENSE
|
34
63
|
- README.rdoc
|
64
|
+
- TODO
|
35
65
|
files:
|
36
66
|
- .gitignore
|
37
|
-
- History.txt
|
38
67
|
- LICENSE
|
39
68
|
- README.rdoc
|
40
69
|
- Rakefile
|
41
|
-
-
|
42
|
-
- config/help_spot.yml.sample
|
43
|
-
- help_spot.gemspec
|
70
|
+
- TODO
|
44
71
|
- lib/help_spot.rb
|
72
|
+
- lib/help_spot/version.rb
|
73
|
+
- spec/fixtures/error.xml
|
74
|
+
- spec/fixtures/filter.get.xml
|
75
|
+
- spec/fixtures/request.get.xml
|
76
|
+
- spec/fixtures/request.getCategories.xml
|
77
|
+
- spec/fixtures/request.getCustomFields.xml
|
78
|
+
- spec/fixtures/request.getStatusTypes.xml
|
79
|
+
- spec/fixtures/request.id.xml
|
80
|
+
- spec/fixtures/request.search.xml
|
81
|
+
- spec/fixtures/version.xml
|
45
82
|
- spec/help_spot_spec.rb
|
83
|
+
- spec/spec.opts
|
46
84
|
- spec/spec_helper.rb
|
47
85
|
has_rdoc: true
|
48
86
|
homepage: http://github.com/jnewland/help_spot
|
@@ -68,10 +106,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
106
|
requirements: []
|
69
107
|
|
70
108
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.3.
|
109
|
+
rubygems_version: 1.3.5
|
72
110
|
signing_key:
|
73
111
|
specification_version: 3
|
74
|
-
summary:
|
112
|
+
summary: API wrapper for HelpSpot
|
75
113
|
test_files:
|
76
114
|
- spec/help_spot_spec.rb
|
77
115
|
- spec/spec_helper.rb
|
data/History.txt
DELETED
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.0.2
|
data/config/help_spot.yml.sample
DELETED
data/help_spot.gemspec
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
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{help_spot}
|
8
|
-
s.version = "0.0.2"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Jamie Wilson", "Jesse Newland"]
|
12
|
-
s.date = %q{2009-10-11}
|
13
|
-
s.description = %q{A package for interacting with UserScape's HelpSpot product.}
|
14
|
-
s.email = %q{jnewland@gmail.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.rdoc"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".gitignore",
|
21
|
-
"History.txt",
|
22
|
-
"LICENSE",
|
23
|
-
"README.rdoc",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"config/help_spot.yml.sample",
|
27
|
-
"help_spot.gemspec",
|
28
|
-
"lib/help_spot.rb",
|
29
|
-
"spec/help_spot_spec.rb",
|
30
|
-
"spec/spec_helper.rb"
|
31
|
-
]
|
32
|
-
s.homepage = %q{http://github.com/jnewland/help_spot}
|
33
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
34
|
-
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version = %q{1.3.3}
|
36
|
-
s.summary = %q{A package for interacting with UserScape's HelpSpot product.}
|
37
|
-
s.test_files = [
|
38
|
-
"spec/help_spot_spec.rb",
|
39
|
-
"spec/spec_helper.rb"
|
40
|
-
]
|
41
|
-
|
42
|
-
if s.respond_to? :specification_version then
|
43
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
44
|
-
s.specification_version = 3
|
45
|
-
|
46
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
47
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
48
|
-
else
|
49
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
50
|
-
end
|
51
|
-
else
|
52
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
53
|
-
end
|
54
|
-
end
|