ruby-cakemail 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.
@@ -0,0 +1,81 @@
1
+ # Template is HTML or Text based content that may be stored for later use.
2
+ module CakeMail
3
+ module API
4
+ class ClassTemplate < CakeMail::ServiceClass
5
+ method :name => "Create", :requires => [ :name, :user_key ], :optional => [ :type, :message ]
6
+ method :name => "Delete", :requires => [ :template_id, :user_key ]
7
+ method :name => "GetList", :requires => [ :user_key ], :optional => [ :type, :limit, :offset, :count ]
8
+ method :name => "GetInfo", :requires => [ :template_id, :user_key ]
9
+ method :name => "SetInfo", :requires => [ :template_id, :user_key ], :optional => [ :name, :message, :type ]
10
+ end
11
+ end
12
+
13
+ class Template
14
+ attr_reader :id, :client_id
15
+ attr_accessor :name, :message, :type
16
+
17
+ def initialize(id, user)
18
+ @user = user
19
+ @id = id
20
+ get_info
21
+ end
22
+ # Deletes a template.
23
+ def delete
24
+ @user.session.request("CakeMail::API::ClassTemplate", "Delete", { :template_id => @id, :user_key => @user.user_key })
25
+ self.freeze
26
+ end
27
+ # Returns information about a template.
28
+ def get_info(id = @id)
29
+ res = @user.session.request("CakeMail::API::ClassTemplate", "GetInfo", { :template_id => id, :user_key => @user.user_key })
30
+ @id = res['id'].first
31
+ @client_id = res['client_id'].first
32
+ @name = res['name'].first
33
+ @type = res['type'].first
34
+ @message = res['message'].first
35
+ end
36
+
37
+ def save
38
+ self.setinfo
39
+ end
40
+ # Modifies a template.
41
+ def set_info
42
+ args = { :template_id => @id, :user_key => @user.user_key }
43
+ args[:name] = @name unless @name.nil?
44
+ args[:message] = @message unless @message.nil?
45
+ args[:type] = @type unless @type
46
+ res = @user.session.request("CakeMail::API::ClassTemplate", "SetInfo", args)
47
+ end
48
+
49
+ class << self
50
+ # Creates a new template.
51
+ #
52
+ # Arguments :
53
+ # * options = { :user => required, :name => required, :type => optional, :message => optional }
54
+ def create(args)
55
+ raise ArgumentError if args.nil? or args[:user].nil?
56
+ options = { :name => name, :user_key => args[:user].user_key }
57
+ options[:type] = args[:type] unless args[:type].nil?
58
+ options[:message] = args[:message] unless args[:message].nil?
59
+ res = args[:user].session.request("CakeMail::API::ClassTemplate", "Create", options)
60
+ Template.new(res['id'].first, args[:user])
61
+ end
62
+ # Retrieves the list of template.
63
+ #
64
+ # Arguments :
65
+ # * args = { :user => required, :count => optional, :type => optional, :limit => optional, :offset => optional }
66
+ def get_list(args)
67
+ raise ArgumentError if args.nil? or args[:user].nil?
68
+ options = { :user_key => args[:user].user_key }
69
+ options[:type] = args[:type] unless args[:status].nil?
70
+ options[:limit] = args[:limit] unless args[:limit].nil?
71
+ options[:offset] = args[:offset] unless args[:offset].nil?
72
+ options[:count] = args[:count] unless args[:count].nil?
73
+ res = args[:user].session.request("CakeMail::API::ClassTemplate", "GetList", options)
74
+ if !args[:count].nil?
75
+ return res['count']
76
+ end
77
+ return res['template']
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,98 @@
1
+ # A Trigger in an individual email that is sent to a recipient following a specific action.
2
+ module CakeMail
3
+ module API
4
+ class ClassTrigger < CakeMail::ServiceClass
5
+ method :name => "Create", :requires => [ :name, :list_id, :user_key ], :optional => [ :encoding ]
6
+ method :name => "GetInfo", :requires => [ :trigger_id, :user_key ]
7
+ method :name => "GetList", :requires => [ :user_key ], :optional => [ :status, :action, :list_id, :parent_id, :limit, :offset, :count ]
8
+ method :name => "SetInfo", :requires => [ :trigger_id, :user_key ], :optional => [ :status, :encoding, :action, :name,
9
+ :delay, :parent_id, :send_to, :subject, :sender_name, :sender_email, :html_message, :text_message ]
10
+ end
11
+ end
12
+
13
+ class Trigger
14
+ attr_reader :id
15
+ attr_accessor :status, :encoding, :action, :name, :delay, :parent_id, :send_to, :subject, :sender_name, :sender_email,
16
+ :html_message, :text_message
17
+
18
+ def initialize(id, user)
19
+ @user = user
20
+ @id = id
21
+ get_info
22
+ end
23
+ # Returns information about a trigger.
24
+ def get_info(id = @id)
25
+ res = @user.session.request("CakeMail::API::ClassTrigger", "GetInfo", { :trigger_id => id, :user_key => @user.user_key })
26
+ @id = res['id'].first
27
+ @status = res['status'].first
28
+ @encoding = res['encoding'].first
29
+ @action = res['action'].first
30
+ @name = res['name'].first
31
+ @description = res['description'].first
32
+ @delay = res['delay'].first
33
+ @parent_id = res['list_id'].first
34
+ @send_to = res['send_to'].first
35
+ @subject = res['subject'].first
36
+ @sender_name = res['sender_name'].first
37
+ @sender_email = res['sender_email'].first
38
+ @html_message = res['html_message'].first
39
+ @text_message = res['text_message'].first
40
+ end
41
+
42
+ def save
43
+ self.setinfo
44
+ end
45
+ # Returns information about a trigger.
46
+ def set_info
47
+ args = { :trigger_id => id, :user_key => @user.user_key }
48
+ args[:status] = status unless status.nil?
49
+ args[:encoding] = encoding unless encoding.nil?
50
+ args[:action] = action unless action.nil?
51
+ args[:name] = name unless name.nil?
52
+ args[:description] = description unless description.nil?
53
+ args[:delay] = delay unless delay.nil?
54
+ args[:parent_id] = parent_id unless parent_id.nil?
55
+ args[:send_to] = send_to unless send_to.nil?
56
+ args[:subject] = subject unless subject.nil?
57
+ args[:sender_name] = sender_name unless sender_name.nil?
58
+ args[:html_message] = html_message unless html_message.nil?
59
+ args[:text_message] = text_message unless text_message.nil?
60
+ res = @user.session.request("CakeMail::API::ClassTrigger", "SetInfo", args)
61
+ end
62
+
63
+ class << self
64
+ # Creates a trigger.
65
+ #
66
+ # Arguments :
67
+ # * args = { :user => required, :name => required, :list_id => required, :encoding => optional, :description => optional }
68
+ def create(args)
69
+ raise ArgumentError if args.nil? or args[:user].nil? or args[:name].nil? or args[:list_id]
70
+ options = { :list_id => args[:list_id], :name => args[:name], :user_key => args[:user].user_key }
71
+ options[:encoding] = args[:encoding] unless args[:encoding].nil?
72
+ options[:description] = args[:description] unless args[:description].nil?
73
+ res = args[:user].session.request("CakeMail::API::ClassTrigger", "Create", options)
74
+ Trigger.new(res['id'].first, args[:user])
75
+ end
76
+ # Retrieves the list of triggers.
77
+ #
78
+ # * args = { :user => required, :status => optional, :action => optional, :list_id => optional, :parent_id => optional,
79
+ # :limit => optional, :offset => optional, :count => optional }
80
+ def get_list(args)
81
+ raise ArgumentError if args.nil? or args[:user].nil?
82
+ options = { :user_key => args[:user].user_key }
83
+ options[:status] = args[:status] unless args[:status].nil?
84
+ options[:action] = args[:action] unless args[:action].nil?
85
+ options[:list_id] = args[:list_id] unless args[:list_id].nil?
86
+ options[:parent_id] = args[:parent_id] unless args[:parent_id].nil?
87
+ options[:limit] = args[:limit] unless args[:limit].nil?
88
+ options[:offset] = args[:offset] unless args[:offset].nil?
89
+ options[:count] = args[:count] unless args[:count].nil?
90
+ res = args[:user].session.request("CakeMail::API::ClassTrigger", "GetList", options)
91
+ if !args[:count].nil?
92
+ return res['count'].first
93
+ end
94
+ return res['trigger']
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,179 @@
1
+ # A User is an individual associated to a Client. A User has access to a single Account.
2
+ #
3
+ # Most API calls require the User Key. This key (not to be confused with the Interface Key) can be obtained using the method "Login" by
4
+ # supplying the user's email and password.
5
+ module CakeMail
6
+ module API
7
+ class ClassUser < CakeMail::ServiceClass
8
+ method :name => "Create", :requires => [ :email, :first_name, :last_name, :password, :password_confirmation, :user_key ],
9
+ :optional => [ :language, :mobile_phone, :office_phone, :timezone_id, :title ]
10
+ method :name => "GetInfo", :requires => [ :user_key ], :optional => [ :user_id ]
11
+ method :name => "GetList", :requires => [ :status, :user_key ], :optional => [ :count, :limit, :offset ]
12
+ method :name => "Login", :requires => [ :email, :password ]
13
+ method :name => "PasswordRecovery", :requires => [ :email, :subject, :text ], :optional => [ :encoding, :headers, :html ]
14
+ method :name => "SetInfo", :requires => [ :user_id, :user_key ], :optional => [ :email, :password, :password_confirmation,
15
+ :status, :first_name, :last_name, :title, :language, :timezone_id, :office_phone, :mobile_phone, :wysiwyg ]
16
+ end
17
+ end
18
+
19
+ class User
20
+ attr_reader :user_id, :client_id, :created_on, :timezone, :timezone_id, :last_activity, :groups, :session
21
+ attr_accessor :email, :first_name, :language, :last_name, :mobile_phone, :office_phone, :password, :status, :title, :user_key, :wysiwyg
22
+
23
+ def initialize(session, args)
24
+ raise ArgumentError if session.nil? or args[:id].nil?
25
+ @session = session
26
+ @client_id = args[:client_id].to_i
27
+ @client_key = args[:client_key]
28
+ @id = args[:id].to_i
29
+ @user_key = args[:user_key]
30
+ get_info
31
+ end
32
+ # Creates a user.
33
+ def create(email, password, first_name, last_name, title = nil, language = 'en_US', timezone_id = 152, office_phone = nil,
34
+ mobile_phone = nil)
35
+ args = { :email => email, :password => password, :password_confirmation => password, :first_name => first_name,
36
+ :language => language, :last_name => last_name,
37
+ :timezone_id => timeezone_id, :user_key => @user_key }
38
+ args[:title] = title unless title.nil?
39
+ args[:office_phone] = office_phone unless office_phone.nil?
40
+ args[:mobile_phone] = mobile_phone unless mobile_phone.nil?
41
+ res = @session.request("CakeMail::API::ClassUser", "Create", args)
42
+ user = getinfo(res['user_id'].first.to_i)
43
+ user.user_key = res['user_key'].first
44
+ return user
45
+ end
46
+ # Retrieves informations about a user.
47
+ def get_info(id = @id)
48
+ res = @session.request("CakeMail::API::ClassUser", "GetInfo", { :user_id => id, :user_key => @user_key })
49
+ email = res['email'].first
50
+ password = res['password'].first
51
+ status = res['status'].first
52
+ created_on = res['created_on'].first
53
+ last_activity = res['last_activity'].first
54
+ first_name = res['first_name'].first
55
+ last_name = res['last_name'].first
56
+ title = res['title'].first
57
+ language = res['language'].first,
58
+ timezone = res['timezone'].first
59
+ timezone_id = res['timezone_id'].first,
60
+ office_phone = res['office_phone'].first
61
+ mobile_phone = res['mobile_phone'].first
62
+ wysiwyg = res['wysiwyg'].first
63
+ group_ids = res['group_id']
64
+ end
65
+ # Returns campaign object.
66
+ def campaign(id)
67
+ return CakeMail::Campaign.new(id, self)
68
+ end
69
+ # Creates new campaign.
70
+ def campaign_new(name)
71
+ return CakeMail::Campaign.create(name, self)
72
+ end
73
+ # Returns client object.
74
+ def client(id)
75
+ return CakeMail::Client.new(id, self)
76
+ end
77
+ # Creates a new client.
78
+ #
79
+ # Arguments :
80
+ # * args = { :company_name => required, :admin_email => required, :admin_first_name => required,
81
+ # :admin_last_name => required, :admin_password => required, :contact_email => required, :contact_first_name => required,
82
+ # :contact_last_name => required, :contact_password => required, :parent_id => optional, :currency => optional, :address1 => optional,
83
+ # :address2 => optionall, :city => optional, :province_id => optional, :country_id => optional, :postal_code => optional,
84
+ # :website => optional, :phone => optional, :fax => optional, :admin_title => optional, :admin_office_phone => required,
85
+ # :admin_mobile_phone => optional, :admin_language => optional, :contact_title => optional, :contact_language => optional,
86
+ # :contact_timezone_id => optional, :contact_office_phone => optional, :contact_mobile_phone => optional }
87
+ def client_new(args)
88
+ raise ArgumentError if args.nil? or args[:user].nil? or args[:company_name].nil? or args[:admin_email].nil? or
89
+ args[:admin_first_name].nil? or args[:admin_last_name].nil? or args[:admin_password].nil? or args[:contact_email].nil? or
90
+ args[:contact_first_name].nil? or args[:contact_last_name].nil? or args[:contact_password].nil?
91
+ args[:user] = self
92
+ return CakeMail::Client.create(args)
93
+ end
94
+ # Returns a list.
95
+ def list(id)
96
+ return CakeMail::List.new(id, self)
97
+ end
98
+ # Creates a list.
99
+ #
100
+ # Arguments :
101
+ # * args = { :name => required, :sender_name => required, :sender_email, :data => optional/custom }
102
+ # Custom argument:
103
+ # * :data => [ { :type => "text", :value => "city" }, { :type => "integer", :value => "age" }, ... ]
104
+ def list_new(args)
105
+ raise ArgumentError if args.nil? or args[:name].nil? or args[:sender_email].nil? or args[:sender_name].nil?
106
+ args[:user] = self
107
+ return CakeMail::List.create(args)
108
+ end
109
+ # Returns a group.
110
+ def group(id)
111
+ return CakeMail::Group.new(id, self)
112
+ end
113
+ # Creates a new group.
114
+ def group_new(name, client_id = nil)
115
+ args = { :user => self, :name => name }
116
+ args[:client_id] = client_id unless client_id.nil?
117
+ return CakeMail::Group.create(args)
118
+ end
119
+ # Returns a template.
120
+ def template(id)
121
+ return CakeMail::Template.new(id, self)
122
+ end
123
+ # Creates a new template.
124
+ #
125
+ # Arguments :
126
+ # * options = { :name => required, :type => optional, :message => optional }
127
+ def template_new(args)
128
+ args[:user] = self
129
+ return CakeMail::Template.create(args)
130
+ end
131
+ # Returns a trigger.
132
+ def trigger(id)
133
+ return CakeMail::Trigger.new(id, self)
134
+ end
135
+ # Creates a new trigger
136
+ #
137
+ # Arguments :
138
+ # * args = { :name => required, :list_id => required, :encoding => optional, :description => optional }
139
+ def trigger_new(args)
140
+ raise ArgumentError if args.nil? or args[:name].nil? or args[:list_id]
141
+ args[:user] = self
142
+ return CakeMail::Trigger.create(args)
143
+ end
144
+
145
+ def save
146
+ self.setinfo
147
+ end
148
+ # Modifies a user.
149
+ def set_info
150
+ args = { :user_id => @id, :user_key => @user_key }
151
+ args[:email] = @email unless @email.nil?
152
+ args[:password] = @password unless @password.nil?
153
+ args[:password_confirmation] = @password unless @password.nil?
154
+ args[:status] = @status unless @status.nil?
155
+ args[:first_name] = @first_name unless @first_name.nil?
156
+ args[:last_name] = @last_name unless @last_name.nil?
157
+ args[:title] = @title unless @title.nil?
158
+ args[:language] = @language unless @language.nil?
159
+ args[:timezone_id] = @timezone_id unless @timezone_id.nil?
160
+ args[:office_phone] = @office_phone unless @office_phone.nil?
161
+ args[:mobile_phone] = @mobile_phone unless @mobile_phone.nil?
162
+ args[:wysiwyg] = @wysiwyg unless @wysiwyg.nil?
163
+ @session.request("CakeMail::API::ClassUser", "SetInfo", args )
164
+ end
165
+
166
+ class << self
167
+ # Returns a logged in user object.
168
+ def login(session, email, password)
169
+ res = session.request("CakeMail::API::ClassUser", "Login", { :email => email, :password => password })
170
+ User.new(session, { :client_id => res['client_id'].first, :client_key => res['client_key'].first,
171
+ :id => res['user_id'].first, :user_key => res['user_key'].first })
172
+ end
173
+ # Sends by email the user's password.
174
+ def password_recovery(email, subject = "CakeMail Password Recovery", text = "Your password is: ")
175
+ session.request("CakeMail::API::ClassUser", "PasswordRecovery", { :email => email, :subject => subject, :text => text })
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,89 @@
1
+ module Crypt
2
+ module ECB
3
+ def padded_last_block(last_block)
4
+ block = last_block || ''
5
+ buffer = block.split('')
6
+ remainingMessageBytes = buffer.length
7
+ remainingMessageBytes.upto(block_size()-1) { buffer << 0.chr }
8
+ return buffer.join('')
9
+ end
10
+
11
+ def unpadded_last_block(last_block)
12
+ block = last_block || ''
13
+ chars = block.split('')
14
+ buffer = []
15
+ chars.each do |c|
16
+ if c != 0
17
+ buffer << c
18
+ else
19
+ break
20
+ end
21
+ end
22
+ return buffer.join('')
23
+ end
24
+
25
+ def encrypt_stream(plainStream, cryptStream)
26
+ while ((block = plainStream.read(block_size())) && (block.length == block_size()))
27
+ cryptStream.write(encrypt_block(block))
28
+ end
29
+ cryptStream.write(encrypt_block(padded_last_block(block)))
30
+ end
31
+
32
+ def decrypt_stream(cryptStream, plainStream)
33
+ while (block = cryptStream.read(block_size()))
34
+ plainText = decrypt_block(block)
35
+ plainStream.write(plainText) unless cryptStream.eof?
36
+ end
37
+ plainStream.write(unpadded_last_block(plainText))
38
+ end
39
+
40
+ def carefully_open_file(filename, mode)
41
+ begin
42
+ aFile = File.new(filename, mode)
43
+ rescue
44
+ puts "Sorry. There was a problem opening the file <#{filename}>."
45
+ aFile.close() unless aFile.nil?
46
+ raise
47
+ end
48
+ return(aFile)
49
+ end
50
+
51
+ def encrypt_file(plainFilename, cryptFilename)
52
+ plainFile = carefully_open_file(plainFilename, 'rb')
53
+ cryptFile = carefully_open_file(cryptFilename, 'wb+')
54
+ encrypt_stream(plainFile, cryptFile)
55
+ plainFile.close unless plainFile.closed?
56
+ cryptFile.close unless cryptFile.closed?
57
+ end
58
+
59
+ def decrypt_file(cryptFilename, plainFilename)
60
+ cryptFile = carefully_open_file(cryptFilename, 'rb')
61
+ plainFile = carefully_open_file(plainFilename, 'wb+')
62
+ decrypt_stream(cryptFile, plainFile)
63
+ cryptFile.close unless cryptFile.closed?
64
+ plainFile.close unless plainFile.closed?
65
+ end
66
+
67
+ def encrypt_string(plainText)
68
+ plainStream = StringIO.new(plainText)
69
+ cryptStream = StringIO.new('')
70
+ encrypt_stream(plainStream, cryptStream)
71
+ cryptText = cryptStream.string
72
+ return(cryptText)
73
+ end
74
+
75
+ def decrypt_string(cryptText)
76
+ cryptStream = StringIO.new(cryptText)
77
+ plainStream = StringIO.new('')
78
+ decrypt_stream(cryptStream, plainStream)
79
+ plainText = plainStream.string
80
+ return(plainText)
81
+ end
82
+ end
83
+ end
84
+
85
+ module Crypt
86
+ class Blowfish
87
+ include Crypt::ECB
88
+ end
89
+ end