emailvision 2.1.19 → 2.1.20

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZjNmNWYyZDRlZjNkZWFhYmIwOGM5NmJkOThiN2EwNzUwMmNkM2FmYg==
5
+ data.tar.gz: !binary |-
6
+ ODJhYzFlMDU4YTBkN2VmZTkwNDhkNmU3N2JlNmIyZTIyNmMzMTg1OQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MGI4ZTQ4NzViZmE1ZjQ3MTIyNGRiZjNmMWJiNjU4MzJiMWQ1MzgzYmFkMDI1
10
+ MjNkODk2MGMxMWY5ZmU1MzUwOWFhYjQ3NTdmYzE3ODRiNGI1NWI2YWI2Nzk5
11
+ YzQ1YzMyMzBhYjM3YmFlOTVmMDdkYmJkZTgyZGYzZWFjOTNiMDY=
12
+ data.tar.gz: !binary |-
13
+ MzI1MDEwNDYxZDQxMTg5MTJhZWE2NTI2MjE1ZjVmMTE3YTlmZWRlYWM4ZmM2
14
+ M2IzNGExNDIyMDY5NjNjZDZlZjg3Nzg2ODI1NzJhOTFlNTFkMjVjYWFlMTAz
15
+ MWNhYzVkN2IwZGQ3NGI4YmEzNDk4NTdkMTA4MjM4ZjAxMDQxY2I=
@@ -13,9 +13,9 @@ module Emailvision
13
13
  autoload :Relation, 'emailvision/relation'
14
14
  autoload :Tools, 'emailvision/tools'
15
15
  autoload :Notification, 'emailvision/notification'
16
-
16
+
17
17
  if defined?(Rails)
18
- require 'emailvision/railtie'
19
- require 'generators/install'
20
- end
18
+ require 'emailvision/railtie'
19
+ require 'generators/install'
20
+ end
21
21
  end
@@ -1,31 +1,25 @@
1
1
  module Emailvision
2
- class Api
2
+ class Api
3
3
  include HTTParty
4
4
  default_timeout 30
5
5
  format :xml
6
6
  headers 'Content-Type' => 'text/xml'
7
-
7
+
8
8
  # HTTP verbs allowed to trigger a call-chain
9
- HTTP_VERBS = [:get, :post].freeze
9
+ HTTP_VERBS = [:get, :post].freeze
10
+ ATTRIBUTES = [:token, :server_name, :endpoint, :login, :password, :key, :debug].freeze
10
11
 
11
12
  # Attributes
12
13
  class << self
13
- attr_accessor :token, :server_name, :endpoint, :login, :password, :key, :debug
14
+ attr_accessor *ATTRIBUTES
14
15
  end
15
- attr_accessor :token, :server_name, :endpoint, :login, :password, :key, :debug
16
-
17
- def initialize(params = {})
18
- yield(self) if block_given?
19
-
20
- self.server_name ||= params[:server_name] || self.class.server_name
21
- self.endpoint ||= params[:endpoint] || self.class.endpoint
22
- self.login ||= params[:login] || self.class.login
23
- self.password ||= params[:password] || self.class.password
24
- self.key ||= params[:key] || self.class.key
25
- self.token ||= params[:token] || self.class.token
26
- self.debug ||= params[:debug] || self.class.debug
27
- end
28
-
16
+ attr_accessor *ATTRIBUTES
17
+
18
+ def initialize(params = {})
19
+ yield(self) if block_given?
20
+ assign_attributes(params)
21
+ end
22
+
29
23
  # ----------------- BEGIN Pre-configured methods -----------------
30
24
 
31
25
  # Login to Emailvision API
@@ -69,7 +63,7 @@ module Emailvision
69
63
  # method = Method to call
70
64
  # parameters = Parameters to send (optionnal)
71
65
  def call(http_verb, method, parameters = {})
72
- params ||= {}
66
+ params ||= {}
73
67
 
74
68
  # == Check presence of these essential attributes ==
75
69
  unless server_name and endpoint
@@ -81,111 +75,123 @@ module Emailvision
81
75
 
82
76
  retries = 2
83
77
  begin
