emailvision 2.0.0 → 2.1.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.
data/lib/emailvision.rb CHANGED
@@ -10,6 +10,7 @@ module Emailvision
10
10
  autoload :Exception, 'emailvision/exception'
11
11
  autoload :Logger, 'emailvision/logger'
12
12
  autoload :Relation, 'emailvision/relation'
13
+ autoload :Tools, 'emailvision/tools'
13
14
 
14
15
  if defined?(Rails)
15
16
  require 'emailvision/railtie'
@@ -3,6 +3,7 @@ module Emailvision
3
3
  include HTTParty
4
4
  default_timeout 30
5
5
  format :xml
6
+ headers 'Content-Type' => 'text/xml'
6
7
 
7
8
  # HTTP verbs allowed to trigger a call-chain
8
9
  HTTP_VERBS = [:get, :post].freeze
@@ -61,25 +62,41 @@ module Emailvision
61
62
  # Perform the API call
62
63
  # http_verb = (get, post, ...)
63
64
  # method = Method to call
64
- # content = Content to send (optionnal)
65
- def call(http_verb, method, content = {})
65
+ # parameters = Parameters to send (optionnal)
66
+ def call(http_verb, method, parameters = {})
66
67
  params ||= {}
67
68
 
68
- # Check presence of these essential attributes
69
+ # == Check presence of these essential attributes ==
69
70
  unless server_name and endpoint
70
71
  raise Emailvision::Exception.new "Cannot make an API call without a server name and an endpoint !"
71
72
  end
72
73
 
73
- # Build uri and parameters
74
+ # == Build uri ==
74
75
  uri = base_uri + method
75
- query = token ? {:token => token} : {}
76
- query.merge! content
76
+ if parameters[:uri]
77
+ uri += token ? "/#{token}/" : '/'
78
+ uri += (parameters[:uri].respond_to?(:join) ? parameters[:uri] : [parameters[:uri]]).join '/'
79
+ parameters.delete :uri
80
+ elsif parameters[:body]
81
+ uri += token ? "/#{token}/" : '/'
82
+ else
83
+ parameters[:token] = token
84
+ end
85
+
86
+ # == Build body ==
87
+ # 1. Extract body from parameters
88
+ body = parameters[:body] || {}
89
+ parameters.delete :body
90
+ # 2. Camelize all keys
91
+ body = Emailvision::Tools.r_camelize body
92
+ # 3. Convert to xml
93
+ body_xml = Emailvision::Tools.to_xml_as_is body
77
94
 
78
- # Send request
79
- logger.send "#{uri} with content : #{content}"
80
- response = self.class.send http_verb, uri, :query => query
95
+ # == Send request ==
96
+ logger.send "#{uri} with query : #{parameters} and body : #{body}"
97
+ response = self.class.send http_verb, uri, :query => parameters, :body => body_xml, :timeout => 30
81
98
 
82
- # Parse response
99
+ # == Parse response ==
83
100
  http_code = response.header.code
84
101
  content = Crack::XML.parse response.body
85
102
  logger.receive content.inspect
@@ -0,0 +1,63 @@
1
+ module Emailvision
2
+ class Tools
3
+
4
+ def self.r_camelize(obj)
5
+ if obj.is_a?(Hash)
6
+ new_obj = {}
7
+ obj.each do |key, value|
8
+ new_obj[key.to_s.camelize(:lower).to_sym] = r_camelize value
9
+ end
10
+ new_obj
11
+ elsif obj.is_a?(Array)
12
+ new_obj = []
13
+ obj.each_with_index do |item, index|
14
+ new_obj[index] = r_camelize item
15
+ end
16
+ new_obj
17
+ else
18
+ obj
19
+ end
20
+ end
21
+
22
+ def self.to_xml_as_is(obj)
23
+ obj_xml = ""
24
+ xml = Builder::XmlMarkup.new(:target=> obj_xml)
25
+ xml.instruct! :xml, :version=> "1.0"
26
+
27
+ tag_obj xml, obj
28
+
29
+ obj_xml
30
+ end
31
+
32
+ private
33
+
34
+ def self.tag_obj(xml, obj)
35
+ if obj.is_a? Hash
36
+ obj.each do |key, value|
37
+ if value.is_a?(Hash)
38
+ eval <<-EOS
39
+ xml.#{key} do
40
+ tag_obj xml, value
41
+ end
42
+ EOS
43
+ elsif value.is_a?(Array)
44
+ value.each do |item|
45
+ eval <<-EOS
46
+ xml.#{key} do
47
+ tag_obj xml, item
48
+ end
49
+ EOS
50
+ end
51
+ else
52
+ eval <<-EOS
53
+ xml.#{key} '#{value}'
54
+ EOS
55
+ end
56
+ end
57
+ else
58
+ obj
59
+ end
60
+ end
61
+
62
+ end
63
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emailvision
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-09-26 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &2164271140 !ruby/object:Gem::Requirement
16
+ requirement: &2155649020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.8.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2164271140
24
+ version_requirements: *2155649020
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: crack
27
- requirement: &2164270660 !ruby/object:Gem::Requirement
27
+ requirement: &2155648280 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 0.3.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2164270660
35
+ version_requirements: *2155648280
36
36
  description: REST API wrapper interacting with Emailvision
37
37
  email: basgys@gmail.com
38
38
  executables: []
@@ -44,6 +44,7 @@ files:
44
44
  - lib/emailvision/logger.rb
45
45
  - lib/emailvision/railtie.rb
46
46
  - lib/emailvision/relation.rb
47
+ - lib/emailvision/tools.rb
47
48
  - lib/emailvision.rb
48
49
  - lib/generators/install.rb
49
50
  - lib/generators/templates/emailvision.yml