helpscout 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "helpscout"
8
- s.version = "0.0.4"
8
+ s.version = "0.0.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["H\u{e9}ctor Ramos"]
12
- s.date = "2013-02-11"
12
+ s.date = "2013-02-12"
13
13
  s.description = ""
14
14
  s.email = "hector@hectorramos.com"
15
15
  s.extra_rdoc_files = [
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.homepage = "http://github.com/hramos/helpscout"
29
29
  s.licenses = ["MIT"]
30
30
  s.require_paths = ["lib"]
31
- s.rubygems_version = "1.8.11"
31
+ s.rubygems_version = "1.8.24"
32
32
  s.summary = "HelpScout API Wrapper"
33
33
 
34
34
  if s.respond_to? :specification_version then
@@ -13,7 +13,7 @@
13
13
  # Rate Limiting
14
14
  # Requests will be limited to 200 requests per minute. Response code 429 will
15
15
  # be returned when throttle limit has been reached. A "Retry-After" header will
16
- # be returned indicating how many seconds to wait until retry.
16
+ # be returned indicating how many seconds to wait until retry.
17
17
  #
18
18
  # Formats
19
19
  # Each endpoint will specify the response format in the URL. However, the API
@@ -82,13 +82,15 @@ module HelpScout
82
82
  # Header Status Int 200
83
83
  # Body item
84
84
 
85
- def self.requestItem(auth, url, params={})
85
+ def self.request_item(auth, url, params = {})
86
86
  item = nil
87
87
 
88
88
  request_url = ""
89
89
  request_url << url
90
90
  if params
91
- request_url << "?" + params.to_query
91
+ query = ""
92
+ params.each { |k,v| query += "#{k}=#{v}&" }
93
+ request_url << "?" + query
92
94
  end
93
95
 
94
96
  begin
@@ -136,7 +138,7 @@ module HelpScout
136
138
  # count Int Total number of objects available
137
139
  # items Array Collection of objects
138
140
 
139
- def self.requestItems(auth, url, params={})
141
+ def self.request_items(auth, url, params = {})
140
142
  items = []
141
143
 
142
144
  request_url = ""
@@ -192,7 +194,7 @@ module HelpScout
192
194
  # count Int Total number of objects available
193
195
  # items Array Collection of objects
194
196
 
195
- def self.requestCount(auth, url, params={})
197
+ def self.request_count(auth, url, params = {})
196
198
  request_url = ""
197
199
  request_url << url
198
200
  if params
@@ -222,6 +224,36 @@ module HelpScout
222
224
  end
223
225
  end
224
226
 
227
+
228
+ # Sends a POST request to create a single item from the Help Scout API.
229
+ #
230
+ # url String A string representing the url to POST.
231
+ # params Hash A hash of POST parameters to use for this particular
232
+ # request.
233
+ #
234
+ # Response
235
+ # Name Type Notes
236
+ # Location String https://api.helpscout.net/v1/conversations/{id}.json
237
+
238
+ def self.create_item(auth, url, params = {})
239
+ begin
240
+ response = Client.post(url, {:basic_auth => auth, :headers => { 'Content-Type' => 'application/json' }, :body => params })
241
+ rescue SocketError => se
242
+ raise StandardError, se.message
243
+ end
244
+
245
+ if response.code == 201
246
+ if response["item"]
247
+ response["item"]
248
+ else
249
+ response["Location"]
250
+ end
251
+ else
252
+ raise StandardError.new("Server Response: #{response.code} #{response.message}")
253
+ end
254
+ end
255
+
256
+
225
257
  # HelpScout::Client.new
226
258
  #
227
259
  # Initializes the Help Scout Client. Once called, you may use any of the
@@ -230,7 +262,7 @@ module HelpScout
230
262
  # key String Help Scout API Key. Optional. If not passed, the key will be
231
263
  # loaded from @@settings, which defaults to helpscout.yml.
232
264
 
233
- def initialize(key = nil)
265
+ def initialize(key=nil)
234
266
  Client.settings
235
267
 
236
268
  if key.nil?
@@ -252,7 +284,11 @@ module HelpScout
252
284
  #
253
285
  # Request
254
286
  # REST Method: GET
255
- # URL: https://api.helpscout.net/v1/users/{id}.json
287
+ # URL: https://api.helpscout.net/v1/conversations/{conversationId}.json
288
+ #
289
+ # GET Parameters
290
+ # Name Type
291
+ # conversationId Int id of the Conversation being requested
256
292
  #
257
293
  # Response
258
294
  # Name Type
@@ -260,7 +296,7 @@ module HelpScout
260
296
 
261
297
  def user(userId)
262
298
  url = "/users/#{userId}.json"
263
- item = Client.requestItem(@auth, url, nil)
299
+ item = Client.request_item(@auth, url, nil)
264
300
  user = nil
265
301
  if item
266
302
  user = User.new(item)
@@ -288,7 +324,7 @@ module HelpScout
288
324
 
289
325
  def users
290
326
  url = "/users.json"
291
- items = Client.requestItems(@auth, url, :page => 1)
327
+ items = Client.request_items(@auth, url, :page => 1)
292
328
  users = []
293
329
  items.each do |item|
294
330
  users << User.new(item)
@@ -316,9 +352,9 @@ module HelpScout
316
352
  # Name Type
317
353
  # items Array Collection of User objects
318
354
 
319
- def usersInMailbox(mailboxId)
355
+ def users_in_mailbox(mailboxId)
320
356
  url ="/mailboxes/#{mailboxId}/users.json"
321
- items = Client.requestItems(@auth, url, :page => 1)
357
+ items = Client.request_items(@auth, url, :page => 1)
322
358
  users = []
323
359
  items.each do |item|
324
360
  users << User.new(item)
@@ -348,12 +384,12 @@ module HelpScout
348
384
  url = "/mailboxes.json"
349
385
  mailboxes = []
350
386
  begin
351
- items = Client.requestItems(@auth, url, {})
387
+ items = Client.request_items(@auth, url, {})
352
388
  items.each do |item|
353
389
  mailboxes << Mailbox.new(item)
354
390
  end
355
391
  rescue StandardError => e
356
- print "List Mailbox Request failed: " + e.message
392
+ puts "List Mailbox Request failed: #{e.message}"
357
393
  end
358
394
  mailboxes
359
395
  end
@@ -376,7 +412,7 @@ module HelpScout
376
412
 
377
413
  def mailbox(mailboxId)
378
414
  url = "/mailboxes/#{mailboxId}.json"
379
- item = Client.requestItem(@auth, url, nil)
415
+ item = Client.request_item(@auth, url, nil)
380
416
  mailbox = nil
381
417
  if item
382
418
  mailbox = Mailbox.new(item)
@@ -404,9 +440,9 @@ module HelpScout
404
440
  # Name Type
405
441
  # items Array Collection of Mailbox objects
406
442
 
407
- def foldersInMailbox(mailboxId)
443
+ def folders_in_mailbox(mailboxId)
408
444
  url = "/mailboxes/#{mailboxId}/folders.json"
409
- items = Client.requestItems(@auth, url, :page => 1)
445
+ items = Client.request_items(@auth, url, :page => 1)
410
446
  folders = []
411
447
  items.each do |item|
412
448
  folders << Folder.new(item)
@@ -416,7 +452,7 @@ module HelpScout
416
452
 
417
453
 
418
454
  # Get Conversation
419
- # http://developer.helpscout.net/conversations/
455
+ # http://developer.helpscout.net/conversations/get/
420
456
  #
421
457
  # Fetches a single Conversation
422
458
  #
@@ -434,19 +470,58 @@ module HelpScout
434
470
  url = "/conversations/#{conversationId}.json"
435
471
 
436
472
  begin
437
- item = Client.requestItem(@auth, url, nil)
473
+ item = Client.request_item(@auth, url, nil)
438
474
  conversation = nil
439
475
  if item
440
476
  conversation = Conversation.new(item)
441
477
  end
442
478
  rescue StandardError => e
443
- print "Could not fetch conversation with id #{conversationId}: " + e.message
479
+ puts "Could not fetch conversation with id #{conversationId}: #{e.message}"
480
+ end
481
+ end
482
+
483
+
484
+ # Create Conversation
485
+ # http://developer.helpscout.net/conversations/create/
486
+ #
487
+ # Creates a new Conversation.
488
+ #
489
+ # Request
490
+ # REST Method: POST
491
+ # URL: https://api.helpscout.net/v1/conversations.json
492
+ #
493
+ # POST Parameters
494
+ # Name Type Required Notes
495
+ # conversation Conversation Yes
496
+ # import boolean No The import parameter enables
497
+ # conversations to be created for
498
+ # historical purposes (i.e. if moving
499
+ # from a different platform, you can
500
+ # import your history). When import
501
+ # is set to true, no outgoing emails
502
+ # or notifications will be generated.
503
+ # reload boolean No Set this parameter to 'true' to
504
+ # return the created conversation in
505
+ # the response.
506
+ #
507
+
508
+ def create_conversation(conversation)
509
+ if !conversation
510
+ raise StandardError.new("Missing Conversation")
511
+ end
512
+
513
+ url = "/conversations.json"
514
+
515
+ begin
516
+ response = Client.create_item(@auth, url, conversation.to_json)
517
+ rescue StandardError => e
518
+ puts "Could not create conversation: #{e.message}"
444
519
  end
445
520
  end
446
521
 
447
522
 
448
523
  # List Conversations
449
- # http://developer.helpscout.net/conversations/
524
+ # http://developer.helpscout.net/conversations/list/
450
525
  #
451
526
  # Fetches conversations in a mailbox with a given status
452
527
  #
@@ -513,13 +588,13 @@ module HelpScout
513
588
 
514
589
  begin
515
590
  options["page"] = page
516
- items = Client.requestItems(@auth, url, options)
591
+ items = Client.request_items(@auth, url, options)
517
592
  items.each do |item|
518
593
  conversations << Conversation.new(item)
519
594
  end
520
595
  page = page + 1
521
596
  rescue StandardError => e
522
- print "List Conversations Request failed: " + e.message
597
+ puts "List Conversations Request failed: #{e.message}"
523
598
  end while items && items.count > 0 && (limit == 0 || conversations.count < limit)
524
599
 
525
600
  if limit > 0 && conversations.count > limit
@@ -573,7 +648,7 @@ module HelpScout
573
648
  # threads, you need to retrieve the full conversation object
574
649
  # via the Get Conversation call.
575
650
 
576
- def conversationsInFolder(mailboxId, folderId, status, limit=0, modifiedSince)
651
+ def conversations_in_folder(mailboxId, folderId, status, limit=0, modifiedSince)
577
652
  url = "/mailboxes/#{mailboxId}/folders/#{folderId}/conversations.json"
578
653
 
579
654
  page = 1
@@ -595,13 +670,13 @@ module HelpScout
595
670
 
596
671
  begin
597
672
  options["page"] = page
598
- items = Client.requestItems(@auth, url, options)
673
+ items = Client.request_items(@auth, url, options)
599
674
  items.each do |item|
600
675
  conversations << Conversation.new(item)
601
676
  end
602
677
  page = page + 1
603
678
  rescue StandardError => e
604
- print "List Conversations In Folder Request failed: " + e.message
679
+ puts "List Conversations In Folder Request failed: #{e.message}"
605
680
  end while items && items.count > 0 && (limit == 0 || conversations.count < limit)
606
681
 
607
682
  if limit > 0 && conversations.count > limit
@@ -647,7 +722,7 @@ module HelpScout
647
722
  # Name Type
648
723
  # count Integer Count of Conversation objects.
649
724
 
650
- def conversationCount(mailboxId, status, modifiedSince)
725
+ def conversation_count(mailboxId, status, modifiedSince)
651
726
  url = "/mailboxes/#{mailboxId}/conversations.json"
652
727
 
653
728
  page = 1
@@ -665,9 +740,9 @@ module HelpScout
665
740
 
666
741
  begin
667
742
  options["page"] = page
668
- count = Client.requestCount(@auth, url, options)
743
+ count = Client.request_count(@auth, url, options)
669
744
  rescue StandardError => e
670
- print "Conversation Count Request failed: " + e.message
745
+ puts "Conversation Count Request failed: #{e.message}"
671
746
  end
672
747
  end
673
748
 
@@ -687,9 +762,9 @@ module HelpScout
687
762
  # Name Type
688
763
  # item Conversation::AttachmentData
689
764
 
690
- def attachmentData(attachmentId)
765
+ def attachment_data(attachmentId)
691
766
  url = "/attachments/#{attachmentId}/data.json"
692
- item = Client.requestItem(@auth, url, nil)
767
+ item = Client.request_item(@auth, url, nil)
693
768
  attachmentData = nil
694
769
  if item
695
770
  attachmentData = Conversation::AttachmentData.new(item)
@@ -716,7 +791,7 @@ module HelpScout
716
791
 
717
792
  def customer(customerId)
718
793
  url = "/customers/#{customerId}.json"
719
- item = Client.requestItem(@auth, url, nil)
794
+ item = Client.request_item(@auth, url, nil)
720
795
  customer = nil
721
796
  if item
722
797
  customer = Customer.new(item)
@@ -729,8 +804,10 @@ module HelpScout
729
804
  # List Customers
730
805
  # http://developer.helpscout.net/customers/
731
806
  #
732
- # Fetches all customers. Customers are returned by createdAt date, from
733
- # newest to oldest.
807
+ # Customers can be filtered on any combination of first name, last name, and
808
+ # email.
809
+ #
810
+ # Customers are returned by createdAt date, from newest to oldest.
734
811
  #
735
812
  # Request
736
813
  # REST Method: GET
@@ -738,21 +815,97 @@ module HelpScout
738
815
  #
739
816
  # Parameters:
740
817
  # Name Type Required Default Notes
741
- # page Int No 1
818
+ # Name Type Required Default
819
+ # firstName String No
820
+ # lastName String No
821
+ # email String No
822
+ # page Int No 1
742
823
  #
743
824
  # Response
744
825
  # Name Type
745
826
  # items Array Collection of Customer objects.
746
827
 
747
- def customers
828
+ def customers(limit=0, firstName=nil, lastName=nil, email=nil)
748
829
  url = "/customers.json"
749
- items = Client.requestItems(@auth, url, :page => 1)
830
+
831
+ page = 1
832
+ options = {}
833
+
834
+ if limit < 0
835
+ limit = 0
836
+ end
837
+
838
+ if firstName
839
+ options["firstName"] = firstName
840
+ end
841
+
842
+ if lastName
843
+ options["lastName"] = lastName
844
+ end
845
+
846
+ if email
847
+ options["email"] = email
848
+ end
849
+
750
850
  customers = []
751
- items.each do |item|
752
- customers << Customer.new(item)
851
+
852
+ begin
853
+ options["page"] = page
854
+ items = Client.request_items(@auth, url, options)
855
+ items.each do |item|
856
+ customers << Customer.new(item)
857
+ end
858
+ page = page + 1
859
+ rescue StandardError => e
860
+ puts "Request failed: #{e.message}"
861
+ end while items && items.count > 0 && (limit == 0 || customers.count < limit)
862
+
863
+ if limit > 0 && customers.count > limit
864
+ customers = customers[0..limit-1]
753
865
  end
754
866
 
755
867
  customers
756
868
  end
869
+
870
+ # Helper method to find customers by email
871
+ def customers_by_email(email)
872
+ customers(0, nil, nil, email)
873
+ end
874
+
875
+ # Create Customer
876
+ # http://developer.helpscout.net/customers/create/
877
+ #
878
+ # Creates a new Customer.
879
+ #
880
+ # Request
881
+ # REST Method: POST
882
+ # URL: https://api.helpscout.net/v1/customers.json
883
+ #
884
+ # POST Parameters
885
+ # Name Type Required Notes
886
+ # customer Customer Yes The body of the request
887
+ # reload boolean No Set to true to return the customer in the
888
+ # response.
889
+ # Response
890
+ # Response Name Type Notes
891
+ # Header Status Integer 201
892
+ # Header Location String https://api.helpscout.net/v1/customer/{id}.json
893
+
894
+ def create_customer(customer)
895
+ if !customer
896
+ raise StandardError.new("Missing Customer")
897
+ end
898
+
899
+ url = "/customers.json"
900
+ params = JSON.parse(customer.to_json)
901
+
902
+ begin
903
+ response = Client.create_item(@auth, url, customer.to_json)
904
+ true
905
+ rescue StandardError => e
906
+ puts "Could not create customer: #{e.message}"
907
+ false
908
+ end
909
+ end
757
910
  end
758
911
  end
@@ -68,14 +68,14 @@ module HelpScout
68
68
  # *name String Feedback Name of the Mailbox
69
69
  # slug String 47204a026903ce6d Key used to represent this
70
70
  # Mailbox
71
- # email String feedback@support.com Email address
71
+ # email String feedback@parse.com Email address
72
72
  # createdAt DateTime 2012-07-23T12:34:12Z UTC time when this mailbox was
73
73
  # created.
74
74
  # modifiedAt DateTime 2012-07-24T20:18:33Z UTC time when this mailbox was
75
75
  # modified.
76
76
 
77
77
  class Mailbox
78
- attr_reader :id, :name, :slug, :email, :createdAt, :modifiedAt
78
+ attr_reader :id, :name, :slug, :email, :createdAt, :modifiedAt, :folders
79
79
 
80
80
  # Creates a new Mailbox object from a Hash of attributes
81
81
  def initialize(object)
@@ -87,6 +87,13 @@ module HelpScout
87
87
 
88
88
  @slug = object["slug"]
89
89
  @email = object["email"]
90
+
91
+ @folders = []
92
+ if object["folders"]
93
+ object["folders"].each do |folder|
94
+ @folders << Folder.new(folder)
95
+ end
96
+ end
90
97
  end
91
98
  end
92
99
 
@@ -101,12 +108,12 @@ module HelpScout
101
108
  # isDraft Boolean false Is this a draft?
102
109
  # number Int 349 The conversation number
103
110
  # displayed in the UI.
104
- # owner User User of the Help Scout user
111
+ # owner Person User of the Help Scout user
105
112
  # that is currently assigned
106
113
  # to this conversation
107
114
  # mailbox Mailbox Mailbox to which this
108
115
  # conversation belongs.
109
- # customer Customer Customer to which this
116
+ # customer Person Customer to which this
110
117
  # conversation belongs.
111
118
  # threadCount Int 4 This count represents the
112
119
  # number of published threads
@@ -118,9 +125,9 @@ module HelpScout
118
125
  # status String active Status of the conversation.
119
126
  # subject String I need help!
120
127
  # preview String Hello, I...
121
- # createdBy Customer Either the Customer or User
122
- # - or - that created this
123
- # User conversation.
128
+ # createdBy Person Either the Customer or User
129
+ # that created this
130
+ # conversation.
124
131
  # Inspect the Source object
125
132
  # for clarification.
126
133
  # createdAt DateTime 2012-07-23T12:34:12Z UTC time when this
@@ -130,7 +137,7 @@ module HelpScout
130
137
  # closedAt DateTime UTC time when this
131
138
  # conversation was closed.
132
139
  # Null if not closed.
133
- # closedBy User User of the Help Scout user
140
+ # closedBy Person User of the Help Scout user
134
141
  # that closed this
135
142
  # conversation.
136
143
  # source Source Specifies the method in
@@ -153,7 +160,7 @@ module HelpScout
153
160
  # * STATUS_SPAM
154
161
 
155
162
  class Conversation
156
- attr_reader :id, :folderId, :isDraft, :number, :owner, :mailbox, :customer, :threadCount, :status, :subject, :preview, :createdBy, :createdAt, :modifiedAt, :closedAt, :closedBy, :source, :cc, :bcc, :tags, :threads, :url
163
+ attr_reader :id, :type, :folderId, :isDraft, :number, :owner, :mailbox, :customer, :threadCount, :status, :subject, :preview, :createdBy, :createdAt, :modifiedAt, :closedAt, :closedBy, :source, :cc, :bcc, :tags, :threads, :url
157
164
 
158
165
  STATUS_ACTIVE = "active"
159
166
  STATUS_PENDING = "pending"
@@ -165,32 +172,22 @@ module HelpScout
165
172
  @createdAt = DateTime.iso8601(object["createdAt"]) if object["createdAt"]
166
173
  @modifiedAt = DateTime.iso8601(object["userModifiedAt"]) if object["userModifiedAt"]
167
174
  @closedAt = DateTime.iso8601(object["closedAt"]) if object["closedAt"]
175
+
168
176
  @id = object["id"]
177
+ @type = object["type"]
169
178
  @folderId = object["folderId"]
170
179
  @isDraft = object["isDraft"]
171
180
  @number = object["number"]
172
- @owner = User.new(object["owner"]) if object["owner"]
181
+ @owner = Person.new(object["owner"]) if object["owner"]
173
182
  @mailbox = Mailbox.new(object["mailbox"]) if object["mailbox"]
174
- @customer = Customer.new(object["customer"]) if object["customer"]
183
+ @customer = Person.new(object["customer"]) if object["customer"]
175
184
  @threadCount = object["threadCount"]
176
185
  @status = object["status"]
177
186
  @subject = object["subject"]
178
187
  @preview = object["preview"]
179
- @closedBy = User.new(object["closedBy"]) if object["closedBy"]
180
-
181
- @source = nil
182
- if object["source"]
183
- @source = Source.new(object["source"])
184
-
185
- if object["createdBy"]
186
- if @source.type == Source::VIA_CUSTOMER
187
- @createdBy = Customer.new(object["createdBy"])
188
- elsif @source.type == Source::VIA_USER
189
- @createdBy = User.new(object["createdBy"])
190
- end
191
- end
192
- end
193
-
188
+ @closedBy = Person.new(object["closedBy"]) if object["closedBy"]
189
+ @createdBy = Person.new(object["person"]) if object["person"]
190
+ @source = Source.new(object["source"]) if object["source"]
194
191
  @cc = object["cc"]
195
192
  @bcc = object["bcc"]
196
193
  @tags = object["tags"]
@@ -216,7 +213,7 @@ module HelpScout
216
213
  #
217
214
  # Name Type Example Notes
218
215
  # id Int 88171881 Unique identifier
219
- # assignedTo User User of the Help Scout user
216
+ # assignedTo Person User of the Help Scout user
220
217
  # to which this conversation
221
218
  # has been assigned.
222
219
  # status String active Status of the thread. Thread
@@ -226,9 +223,9 @@ module HelpScout
226
223
  # be set to STATUS_NO_CHANGE.
227
224
  # createdAt DateTime 2012-07-23T12:34:12Z UTC time when this thread
228
225
  # was created.
229
- # createdBy Customer Either the Customer or User
230
- # - or - that created this
231
- # User conversation. Inspect the
226
+ # createdBy Person Either the Customer or User
227
+ # that created this
228
+ # conversation. Inspect the
232
229
  # Source object for
233
230
  # clarification.
234
231
  # source Source
@@ -238,7 +235,7 @@ module HelpScout
238
235
  # which it was moved.
239
236
  # type String message The type of thread.
240
237
  # state String published The state of the thread.
241
- # customer Customer If type is message, this is
238
+ # customer Person If type is message, this is
242
239
  # the Customer of the customer
243
240
  # in which the message was
244
241
  # sent. If type is customer,
@@ -319,26 +316,14 @@ module HelpScout
319
316
  @createdAt = DateTime.iso8601(object["createdAt"]) if object["createdAt"]
320
317
 
321
318
  @id = object["id"]
322
- @assignedTo = User.new(object["assignedTo"]) if object["assignedTo"]
319
+ @assignedTo = Person.new(object["assignedTo"]) if object["assignedTo"]
320
+ @createdBy = Person.new(object["createdBy"]) if object["createdBy"]
323
321
  @status = object["status"]
324
-
325
- @source = nil
326
- if object["source"]
327
- @source = Source.new(object["source"])
328
-
329
- if object["createdBy"]
330
- if @source.type == Source::VIA_CUSTOMER
331
- @createdBy = Customer.new(object["createdBy"])
332
- elsif @source.type == Source::VIA_USER
333
- @createdBy = User.new(object["createdBy"])
334
- end
335
- end
336
- end
337
-
322
+ @source = Source.new(object["source"]) if object["source"]
338
323
  @fromMailbox = Mailbox.new(object["fromMailbox"]) if object["fromMailbox"]
339
324
  @type = object["type"]
340
325
  @state = object["state"]
341
- @customer = Customer.new(object["customer"]) if object["customer"]
326
+ @customer = Person.new(object["customer"]) if object["customer"]
342
327
  @body = object["body"]
343
328
  @to = object["to"]
344
329
  @cc = object["cc"]
@@ -408,21 +393,56 @@ module HelpScout
408
393
  end
409
394
 
410
395
 
411
- # User
412
- # http://developer.helpscout.net/objects/user/
413
- # http://developer.helpscout.net/objects/user/user-ref/
396
+ # Person
397
+ # http://developer.helpscout.net/objects/person/
414
398
  #
415
- # UserRefs are a subset of a full User object, and only include the attributes
416
- # marked with a *.
399
+ # The person object is a subset of the data representing a Customer or
400
+ # User. The 'type' property will specify if this person is represented by
401
+ # a 'user' or a 'customer'.
417
402
  #
418
- # UserRefs are returned by endpoints that include multiple users.
419
- # A full User object can be obtained by fetching a single user directly.
403
+ # Name Type Example Notes
404
+ # id Int 1234 Unique identifier
405
+ # firstName String Jack
406
+ # lastName String Sprout
407
+ # email String jack.sprout@gmail.com
408
+ # phone String 800-555-1212
409
+ # type String user
410
+ #
411
+ # Possible values for type include:
412
+ # * TYPE_USER
413
+ # * TYPE_CUSTOMER
414
+
415
+ class Person
416
+ attr_reader :id, :firstName, :lastName, :email, :phone, :type
417
+
418
+ TYPE_USER = "user"
419
+ TYPE_CUSTOMER = "customer"
420
+
421
+ # Creates a new Person object from a Hash of attributes
422
+ def initialize(object)
423
+ @id = object["id"]
424
+ @firstName = object["firstName"]
425
+ @lastName = object["lastName"]
426
+ @email = object["email"]
427
+ @phone = object["phone"]
428
+ @type = object["type"]
429
+ end
430
+
431
+ # Returns a String suitable for display
432
+ def to_s
433
+ "#{@firstName} #{@lastName}"
434
+ end
435
+ end
436
+
437
+
438
+ # User
439
+ # http://developer.helpscout.net/objects/user/
420
440
  #
421
441
  # Name Type Example Notes
422
- # *id Int 1234 Unique identifier
423
- # *firstName String Jack
424
- # *lastName String Sprout
425
- # *email String jack.sprout@gmail.com
442
+ # id Int 1234 Unique identifier
443
+ # firstName String Jack
444
+ # lastName String Sprout
445
+ # email String jack.sprout@gmail.com
426
446
  # role String owner Role of this user.
427
447
  # timezone String America/New_York
428
448
  # photoUrl String http://.../avatar.jpg The user's photo, if one
@@ -438,7 +458,7 @@ module HelpScout
438
458
  # * ROLE_USER
439
459
 
440
460
  class User
441
- attr_reader :id, :firstName, :lastName, :email, :role, :timezone, :photoUrl, :createdAt, :createdBy
461
+ attr_reader :id, :firstName, :lastName, :email, :role, :timezone, :photoUrl, :createdAt, :modifiedAt
442
462
 
443
463
  ROLE_OWNER = "owner"
444
464
  ROLE_ADMIN = "admin"
@@ -447,6 +467,7 @@ module HelpScout
447
467
  # Creates a new User object from a Hash of attributes
448
468
  def initialize(object)
449
469
  @createdAt = DateTime.iso8601(object["createdAt"]) if object["createdAt"]
470
+ @modifiedAt = DateTime.iso8601(object["modifiedAt"]) if object["modifiedAt"]
450
471
 
451
472
  @id = object["id"]
452
473
  @firstName = object["firstName"]
@@ -455,7 +476,6 @@ module HelpScout
455
476
  @role = object["role"]
456
477
  @timezone = object["timezone"]
457
478
  @photoUrl = object["photoUrl"]
458
- @createdBy = object["createdBy"]
459
479
  end
460
480
 
461
481
  # Returns a String suitable for display
@@ -464,18 +484,11 @@ module HelpScout
464
484
  end
465
485
  end
466
486
 
467
-
468
487
  # Customer
469
488
  # http://developer.helpscout.net/objects/customer/
470
- # http://developer.helpscout.net/objects/customer/customer-ref/
471
- #
472
- # CustomerRefs are a subset of a full Customer object, and only include the
473
- # attributes marked with a *.
474
- #
475
- # CustomerRefs are returned by endpoints that include multiple customers.
476
489
  #
477
- # A full Customer object can be obtained by fetching a single customer
478
- # directly.
490
+ # Attributes marked with a * are returned when listing customers. Other
491
+ # attributes are only returned when fetching a single customer.
479
492
  #
480
493
  # Name Type Example Notes
481
494
  # *id Int 29418 Unique identifier
@@ -483,17 +496,25 @@ module HelpScout
483
496
  # *lastName String Bear
484
497
  # *email String vbear@mywork.com If the customer has multiple
485
498
  # emails, only one is returned.
486
- # photoUrl String http://../avatar.jpg
487
- # photoType String twitter Type of photo.
488
- # gender String Male Gender of this customer.
489
- # age String 30-35
490
- # organization String Acme, Inc
491
- # jobTitle String CEO and Co-Founder
492
- # location String Austin
493
- # createdAt DateTime 2012-07-23T12:34:12Z UTC time when this customer
499
+ # *photoUrl String http://../avatar.jpg
500
+ # *photoType String twitter Type of photo.
501
+ # *gender String Male Gender of this customer.
502
+ # *age String 30-35
503
+ # *organization String Acme, Inc
504
+ # *jobTitle String CEO and Co-Founder
505
+ # *location String Austin
506
+ # *createdAt DateTime 2012-07-23T12:34:12Z UTC time when this customer
494
507
  # was created.
495
- # modifiedAt DateTime 2012-07-24T20:18:33Z UTC time when this customer
508
+ # *modifiedAt DateTime 2012-07-24T20:18:33Z UTC time when this customer
496
509
  # was modified.
510
+ # background String I've worked with... This is the Background Info
511
+ # field from the UI.
512
+ # address Address
513
+ # socialProfiles Array Array of SocialProfiles
514
+ # emails Array Array of Emails
515
+ # phones Array Array of Phones
516
+ # chats Array Array of Chats
517
+ # websites Array Array of Websites
497
518
  #
498
519
  # Possible values for photoType include:
499
520
  # * PHOTO_TYPE_UNKNOWN
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: helpscout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-11 00:00:00.000000000Z
12
+ date: 2013-02-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &70109893584620 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70109893584620
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: bundler
27
- requirement: &70109893583940 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 1.2.3
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70109893583940
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.3
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: jeweler
38
- requirement: &70109893583180 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 1.8.4
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70109893583180
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.8.4
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: httparty
49
- requirement: &70109893582640 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70109893582640
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: simplecov
60
- requirement: &70109893582100 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70109893582100
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: reek
71
- requirement: &70109893581420 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: 1.2.8
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70109893581420
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.2.8
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rdoc
82
- requirement: &70109893580760 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,7 +117,12 @@ dependencies:
87
117
  version: '0'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70109893580760
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  description: ''
92
127
  email: hector@hectorramos.com
93
128
  executables: []
@@ -118,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
153
  version: '0'
119
154
  segments:
120
155
  - 0
121
- hash: -795765520829784459
156
+ hash: 3673943477065505692
122
157
  required_rubygems_version: !ruby/object:Gem::Requirement
123
158
  none: false
124
159
  requirements:
@@ -127,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
162
  version: '0'
128
163
  requirements: []
129
164
  rubyforge_project:
130
- rubygems_version: 1.8.11
165
+ rubygems_version: 1.8.24
131
166
  signing_key:
132
167
  specification_version: 3
133
168
  summary: HelpScout API Wrapper