emailvision 1.1.0 → 2.0.0
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 +7 -5
- data/lib/emailvision/api.rb +99 -58
- data/lib/emailvision/exception.rb +11 -1
- data/lib/emailvision/logger.rb +7 -0
- data/lib/emailvision/railtie.rb +26 -0
- data/lib/emailvision/relation.rb +4 -4
- data/lib/generators/install.rb +15 -0
- data/lib/generators/templates/emailvision.yml +15 -0
- metadata +9 -6
    
        data/lib/emailvision.rb
    CHANGED
    
    | @@ -1,16 +1,18 @@ | |
| 1 1 | 
             
            require 'crack/xml'
         | 
| 2 2 | 
             
            require 'httparty'
         | 
| 3 | 
            +
            require 'active_support/inflector'
         | 
| 4 | 
            +
            require 'logger'
         | 
| 3 5 |  | 
| 4 6 | 
             
            # Emailvision API wrapper
         | 
| 5 | 
            -
            # 
         | 
| 6 | 
            -
            # More infos @ http://emvapi.emv3.com/apiccmd/services/rest?_wadl&_type=xml
         | 
| 7 | 
            -
            #
         | 
| 8 | 
            -
            # Call example :
         | 
| 9 | 
            -
            # resource path="url/createUnsubscribeUrl/" --> url.create_unsubscribe_url.call :params => value1
         | 
| 10 7 | 
             
            #
         | 
| 11 8 | 
             
            module Emailvision
         | 
| 12 9 | 
             
              autoload :Api, 'emailvision/api'
         | 
| 13 10 | 
             
              autoload :Exception, 'emailvision/exception'
         | 
| 14 11 | 
             
              autoload :Logger, 'emailvision/logger'
         | 
| 15 12 | 
             
              autoload :Relation, 'emailvision/relation'
         | 
| 13 | 
            +
              
         | 
| 14 | 
            +
              if defined?(Rails)
         | 
| 15 | 
            +
            	  require 'emailvision/railtie'
         | 
| 16 | 
            +
            	  require 'generators/install'
         | 
| 17 | 
            +
            	end
         | 
| 16 18 | 
             
            end
         | 
    
        data/lib/emailvision/api.rb
    CHANGED
    
    | @@ -2,89 +2,130 @@ module Emailvision | |
| 2 2 | 
             
              class Api    
         | 
| 3 3 | 
             
                include HTTParty
         | 
| 4 4 | 
             
                default_timeout 30
         | 
| 5 | 
            -
                format : | 
| 6 | 
            -
             | 
| 7 | 
            -
                attr_accessor :token
         | 
| 5 | 
            +
                format :xml
         | 
| 8 6 |  | 
| 9 | 
            -
                 | 
| 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']
         | 
| 7 | 
            +
                # HTTP verbs allowed to trigger a call-chain
         | 
| 8 | 
            +
                HTTP_VERBS = [:get, :post].freeze  
         | 
| 15 9 |  | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
             | 
| 19 | 
            -
                HTTP_VERBS.each do |http_verb|
         | 
| 20 | 
            -
                  define_method(http_verb) do
         | 
| 21 | 
            -
                    Emailvision::Relation.new(self, http_verb)
         | 
| 22 | 
            -
                  end
         | 
| 10 | 
            +
                # Attributes
         | 
| 11 | 
            +
                class << self
         | 
| 12 | 
            +
                  attr_accessor :token, :server_name, :endpoint, :login, :password, :key, :debug
         | 
| 23 13 | 
             
                end
         | 
| 14 | 
            +
                attr_accessor :token, :server_name, :endpoint, :login, :password, :key, :debug
         | 
| 24 15 |  | 
| 25 | 
            -
                 | 
| 26 | 
            -
             | 
| 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
         | 
| 16 | 
            +
                def initialize(params = {})      
         | 
| 17 | 
            +
                  yield(self) if block_given?      
         | 
| 34 18 |  | 
| 35 | 
            -
                   | 
| 36 | 
            -
                   | 
| 37 | 
            -
                  
         | 
| 38 | 
            -
                   | 
| 39 | 
            -
                   | 
| 40 | 
            -
                   | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 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 | 
            -
             | 
| 19 | 
            +
                  self.server_name ||= params[:server_name]  || self.class.server_name
         | 
| 20 | 
            +
                  self.endpoint    ||= params[:endpoint]     || self.class.endpoint
         | 
| 21 | 
            +
                  self.login       ||= params[:login]        || self.class.login
         | 
| 22 | 
            +
                  self.password    ||= params[:password]     || self.class.password
         | 
| 23 | 
            +
                  self.key         ||= params[:key]          || self.class.key
         | 
| 24 | 
            +
                  self.token       ||= params[:token]        || self.class.token
         | 
| 25 | 
            +
                  self.debug       ||= params[:debug]        || self.class.debug      
         | 
