exact_target_sdk 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,10 @@
1
1
  = ExactTarget SDK
2
2
 
3
+ == Version 0.4.0
4
+ * Implementing Retrieve method
5
+ * Implementing FilterPart objects
6
+ * New implementation for Result classes that makes all properties available
7
+
3
8
  == Version 0.3.0
4
9
  * Implementing Update method
5
10
 
data/README.rdoc CHANGED
@@ -10,9 +10,9 @@ outlined in the guide linked above are used. This is done in an attempt to be
10
10
  as transparent as possible, so that the API may be used by referring only to
11
11
  the guide linked above.
12
12
 
13
- Note this SDK is currently very incomplete, allowing you only to create and
14
- update subscribers and trigger sends. The framework is in place, however, to
15
- very easily implement new objects by simply declaring their properties.
13
+ Note this SDK is currently quite incomplete, supporting only a subset of the
14
+ possible objects and methods. The framework is in place, however, to very
15
+ easily implement new objects by simply declaring their properties.
16
16
 
17
17
  == Synopsis:
18
18
 
@@ -6,8 +6,14 @@ module ExactTargetSDK
6
6
  autoload :APIObject, 'exact_target_sdk/api_object'
7
7
  autoload :Attribute, 'exact_target_sdk/attribute'
8
8
  autoload :Client, 'exact_target_sdk/client'
9
+ autoload :ComplexFilterPart, 'exact_target_sdk/complex_filter_part'
9
10
  autoload :CreateResponse, 'exact_target_sdk/create_response'
10
11
  autoload :CreateResult, 'exact_target_sdk/create_result'
12
+ autoload :FilterPart, 'exact_target_sdk/filter_part'
13
+ autoload :Result, 'exact_target_sdk/result'
14
+ autoload :RetrieveResponse, 'exact_target_sdk/retrieve_response'
15
+ autoload :RetrieveResult, 'exact_target_sdk/retrieve_result'
16
+ autoload :SimpleFilterPart, 'exact_target_sdk/simple_filter_part'
11
17
  autoload :Subscriber, 'exact_target_sdk/subscriber'
12
18
  autoload :TriggeredSend, 'exact_target_sdk/triggered_send'
13
19
  autoload :TriggeredSendDefinition, 'exact_target_sdk/triggered_send_definition'
@@ -69,6 +69,10 @@ class APIObject
69
69
  @properties || []
70
70
  end
71
71
 
72
+ def type_name
73
+ name.split('::').last
74
+ end
75
+
72
76
  private
73
77
 
74
78
  # Stores the given property name to be used at render time.
@@ -93,7 +97,7 @@ class APIObject
93
97
  #
94
98
  # May be overridden.
95
99
  def type_name
96
- self.class.name.split('::').last
100
+ self.class.type_name
97
101
  end
98
102
 
99
103
  # By default, runs validation and executes #render_properties!.
@@ -120,7 +124,7 @@ class APIObject
120
124
 
121
125
  def render_property!(property_name, property_value, xml)
122
126
  if property_value.is_a?(APIObject)
123
- xml.__send__(property_name) do
127
+ xml.__send__(property_name, { "xsi:type" => property_value.type_name } ) do
124
128
  property_value.render!(xml)
125
129
  end
126
130
  elsif property_value.is_a?(Array)
@@ -64,6 +64,45 @@ class Client
64
64
  CreateResponse.new(response)
65
65
  end
66
66
 
67
+ # Invokes the Retrieve method.
68
+ #
69
+ # Note that this implementation abstracts away the useless RetrieveRequest
70
+ # sub-wrapper, and introduces a RequestResponse wrapper to contain the
71
+ # output parameters.
72
+ #
73
+ # Does not currently support requests that have too many results for one
74
+ # batch.
75
+ #
76
+ # Possible exceptions are:
77
+ # HTTPError if an HTTP error (such as a timeout) occurs
78
+ # SOAPFault if a SOAP fault occurs
79
+ # Timeout if there is a timeout waiting for the response
80
+ # InvalidAPIObject if any of the provided objects don't pass validation
81
+ #
82
+ # Returns a RetrieveResponse object.
83
+ def Retrieve(object_type_name, filter, *properties)
84
+ object_type_name = object_type_name.type_name if object_type_name.respond_to?(:type_name)
85
+ response = execute_request 'Retrieve' do |xml|
86
+ xml.RetrieveRequestMsg do
87
+ xml.RetrieveRequest do
88
+ xml.Options
89
+
90
+ xml.ObjectType object_type_name
91
+
92
+ properties.each do |property|
93
+ xml.Properties(property)
94
+ end
95
+
96
+ xml.Filter "xsi:type" => filter.type_name do
97
+ filter.render!(xml)
98
+ end
99
+ end
100
+ end
101
+ end
102
+
103
+ RetrieveResponse.new(response)
104
+ end
105
+
67
106
  # Invokes the Update method.
