sailthru-client 1.09 → 1.10
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/lib/sailthru.rb +96 -13
- metadata +20 -6
data/lib/sailthru.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'net/http'
|
2
3
|
require 'uri'
|
3
4
|
require 'cgi'
|
4
|
-
require 'rubygems'
|
5
5
|
require 'json'
|
6
6
|
require 'digest/md5'
|
7
|
+
require 'net/http/post/multipart'
|
7
8
|
|
8
9
|
module Sailthru
|
9
10
|
|
10
|
-
Version = VERSION = '1.
|
11
|
+
Version = VERSION = '1.10'
|
11
12
|
|
12
13
|
class SailthruClientException < Exception
|
13
14
|
end
|
@@ -605,6 +606,63 @@ module Sailthru
|
|
605
606
|
def stats(data)
|
606
607
|
api_get(:stats, data)
|
607
608
|
end
|
609
|
+
|
610
|
+
# params
|
611
|
+
# job, String
|
612
|
+
# options, hash
|
613
|
+
# report_email, String
|
614
|
+
# postback_url, String
|
615
|
+
# binary_key, String
|
616
|
+
#
|
617
|
+
# interface for making request to job call
|
618
|
+
def process_job(job, options = {}, report_email = nil, postback_url = nil, binary_key = nil)
|
619
|
+
data = options
|
620
|
+
data['job'] = job
|
621
|
+
if !report_email.nil?
|
622
|
+
data['report_email'] = report_email
|
623
|
+
end
|
624
|
+
|
625
|
+
if !postback_url.nil?
|
626
|
+
data['postback_url'] = postback_url
|
627
|
+
end
|
628
|
+
api_post(:job, data, binary_key)
|
629
|
+
end
|
630
|
+
|
631
|
+
# implementation for import_job
|
632
|
+
def process_import_job(list, emails, report_email = nil, postback_url = nil)
|
633
|
+
data = {}
|
634
|
+
data['list'] = list
|
635
|
+
data['emails'] = emails
|
636
|
+
process_job(:import, data, report_email, postback_url)
|
637
|
+
end
|
638
|
+
|
639
|
+
# implementation for import job using file upload
|
640
|
+
def process_import_job_from_file(list, file_path, report_email = nil, postback_url = nil)
|
641
|
+
data = {}
|
642
|
+
data['list'] = list
|
643
|
+
data['file'] = file_path
|
644
|
+
process_job(:import, data, report_email, postback_url, 'file')
|
645
|
+
end
|
646
|
+
|
647
|
+
# implementation for snapshot job
|
648
|
+
def process_snapshot_job(query = {}, report_email = nil, postback_url = nil)
|
649
|
+
data = {}
|
650
|
+
data['query'] = query
|
651
|
+
process_job(:snapshot, data, report_email, postback_url)
|
652
|
+
end
|
653
|
+
|
654
|
+
# implementation for export list job
|
655
|
+
def process_export_list_job(list, report_email = nil, postback_url = nil)
|
656
|
+
data = {}
|
657
|
+
data['list'] = list
|
658
|
+
process_job(:export_list_data, data, report_email, postback_url)
|
659
|
+
end
|
660
|
+
|
661
|
+
# get status of a job
|
662
|
+
def get_job_status(job_id)
|
663
|
+
api_get(:job, {'job_id' => job_id})
|
664
|
+
end
|
665
|
+
|
608
666
|
|
609
667
|
# Perform API GET request
|
610
668
|
def api_get(action, data)
|
@@ -612,8 +670,8 @@ module Sailthru
|
|
612
670
|
end
|
613
671
|
|
614
672
|
# Perform API POST request
|
615
|
-
def api_post(action, data)
|
616
|
-
api_request(action, data, 'POST')
|
673
|
+
def api_post(action, data, binary_key = nil)
|
674
|
+
api_request(action, data, 'POST', binary_key)
|
617
675
|
end
|
618
676
|
|
619
677
|
#Perform API DELETE request
|
@@ -632,11 +690,22 @@ module Sailthru
|
|
632
690
|
#
|
633
691
|
# Perform an API request, using the shared-secret auth hash.
|
634
692
|
#
|
635
|
-
def api_request(action, data, request_type)
|
693
|
+
def api_request(action, data, request_type, binary_key = nil)
|
694
|
+
|
636
695
|
data[:api_key] = @api_key
|
637
696
|
data[:format] ||= 'json'
|
697
|
+
|
698
|
+
if (!binary_key.nil?)
|
699
|
+
binary_key_data = data[binary_key]
|
700
|
+
data.delete(binary_key)
|
701
|
+
end
|
702
|
+
|
638
703
|
data[:sig] = get_signature_hash(data, @secret)
|
639
|
-
|
704
|
+
|
705
|
+
if (!binary_key.nil?)
|
706
|
+
data[binary_key] = binary_key_data
|
707
|
+
end
|
708
|
+
_result = self.http_request("#{@api_uri}/#{action}", data, request_type, binary_key)
|
640
709
|
|
641
710
|
|
642
711
|
# NOTE: don't do the unserialize here
|
@@ -658,20 +727,29 @@ module Sailthru
|
|
658
727
|
# method, String "GET" or "POST"
|
659
728
|
# returns:
|
660
729
|
# String, body of response
|
661
|
-
def http_request(uri, data, method = 'POST')
|
730
|
+
def http_request(uri, data, method = 'POST', binary_key = nil)
|
662
731
|
data = flatten_nested_hash(data, false)
|
663
|
-
|
664
|
-
|
665
|
-
else
|
732
|
+
|
733
|
+
if method != 'POST'
|
666
734
|
uri += "?" + data.map{ |key, value| "#{CGI::escape(key.to_s)}=#{CGI::escape(value.to_s)}" }.join("&")
|
667
735
|
end
|
736
|
+
|
668
737
|
req = nil
|
669
738
|
headers = {"User-Agent" => "Sailthru API Ruby Client #{VERSION}"}
|
670
739
|
|
671
740
|
_uri = URI.parse(uri)
|
741
|
+
|
672
742
|
if method == 'POST'
|
673
|
-
|
674
|
-
|
743
|
+
if (!binary_key.nil?)
|
744
|
+
binary_data = data[binary_key]
|
745
|
+
data[binary_key] = UploadIO.new(File.open(binary_data), "text/plain")
|
746
|
+
#req = Net::HTTP::Post::Multipart.new(_uri.path, binary_key => UploadIO.new(File.open(binary_data), "text/plain"))
|
747
|
+
req = Net::HTTP::Post::Multipart.new(_uri.path, data)
|
748
|
+
else
|
749
|
+
req = Net::HTTP::Post.new(_uri.path, headers)
|
750
|
+
req.set_form_data(data)
|
751
|
+
end
|
752
|
+
|
675
753
|
else
|
676
754
|
request_uri = "#{_uri.path}?#{_uri.query}"
|
677
755
|
if method == 'DELETE'
|
@@ -688,12 +766,17 @@ module Sailthru
|
|
688
766
|
rescue Exception => e
|
689
767
|
raise SailthruClientException.new("Unable to open stream: #{_uri.to_s}");
|
690
768
|
end
|
691
|
-
|
769
|
+
|
692
770
|
if response.body
|
693
771
|
return response.body
|
694
772
|
else
|
695
773
|
raise SailthruClientException.new("No response received from stream: #{_uri.to_s}")
|
696
774
|
end
|
697
775
|
end
|
776
|
+
|
777
|
+
def http_multipart_request(uri, data)
|
778
|
+
req = Net::HTTP::Post::Multipart.new url.path,
|
779
|
+
"file" => UploadIO.new(data['file'], "application/octet-stream")
|
780
|
+
end
|
698
781
|
end
|
699
782
|
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sailthru-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: "1.
|
8
|
+
- 10
|
9
|
+
version: "1.10"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Prajwal Tuladhar
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-05-
|
17
|
+
date: 2011-05-19 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
type: :runtime
|
33
33
|
version_requirements: *id001
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
|
-
name:
|
35
|
+
name: multipart-post
|
36
36
|
prerelease: false
|
37
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
38
|
none: false
|
@@ -43,8 +43,22 @@ dependencies:
|
|
43
43
|
segments:
|
44
44
|
- 0
|
45
45
|
version: "0"
|
46
|
-
type: :
|
46
|
+
type: :runtime
|
47
47
|
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: fakeweb
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :development
|
61
|
+
version_requirements: *id003
|
48
62
|
description:
|
49
63
|
email: praj@sailthru.com
|
50
64
|
executables: []
|