streamsend 0.2.3 → 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -5
- data/.rspec +1 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +25 -17
- data/README.md +76 -0
- data/Rakefile +1 -2
- data/lib/streamsend/api/account.rb +6 -48
- data/lib/streamsend/api/audience.rb +14 -0
- data/lib/streamsend/api/base/base_call.rb +60 -0
- data/lib/streamsend/api/base/create.rb +41 -0
- data/lib/streamsend/api/base/destroy.rb +43 -0
- data/lib/streamsend/api/base/index.rb +51 -0
- data/lib/streamsend/api/base/show.rb +42 -0
- data/lib/streamsend/api/base/update.rb +43 -0
- data/lib/streamsend/api/blast.rb +51 -0
- data/lib/streamsend/api/bounce.rb +20 -0
- data/lib/streamsend/api/click.rb +18 -0
- data/lib/streamsend/api/configuration.rb +26 -0
- data/lib/streamsend/api/email.rb +20 -0
- data/lib/streamsend/api/exception.rb +4 -4
- data/lib/streamsend/api/field.rb +20 -0
- data/lib/streamsend/api/field_option.rb +60 -0
- data/lib/streamsend/api/filter.rb +20 -0
- data/lib/streamsend/api/from_email_address.rb +24 -0
- data/lib/streamsend/api/import.rb +11 -0
- data/lib/streamsend/api/link.rb +11 -0
- data/lib/streamsend/api/list.rb +13 -39
- data/lib/streamsend/api/membership.rb +28 -0
- data/lib/streamsend/api/person.rb +66 -0
- data/lib/streamsend/api/result.rb +13 -0
- data/lib/streamsend/api/session.rb +73 -0
- data/lib/streamsend/api/unsubscribe.rb +20 -0
- data/lib/streamsend/api/upload.rb +13 -0
- data/lib/streamsend/api/user.rb +67 -38
- data/lib/streamsend/api/view.rb +8 -0
- data/lib/streamsend/version.rb +3 -0
- data/lib/streamsend.rb +35 -16
- data/spec/lib/streamsend/api/integration/account_spec.rb +50 -0
- data/spec/lib/streamsend/api/integration/audience_spec.rb +56 -0
- data/spec/lib/streamsend/api/integration/blast_spec.rb +110 -0
- data/spec/lib/streamsend/api/integration/bounce_spec.rb +43 -0
- data/spec/lib/streamsend/api/integration/click_spec.rb +37 -0
- data/spec/lib/streamsend/api/integration/email_spec.rb +76 -0
- data/spec/lib/streamsend/api/integration/field_option_spec.rb +87 -0
- data/spec/lib/streamsend/api/integration/field_spec.rb +75 -0
- data/spec/lib/streamsend/api/integration/filter_spec.rb +101 -0
- data/spec/lib/streamsend/api/integration/from_email_address_spec.rb +46 -0
- data/spec/lib/streamsend/api/integration/helpers.rb +16 -0
- data/spec/lib/streamsend/api/integration/import_spec.rb +35 -0
- data/spec/lib/streamsend/api/integration/link_spec.rb +39 -0
- data/spec/lib/streamsend/api/integration/list_spec.rb +83 -0
- data/spec/lib/streamsend/api/integration/membership_spec.rb +69 -0
- data/spec/lib/streamsend/api/integration/person_spec.rb +119 -0
- data/spec/lib/streamsend/api/integration/unsubscribe_spec.rb +47 -0
- data/spec/lib/streamsend/api/integration/upload_spec.rb +29 -0
- data/spec/lib/streamsend/api/integration/user_spec.rb +99 -0
- data/spec/lib/streamsend/api/integration/view_spec.rb +27 -0
- data/spec/lib/streamsend/api/unit/base/base_call_spec.rb +66 -0
- data/spec/lib/streamsend/api/unit/base/create_spec.rb +67 -0
- data/spec/lib/streamsend/api/unit/base/destroy_spec.rb +59 -0
- data/spec/lib/streamsend/api/unit/base/index_spec.rb +85 -0
- data/spec/lib/streamsend/api/unit/base/show_spec.rb +68 -0
- data/spec/lib/streamsend/api/unit/base/update_spec.rb +76 -0
- data/spec/lib/streamsend/api/unit/blast_spec.rb +79 -0
- data/spec/lib/streamsend/api/unit/bounce_spec.rb +36 -0
- data/spec/lib/streamsend/api/unit/click_spec.rb +34 -0
- data/spec/lib/streamsend/api/unit/field_option_spec.rb +71 -0
- data/spec/lib/streamsend/api/unit/from_email_address_spec.rb +20 -0
- data/spec/lib/streamsend/api/unit/link_spec.rb +33 -0
- data/spec/lib/streamsend/api/unit/list_spec.rb +33 -0
- data/spec/lib/streamsend/api/unit/membership_spec.rb +46 -0
- data/spec/lib/streamsend/api/unit/person_spec.rb +102 -0
- data/spec/lib/streamsend/api/unit/result_spec.rb +13 -0
- data/spec/lib/streamsend/api/unit/session_spec.rb +62 -0
- data/spec/lib/streamsend/api/unit/unsubscribe_spec.rb +33 -0
- data/spec/lib/streamsend/api/unit/user_spec.rb +102 -0
- data/spec/spec_helper.rb +8 -11
- data/streamsend.gemspec +22 -23
- metadata +250 -178
- checksums.yaml +0 -7
- data/.pair +0 -10
- data/README.rdoc +0 -1
- data/lib/streamsend/api/resource.rb +0 -41
- data/lib/streamsend/api/subscriber.rb +0 -113
- data/spec/integration/account_spec.rb +0 -69
- data/spec/integration/fixtures/vcr_cassettes/streamsend.yml +0 -6831
- data/spec/integration/integration.yml +0 -5
- data/spec/integration/list_spec.rb +0 -68
- data/spec/integration/spec_helper.rb +0 -16
- data/spec/integration/subscriber_spec.rb +0 -24
- data/spec/integration/user_spec.rb +0 -58
- data/spec/lib/streamsend/api/list_spec.rb +0 -179
- data/spec/lib/streamsend/api/resource_spec.rb +0 -24
- data/spec/lib/streamsend/api/subscriber_spec.rb +0 -345
- data/spec/lib/streamsend/api/user_spec.rb +0 -149
- data/spec/lib/streamsend/api_spec.rb +0 -31
- data/watcher_config.rb +0 -2
data/.gitignore
CHANGED
@@ -1,5 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
.
|
5
|
-
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
coverage
|
6
|
+
InstalledFiles
|
7
|
+
lib/bundler/man
|
8
|
+
pkg
|
9
|
+
rdoc
|
10
|
+
spec/reports
|
11
|
+
test/tmp
|
12
|
+
test/version_tmp
|
13
|
+
tmp
|
14
|
+
|
15
|
+
# YARD artifacts
|
16
|
+
.yardoc
|
17
|
+
_yardoc
|
18
|
+
doc/
|
data/.rspec
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,42 +1,52 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
streamsend (0.
|
4
|
+
streamsend (1.0.0.rc1)
|
5
5
|
activesupport (~> 3.2)
|
6
6
|
builder
|
7
|
-
|
7
|
+
httmultiparty
|
8
8
|
|
9
9
|
GEM
|
10
|
-
remote:
|
10
|
+
remote: http://rubygems.org/
|
11
11
|
specs:
|
12
12
|
activesupport (3.2.14)
|
13
13
|
i18n (~> 0.6, >= 0.6.4)
|
14
14
|
multi_json (~> 1.0)
|
15
15
|
addressable (2.3.5)
|
16
16
|
builder (3.2.2)
|
17
|
+
columnize (0.3.6)
|
17
18
|
crack (0.4.0)
|
18
19
|
safe_yaml (~> 0.9.0)
|
19
20
|
diff-lcs (1.2.4)
|
20
21
|
git-commit-story (0.1.5)
|
22
|
+
httmultiparty (0.3.10)
|
23
|
+
httparty (>= 0.7.3)
|
24
|
+
multipart-post
|
21
25
|
httparty (0.11.0)
|
22
26
|
multi_json (~> 1.0)
|
23
27
|
multi_xml (>= 0.5.2)
|
24
28
|
i18n (0.6.5)
|
25
|
-
|
29
|
+
linecache (0.46)
|
30
|
+
rbx-require-relative (> 0.0.4)
|
31
|
+
multi_json (1.8.1)
|
26
32
|
multi_xml (0.5.5)
|
33
|
+
multipart-post (1.2.0)
|
27
34
|
pair-salad (0.1.1)
|
28
|
-
|
29
|
-
|
30
|
-
rspec-
|
31
|
-
rspec-
|
32
|
-
|
33
|
-
rspec-
|
35
|
+
rbx-require-relative (0.0.9)
|
36
|
+
rspec (2.14.1)
|
37
|
+
rspec-core (~> 2.14.0)
|
38
|
+
rspec-expectations (~> 2.14.0)
|
39
|
+
rspec-mocks (~> 2.14.0)
|
40
|
+
rspec-core (2.14.5)
|
41
|
+
rspec-expectations (2.14.3)
|
34
42
|
diff-lcs (>= 1.1.3, < 2.0)
|
35
|
-
rspec-mocks (2.
|
36
|
-
ruby-
|
43
|
+
rspec-mocks (2.14.3)
|
44
|
+
ruby-debug (0.10.4)
|
45
|
+
columnize (>= 0.1)
|
46
|
+
ruby-debug-base (~> 0.10.4.0)
|
47
|
+
ruby-debug-base (0.10.4)
|
48
|
+
linecache (>= 0.3)
|
37
49
|
safe_yaml (0.9.3)
|
38
|
-
vcr (2.5.0)
|
39
|
-
watchr (0.7)
|
40
50
|
webmock (1.12.3)
|
41
51
|
addressable (>= 2.2.7)
|
42
52
|
crack (>= 0.3.2)
|
@@ -48,8 +58,6 @@ DEPENDENCIES
|
|
48
58
|
git-commit-story
|
49
59
|
pair-salad
|
50
60
|
rspec
|
51
|
-
ruby-
|
61
|
+
ruby-debug
|
52
62
|
streamsend!
|
53
|
-
vcr
|
54
|
-
watchr
|
55
63
|
webmock (~> 1.6)
|
data/README.md
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# streamsend-ruby
|
2
|
+
|
3
|
+
streamsend-ruby is a thin ruby wrapper for the StreamSend API.
|
4
|
+
|
5
|
+
### Getting started
|
6
|
+
|
7
|
+
**Creating a session**
|
8
|
+
Credentials can be passed in when initializing the session:
|
9
|
+
|
10
|
+
Session::Api::Session.new("my_ss_api_username", "secret_api_password")
|
11
|
+
|
12
|
+
Set via environment variables:
|
13
|
+
|
14
|
+
export STREAMSEND_USERNAME="my_ss_api_username"
|
15
|
+
export STREAMSEND_PASSWORD="secret_api_password"
|
16
|
+
|
17
|
+
Set via config file (gem checks for config/streamsend-ruby.yml):
|
18
|
+
|
19
|
+
root_account:
|
20
|
+
username: "my_ss_api_username"
|
21
|
+
password: "secret_api_password"
|
22
|
+
|
23
|
+
The base_uri can also be set in the same ways (e.g. STREAMSEND_BASE_URI="http://my.branded.url", and base_uri:
|
24
|
+
"http://my.branded.url"), but is optional and defaults to
|
25
|
+
<https://app.streamsend.com>
|
26
|
+
|
27
|
+
**Making Calls**
|
28
|
+
|
29
|
+
The show and index calls return a single or array of StreamSend::Api::Result
|
30
|
+
objects. The StreamSend::Api::Result object is just an OpenStruct that responds
|
31
|
+
to id with the hash value of id rather than the Ruby id. It also has to_hash
|
32
|
+
defined as an alias to marshaldump. Create and update take an object hash of
|
33
|
+
whatever it is that you're creating/updating. The object values should be nested
|
34
|
+
in a hash with a key corresponding to the object type:
|
35
|
+
|
36
|
+
`{ :list => { :name => "This is my new list!" } }`
|
37
|
+
|
38
|
+
OR
|
39
|
+
|
40
|
+
{ :list => my_list_result_object.to_hash }
|
41
|
+
#working with a result object named my_list_result_object.
|
42
|
+
|
43
|
+
### Examples:
|
44
|
+
|
45
|
+
**Index**
|
46
|
+
|
47
|
+
#Assuming credentials are set in env variables or in config file...
|
48
|
+
session = StreamSend::Api::Session.new()
|
49
|
+
index_call = StreamSend::Api::List::Index.new(session)
|
50
|
+
#Getting an array of StreamSend::Api::Result objects that respond like lists
|
51
|
+
lists =index_call.execute
|
52
|
+
|
53
|
+
**Create**
|
54
|
+
|
55
|
+
session = StreamSend::Api::Session.new()
|
56
|
+
create_call =StreamSend::Api::List::Create.new(session)
|
57
|
+
list_id = create_call.execute(:list => {:name => "new list!"})
|
58
|
+
|
59
|
+
**Show**
|
60
|
+
|
61
|
+
session = StreamSend::Api::Session.new("ss_api_username", "ss_api_pasword")
|
62
|
+
show_call = StreamSend::Api::List.Show.new(session)
|
63
|
+
list = show_call.execute(list_id)
|
64
|
+
|
65
|
+
**Destroy**
|
66
|
+
|
67
|
+
session = StreamSend::Api::Session.new("ss_api_username", "ss_api_pasword")
|
68
|
+
destroy_call = StreamSend::Api::List.Destroy.new(session)
|
69
|
+
destroy_call.execute(list_id)
|
70
|
+
#returns a bool indicating if it was destroyed
|
71
|
+
|
72
|
+
**Update**
|
73
|
+
|
74
|
+
session = StreamSend::Api::Session.new()
|
75
|
+
update_call = StreamSend::Api::List::Update.new(session)
|
76
|
+
update_call.execute(list_id, :list => {:name => "updated list!"})
|
data/Rakefile
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
require "bundler/gem_tasks"
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -1,61 +1,19 @@
|
|
1
|
-
require "active_support/core_ext/hash"
|
2
|
-
require File.expand_path(__FILE__, "exception")
|
3
|
-
|
4
1
|
module StreamSend
|
5
2
|
module Api
|
6
|
-
|
7
|
-
|
8
|
-
response = StreamSend::Api.get("/accounts.xml")
|
9
|
-
|
10
|
-
case response.code
|
11
|
-
when 200
|
12
|
-
response["accounts"].collect { |data| new(data) }
|
13
|
-
else
|
14
|
-
raise StreamSend::Api::Exception.new("Could not find any accounts. Make sure your api username and password are correct. (#{response.code})")
|
15
|
-
end
|
3
|
+
module Account
|
4
|
+
class Index < StreamSend::Api::Call::Index
|
16
5
|
end
|
17
6
|
|
18
|
-
|
19
|
-
response = StreamSend::Api.get("/accounts/#{id}.xml")
|
20
|
-
case response.code
|
21
|
-
when 200
|
22
|
-
new(response["account"])
|
23
|
-
else
|
24
|
-
raise StreamSend::Api::Exception.new("Could not find the account. Make sure your account ID is correct. (#{response.code})")
|
25
|
-
end
|
7
|
+
class Show < StreamSend::Api::Call::Show
|
26
8
|
end
|
27
9
|
|
28
|
-
|
29
|
-
response = StreamSend::Api.put("/accounts/#{account_hash['account_id']}/users/#{account_hash['user_id']}.xml", :body => account_hash.to_xml)
|
30
|
-
case response.code
|
31
|
-
when 200
|
32
|
-
true
|
33
|
-
else
|
34
|
-
false
|
35
|
-
end
|
10
|
+
class Update < StreamSend::Api::Call::Update
|
36
11
|
end
|
37
12
|
|
38
|
-
|
39
|
-
response = StreamSend::Api.post("/accounts.xml", :body => {:account => account_hash})
|
40
|
-
case response.code
|
41
|
-
when 201
|
42
|
-
response.headers["location"] =~ %r(/accounts/(\d+))
|
43
|
-
account_id = $1
|
44
|
-
account_id.to_i
|
45
|
-
else
|
46
|
-
raise StreamSend::Api::Exception.new("Could not create the account. (#{response.code})")
|
47
|
-
end
|
13
|
+
class Destory < StreamSend::Api::Call::Destroy
|
48
14
|
end
|
49
15
|
|
50
|
-
|
51
|
-
id = id.to_i
|
52
|
-
response = StreamSend::Api.delete("/accounts/#{id}.xml")
|
53
|
-
case response.code
|
54
|
-
when 200
|
55
|
-
true
|
56
|
-
else
|
57
|
-
raise StreamSend::Api::Exception.new("Could not delete the account. (#{response.code})")
|
58
|
-
end
|
16
|
+
class Create < StreamSend::Api::Call::Create
|
59
17
|
end
|
60
18
|
end
|
61
19
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Call
|
4
|
+
class BaseCall
|
5
|
+
def initialize(session)
|
6
|
+
@session = session
|
7
|
+
end
|
8
|
+
|
9
|
+
def session
|
10
|
+
@session
|
11
|
+
end
|
12
|
+
|
13
|
+
def namespace
|
14
|
+
namespaces = self.class.name.split("::")
|
15
|
+
namespaces[namespaces.count - 2].tableize.downcase
|
16
|
+
end
|
17
|
+
|
18
|
+
def base_uri
|
19
|
+
"#{session.base_uri}/#{namespace}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def base_audience_only
|
23
|
+
"#{session.base_uri}/audiences/#{session.audience_id}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def base_blast_only_for blast_id
|
27
|
+
"#{session.base_uri}/blasts/#{blast_id}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def base_audience_uri
|
31
|
+
"#{session.base_uri}/audiences/#{session.audience_id}/#{namespace}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def base_blast_uri_for blast_id
|
35
|
+
"#{session.base_uri}/blasts/#{blast_id}/#{namespace}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def user_uri_for(account_id, user_id)
|
39
|
+
"#{session.base_uri}/accounts/#{account_id}/users/#{user_id}.xml"
|
40
|
+
end
|
41
|
+
|
42
|
+
def users_uri account_id
|
43
|
+
"#{session.base_uri}/accounts/#{account_id}/users.xml"
|
44
|
+
end
|
45
|
+
|
46
|
+
def blast_uri_for blast_id
|
47
|
+
"#{base_blast_uri_for(blast_id)}.xml"
|
48
|
+
end
|
49
|
+
|
50
|
+
def audience_uri_for id
|
51
|
+
"#{base_audience_uri}/#{id}.xml"
|
52
|
+
end
|
53
|
+
|
54
|
+
def audiences_uri
|
55
|
+
"#{base_audience_uri}.xml"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Call
|
4
|
+
class Create < StreamSend::Api::Call::BaseCall
|
5
|
+
def execute(object_hash, options = {})
|
6
|
+
options.merge!(:body => object_hash)
|
7
|
+
response = session.post(uri, options)
|
8
|
+
case response.code
|
9
|
+
when 201
|
10
|
+
response.headers["location"].split("/").last.to_i
|
11
|
+
when 422
|
12
|
+
raise StreamSend::Api::SemanticException.new(response["errors"]["error"])
|
13
|
+
else
|
14
|
+
raise StreamSend::Api::Exception.new("Could not create the #{namespace}. (#{response.code})")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def uri
|
19
|
+
"#{base_uri}.xml"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class AudienceCreate < StreamSend::Api::Call::Create
|
24
|
+
def uri
|
25
|
+
audiences_uri
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class BlastCreate < StreamSend::Api::Call::Create
|
30
|
+
def execute(blast_id, object_hash)
|
31
|
+
@blast_id = blast_id
|
32
|
+
super(object_hash)
|
33
|
+
end
|
34
|
+
|
35
|
+
def uri
|
36
|
+
blast_uri_for @blast_id
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Call
|
4
|
+
class Destroy < StreamSend::Api::Call::BaseCall
|
5
|
+
def execute(object_id)
|
6
|
+
@id = object_id
|
7
|
+
response = session.delete(uri)
|
8
|
+
case response.code
|
9
|
+
when 200
|
10
|
+
true
|
11
|
+
else
|
12
|
+
raise StreamSend::Api::Exception.new "Could not delete #{namespace}. (#{response.code})"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def uri
|
17
|
+
"#{base_uri}/#{id}.xml"
|
18
|
+
end
|
19
|
+
|
20
|
+
def id
|
21
|
+
@id
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class AudienceDestroy < StreamSend::Api::Call::Destroy
|
26
|
+
def uri
|
27
|
+
audience_uri_for id
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class BlastDestroy < StreamSend::Api::Call::Destroy
|
32
|
+
def execute(blast_id, object_id)
|
33
|
+
@blast_id = blast_id
|
34
|
+
super(object_id)
|
35
|
+
end
|
36
|
+
|
37
|
+
def uri
|
38
|
+
"#{base_blast_uri_for(@blast_id)}/#{id}.xml"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Call
|
4
|
+
class Index < StreamSend::Api::Call::BaseCall
|
5
|
+
def execute(index_options = {})
|
6
|
+
@options = index_options
|
7
|
+
response = session.get(uri, @options)
|
8
|
+
case response.code
|
9
|
+
when 200
|
10
|
+
response.parsed_response[namespace].collect { |data| StreamSend::Api::Result.new(data) }
|
11
|
+
else
|
12
|
+
raise StreamSend::Api::Exception.new("Could not find any #{namespace}. (#{response.code})")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def uri
|
17
|
+
"#{base_uri}.xml"
|
18
|
+
end
|
19
|
+
|
20
|
+
def paging_query_string
|
21
|
+
"?page=#{page}&per_page=#{per_page}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def page
|
25
|
+
@options[:page] || 1
|
26
|
+
end
|
27
|
+
|
28
|
+
def per_page
|
29
|
+
@options[:per_page] || StreamSend::PER_PAGE_DEFAULT
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class AudienceIndex < StreamSend::Api::Call::Index
|
34
|
+
def uri
|
35
|
+
audiences_uri
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class BlastIndex < StreamSend::Api::Call::Index
|
40
|
+
def execute(blast_id, index_options = {})
|
41
|
+
@blast_id = blast_id
|
42
|
+
super(index_options)
|
43
|
+
end
|
44
|
+
|
45
|
+
def uri
|
46
|
+
"#{blast_uri_for(@blast_id)}#{paging_query_string}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Call
|
4
|
+
class Show < StreamSend::Api::Call::BaseCall
|
5
|
+
def execute(object_id)
|
6
|
+
@id = object_id
|
7
|
+
response = session.get(uri)
|
8
|
+
case response.code
|
9
|
+
when 200
|
10
|
+
StreamSend::Api::Result.new(response.parsed_response[namespace.singularize])
|
11
|
+
else
|
12
|
+
raise StreamSend::Api::Exception.new("Could not find any #{namespace} with the specified id. (#{response.code})")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def uri
|
17
|
+
"#{base_uri}/#{id}.xml"
|
18
|
+
end
|
19
|
+
|
20
|
+
def id
|
21
|
+
@id
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class AudienceShow < StreamSend::Api::Call::Show
|
26
|
+
def uri
|
27
|
+
audience_uri_for id
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class BlastShow < StreamSend::Api::Call::Show
|
32
|
+
def execute(blast_id, object_id)
|
33
|
+
@blast_id = blast_id
|
34
|
+
super(object_id)
|
35
|
+
end
|
36
|
+
def uri
|
37
|
+
"#{base_blast_uri_for(@blast_id)}/#{id}.xml"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Call
|
4
|
+
class Update < StreamSend::Api::Call::BaseCall
|
5
|
+
def execute(object_id, object_hash)
|
6
|
+
@id = object_id
|
7
|
+
response = session.put(uri, :body => object_hash)
|
8
|
+
case response.code
|
9
|
+
when 200
|
10
|
+
true
|
11
|
+
else
|
12
|
+
false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def uri
|
17
|
+
"#{base_uri}/#{@id}.xml"
|
18
|
+
end
|
19
|
+
|
20
|
+
def id
|
21
|
+
@id
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class AudienceUpdate < StreamSend::Api::Call::Update
|
26
|
+
def uri
|
27
|
+
audience_uri_for id
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class BlastUpdate < StreamSend::Api::Call::Update
|
32
|
+
def execute(blast_id, object_id, object_hash)
|
33
|
+
@blast_id = blast_id
|
34
|
+
super(object_id, object_hash)
|
35
|
+
end
|
36
|
+
|
37
|
+
def uri
|
38
|
+
"#{base_blast_uri_for(@blast_id)}/#{id}.xml"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Blast
|
4
|
+
class Index < StreamSend::Api::Call::AudienceIndex
|
5
|
+
def uri
|
6
|
+
"#{audiences_uri}#{paging_query_string}"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Scheduled < StreamSend::Api::Call::AudienceIndex
|
11
|
+
def uri
|
12
|
+
"#{base_audience_uri}/scheduled.xml#{paging_query_string}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Sent < StreamSend::Api::Call::AudienceIndex
|
17
|
+
def uri
|
18
|
+
"#{base_audience_uri}/sent.xml#{paging_query_string}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Show < StreamSend::Api::Call::AudienceShow
|
23
|
+
end
|
24
|
+
|
25
|
+
class Update < StreamSend::Api::Call::AudienceUpdate
|
26
|
+
end
|
27
|
+
|
28
|
+
class Destroy < StreamSend::Api::Call::AudienceDestroy
|
29
|
+
end
|
30
|
+
|
31
|
+
class Create < StreamSend::Api::Call::AudienceCreate
|
32
|
+
end
|
33
|
+
|
34
|
+
class Test < StreamSend::Api::Call::AudienceCreate
|
35
|
+
def execute(blast_hash)
|
36
|
+
response = session.post(uri, :body => blast_hash)
|
37
|
+
return response.code if response.code == 200
|
38
|
+
if response.code == 422
|
39
|
+
raise StreamSend::Api::SemanticException.new(response["errors"]["error"])
|
40
|
+
else
|
41
|
+
raise StreamSend::Api::Exception.new("Could not send test blast. (#{response.code})")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def uri
|
46
|
+
"#{base_audience_uri}/test.xml"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Bounce
|
4
|
+
class Index < StreamSend::Api::Call::BlastIndex
|
5
|
+
end
|
6
|
+
|
7
|
+
class Soft < StreamSend::Api::Call::BlastIndex
|
8
|
+
def uri
|
9
|
+
"#{base_blast_uri_for(@blast_id)}/soft.xml#{paging_query_string}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Hard < StreamSend::Api::Call::BlastIndex
|
14
|
+
def uri
|
15
|
+
"#{base_blast_uri_for(@blast_id)}/hard.xml#{paging_query_string}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
module Click
|
4
|
+
class Index < StreamSend::Api::Call::Index
|
5
|
+
def execute(blast_id, link_id = nil, options = {})
|
6
|
+
@blast_id = blast_id
|
7
|
+
@link_id = link_id if link_id
|
8
|
+
super(options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def uri
|
12
|
+
return "#{base_blast_only_for(@blast_id)}/links/#{@link_id}/clicks.xml#{paging_query_string}" if @link_id
|
13
|
+
"#{base_blast_uri_for(@blast_id)}.xml#{paging_query_string}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module StreamSend
|
2
|
+
module Api
|
3
|
+
class Configuration
|
4
|
+
def self.config
|
5
|
+
@config ||= load_config_file
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.load_config_file
|
9
|
+
file_path = "config/streamsend-ruby.yml"
|
10
|
+
return YAML.load(ERB.new(IO.read(file_path)).result) if File.file?(file_path)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.username
|
14
|
+
config["root_account"]["username"] if config
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.password
|
18
|
+
config["root_account"]["password"] if config
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.base_uri
|
22
|
+
config["root_account"]["base_uri"] if config
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|