bronto 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Bronto::VERSION
17
17
 
18
- gem.add_dependency "savon"
18
+ gem.add_dependency "savon", '1.2.0'
19
19
 
20
20
  gem.add_development_dependency "debugger"
21
21
  gem.add_development_dependency "turn"
@@ -1,4 +1,11 @@
1
1
  module Bronto
2
+
3
+ # According to Bronto's API documentation, the session credential returned by the
4
+ # login() API call remains active for 20 minutes. In addition, the expiration time
5
+ # is reset after each successful use. We will trigger a refresh before 20 minutes
6
+ # to be on the safe side
7
+ SESSION_REUSE_SECONDS = 120
8
+
2
9
  class Base
3
10
  attr_accessor :id, :api_key, :errors
4
11
 
@@ -35,6 +42,8 @@ module Bronto
35
42
  evaluate(&_block) if _block # See Savon::Client#evaluate; necessary to preserve scope.
36
43
  end
37
44
 
45
+ @last_used = Time.now
46
+
38
47
  resp.body["#{method}_response".to_sym]
39
48
  end
40
49
 
@@ -46,20 +55,35 @@ module Bronto
46
55
  wsdl.endpoint = "https://api.bronto.com/v4"
47
56
  wsdl.namespace = "http://api.bronto.com/v4"
48
57
  end
58
+
59
+ # Give Bronto up to 10 minutes to reply
60
+ @api.http.read_timeout = 600
61
+
62
+ @api
49
63
  end
50
64
 
51
65
  # Helper method to retrieve the session ID and return a SOAP header.
52
- # Will return a header with the same initial session ID unless the `refresh` argument is `true`.
66
+ # Will return a header with the same initial session ID unless the `refresh`
67
+ # argument is `true`.
53
68
  def self.soap_header(api_key, refresh = false)
54
- return @soap_header if !refresh and @soap_header.present?
69
+ return @soap_header if !refresh and @soap_header.present? and !session_expired
55
70
 
56
71
  resp = api.request(:v4, :login) do
57
72
  soap.body = { api_token: api_key }
58
73
  end
59
74
 
75
+ @last_used = Time.now
60
76
  @soap_header = { "v4:sessionHeader" => { session_id: resp.body[:login_response][:return] } }
61
77
  end
62
78
 
79
+ # returns true if a cached session identifier is missing or is too old
80
+ def self.session_expired
81
+ return true if (@last_used == nil)
82
+ return true if (Time.now.tv_sec - @last_used.tv_sec > SESSION_REUSE_SECONDS)
83
+
84
+ false
85
+ end
86
+
63
87
  # Saves a collection of Bronto::Base objects.
64
88
  # Objects without IDs are considered new and are `create`d; objects with IDs are considered existing and are `update`d.
65
89
  def self.save(*objs)
@@ -1,7 +1,6 @@
1
1
  module Bronto
2
2
  class Contact < Base
3
- attr_accessor :email, :fields, :list_ids
4
-
3
+ attr_accessor :email, :fields, :list_ids, :created, :modified, :status, :num_opens, :num_clicks, :num_sends
5
4
  # Finds contacts based on the `filter` (Bronto::Filter object).
6
5
  # * `page_number` is the page of contacts to request. Bronto doesn't specify how many contacts are returned per page,
7
6
  # only that you should keep increasing the number until no more contacts are returned.
@@ -1,3 +1,3 @@
1
1
  module Bronto
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,87 +1,90 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: bronto
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 2
10
+ version: 0.1.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Martin Gordon
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-06-01 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2014-01-18 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: savon
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ hash: 31
29
+ segments:
30
+ - 1
31
+ - 2
32
+ - 0
33
+ version: 1.2.0
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
31
37
  name: debugger
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
38
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: turn
48
- requirement: !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
49
40
  none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
54
48
  type: :development
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: turn
55
52
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: shoulda
64
- requirement: !ruby/object:Gem::Requirement
53
+ requirement: &id003 !ruby/object:Gem::Requirement
65
54
  none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
70
62
  type: :development
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: shoulda
71
66
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
67
+ requirement: &id004 !ruby/object:Gem::Requirement
73
68
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ type: :development
77
+ version_requirements: *id004
78
78
  description: A Ruby wrapper for the Bronto SOAP API
79
- email:
79
+ email:
80
80
  - martingordon@gmail.com
81
81
  executables: []
82
+
82
83
  extensions: []
84
+
83
85
  extra_rdoc_files: []
84
- files:
86
+
87
+ files:
85
88
  - .gitignore
86
89
  - Gemfile
87
90
  - LICENSE
@@ -106,31 +109,40 @@ files:
106
109
  - test/list_test.rb
107
110
  - test/message_test.rb
108
111
  - test/test_helper.rb
109
- homepage: ''
112
+ homepage: ""
110
113
  licenses: []
114
+
111
115
  post_install_message:
112
116
  rdoc_options: []
113
- require_paths:
117
+
118
+ require_paths:
114
119
  - lib
115
- required_ruby_version: !ruby/object:Gem::Requirement
120
+ required_ruby_version: !ruby/object:Gem::Requirement
116
121
  none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
120
- version: '0'
121
- required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ hash: 3
126
+ segments:
127
+ - 0
128
+ version: "0"
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
130
  none: false
123
- requirements:
124
- - - ! '>='
125
- - !ruby/object:Gem::Version
126
- version: '0'
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ hash: 3
135
+ segments:
136
+ - 0
137
+ version: "0"
127
138
  requirements: []
139
+
128
140
  rubyforge_project:
129
141
  rubygems_version: 1.8.24
130
142
  signing_key:
131
143
  specification_version: 3
132
144
  summary: A Ruby wrapper for the Bronto SOAP API
133
- test_files:
145
+ test_files:
134
146
  - test/contact_test.rb
135
147
  - test/delivery_test.rb
136
148
  - test/field_test.rb