getresponse 0.5 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,6 +6,10 @@ Be sure to check changes before update.
6
6
 
7
7
  == Usage
8
8
 
9
+ Just add to you Gemfile
10
+
11
+ gem "getresponse", :require => "get_response"
12
+
9
13
  Test connection to GetResponse API.
10
14
 
11
15
  gr_connection = GetResponse::Connection.new("my_secret_api")
@@ -187,4 +191,17 @@ Get single confirmation subject by id
187
191
 
188
192
  Create new campaign
189
193
 
190
- connection.campaigns.create(new_campaign_attributes)
194
+ connection.campaigns.create(new_campaign_attributes)
195
+
196
+ Fetching links embedded in messages
197
+
198
+ connection.links.all
199
+ message.links
200
+
201
+ Fetching blacklisted addresses for account
202
+
203
+ account.blacklist
204
+
205
+ Fetching blacklisted addresses for campaign
206
+
207
+ campaign.blacklist
@@ -0,0 +1 @@
1
+ API_KEY='d333e12e5019b6940127e82b499d75a5'
@@ -2,45 +2,6 @@ require "rubygems"
2
2
  require 'json'
3
3
 
4
4
  module GetResponse
5
-
6
- # Operators that may be used in queries to GetResponse API service
7
- OPERATORS = {
8
- "is_eq" => "EQUALS",
9
- "is_not_eq" => "NOT_EQUALS",
10
- "contain" => "CONTAINS",
11
- "not_contain" => "NOT_CONTAINS",
12
- "match" => "MATCHES"
13
- }
14
-
15
- end
16
-
17
-
18
- class SymbolOperator
19
- attr_reader :field, :operator
20
-
21
- def initialize(field, operator)
22
- @field, @operator = field, operator
23
- end unless method_defined?(:initialize)
24
-
25
-
26
- def evaluate(value)
27
- warn "[DEPRECATION] evaluation of GetResponse operators is deprecated."
28
- { field.to_s => { gr_operator => value } }
29
- end
30
-
31
-
32
- def gr_operator
33
- GetResponse::OPERATORS[@operator]
34
- end
35
- end
36
-
37
-
38
- class Symbol
39
- GetResponse::OPERATORS.keys.each do |operator|
40
- define_method(operator) do
41
- SymbolOperator.new(self, operator)
42
- end unless method_defined?(operator)
43
- end
44
5
  end
45
6
 
46
7
  GetResponse.autoload :GetResponseError, "get_response/get_response_error"
@@ -62,4 +23,7 @@ GetResponse.autoload :ConfirmationBody, "get_response/confirmation_body"
62
23
  GetResponse.autoload :ConfirmationBodyProxy, "get_response/confirmation_body_proxy"
63
24
  GetResponse.autoload :ConfirmationSubject, "get_response/confirmation_subject"
64
25
  GetResponse.autoload :ConfirmationSubjectProxy, "get_response/confirmation_subject_proxy"
65
- GetResponse.autoload :Conditions, "get_response/conditions"
26
+ GetResponse.autoload :Conditions, "get_response/conditions"
27
+ GetResponse.autoload :LinksProxy, "get_response/links_proxy"
28
+ GetResponse.autoload :Link, "get_response/link"
29
+ GetResponse.autoload :Blacklist, "get_response/blacklist"
@@ -23,5 +23,14 @@ module GetResponse
23
23
  DomainProxy.new(@connection)
24
24
  end
25
25
 
26
+
27
+ # Get the entire blacklisted emails list for this account.
28
+ #
29
+ # @return [Blacklist]
30
+ def blacklist
31
+ entries = @connection.send_request("get_account_blacklist")["result"].values
32
+ GetResponse::Blacklist.new(entries, @connection, self)
33
+ end
34
+
26
35
  end
27
36
  end
@@ -0,0 +1,30 @@
1
+ require 'forwardable'
2
+
3
+ module GetResponse
4
+
5
+ # Class represents list of blacklisted email addresses.
6
+ class Blacklist
7
+ extend ::Forwardable
8
+
9
+ def_delegator :@entries, :size
10
+ def_delegator :@entries, :empty?
11
+
12
+ # To instantiate new blacklist object use this method. Blacklist may contain addresses connected
13
+ # with GetResponse account or with one particular campaign.
14
+ #
15
+ # Example:
16
+ #
17
+ # Blacklist.new(['foo@bar', 'bar@foo'], @connection, @account)
18
+ #
19
+ # @param entries [Array] collection of blacklisted addresses
20
+ # @param connection [GetResponse::Connection] connection of which all operations will be performed
21
+ # @param ancestor [GetResponse::Account, GetResponse::Campaign] object owner of blacklist
22
+ def initialize(entries, connection, ancestor)
23
+ @entries = entries
24
+ @connection = connection
25
+ @ancestor = ancestor
26
+ end
27
+ end
28
+
29
+ end
30
+
@@ -188,6 +188,16 @@ module GetResponse
188
188
  self
189
189
  end
190
190
 
191
+
192
+ # Get the entire blacklisted emails list for this campaign.
193
+ #
194
+ # @return [GetResponse::Blacklist]
195
+ def blacklist
196
+ params = {"campaign" => @id}
197
+ entries = @connection.send_request("get_campaign_blacklist", params)["result"].values
198
+ GetResponse::Blacklist.new(entries, @connection, self)
199
+ end
200
+
191
201
  end
192
202
 
193
203
  end
@@ -37,7 +37,7 @@ module GetResponse
37
37
  params = {"confirmation_subject" => subject_id}
38
38
  resp = @connection.send_request("get_confirmation_subject", params)["result"]
39
39
  raise GetResponseError.new "Confirmation subject with id '#{subject_id}' not found." if resp.empty?
40
- subject_attrs = resp.values[0].merge("id" => resp.keys.first)
40
+ subject_attrs = resp[subject_id.to_s].merge("id" => subject_id.to_s)
41
41
  ConfirmationSubject.new subject_attrs
42
42
  end
43
43
 
@@ -10,6 +10,8 @@ module GetResponse
10
10
 
11
11
  def initialize(api_key)
12
12
  @api_key = api_key
13
+ @request_id_prefix = "#{Time.now.to_i}-#{rand(1_000_000_000)}"
14
+ @request_number = -1
13
15
  end
14
16
 
15
17
 
@@ -78,6 +80,7 @@ module GetResponse
78
80
  # params:: Hash
79
81
  def send_request(method, params = {})
80
82
  request_params = {
83
+ :id => request_id,
81
84
  :method => method,
82
85
  :params => [@api_key, params]
83
86
  }.to_json
@@ -87,6 +90,7 @@ module GetResponse
87
90
  conn.post("/", request_params)
88
91
  end
89
92
  raise GetResponseError.new("API key verification failed") if resp.code.to_i == 403
93
+ raise GetResponseError.new("204 No content response received which signifies interpreting request as notification") if resp.code.to_i == 204
90
94
  response = JSON.parse(resp.body)
91
95
  if response["error"]
92
96
  raise GetResponse::GetResponseError.new(response["error"])
@@ -95,6 +99,14 @@ module GetResponse
95
99
  end
96
100
 
97
101
 
102
+ # Method return proxy to execute all links related operations.
103
+ #
104
+ # @return [LinksProxy]
105
+ def links
106
+ @links_proxy ||= LinksProxy.new(self)
107
+ end
108
+
109
+
98
110
  protected
99
111
 
100
112
 
@@ -113,6 +125,11 @@ module GetResponse
113
125
  end
114
126
  end
115
127
 
128
+ def request_id
129
+ @request_number += 1
130
+ return [@request_id_prefix, @request_number].join("-")
131
+ end
132
+
116
133
  end
117
134
 
118
135
  end
@@ -2,7 +2,7 @@ module GetResponse
2
2
 
3
3
  # GetResponse contact
4
4
  class Contact
5
- attr_accessor :campaign, :name, :email, :cycle_day, :ip, :customs, :created_on, :deleted_on, :reason
5
+ attr_accessor :campaign, :name, :email, :cycle_day, :ip, :customs, :created_on, :deleted_on, :reason, :duplicated
6
6
  attr_reader :id
7
7
 
8
8
 
@@ -18,6 +18,7 @@ module GetResponse
18
18
  @deleted_on = params["deleted_on"]
19
19
  @reason = params["reason"]
20
20
  @connection = connection
21
+ @duplicated = false
21
22
  end
22
23
 
23
24
 
@@ -27,6 +28,7 @@ module GetResponse
27
28
  # returns:: Boolean
28
29
  def save