84
- # == Build uri ==
85
- uri = base_uri + method
86
- if parameters[:uri]
87
- uri += token ? "/#{token}/" : '/'
88
- uri += (parameters[:uri].respond_to?(:join) ? parameters[:uri] : [parameters[:uri]]).compact.join '/'
89
- parameters.delete :uri
90
- elsif parameters[:body]
91
- uri += token ? "/#{token}/" : '/'
92
- else
93
- parameters[:token] = token
94
- end
95
-
96
- # == Build body ==
97
- # 1. Extract body from parameters
98
- body = parameters[:body] || {}
99
- parameters.delete :body
100
- # 2. Camelize all keys
101
- body = Emailvision::Tools.r_camelize body
102
- # 3. Convert to xml
103
- body_xml = Emailvision::Tools.to_xml_as_is body
104
-
105
- # == Send request ==
106
- logger.send "#{uri} with query : #{parameters} and body : #{body}"
107
- response = self.class.send http_verb, uri, :query => parameters, :body => body_xml, :timeout => 30
108
-
109
- # == Parse response ==
110
- http_code = response.header.code
111
- content = {}
112
- begin
113
- content = Crack::XML.parse response.body
114
- rescue MultiXml::ParseError => e
115
- logger.send "#{uri} Error when parsing response body (#{e.to_s})"
116
- end
117
- logger.receive content.inspect
78
+ uri = prepare_uri(method, parameters)
79
+ body = prepare_body(parameters)
118
80
 
119
- # Return response or raise an exception if request failed
120
- if (http_code == "200") and (content and content["response"])
121
- response = content["response"]["result"] || content["response"]
122
- else
123
- raise Emailvision::Exception.new "#{http_code} - #{content}"
124
- end
81
+ logger.send "#{uri} with query : #{parameters} and body : #{body}"
125
82
 
126
- return response
83
+ response = perform_request(http_verb, uri, parameters, body)
127
84
 
85
+ extract_response(response)
128
86
  rescue Emailvision::Exception => e
129
87
  if e.message =~ /Your session has expired/ or e.message =~ /The maximum number of connection allowed per session has been reached/
130
- self.close_connection
88
+ self.close_connection
131
89
  self.open_connection
132
90
  if((retries -= 1) >= 0)
133
91
  retry
134
92
  else
135
93
  raise e
136
94
  end
137
- else
138
- raise e
139
- end
140
- rescue Errno::ECONNRESET => e
141
- if((retries -= 1) >= 0)
142
- retry
143
95
  else
144
96
  raise e
145
97
  end
146
- rescue Timeout::Error => e
98
+ rescue Errno::ECONNRESET, Timeout::Error => e
147
99
  if((retries -= 1) >= 0)
148
100
  retry
149
101
  else
150
102
  raise e
151
103
  end
152
104
  end
153
- end
105
+ end
154
106
 
155
- # Set token
107
+ # Set token
156
108
  # Override
157
109
  def token=(value)
158
110
  @token = value
159
111
  end
160
-
112
+
161
113
  # Set endpoint
162
114
  # Override
163
115
  def endpoint=(value)
164
- invalidate_token!
165
- @endpoint = value
166
- end
116
+ close_connection
117
+ @endpoint = value
118
+ end
167
119
 
168
120
  # Base uri
169
121
  def base_uri
170
122
  "http://#{server_name}/#{endpoint}/services/rest/"
171
123
  end
172
-
124
+
173
125
  # Generate call-chain triggers
174
126
  HTTP_VERBS.each do |http_verb|
175
127
  define_method(http_verb) do
176
128
  Emailvision::Relation.new(self, http_verb)
177
129
  end
