emailvision 2.0.0 → 2.1.1

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