| 26 | 
            +
                end   
         | 
| 27 | 
            +
                
         | 
| 61 28 | 
             
                # ----------------- BEGIN Pre-configured methods -----------------
         | 
| 62 29 |  | 
| 63 30 | 
             
                # Login to Emailvision API
         | 
| 64 31 | 
             
                # Return :
         | 
| 65 32 | 
             
                # - True if the connection has been established
         | 
| 66 33 | 
             
                # - False if the connection cannot be established or has already been established
         | 
| 67 | 
            -
                def  | 
| 34 | 
            +
                def open_connection
         | 
| 68 35 | 
             
                  return false if connected?
         | 
| 69 36 | 
             
                  self.token = get.connect.open.call :login => @login, :password => @password, :key => @key
         | 
| 70 37 | 
             
                  connected?
         | 
| 71 38 | 
             
                end
         | 
| 72 39 |  | 
| 73 | 
            -
                # Logout  | 
| 40 | 
            +
                # Logout from Emailvision API
         | 
| 74 41 | 
             
                # Return :
         | 
| 75 42 | 
             
                # - True if the connection has been destroyed
         | 
| 76 43 | 
             
                # - False if the connection cannot be destroyed or has already been destroyed    
         | 
| 77 | 
            -
                def  | 
| 44 | 
            +
                def close_connection
         | 
| 78 45 | 
             
                  return false unless connected?
         | 
| 79 46 | 
             
                  get.connect.close.call if connected?
         | 
| 80 | 
            -
                   | 
| 81 | 
            -
                  connected?
         | 
| 47 | 
            +
                  invalidate_token!
         | 
| 48 | 
            +
                  not connected?
         | 
| 82 49 | 
             
                end
         | 
| 83 50 |  | 
| 84 51 | 
             
                # Check whether the connection has been established or not
         | 
| 85 52 | 
             
                def connected?
         | 
| 86 53 | 
             
                  !token.nil?
         | 
| 87 54 | 
             
                end
         | 
| 88 | 
            -
                 | 
| 89 | 
            -
             | 
| 55 | 
            +
                
         | 
| 56 | 
            +
                def invalidate_token!
         | 
| 57 | 
            +
                  self.token = nil
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
                # ----------------- END Pre-configured methods -----------------    
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                # Perform the API call
         | 
| 62 | 
            +
                # http_verb = (get, post, ...)
         | 
| 63 | 
            +
                # method = Method to call
         | 
| 64 | 
            +
                # content = Content to send (optionnal)
         | 
| 65 | 
            +
                def call(http_verb, method, content = {})
         | 
| 66 | 
            +
                  params ||= {}      
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  # Check presence of these essential attributes
         | 
| 69 | 
            +
                  unless server_name and endpoint
         | 
| 70 | 
            +
                    raise Emailvision::Exception.new "Cannot make an API call without a server name and an endpoint !"
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  # Build uri and parameters
         | 
| 74 | 
            +
                  uri = base_uri + method
         | 
| 75 | 
            +
                  query = token ? {:token => token} : {}
         | 
| 76 | 
            +
                  query.merge! content
         | 
| 77 | 
            +
                  
         | 
| 78 | 
            +
                  # Send request
         | 
| 79 | 
            +
                  logger.send "#{uri} with content : #{content}"
         | 
| 80 | 
            +
                  response = self.class.send http_verb, uri, :query => query
         | 
| 81 | 
            +
                  
         | 
| 82 | 
            +
                  # Parse response
         | 
| 83 | 
            +
                  http_code = response.header.code
         | 
| 84 | 
            +
                  content = Crack::XML.parse response.body
         | 
| 85 | 
            +
                  logger.receive content.inspect
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                  # Return response or raise an exception if request failed
         | 
| 88 | 
            +
                  if (http_code == "200") and (content and content["response"])
         | 
| 89 | 
            +
                    content["response"]["result"] || content["response"]
         | 
| 90 | 
            +
                  else        
         | 
| 91 | 
            +
                    raise Emailvision::Exception.new "#{http_code} - #{content}"
         | 
| 92 | 
            +
                  end
         | 
| 93 | 
            +
                end    
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            		# Set token
         | 
| 96 | 
            +
                # Override
         | 
| 97 | 
            +
                def token=(value)
         | 
| 98 | 
            +
                  @token = value
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
                
         | 
| 101 | 
            +
                # Set endpoint
         | 
| 102 | 
            +
                # Override
         | 
| 103 | 
            +
                def endpoint=(value)
         | 
| 104 | 
            +
            	    invalidate_token!	    
         | 
| 105 | 
            +
            	  	@endpoint = value	  	
         | 
| 106 | 
            +
            	  end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                # Base uri
         | 
| 109 | 
            +
                def base_uri
         | 
| 110 | 
            +
                  "http://#{server_name}/#{endpoint}/services/rest/"
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
                
         | 
