bronto 0.1.0 → 0.1.2

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