emailvision 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/emailvision.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'httparty'
2
1
  require 'crack/xml'
2
+ require 'httparty'
3
3
 
4
4
  # Emailvision API wrapper
5
5
  #
@@ -9,8 +9,8 @@ require 'crack/xml'
9
9
  # resource path="url/createUnsubscribeUrl/" --> url.create_unsubscribe_url.call :params => value1
10
10
  #
11
11
  module Emailvision
12
- autoload :Api, 'api'
13
- autoload :Exception, 'exception'
14
- autoload :Logger, 'logger'
15
- autoload :Relation, 'relation'
12
+ autoload :Api, 'emailvision/api'
13
+ autoload :Exception, 'emailvision/exception'
14
+ autoload :Logger, 'emailvision/logger'
15
+ autoload :Relation, 'emailvision/relation'
16
16
  end
@@ -0,0 +1,90 @@
1
+ module Emailvision
2
+ class Api
3
+ include HTTParty
4
+ default_timeout 30
5
+ format :plain
6
+
7
+ attr_accessor :token
8
+
9
+ HTTP_VERBS = [:get, :post]
10
+
11
+ def initialize(login = nil, password = nil, key = nil, params = {})
12
+ @login = login || EMV_LOGIN || ENV['EMV_LOGIN']
13
+ @password = password || EMV_PASSWORD || ENV['EMV_PASSWORD']
14
+ @key = key || EMV_KEY || ENV['EMV_KEY']
15
+
16
+ @default_params = params
17
+ end
18
+
19
+ HTTP_VERBS.each do |http_verb|
20
+ define_method(http_verb) do
21
+ Emailvision::Relation.new(self, http_verb)
22
+ end
23
+ end
24
+
25
+ # http_verb = (get, post, ...)
26
+ # method = Method to call
27
+ # params = Extra parameters (optionnal)
28
+ def call(http_verb, method, params = {})
29
+ params ||= {}
30
+
31
+ # Build uri and parameters
32
+ uri = endpoint + method
33
+ params = @default_params.merge params
34
+
35
+ # Send request
36
+ raw_result = self.class.send http_verb, uri, :query => params
37
+
38
+ # Parse response
39
+ http_code = raw_result.header.code
40
+ parsed_result = Crack::XML.parse raw_result.body
41
+
42
+ # Return response or raise an exception if request failed
43
+ if (http_code == "200") and (parsed_result and parsed_result["response"])
44
+ parsed_result["response"]["result"] || parsed_result["response"]
45
+ else
46
+ raise Emailvision::Exception.new "#{http_code} - #{raw_result.body}"
47
+ end
48
+ end
49
+
50
+ # Connection token
51
+ def token=(value)
52
+ @token = value
53
+ @default_params = @default_params.merge({:token => token})
54
+ end
55
+
56
+ # Endpoint base uri
57
+ def endpoint
58
+ 'https://emvapi.emv3.com/apiccmd/services/rest/'
59
+ end
60
+
61
+ # ----------------- BEGIN Pre-configured methods -----------------
62
+
63
+ # Login to Emailvision API
64
+ # Return :
65
+ # - True if the connection has been established
66
+ # - False if the connection cannot be established or has already been established
67
+ def login
68
+ return false if connected?
69
+ self.token = get.connect.open.call :login => @login, :password => @password, :key => @key
70
+ connected?
71
+ end
72
+
73
+ # Logout to Emailvision API
74
+ # Return :
75
+ # - True if the connection has been destroyed
76
+ # - False if the connection cannot be destroyed or has already been destroyed
77
+ def logout
78
+ return false unless connected?
79
+ get.connect.close.call if connected?
80
+ self.token = nil
81
+ connected?
82
+ end
83
+
84
+ # Check whether the connection has been established or not
85
+ def connected?
86
+ !token.nil?
87
+ end
88
+ # ----------------- END Pre-configured methods -----------------
89
+ end
90
+ end
@@ -0,0 +1,4 @@
1
+ module Emailvision
2
+ class Exception < ::Exception
3
+ end
4
+ end
@@ -0,0 +1,15 @@
1
+ module Emailvision
2
+ class Logger < ::Logger
3
+
4
+ # Log a message sent to emailvision
5
+ def send(message)
6
+ info("[Emailvision] Send -> #{message}")
7
+ end
8
+
9
+ # Log a message received from emailvision
10
+ def receive(message)
11
+ info("[Emailvision] Receive -> #{message}")
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ module Emailvision
2
+ class Relation
3
+
4
+ def initialize(instance, http_verb)
5
+ @instance = instance
6
+ @http_verb = http_verb
7
+ @uri = []
8
+ @params = {}
9
+ end
10
+
11
+ def call(*args)
12
+ @params.merge! extract_args(args)
13
+ @instance.call @http_verb, @uri.join('/'), @params
14
+ end
15
+
16
+ def method_missing(method, *args)
17
+ @uri << method.to_s.camelize(:lower)
18
+ @params.merge! extract_args(args)
19
+ self
20
+ end
21
+
22
+ private
23
+
24
+ def extract_args(args)
25
+ (args[0] and args[0].kind_of? Hash) ? args[0] : {}
26
+ end
27
+
28
+ end
29
+ 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: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,13 +10,39 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2011-09-26 00:00:00.000000000Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httparty
16
+ requirement: &2164322100 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2164322100
25
+ - !ruby/object:Gem::Dependency
26
+ name: crack
27
+ requirement: &2164321620 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 0.1.8
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2164321620
14
36
  description: REST API wrapper interacting with Emailvision
15
37
  email: basgys@gmail.com
16
38
  executables: []
17
39
  extensions: []
18
40
  extra_rdoc_files: []
19
41
  files:
42
+ - lib/emailvision/api.rb
43
+ - lib/emailvision/exception.rb
44
+ - lib/emailvision/logger.rb
45
+ - lib/emailvision/relation.rb
20
46
  - lib/emailvision.rb
21
47
  homepage: http://github.com/basgys/emailvision
22
48
  licenses: []