| 113 | 
            +
                # Generate call-chain triggers
         | 
| 114 | 
            +
                HTTP_VERBS.each do |http_verb|
         | 
| 115 | 
            +
                  define_method(http_verb) do
         | 
| 116 | 
            +
                    Emailvision::Relation.new(self, http_verb)
         | 
| 117 | 
            +
                  end
         | 
| 118 | 
            +
                end    
         | 
| 119 | 
            +
                
         | 
| 120 | 
            +
            	  private
         | 
| 121 | 
            +
            	
         | 
| 122 | 
            +
            	  def logger      
         | 
| 123 | 
            +
            	    if @logger.nil?
         | 
| 124 | 
            +
            	      @logger = Emailvision::Logger.new(STDOUT)
         | 
| 125 | 
            +
            	      @logger.level = (debug ? Logger::DEBUG : Logger::WARN)
         | 
| 126 | 
            +
            	    end
         | 
| 127 | 
            +
            	    @logger
         | 
| 128 | 
            +
            	  end    
         | 
| 129 | 
            +
                
         | 
| 130 | 
            +
              end    
         | 
| 90 131 | 
             
            end
         | 
| @@ -1,4 +1,14 @@ | |
| 1 1 | 
             
            module Emailvision
         | 
| 2 | 
            -
              class Exception < ::Exception | 
| 2 | 
            +
              class Exception < ::Exception 
         | 
| 3 | 
            +
                
         | 
| 4 | 
            +
                attr_accessor :http_status, :error
         | 
| 5 | 
            +
                
         | 
| 6 | 
            +
                def initializer(http_status, error)
         | 
| 7 | 
            +
                  self.http_status = http_status
         | 
| 8 | 
            +
                  self.error = error
         | 
| 9 | 
            +
                  
         | 
| 10 | 
            +
                  super("EMV API returns #{http_status} status code")
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                   
         | 
| 3 13 | 
             
              end
         | 
| 4 14 | 
             
            end
         | 
    
        data/lib/emailvision/logger.rb
    CHANGED
    
    
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            require 'rails'
         | 
| 2 | 
            +
             | 
| 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 | 
            +
            	    end	    
         | 
| 23 | 
            +
            	  end		
         | 
| 24 | 
            +
            	
         | 
| 25 | 
            +
            	end
         | 
| 26 | 
            +
            end
         | 
    
        data/lib/emailvision/relation.rb
    CHANGED
    
    | @@ -5,17 +5,17 @@ module Emailvision | |
| 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 | 
            -
                  @ | 
| 13 | 
            -
                  @instance.call @http_verb, @uri.join('/'), @ | 
| 12 | 
            +
                  @options.merge! extract_args(args)
         | 
| 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 19 | 
             
                  self            
         | 
| 20 20 | 
             
                end    
         | 
| 21 21 |  | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            require 'rails/generators'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Emailvision
         | 
| 4 | 
            +
              module Generators
         | 
| 5 | 
            +
                class Install < Rails::Generators::Base
         | 
| 6 | 
            +
                  
         | 
| 7 | 
            +
                  source_root File.expand_path('../templates', __FILE__)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def generate_config        
         | 
| 10 | 
            +
                    copy_file "emailvision.yml", "config/emailvision.yml" unless File.exist?("config/emailvision.yml")
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                end    
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            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:  | 
| 4 | 
            +
              version: 2.0.0
         | 
| 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: & | 
| 16 | 
            +
              requirement: &2164271140 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ~>
         | 
| @@ -21,18 +21,18 @@ dependencies: | |
| 21 21 | 
             
                    version: 0.8.0
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *2164271140
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: crack
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &2164270660 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ~>
         | 
| 31 31 | 
             
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            -
                    version: 0. | 
| 32 | 
            +
                    version: 0.3.0
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *2164270660
         | 
| 36 36 | 
             
            description: REST API wrapper interacting with Emailvision
         | 
| 37 37 | 
             
            email: basgys@gmail.com
         | 
| 38 38 | 
             
            executables: []
         | 
| @@ -42,8 +42,11 @@ files: | |
| 42 42 | 
             
            - lib/emailvision/api.rb
         | 
| 43 43 | 
             
            - lib/emailvision/exception.rb
         | 
| 44 44 | 
             
            - lib/emailvision/logger.rb
         | 
| 45 | 
            +
            - lib/emailvision/railtie.rb
         | 
| 45 46 | 
             
            - lib/emailvision/relation.rb
         | 
| 46 47 | 
             
            - lib/emailvision.rb
         | 
| 48 | 
            +
            - lib/generators/install.rb
         | 
| 49 | 
            +
            - lib/generators/templates/emailvision.yml
         | 
| 47 50 | 
             
            homepage: http://github.com/basgys/emailvision
         | 
| 48 51 | 
             
            licenses: []
         | 
| 49 52 | 
             
            post_install_message: 
         |