sailthru-client 1.10 → 1.11

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.
Files changed (3) hide show
  1. data/README.md +26 -0
  2. data/lib/sailthru.rb +42 -20
  3. metadata +19 -7
data/README.md CHANGED
@@ -195,3 +195,29 @@ Examples
195
195
  email = 'praj@sailthru.com'
196
196
  tags = ['red', 'blue']
197
197
  response = sailthru.set_horizon(email, tags)
198
+
199
+ ### [job] (http://docs.sailthru.com/api/job)
200
+
201
+ # get status of job id
202
+ job_id = '4dd58f036803fa3b5500000b'
203
+ response = sailthru.get_job_status(job_id)
204
+
205
+ # process import job for email string
206
+ list = 'test-list'
207
+ emails = 'a@a.com,b@b.com'
208
+ response = sailthru.process_import_job(list, emails)
209
+
210
+ # process import job from CSV or text file
211
+ list = 'test-list'
212
+ source_file = '/home/praj/Desktop/emails.txt'
213
+ response = sailthru.process_import_job(list, source_file)
214
+
215
+ # process snapshot job
216
+ query = {}
217
+ report_email = 'praj@sailthru.com'
218
+ postback_url = 'http://example.com/reports/snapshot_postback'
219
+ response = sailthru.process_snapshot_job(query)
220
+
221
+ # process export list job
222
+ list = 'test-list'
223
+ response = sailthru.process_export_list_job(list)
data/lib/sailthru.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ require 'net/https'
2
3
  require 'net/http'
3
4
  require 'uri'
4
5
  require 'cgi'
@@ -8,7 +9,7 @@ require 'net/http/post/multipart'
8
9
 
9
10
  module Sailthru
10
11
 
11
- Version = VERSION = '1.10'
12
+ Version = VERSION = '1.11'
12
13
 
13
14
  class SailthruClientException < Exception
14
15
  end
@@ -104,16 +105,19 @@ module Sailthru
104
105
 
105
106
  include Helpers
106
107
 
108
+ attr_accessor :verify_ssl
109
+
107
110
  # params:
108
111
  # api_key, String
109
112
  # secret, String
110
113
  # api_uri, String
111
114
  #
112
115
  # Instantiate a new client; constructor optionally takes overrides for key/secret/uri.
113
- def initialize(api_key, secret, api_uri)
116
+ def initialize(api_key, secret, api_uri = nil)
114
117
  @api_key = api_key
115
118
  @secret = secret
116
- @api_uri = api_uri
119
+ @api_uri = if api_uri.nil? then 'https://api.sailthru.com' else api_uri end
120
+ @verify_ssl = true
117
121
  end
118
122
 
119
123
  # params:
@@ -691,33 +695,34 @@ module Sailthru
691
695
  # Perform an API request, using the shared-secret auth hash.
692
696
  #
693
697
  def api_request(action, data, request_type, binary_key = nil)
694
-
695
- data[:api_key] = @api_key
696
- data[:format] ||= 'json'
697
-
698
698
  if (!binary_key.nil?)
699
699
  binary_key_data = data[binary_key]
700
700
  data.delete(binary_key)
701
701
  end
702
-
703
- data[:sig] = get_signature_hash(data, @secret)
702
+
703
+ if data[:format].nil? or data[:format] == 'json'
704
+ data = self.prepare_json_payload(data)
705
+ else
706
+ data[:api_key] = @api_key
707
+ data[:format] ||= 'json'
708
+ data[:sig] = get_signature_hash(data, @secret)
709
+ end
704
710
 
705
711
  if (!binary_key.nil?)
706
712
  data[binary_key] = binary_key_data
707
713
  end
708
714
  _result = self.http_request("#{@api_uri}/#{action}", data, request_type, binary_key)
709
715
 
710
-
711
716
  # NOTE: don't do the unserialize here
712
- if data[:format] == 'json'
717
+ if data[:format] == 'json'
713
718
  begin
714
- unserialized = JSON.parse(_result)
715
- return unserialized ? unserialized : _result
719
+ unserialized = JSON.parse(_result)
720
+ return unserialized ? unserialized : _result
716
721
  rescue JSON::JSONError => e
717
- return {'error' => e}
722
+ return {'error' => e}
718
723
  end
719
- end
720
- return _result
724
+ end
725
+ return _result
721
726
  end
722
727
 
723
728
 
@@ -743,7 +748,6 @@ module Sailthru
743
748
  if (!binary_key.nil?)
744
749
  binary_data = data[binary_key]
745
750
  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
751
  req = Net::HTTP::Post::Multipart.new(_uri.path, data)
748
752
  else
749
753
  req = Net::HTTP::Post.new(_uri.path, headers)
@@ -760,11 +764,19 @@ module Sailthru
760
764
  end
761
765
 
762
766
  begin
763
- response = Net::HTTP.start(_uri.host, _uri.port) {|http|
764
- http.request(req)
767
+ http = Net::HTTP.new(_uri.host, _uri.port)
768
+
769
+ if _uri.scheme == 'https'
770
+ http.use_ssl = true
771
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @verify_ssl != true # some openSSL client doesn't work without doing this
772
+ end
773
+
774
+ response = http.start {
775
+ http.request(req)
765
776
  }
777
+
766
778
  rescue Exception => e
767
- raise SailthruClientException.new("Unable to open stream: #{_uri.to_s}");
779
+ raise SailthruClientException.new("Unable to open stream: #{_uri.to_s}\n" + e);
768
780
  end
769
781
 
770
782
  if response.body
@@ -778,5 +790,15 @@ module Sailthru
778
790
  req = Net::HTTP::Post::Multipart.new url.path,
779
791
  "file" => UploadIO.new(data['file'], "application/octet-stream")
780
792
  end
793
+
794
+ def prepare_json_payload(data)
795
+ payload = {
796
+ :api_key => @api_key,
797
+ :format => 'json', #fuck XML
798
+ :json => data.to_json
799
+ }
800
+ payload[:sig] = get_signature_hash(payload, @secret)
801
+ payload
802
+ end
781
803
  end
782
804
  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: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 10
9
- version: "1.10"
8
+ - 11
9
+ version: "1.11"
10
10
  platform: ruby
11
11
  authors:
12
12
  - Prajwal Tuladhar
@@ -14,8 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-05-19 00:00:00 -04:00
18
- default_executable:
17
+ date: 2011-06-15 00:00:00 Z
19
18
  dependencies:
20
19
  - !ruby/object:Gem::Dependency
21
20
  name: json
@@ -59,6 +58,20 @@ dependencies:
59
58
  version: "0"
60
59
  type: :development
61
60
  version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: shoulda
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ type: :development
74
+ version_requirements: *id004
62
75
  description:
63
76
  email: praj@sailthru.com
64
77
  executables: []
@@ -70,7 +83,6 @@ extra_rdoc_files:
70
83
  files:
71
84
  - README.md
72
85
  - lib/sailthru.rb
73
- has_rdoc: true
74
86
  homepage: http://docs.sailthru.com
75
87
  licenses: []
76
88
 
@@ -101,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
113
  requirements: []
102
114
 
103
115
  rubyforge_project:
104
- rubygems_version: 1.4.1
116
+ rubygems_version: 1.8.5
105
117
  signing_key:
106
118
  specification_version: 3
107
119
  summary: A simple client library to remotely access the Sailthru REST API.