178
- end
179
-
180
- private
181
-
182
- def logger
183
- if @logger.nil?
184
- @logger = Emailvision::Logger.new(STDOUT)
185
- @logger.level = (debug ? Logger::DEBUG : Logger::WARN)
186
- end
187
- @logger
188
- end
189
-
190
- end
130
+ end
131
+
132
+ private
133
+
134
+ def prepare_uri(method, parameters)
135
+ uri = base_uri + method
136
+ if parameters[:uri]
137
+ uri += token ? "/#{token}/" : '/'
138
+ uri += (parameters[:uri].respond_to?(:join) ? parameters[:uri] : [parameters[:uri]]).compact.join '/'
139
+ parameters.delete :uri
140
+ elsif parameters[:body]
141
+ uri += token ? "/#{token}/" : '/'
142
+ else
143
+ parameters[:token] = token
144
+ end
145
+ uri
146
+ end
147
+
148
+ def prepare_body(parameters)
149
+ body = parameters[:body] || {}
150
+ parameters.delete :body
151
+ # 2. Camelize all keys
152
+ body = Emailvision::Tools.r_camelize body
153
+ # 3. Convert to xml
154
+ Emailvision::Tools.to_xml_as_is body
155
+ end
156
+
157
+ def perform_request(http_verb, uri, parameters, body)
158
+ self.class.send http_verb, uri, :query => parameters, :body => body, :timeout => 30
159
+ end
160
+
161
+ def extract_response(response)
162
+ http_code = response.header.code
163
+ content = {}
164
+ begin
165
+ content = Crack::XML.parse response.body
166
+ rescue MultiXml::ParseError => e
167
+ logger.send "#{uri} Error when parsing response body (#{e.to_s})"
168
+ end
169
+ logger.receive content.inspect
170
+
171
+ if (http_code == "200") and (content and content["response"])
172
+ response = content["response"]["result"] || content["response"]
173
+ else
174
+ raise Emailvision::Exception.new "#{http_code} - #{content}"
175
+ end
176
+ end
177
+
178
+ def format_response()
179
+ end
180
+
181
+ def assign_attributes(parameters)
182
+ parameters or return
183
+ ATTRIBUTES.each do |attribute|
184
+ public_send("#{attribute}=", (parameters[attribute] || self.class.public_send(attribute)))
185
+ end
186
+ end
187
+
188
+ def logger
189
+ if @logger.nil?
190
+ @logger = Emailvision::Logger.new(STDOUT)
191
+ @logger.level = (debug ? Logger::DEBUG : Logger::WARN)
192
+ end
193
+ @logger
194
+ end
195
+
196
+ end
191
197
  end
@@ -1,14 +1,14 @@
1
1
  module Emailvision
2
- class Exception < ::Exception
3
-
2
+ class Exception < ::Exception
3
+
4
4
  attr_accessor :http_status, :error
5
-
5
+
6
6
  def initializer(http_status, error)
7
7
  self.http_status = http_status
8
8
  self.error = error
9
-
9
+
10
10
  super("EMV API returns #{http_status} status code")
11
11
  end
12
-
12
+
13
13
  end
14
14
  end
@@ -1,22 +1,22 @@
1
1
  module Emailvision
2
2
  class Logger < ::Logger
3
-
3
+
4
4
  attr_accessor :debug
5
-
5
+
6
6
  def initializer(*args)
7
- debug = false
8
- super args
9
- end
10
-
7
+ debug = false
8
+ super args
9
+ end
10
+
11
11
  # Log a message sent to emailvision
12
12
  def send(message)
13
13
  info("[Emailvision] Send -> #{message}")
14
14
  end
15
-
15
+
16
16
  # Log a message received from emailvision
17
17
  def receive(message)
18
18
  info("[Emailvision] Receive -> #{message}")
19
19
  end
20
-
20
+
21
21
  end
22
22
  end
@@ -4,45 +4,45 @@ module Emailvision
4
4
  default_timeout 30
5
5
  format :xml
6
6
  headers 'Content-Type' => 'application/xml;charset=utf-8', 'encoding' => 'UTF-8', 'Accept' => '*/*'
7
-
7
+
8
8
  class << self
9
9
  attr_accessor :debug
10
- end
10
+ end
11
11
  attr_accessor :debug
12
-
13
- def initialize(params = {})
14
- yield(self) if block_given?
15
-
16
- self.debug ||= params[:debug] || self.class.debug
17
- end
18
-
19
- def send(body, params = {})
12
+
13
+ def initialize(params = {})
14
+ yield(self) if block_given?
15
+
16
+ self.debug ||= params[:debug] || self.class.debug
17
+ end
18
+
19
+ def send(body, params = {})
20
20
  # == Processing body ==
21
21
  body_xml = Emailvision::Tools.to_xml_as_is body
22
-
22
+
23
23
  # == Send request ==
24
24
  logger.send "#{base_uri} with body : #{body_xml}"
25
25
  response = self.class.send :post, base_uri, :body => body_xml
26
26
  logger.receive "#{base_uri} with status : #{response.header.inspect}"
27
-
27
+
28
28
  # == Check result ==
