emailvision 2.1.19 → 2.1.20

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: