mandrill-api 1.0.2
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/mandrill.rb +107 -0
- data/lib/mandrill/api.rb +204 -0
- data/lib/mandrill/errors.rb +23 -0
- metadata +98 -0
    
        data/lib/mandrill.rb
    ADDED
    
    | @@ -0,0 +1,107 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'excon'
         | 
| 3 | 
            +
            require 'json'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require 'mandrill/errors'
         | 
| 6 | 
            +
            require 'mandrill/api'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module Mandrill
         | 
| 9 | 
            +
                class API
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    attr_accessor :host, :path, :apikey, :debug, :session
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    def initialize(apikey=nil, debug=false)
         | 
| 14 | 
            +
                        @host = 'https://mandrillapp.com'
         | 
| 15 | 
            +
                        @path = '/api/1.0/'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                        @session = Excon.new @host
         | 
| 18 | 
            +
                        @debug = debug
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                        if not apikey
         | 
| 21 | 
            +
                            if ENV['MANDRILL_APIKEY']
         | 
| 22 | 
            +
                                apikey = ENV['MANDRILL_APIKEY']
         | 
| 23 | 
            +
                            else
         | 
| 24 | 
            +
                                apikey = read_configs
         | 
| 25 | 
            +
                            end
         | 
| 26 | 
            +
                        end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                        raise Error, 'You must provide a Mandrill API key' if not apikey
         | 
| 29 | 
            +
                        @apikey = apikey
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    def call(url, params={})
         | 
| 33 | 
            +
                        params[:key] = @apikey
         | 
| 34 | 
            +
                        params = JSON.generate(params)
         | 
| 35 | 
            +
                        r = @session.post(:path => "#{@path}#{url}.json", :headers => {'Content-Type' => 'application/json'}, :body => params)
         | 
| 36 | 
            +
                        
         | 
| 37 | 
            +
                        cast_error(r.body) if r.status != 200
         | 
| 38 | 
            +
                        return JSON.parse(r.body)
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    def read_configs()
         | 
| 42 | 
            +
                        [File.expand_path('~/.mandrill.key'), '/etc/mandrill.key'].delete_if{ |p| not File.exist? p}.each do |path|
         | 
| 43 | 
            +
                            f = File.new path
         | 
| 44 | 
            +
                            apikey = f.read.strip
         | 
| 45 | 
            +
                            f.close
         | 
| 46 | 
            +
                            return apikey if apikey != ''
         | 
| 47 | 
            +
                        end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                        return nil
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    def cast_error(body)
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                        error_map = {
         | 
| 55 | 
            +
                            'ValidationError' => ValidationError,
         | 
| 56 | 
            +
                            'Invalid_Key' => InvalidKeyError,
         | 
| 57 | 
            +
                            'Unknown_Template' => UnknownTemplateError,
         | 
| 58 | 
            +
                            'Invalid_Tag_Name' => InvalidTagNameError,
         | 
| 59 | 
            +
                            'Invalid_Reject' => InvalidRejectError,
         | 
| 60 | 
            +
                            'Unknown_Sender' => UnknownSenderError,
         | 
| 61 | 
            +
                            'Unknown_Url' => UnknownUrlError,
         | 
| 62 | 
            +
                            'Invalid_Template' => InvalidTemplateError,
         | 
| 63 | 
            +
                            'Unknown_Webhook' => UnknownWebhookError
         | 
| 64 | 
            +
                        }
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                        begin
         | 
| 67 | 
            +
                            error_info = JSON.parse(body)
         | 
| 68 | 
            +
                            if error_info['status'] != 'error' or not error_info['name']:
         | 
| 69 | 
            +
                                raise Error, "We received an unexpected error: #{body}"
         | 
| 70 | 
            +
                            end
         | 
| 71 | 
            +
                            if error_map[error_info['name']]
         | 
| 72 | 
            +
                                raise error_map[error_info['name']], error_info['message']
         | 
| 73 | 
            +
                            else
         | 
| 74 | 
            +
                                raise Error, error_info['message']
         | 
| 75 | 
            +
                            end
         | 
| 76 | 
            +
                        rescue JSON::ParserError
         | 
| 77 | 
            +
                            raise Error, "We received an unexpected error: #{body}"
         | 
| 78 | 
            +
                        end
         | 
| 79 | 
            +
                    end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    def templates()
         | 
| 82 | 
            +
                        Templates.new self
         | 
| 83 | 
            +
                    end
         | 
| 84 | 
            +
                    def users()
         | 
| 85 | 
            +
                        Users.new self
         | 
| 86 | 
            +
                    end
         | 
| 87 | 
            +
                    def rejects()
         | 
| 88 | 
            +
                        Rejects.new self
         | 
| 89 | 
            +
                    end
         | 
| 90 | 
            +
                    def tags()
         | 
| 91 | 
            +
                        Tags.new self
         | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
                    def messages()
         | 
| 94 | 
            +
                        Messages.new self
         | 
| 95 | 
            +
                    end
         | 
| 96 | 
            +
                    def urls()
         | 
| 97 | 
            +
                        Urls.new self
         | 
| 98 | 
            +
                    end
         | 
| 99 | 
            +
                    def webhooks()
         | 
| 100 | 
            +
                        Webhooks.new self
         | 
| 101 | 
            +
                    end
         | 
| 102 | 
            +
                    def senders()
         | 
| 103 | 
            +
                        Senders.new self
         | 
| 104 | 
            +
                    end
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
            end
         | 
| 107 | 
            +
             | 
    
        data/lib/mandrill/api.rb
    ADDED
    
    | @@ -0,0 +1,204 @@ | |
| 1 | 
            +
            module Mandrill
         | 
| 2 | 
            +
             | 
| 3 | 
            +
                class Templates
         | 
| 4 | 
            +
                    attr_accessor :master
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                    def initialize(master)
         | 
| 7 | 
            +
                        @master = master
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    def add(name, code, publish=true)
         | 
| 11 | 
            +
                        _params = {:name => name, :code => code, :publish => publish}
         | 
| 12 | 
            +
                        return @master.call 'templates/add', _params
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                    def info(name)
         | 
| 15 | 
            +
                        _params = {:name => name}
         | 
| 16 | 
            +
                        return @master.call 'templates/info', _params
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                    def update(name, code, publish=true)
         | 
| 19 | 
            +
                        _params = {:name => name, :code => code, :publish => publish}
         | 
| 20 | 
            +
                        return @master.call 'templates/update', _params
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                    def publish(name)
         | 
| 23 | 
            +
                        _params = {:name => name}
         | 
| 24 | 
            +
                        return @master.call 'templates/publish', _params
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                    def delete(name)
         | 
| 27 | 
            +
                        _params = {:name => name}
         | 
| 28 | 
            +
                        return @master.call 'templates/delete', _params
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
                    def list()
         | 
| 31 | 
            +
                        _params = {}
         | 
| 32 | 
            +
                        return @master.call 'templates/list', _params
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                    def time_series(name)
         | 
| 35 | 
            +
                        _params = {:name => name}
         | 
| 36 | 
            +
                        return @master.call 'templates/time-series', _params
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                    def render(template_name, template_content, merge_vars=nil)
         | 
| 39 | 
            +
                        _params = {:template_name => template_name, :template_content => template_content, :merge_vars => merge_vars}
         | 
| 40 | 
            +
                        return @master.call 'templates/render', _params
         | 
| 41 | 
            +
                    end
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
                class Users
         | 
| 44 | 
            +
                    attr_accessor :master
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    def initialize(master)
         | 
| 47 | 
            +
                        @master = master
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    def info()
         | 
| 51 | 
            +
                        _params = {}
         | 
| 52 | 
            +
                        return @master.call 'users/info', _params
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
                    def ping()
         | 
| 55 | 
            +
                        _params = {}
         | 
| 56 | 
            +
                        return @master.call 'users/ping2', _params
         | 
| 57 | 
            +
                    end
         | 
| 58 | 
            +
                    def senders()
         | 
| 59 | 
            +
                        _params = {}
         | 
| 60 | 
            +
                        return @master.call 'users/senders', _params
         | 
| 61 | 
            +
                    end
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
                class Rejects
         | 
| 64 | 
            +
                    attr_accessor :master
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    def initialize(master)
         | 
| 67 | 
            +
                        @master = master
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                    def list(email=nil)
         | 
| 71 | 
            +
                        _params = {:email => email}
         | 
| 72 | 
            +
                        return @master.call 'rejects/list', _params
         | 
| 73 | 
            +
                    end
         | 
| 74 | 
            +
                    def delete(email)
         | 
| 75 | 
            +
                        _params = {:email => email}
         | 
| 76 | 
            +
                        return @master.call 'rejects/delete', _params
         | 
| 77 | 
            +
                    end
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
                class Tags
         | 
| 80 | 
            +
                    attr_accessor :master
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                    def initialize(master)
         | 
| 83 | 
            +
                        @master = master
         | 
| 84 | 
            +
                    end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    def list()
         | 
| 87 | 
            +
                        _params = {}
         | 
| 88 | 
            +
                        return @master.call 'tags/list', _params
         | 
| 89 | 
            +
                    end
         | 
| 90 | 
            +
                    def info(tag)
         | 
| 91 | 
            +
                        _params = {:tag => tag}
         | 
| 92 | 
            +
                        return @master.call 'tags/info', _params
         | 
| 93 | 
            +
                    end
         | 
| 94 | 
            +
                    def time_series(tag)
         | 
| 95 | 
            +
                        _params = {:tag => tag}
         | 
| 96 | 
            +
                        return @master.call 'tags/time-series', _params
         | 
| 97 | 
            +
                    end
         | 
| 98 | 
            +
                    def all_time_series()
         | 
| 99 | 
            +
                        _params = {}
         | 
| 100 | 
            +
                        return @master.call 'tags/all-time-series', _params
         | 
| 101 | 
            +
                    end
         | 
| 102 | 
            +
                end
         | 
| 103 | 
            +
                class Messages
         | 
| 104 | 
            +
                    attr_accessor :master
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    def initialize(master)
         | 
| 107 | 
            +
                        @master = master
         | 
| 108 | 
            +
                    end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                    def send(message)
         | 
| 111 | 
            +
                        _params = {:message => message}
         | 
| 112 | 
            +
                        return @master.call 'messages/send', _params
         | 
| 113 | 
            +
                    end
         | 
| 114 | 
            +
                    def send_template(template_name, template_content, message)
         | 
| 115 | 
            +
                        _params = {:template_name => template_name, :template_content => template_content, :message => message}
         | 
| 116 | 
            +
                        return @master.call 'messages/send-template', _params
         | 
| 117 | 
            +
                    end
         | 
| 118 | 
            +
                    def search(query='*', date_from=nil, date_to=nil, tags=nil, senders=nil, limit=100)
         | 
| 119 | 
            +
                        _params = {:query => query, :date_from => date_from, :date_to => date_to, :tags => tags, :senders => senders, :limit => limit}
         | 
| 120 | 
            +
                        return @master.call 'messages/search', _params
         | 
| 121 | 
            +
                    end
         | 
| 122 | 
            +
                    def parse(raw_message)
         | 
| 123 | 
            +
                        _params = {:raw_message => raw_message}
         | 
| 124 | 
            +
                        return @master.call 'messages/parse', _params
         | 
| 125 | 
            +
                    end
         | 
| 126 | 
            +
                    def send_raw(raw_message, from_email=nil, from_name=nil, to=nil)
         | 
| 127 | 
            +
                        _params = {:raw_message => raw_message, :from_email => from_email, :from_name => from_name, :to => to}
         | 
| 128 | 
            +
                        return @master.call 'messages/send-raw', _params
         | 
| 129 | 
            +
                    end
         | 
| 130 | 
            +
                end
         | 
| 131 | 
            +
                class Urls
         | 
| 132 | 
            +
                    attr_accessor :master
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                    def initialize(master)
         | 
| 135 | 
            +
                        @master = master
         | 
| 136 | 
            +
                    end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                    def list()
         | 
| 139 | 
            +
                        _params = {}
         | 
| 140 | 
            +
                        return @master.call 'urls/list', _params
         | 
| 141 | 
            +
                    end
         | 
| 142 | 
            +
                    def search(q)
         | 
| 143 | 
            +
                        _params = {:q => q}
         | 
| 144 | 
            +
                        return @master.call 'urls/search', _params
         | 
| 145 | 
            +
                    end
         | 
| 146 | 
            +
                    def time_series(url)
         | 
| 147 | 
            +
                        _params = {:url => url}
         | 
| 148 | 
            +
                        return @master.call 'urls/time-series', _params
         | 
| 149 | 
            +
                    end
         | 
| 150 | 
            +
                end
         | 
| 151 | 
            +
                class Webhooks
         | 
| 152 | 
            +
                    attr_accessor :master
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                    def initialize(master)
         | 
| 155 | 
            +
                        @master = master
         | 
| 156 | 
            +
                    end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                    def list()
         | 
| 159 | 
            +
                        _params = {}
         | 
| 160 | 
            +
                        return @master.call 'webhooks/list', _params
         | 
| 161 | 
            +
                    end
         | 
| 162 | 
            +
                    def add(url, events=[])
         | 
| 163 | 
            +
                        _params = {:url => url, :events => events}
         | 
| 164 | 
            +
                        return @master.call 'webhooks/add', _params
         | 
| 165 | 
            +
                    end
         | 
| 166 | 
            +
                    def info(id)
         | 
| 167 | 
            +
                        _params = {:id => id}
         | 
| 168 | 
            +
                        return @master.call 'webhooks/info', _params
         | 
| 169 | 
            +
                    end
         | 
| 170 | 
            +
                    def update(id, url, events=[])
         | 
| 171 | 
            +
                        _params = {:id => id, :url => url, :events => events}
         | 
| 172 | 
            +
                        return @master.call 'webhooks/update', _params
         | 
| 173 | 
            +
                    end
         | 
| 174 | 
            +
                    def delete(id)
         | 
| 175 | 
            +
                        _params = {:id => id}
         | 
| 176 | 
            +
                        return @master.call 'webhooks/delete', _params
         | 
| 177 | 
            +
                    end
         | 
| 178 | 
            +
                end
         | 
| 179 | 
            +
                class Senders
         | 
| 180 | 
            +
                    attr_accessor :master
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                    def initialize(master)
         | 
| 183 | 
            +
                        @master = master
         | 
| 184 | 
            +
                    end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                    def list()
         | 
| 187 | 
            +
                        _params = {}
         | 
| 188 | 
            +
                        return @master.call 'senders/list', _params
         | 
| 189 | 
            +
                    end
         | 
| 190 | 
            +
                    def domains()
         | 
| 191 | 
            +
                        _params = {}
         | 
| 192 | 
            +
                        return @master.call 'senders/domains', _params
         | 
| 193 | 
            +
                    end
         | 
| 194 | 
            +
                    def info(address)
         | 
| 195 | 
            +
                        _params = {:address => address}
         | 
| 196 | 
            +
                        return @master.call 'senders/info', _params
         | 
| 197 | 
            +
                    end
         | 
| 198 | 
            +
                    def time_series(address)
         | 
| 199 | 
            +
                        _params = {:address => address}
         | 
| 200 | 
            +
                        return @master.call 'senders/time-series', _params
         | 
| 201 | 
            +
                    end
         | 
| 202 | 
            +
                end
         | 
| 203 | 
            +
            end
         | 
| 204 | 
            +
             | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            module Mandrill
         | 
| 2 | 
            +
                class Error < Exception
         | 
| 3 | 
            +
                end
         | 
| 4 | 
            +
                class ValidationError < Error
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
                class InvalidKeyError < Error
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
                class UnknownTemplateError < Error
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
                class InvalidTagNameError < Error
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                class InvalidRejectError < Error
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
                class UnknownSenderError < Error
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
                class UnknownUrlError < Error
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
                class InvalidTemplateError < Error
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
                class UnknownWebhookError < Error
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,98 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: mandrill-api
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              hash: 19
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 | 
            +
              segments: 
         | 
| 7 | 
            +
              - 1
         | 
| 8 | 
            +
              - 0
         | 
| 9 | 
            +
              - 2
         | 
| 10 | 
            +
              version: 1.0.2
         | 
| 11 | 
            +
            platform: ruby
         | 
| 12 | 
            +
            authors: 
         | 
| 13 | 
            +
            - Mandrill Devs
         | 
| 14 | 
            +
            autorequire: 
         | 
| 15 | 
            +
            bindir: bin
         | 
| 16 | 
            +
            cert_chain: []
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            date: 2012-07-31 00:00:00 Z
         | 
| 19 | 
            +
            dependencies: 
         | 
| 20 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 21 | 
            +
              name: json
         | 
| 22 | 
            +
              prerelease: false
         | 
| 23 | 
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 24 | 
            +
                none: false
         | 
| 25 | 
            +
                requirements: 
         | 
| 26 | 
            +
                - - ~>
         | 
| 27 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 28 | 
            +
                    hash: 3
         | 
| 29 | 
            +
                    segments: 
         | 
| 30 | 
            +
                    - 1
         | 
| 31 | 
            +
                    - 7
         | 
| 32 | 
            +
                    - 4
         | 
| 33 | 
            +
                    version: 1.7.4
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              version_requirements: *id001
         | 
| 36 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 37 | 
            +
              name: excon
         | 
| 38 | 
            +
              prerelease: false
         | 
| 39 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 40 | 
            +
                none: false
         | 
| 41 | 
            +
                requirements: 
         | 
| 42 | 
            +
                - - ~>
         | 
| 43 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 44 | 
            +
                    hash: 43
         | 
| 45 | 
            +
                    segments: 
         | 
| 46 | 
            +
                    - 0
         | 
| 47 | 
            +
                    - 15
         | 
| 48 | 
            +
                    - 4
         | 
| 49 | 
            +
                    version: 0.15.4
         | 
| 50 | 
            +
              type: :runtime
         | 
| 51 | 
            +
              version_requirements: *id002
         | 
| 52 | 
            +
            description: A Ruby API library for the Mandrill email as a service platform.
         | 
| 53 | 
            +
            email: community@mandrill.com
         | 
| 54 | 
            +
            executables: []
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            extensions: []
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            extra_rdoc_files: []
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            files: 
         | 
| 61 | 
            +
            - lib/mandrill.rb
         | 
| 62 | 
            +
            - lib/mandrill/api.rb
         | 
| 63 | 
            +
            - lib/mandrill/errors.rb
         | 
| 64 | 
            +
            homepage: https://bitbucket.org/mailchimp/mandrill-api-ruby/
         | 
| 65 | 
            +
            licenses: []
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            post_install_message: 
         | 
| 68 | 
            +
            rdoc_options: []
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            require_paths: 
         | 
| 71 | 
            +
            - lib
         | 
| 72 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 73 | 
            +
              none: false
         | 
| 74 | 
            +
              requirements: 
         | 
| 75 | 
            +
              - - ">="
         | 
| 76 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 77 | 
            +
                  hash: 3
         | 
| 78 | 
            +
                  segments: 
         | 
| 79 | 
            +
                  - 0
         | 
| 80 | 
            +
                  version: "0"
         | 
| 81 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 82 | 
            +
              none: false
         | 
| 83 | 
            +
              requirements: 
         | 
| 84 | 
            +
              - - ">="
         | 
| 85 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 86 | 
            +
                  hash: 3
         | 
| 87 | 
            +
                  segments: 
         | 
| 88 | 
            +
                  - 0
         | 
| 89 | 
            +
                  version: "0"
         | 
| 90 | 
            +
            requirements: []
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            rubyforge_project: 
         | 
| 93 | 
            +
            rubygems_version: 1.8.24
         | 
| 94 | 
            +
            signing_key: 
         | 
| 95 | 
            +
            specification_version: 3
         | 
| 96 | 
            +
            summary: A Ruby API library for the Mandrill email as a service platform.
         | 
| 97 | 
            +
            test_files: []
         | 
| 98 | 
            +
             |