68
107
  #
69
108
  # The provided arguments should each be sub-classes of APIObject, and each
@@ -0,0 +1,9 @@
1
+ module ExactTargetSDK
2
+ class ComplexFilterPart < FilterPart
3
+
4
+ property 'LeftOperand', true
5
+ property 'LogicalOperator', true
6
+ property 'RightOperand', true
7
+
8
+ end
9
+ end
@@ -1,23 +1,4 @@
1
- require 'active_support/inflector'
2
-
3
1
  module ExactTargetSDK
4
- class CreateResult
5
-
6
- PROPERTIES = [
7
- 'StatusCode',
8
- 'StatusMessage',
9
- 'ErrorCode'
10
- ]
11
-
12
- PROPERTIES.each do |property|
13
- attr_reader property
14
- end
15
-
16
- def initialize(hash)
17
- PROPERTIES.each do |property|
18
- instance_variable_set("@#{property}", hash[property.underscore.to_sym])
19
- end
20
- end
21
-
2
+ class CreateResult < Result
22
3
  end
23
4
  end
@@ -0,0 +1,6 @@
1
+ module ExactTargetSDK
2
+
3
+ class FilterPart < APIObject
4
+ end
5
+
6
+ end
@@ -0,0 +1,15 @@
1
+ require 'active_support/inflector'
2
+
3
+ module ExactTargetSDK
4
+ class Result
5
+
6
+ def initialize(hash)
7
+ @result = hash
8
+ end
9
+
10
+ def method_missing(symbol, *args)
11
+ @result[symbol.to_s.underscore.to_sym]
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ module ExactTargetSDK
2
+ class RetrieveResponse
3
+
4
+ attr_reader :OverallStatus, :RequestID, :Results
5
+
6
+ def initialize(response)
7
+ response = response.to_hash[:retrieve_response_msg]
8
+ @OverallStatus = response[:overall_status]
9
+ @RequestID = response[:request_id]
10
+ @Results = []
11
+
12
+ results = if response[:results].is_a? Array
13
+ response[:results]
14
+ elsif response[:results].is_a? Hash
15
+ [ response[:results] ]
16
+ else
17
+ []
18
+ end
19
+ results.each do |result|
20
+ @Results << RetrieveResult.new(result)
21
+ end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,4 @@
1
+ module ExactTargetSDK
2
+ class RetrieveResult < Result
3
+ end
4
+ end
@@ -0,0 +1,9 @@
1
+ module ExactTargetSDK
2
+ class SimpleFilterPart < FilterPart
3
+
4
+ property 'Property', true
5
+ property 'SimpleOperator', true
6
+ array_property 'Value'
7
+
8
+ end
9
+ end
@@ -1,23 +1,4 @@
1
- require 'active_support/inflector'
2
-
3
1
  module ExactTargetSDK
4
- class UpdateResult
5
-
6
- PROPERTIES = [
7
- 'StatusCode',
8
- 'StatusMessage',
9
- 'ErrorCode'
10
- ]
11
-
12
- PROPERTIES.each do |property|
13
- attr_reader property
14
- end
15
-
16
- def initialize(hash)
17
- PROPERTIES.each do |property|
18
- instance_variable_set("@#{property}", hash[property.underscore.to_sym])
19
- end
20
- end
21
-
2
+ class UpdateResult < Result
22
3
  end
23
4
  end
@@ -1,3 +1,3 @@
1
1
  module ExactTargetSDK
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exact_target_sdk
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Dawson
@@ -91,10 +91,16 @@ files:
91
91
  - lib/exact_target_sdk/api_object.rb
92
92
  - lib/exact_target_sdk/attribute.rb
93
93
  - lib/exact_target_sdk/client.rb
94
+ - lib/exact_target_sdk/complex_filter_part.rb
94
95
  - lib/exact_target_sdk/config.rb
95
96
  - lib/exact_target_sdk/create_response.rb
96
97
  - lib/exact_target_sdk/create_result.rb
97
98
  - lib/exact_target_sdk/errors.rb
99
+ - lib/exact_target_sdk/filter_part.rb
100
+ - lib/exact_target_sdk/result.rb
101
+ - lib/exact_target_sdk/retrieve_response.rb
102
+ - lib/exact_target_sdk/retrieve_result.rb
103
+ - lib/exact_target_sdk/simple_filter_part.rb
98
104
  - lib/exact_target_sdk/subscriber.rb
99
105
  - lib/exact_target_sdk/triggered_send.rb
100
106
  - lib/exact_target_sdk/triggered_send_definition.rb