29
- response.header.code == '200'
30
- end
31
-
29
+ response.header.code == '200'
30
+ end
31
+
32
32
  # Base uri
33
33
  def base_uri
34
34
  'http://api.notificationmessaging.com/NMSXML'
35
35
  end
36
-
37
- private
38
-
39
- def logger
40
- if @logger.nil?
41
- @logger = Emailvision::Logger.new(STDOUT)
42
- @logger.level = (debug ? Logger::DEBUG : Logger::WARN)
43
- end
44
- @logger
45
- end
46
-
47
- end
36
+
37
+ private
38
+
39
+ def logger
40
+ if @logger.nil?
41
+ @logger = Emailvision::Logger.new(STDOUT)
42
+ @logger.level = (debug ? Logger::DEBUG : Logger::WARN)
43
+ end
44
+ @logger
45
+ end
46
+
47
+ end
48
48
  end
@@ -1,28 +1,24 @@
1
1
  require 'rails'
2
2
 
3
3
  module Emailvision
4
- class Railtie < Rails::Railtie
5
-
6
- generators do
7
- require 'generators/install'
8
- end
9
-
10
- config.to_prepare do
11
- file = "#{Rails.root}/config/emailvision.yml"
12
-
13
- if File.exist?(file)
14
- config = YAML.load_file(file)[Rails.env] || {}
15
-
16
- Emailvision::Api.server_name = config['server_name']
17
- Emailvision::Api.endpoint = config['endpoint']
18
- Emailvision::Api.login = config['login']
19
- Emailvision::Api.password = config['password']
20
- Emailvision::Api.key = config['key']
21
- Emailvision::Api.debug = config['debug']
22
-
23
- Emailvision::Notification.debug = config['debug']
24
- end
25
- end
26
-
27
- end
4
+ class Railtie < Rails::Railtie
5
+
6
+ generators do
7
+ require 'generators/install'
8
+ end
9
+
10
+ config.to_prepare do
11
+ file = "#{Rails.root}/config/emailvision.yml"
12
+ if File.exist?(file)
13
+ config = YAML.load_file(file)[Rails.env] || {}
14
+ Emailvision::Api.server_name = config['server_name']
15
+ Emailvision::Api.endpoint = config['endpoint']
16
+ Emailvision::Api.login = config['login']
17
+ Emailvision::Api.password = config['password']
18
+ Emailvision::Api.key = config['key']
19
+ Emailvision::Api.debug = config['debug']
20
+ Emailvision::Notification.debug = config['debug']
21
+ end
22
+ end
23
+ end
28
24
  end
@@ -1,29 +1,29 @@
1
1
  module Emailvision
2
2
  class Relation
3
-
3
+
4
4
  def initialize(instance, http_verb)
5
5
  @instance = instance
6
6
  @http_verb = http_verb
7
7
  @uri = []
8
8
  @options = {}
9
9
  end
10
-
10
+
11
11
  def call(*args)
12
12
  @options.merge! extract_args(args)
13
13
  @instance.call @http_verb, @uri.join('/'), @options
14
14
  end
15
-
15
+
16
16
  def method_missing(method, *args)
17
17
  @uri << method.to_s.camelize(:lower)
18
18
  @options.merge! extract_args(args)
19
- self
20
- end
21
-
19
+ self
20
+ end
21
+
22
22
  private
23
-
23
+
24
24
  def extract_args(args)
25
25
  (args[0] and args[0].kind_of? Hash) ? args[0] : {}
26
26
  end
27
-
27
+
28
28
  end
29
29
  end
@@ -1,20 +1,12 @@
1
- module Emailvision
1
+ module Emailvision
2
2
  class Tools
3
3
 
4
4
  def self.sanitize_parameters(parameters)
5
- r_each(parameters) do |value|
6
- if value.respond_to?(:to_datetime)
7
- begin
8
- date_time_format(value.to_datetime)
9
- rescue StandardError
10
- value
11
- end
12
- elsif value.respond_to?(:to_date)
13
- begin
14
- date_time_format(value.to_date)
15
- rescue StandardError
16
- value
17
- end
5
+ r_each(parameters) do |value|
6
+ if value.kind_of?(DateTime) or value.kind_of?(Time)
7
+ date_time_format(value.to_datetime)
8
+ elsif value.kind_of?(Date)
9
+ date_format(value.to_date)
18
10
  else