29
30
  result = @connection.send_request(:add_contact, self.attributes)
31
+ self.duplicated = true unless result["result"]["duplicated"].nil?
30
32
  result["error"].nil?
31
33
  end
32
34
 
@@ -37,13 +39,13 @@ module GetResponse
37
39
  def attributes
38
40
  attrs = {
39
41
  "campaign" => @campaign,
40
- "name" => @name,
41
42
  "email" => @email
42
43
  }
43
44
 
44
45
  attrs["ip"] = @ip if @ip
45
46
  attrs["cycle_day"] = @cycle_day if @cycle_day
46
47
  attrs["customs"] = @customs if @customs
48
+ attrs["name"] = @name if @name
47
49
 
48
50
  attrs
49
51
  end
@@ -19,10 +19,7 @@ module GetResponse
19
19
  # returns:: Array of GetResponse::Contact
20
20
  def all(conditions = {})
21
21
  response = @connection.send_request("get_contacts", conditions)
22
-
23
- response["result"].inject([]) do |contacts, resp|
24
- contacts << Contact.new(resp[1].merge("id" => resp[0]), @connection)
25
- end
22
+ build_contacts(response["result"])
26
23
  end
27
24
 
28
25
 
@@ -75,8 +72,18 @@ module GetResponse
75
72
  def deleted(conditions = {})
76
73
  conditions = parse_conditions(conditions)
77
74
  response = @connection.send_request("get_contacts_deleted", conditions)
78
- response["result"].inject([]) do |contacts, resp|
79
- contacts << Contact.new(resp[1].merge("id" => resp[0]), @connection)
75
+ build_contacts(response["result"])
76
+ end
77
+
78
+ private
79
+
80
+ # Build collection of <tt>Contact</tt> objects from service response.
81
+ #
82
+ # @param raw_contacts [Array] of Hashes parsed from GetResponse API response
83
+ # @return [Array]
84
+ def build_contacts(raw_contacts)
85
+ raw_contacts.map do |raw_contact|
86
+ Contact.new(raw_contact[1].merge("id" => raw_contact[0]), @connection)
80
87
  end
81
88
  end
82
89
 
@@ -0,0 +1,18 @@
1
+ module GetResponse
2
+
3
+ # Class represents link embedded in GetResponse message.
4
+ class Link
5
+ attr_reader :message, :name, :url, :clicks
6
+
7
+ def initialize(attrs, connection)
8
+ @message = attrs["message"]
9
+ @name = attrs["name"]
10
+ @url = attrs["url"]
11
+ @clicks = attrs["clicks"]
12
+ @connection = connection
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
@@ -0,0 +1,29 @@
1
+ module GetResponse
2
+
3
+ # Proxy class for all links related actions.
4
+ class LinksProxy
5
+ include Conditions
6
+
7
+ def initialize(connection)
8
+ @connection = connection
9
+ end
10
+
11
+
12
+ # Fetch all links, optionally you can pass a hash with conditions.
13
+ #
14
+ # Example:
15
+ #
16
+ # @proxy.all("messages" => ["my_message_id", "my_second_message_id"])
17
+ #
18
+ # @return [Array] collection of links
19
+ def all(conditions = {})
20
+ conditions = parse_conditions(conditions)
21
+
22
+ @connection.send_request("get_links", conditions)["result"].map do |link_id, link_attrs|
23
+ Link.new(link_attrs.merge("id" => link_id), @connection)
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -33,5 +33,14 @@ module GetResponse
33
33
  resp = @connection.send_request("get_message_stats", :message => @id)
34
34
  resp["result"]
35
35
  end
36
+
37
+
38
+ # Fetch links embedded in this message
39
+ #
40
+ # @return [Array] collection of links
41
+ def links
42
+ @connection.links.all("messages" => [@id])
43
+ end
44
+
36
45
  end
37
46
  end
metadata CHANGED
@@ -1,133 +1,118 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: getresponse
3
- version: !ruby/object:Gem::Version
4
- hash: 1
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 5
9
- version: "0.5"
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.5.1
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Sebastian Nowak
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-01-02 00:00:00 +01:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: json
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-12-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ type: :runtime
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 7
29
- segments:
30
- - 1
31
- - 4
32
- version: "1.4"
33
- type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: json_pure
20
+ - !ruby/object:Gem::Version
21
+ version: '1.4'
37
22
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
23
+ version_requirements: !ruby/object:Gem::Requirement
39
24
  none: false
40
- requirements:
25
+ requirements:
41
26
  - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 7
44
- segments:
45
- - 1
46
- - 4
47
- version: "1.4"
27
+ - !ruby/object:Gem::Version
28
+ version: '1.4'
29
+ name: json
30
+ - !ruby/object:Gem::Dependency
48
31
  type: :runtime
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: rr
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.4'
52
38
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
39
+ version_requirements: !ruby/object:Gem::Requirement
54
40
  none: false
55
- requirements:
41
+ requirements:
56
42
  - - ~>
57
- - !ruby/object:Gem::Version
58
- hash: 15
59
- segments:
60
- - 1
61
- - 0
62
- version: "1.0"
43
+ - !ruby/object:Gem::Version
44
+ version: '1.4'
45
+ name: json_pure
46
+ - !ruby/object:Gem::Dependency
63
47
  type: :development
64
- version_requirements: *id003
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: '1.0'
61
+ name: rr
65
62
  description: With this gem you can manage your subscribers, campaigns, messages
66
63
  email: sebastian.nowak@implix.com
67
64
  executables: []
68
-
69
65
  extensions: []
70
-
71
66
  extra_rdoc_files: []
72
-
73
- files:
74
- - lib/get_response/account.rb
75
- - lib/get_response/campaign.rb
76
- - lib/get_response/campaign_proxy.rb
77
- - lib/get_response/conditions.rb
78
- - lib/get_response/confirmation_body.rb
79
- - lib/get_response/confirmation_body_proxy.rb
67
+ files:
68
+ - lib/get_response.rb
69
+ - lib/get_response/from_field.rb
80
70
  - lib/get_response/confirmation_subject.rb
71
+ - lib/get_response/domain_proxy.rb
81
72
  - lib/get_response/confirmation_subject_proxy.rb
82
- - lib/get_response/connection.rb
83
- - lib/get_response/contact.rb
84
73
  - lib/get_response/contact_proxy.rb
85
- - lib/get_response/domain.rb
86
- - lib/get_response/domain_proxy.rb
74
+ - lib/get_response/confirmation_body_proxy.rb
75
+ - lib/get_response/message_proxy.rb
76
+ - lib/get_response/confirmation_body.rb
77
+ - lib/get_response/newsletter.rb
78
+ - lib/get_response/account.rb
79
+ - lib/get_response/link.rb
80
+ - lib/get_response/contact.rb
81
+ - lib/get_response/campaign_proxy.rb
82
+ - lib/get_response/campaign.rb
83
+ - lib/get_response/message.rb
84
+ - lib/get_response/connection.rb
87
85
  - lib/get_response/follow_up.rb
88
- - lib/get_response/from_field.rb
86
+ - lib/get_response/conditions.rb
89
87
  - lib/get_response/from_fields_proxy.rb
88
+ - lib/get_response/domain.rb
89
+ - lib/get_response/blacklist.rb
90
+ - lib/get_response/links_proxy.rb
90
91
  - lib/get_response/get_response_error.rb
91
- - lib/get_response/message.rb
92
- - lib/get_response/message_proxy.rb
93
- - lib/get_response/newsletter.rb
94
- - lib/get_response.rb
92
+ - lib/api.rb
95
93
  - README.rdoc
96
- has_rdoc: true
97
94
  homepage: http://dev.getresponse.com
98
95
  licenses: []
99
-
100
96
  post_install_message:
101
97
  rdoc_options: []
102
-
103
- require_paths:
98
+ require_paths:
104
99
  - lib
105
- required_ruby_version: !ruby/object:Gem::Requirement
100
+ required_ruby_version: !ruby/object:Gem::Requirement
106
101
  none: false
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- hash: 3
111
- segments:
112
- - 0
113
- version: "0"
114
- required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
107
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: 17
120
- segments:
121
- - 1
122
- - 3
123
- - 5
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
124
111
  version: 1.3.5
125
112
  requirements: []
126
-
127
113
  rubyforge_project:
128
- rubygems_version: 1.3.7
114
+ rubygems_version: 1.8.24
129
115
  signing_key:
130
116
  specification_version: 3
131
117
  summary: Ruby wrapper for GetResponse API
132
118
  test_files: []
133
-