getresponse 0.5 → 0.5.1

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.
@@ -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
-