19
11
  value
20
12
  end
@@ -28,7 +20,7 @@ module Emailvision
28
20
  def self.date_format(date)
29
21
  date.strftime('%d/%m/%Y')
30
22
  end
31
-
23
+
32
24
  def self.r_camelize(obj)
33
25
  if obj.is_a?(Hash)
34
26
  new_obj = {}
@@ -46,16 +38,16 @@ module Emailvision
46
38
  obj
47
39
  end
48
40
  end
49
-
41
+
50
42
  def self.to_xml_as_is(obj)
51
- obj_xml = ""
52
-
43
+ obj_xml = ""
44
+
53
45
  unless obj.nil? or obj.empty?
54
46
  xml = ::Builder::XmlMarkup.new(:target=> obj_xml)
55
- xml.instruct! :xml, :version=> "1.0"
47
+ xml.instruct! :xml, :version=> "1.0"
56
48
  tag_obj xml, obj
57
49
  end
58
-
50
+
59
51
  obj_xml
60
52
  end
61
53
 
@@ -80,35 +72,35 @@ module Emailvision
80
72
  end
81
73
 
82
74
  result
83
- end
84
-
75
+ end
76
+
85
77
  private
86
-
87
- def self.tag_obj(xml, obj)
88
- if obj.is_a? Hash
89
- obj.each do |key, value|
90
- if value.is_a?(Hash)
91
- eval(%{
92
- xml.#{key} do
93
- tag_obj(xml, value)
94
- end
95
- })
96
- elsif value.is_a?(Array)
97
- value.each do |item|
78
+
79
+ def self.tag_obj(xml, obj)
80
+ if obj.is_a? Hash
81
+ obj.each do |key, value|
82
+ if value.is_a?(Hash)
98
83
  eval(%{
99
84
  xml.#{key} do
100
- tag_obj(xml, item)
85
+ tag_obj(xml, value)
101
86
  end
102
87
  })
88
+ elsif value.is_a?(Array)
89
+ value.each do |item|
90
+ eval(%{
91
+ xml.#{key} do
92
+ tag_obj(xml, item)
93
+ end
94
+ })
95
+ end
96
+ else
97
+ eval %{xml.#{key}(%{#{value}})}
103
98
  end
104
- else
105
- eval %{xml.#{key}(%{#{value}})}
106
99
  end
100
+ else
101
+ obj
107
102
  end
108
- else
109
- obj
110
103
  end
111
- end
112
-
113
- end
104
+
105
+ end
114
106
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emailvision
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.19
5
- prerelease:
4
+ version: 2.1.20
6
5
  platform: ruby
7
6
  authors:
8
7
  - Bastien Gysler
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-09 00:00:00.000000000 Z
11
+ date: 2013-10-12 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: httparty
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: crack
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: builder
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,11 +48,30 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
61
54
  version: 3.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: active_support
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ - - <=
63
+ - !ruby/object:Gem::Version
64
+ version: '4.0'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '3.0'
72
+ - - <=
73
+ - !ruby/object:Gem::Version
74
+ version: '4.0'
62
75
  description: REST API wrapper interacting with Emailvision
63
76
  email: basgys@gmail.com
64
77
  executables: []
@@ -77,27 +90,25 @@ files:
77
90
  - lib/generators/templates/emailvision.yml
78
91
  homepage: http://github.com/basgys/emailvision
79
92
  licenses: []
93
+ metadata: {}
80
94
  post_install_message:
81
95
  rdoc_options: []
82
96
  require_paths:
83
97
  - lib
84
98
  required_ruby_version: !ruby/object:Gem::Requirement
85
- none: false
86
99
  requirements:
87
100
  - - ! '>='
88
101
  - !ruby/object:Gem::Version
89
102
  version: '0'
90
103
  required_rubygems_version: !ruby/object:Gem::Requirement
91
- none: false
92
104
  requirements:
93
105
  - - ! '>='
94
106
  - !ruby/object:Gem::Version
95
107
  version: '0'
96
108
  requirements: []
97
109
  rubyforge_project:
98
- rubygems_version: 1.8.23
110
+ rubygems_version: 2.1.4
99
111
  signing_key:
100
- specification_version: 3
112
+ specification_version: 4
101
113
  summary: Emailvision
102
114
  test_files: []
103
- has_rdoc: