mailgun_api 0.0.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.
Files changed (4) hide show
  1. checksums.yaml +15 -0
  2. data/lib/mailgun/list.rb +130 -0
  3. data/lib/mailgun_api.rb +50 -0
  4. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2JmZGQ4YzhkNTNhNmRkNTYxZjI5ZjE2MTczM2IzNjY1N2M2Mzg5Yw==
5
+ data.tar.gz: !binary |-
6
+ NDIzYjc1M2MyZWY4MjRmYjFhYjZkMDJjMTA3M2RiMDFmNTI3NjRhMg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OTM3NDU4YWViYTZjYWU4MTJjNTY4NWExZGM1NjEzMDhlZWU5OTIwNWQwMDMx
10
+ Yzk2Y2E3MWNmZGFlNjRjZmQyMzMzM2Y0MjM4MTFjZjQzOTFkNjdhMDk4Mjc2
11
+ MjJhMzY1YzEzNWQ0NjI3Mzk5NmQ2MTBhNzU3ZTQzMDc1ZDA5MGY=
12
+ data.tar.gz: !binary |-
13
+ NjU0YzNjMTVmNjAyYTYyZmI0ZGIxNWZmOGNiNGQ3ZGRkYWRkZTY4MzY3Njc1
14
+ NmJlNDI3NzMzODQ3MmU0YjNkMDIwN2U2NDcxMWExOWUyOTYwOWFjMTIwZjc1
15
+ MWM0YmRmYjkzOTQ3Mjc5OWY3OTBhNzg2ZWQ2MTdhNzE2NzEyNzU=
@@ -0,0 +1,130 @@
1
+ require 'pry'
2
+
3
+ module Gun
4
+
5
+ # Mailing List functionality
6
+ # Refer http://documentation.mailgun.net/api-mailinglists.html for optional parameters
7
+
8
+
9
+ class List
10
+ attr_accessor :properties
11
+
12
+ # Used internally
13
+ def initialize(mailgun)
14
+ @mailgun = mailgun
15
+ end
16
+
17
+ # List all mailing lists
18
+ def list(options={})
19
+ @mailgun.response = Mailgun.fire(:get, list_url, options)["items"] || []
20
+ end
21
+
22
+ # List a single mailing list by a given address
23
+ def find(list_name)
24
+ @mailgun.response = Mailgun.fire(:get, list_url(list_name))
25
+ @properties = @mailgun.response["list"]
26
+ end
27
+
28
+ # Create a mailing list with a given address
29
+ def create(list_name, options={})
30
+ params = {:address => list_name}
31
+ @mailgun.response = Mailgun.fire(:post, list_url, params.merge(options))
32
+ end
33
+
34
+ # Update a mailing list with a given address
35
+ # with an optional new address, name or description
36
+ def update(params={})
37
+ return unless !params.empty?
38
+ @mailgun.response = Mailgun.fire(:put, list_url(self.address), params)
39
+ end
40
+
41
+ # Deletes a mailing list with a given address
42
+ def delete
43
+ @mailgun.response = Mailgun.fire(:delete, list_url(self.address))
44
+ end
45
+
46
+
47
+ def members
48
+ @mailgun.response = Mailgun.fire(:get, list_url(self.address) + "/members")["items"] || []
49
+ end
50
+
51
+
52
+ def stats
53
+ @mailgun.response = Mailgun.fire(:get, list_url(self.address) + "/stats")
54
+ end
55
+
56
+
57
+ def add_member(params={})
58
+
59
+ if params.class == String
60
+ add_member_by_hash(params)
61
+ end
62
+
63
+ if params.class == Hash
64
+ add_member_by_hash(params)
65
+ end
66
+
67
+ if params.class == Array
68
+ add_members(params)
69
+ end
70
+
71
+
72
+ end
73
+
74
+
75
+ def update_member(address, params={})
76
+ return unless !params.empty?
77
+ @mailgun.response = Mailgun.fire(:put, list_url(self.address) + "/members/#{address}", params)
78
+ end
79
+
80
+
81
+ def find_member(address)
82
+ @mailgun.response = Mailgun.fire(:get, list_url(self.address) + "/members/#{address}")
83
+ end
84
+
85
+
86
+ def remove_member(address)
87
+ @mailgun.response = Mailgun.fire(:delete, list_url(self.address) + "/members/#{address}")
88
+ end
89
+
90
+
91
+ def method_missing(name, *args)
92
+
93
+ if properties.has_key?(name.to_s)
94
+ @properties[name.to_s]
95
+ end
96
+ end
97
+
98
+
99
+
100
+
101
+ private
102
+
103
+ def add_member_by_name(params)
104
+ address = params
105
+ params = {}
106
+ params[:address] = address
107
+ @mailgun.response = Mailgun.fire(:post, list_url(self.address) + "/members", params)
108
+ end
109
+
110
+ def add_member_by_hash(params)
111
+ @mailgun.response = Mailgun.fire(:post, list_url(self.address) + "/members", params)
112
+ end
113
+
114
+
115
+ def add_members(members)
116
+ params = {}
117
+ params['members'] = members.to_json
118
+ @mailgun.response = Mailgun.fire(:post, list_url(self.address) + "/members.json", params)
119
+ end
120
+
121
+
122
+
123
+
124
+ # Helper method to generate the proper url for Mailgun mailbox API calls
125
+ def list_url(address=nil)
126
+ "#{@mailgun.api_url}/lists#{'/' + address if address}"
127
+ end
128
+
129
+ end
130
+ end
@@ -0,0 +1,50 @@
1
+ require "rest-client"
2
+ require "json"
3
+ require "mailgun/list"
4
+
5
+ class Mailgun
6
+
7
+ attr_accessor :host, :protocol, :api_version, :test_mode, :api_key, :domain, :response
8
+
9
+ def initialize(params={})
10
+ @host = params.fetch(:host, "api.mailgun.net")
11
+ @protocol = params.fetch(:protocol, "https")
12
+ @api_version = params.fetch(:api_version, "v2")
13
+ @test_mode = params.fetch(:test_mode, false)
14
+ @api_key = params.fetch(:api_key) { raise ArgumentError.new(":api_key is a required argument to initialize Mailgun") if api_key.nil?}
15
+ @domain = params.fetch(:domain, nil)
16
+ end
17
+
18
+ def find_list(list_name)
19
+ list = Gun::List.new(self)
20
+ list.find("#{list_name}@#{domain}")
21
+ list
22
+ end
23
+
24
+ def lists
25
+ Gun::List.new(self).list
26
+ end
27
+
28
+ def create_list(list_name, options={})
29
+ Gun::List.new(self).create("#{list_name}@#{domain}", options)
30
+ end
31
+
32
+
33
+ # Returns the api url used in all Mailgun API calls
34
+ def api_url
35
+ "#{protocol}://api:#{api_key}@#{host}/#{api_version}"
36
+ end
37
+
38
+
39
+ def self.fire(method, url, parameters={})
40
+
41
+ parameters = {:params => parameters} if method == :get
42
+
43
+ # puts method
44
+ # puts url
45
+ # puts parameters
46
+
47
+ return JSON(RestClient.send(method, url, parameters))
48
+ end
49
+
50
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mailgun_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michael Irey
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A library for interfacing with the Mailgun API
14
+ email: michael.irey@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/mailgun_api.rb
20
+ - lib/mailgun/list.rb
21
+ homepage: http://rubygems.org/gems/mailgun_api
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.1.9
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Library for the Mailgun API
45
+ test_files: []