lettr 1.1.0 → 1.1.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.
data/init.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  if defined? ActionMailer::Base
2
2
  if defined? TMail
3
3
  ActionMailer::Base.send(:include, Lettr::ActionMailer)
4
- elsif defined? Mail
5
- require 'lettr/mail_extensions'
6
- ActionMailer::Base.add_delivery_method :lettr, Mail::Lettr
7
4
  end
8
5
  end
@@ -1,98 +1,66 @@
1
1
  # encoding: utf-8
2
2
  require 'active_support'
3
+ require 'rest-client'
3
4
 
4
5
  module Lettr
5
6
 
6
- require 'lettr/base'
7
- require 'lettr/resource'
8
- require 'lettr/recipient'
9
- require 'lettr/deliverable'
10
- require 'lettr/object_converter'
11
- require 'lettr/api_mailing'
12
- require 'lettr/delivery'
13
- require 'lettr/collection'
14
- require 'lettr/rendered_mailing'
15
- require 'lettr/whitelist'
16
- require 'lettr/action_mailer'
17
- require 'lettr/mailer'
18
- require 'lettr/mail_extensions'
7
+ autoload :Base, 'lettr/base'
8
+ autoload :Resource, 'lettr/resource'
9
+ autoload :Recipient, 'lettr/recipient'
10
+ autoload :Deliverable, 'lettr/deliverable'
11
+ autoload :ObjectConverter, 'lettr/object_converter'
12
+ autoload :ApiMailing, 'lettr/api_mailing'
13
+ autoload :Delivery, 'lettr/delivery'
14
+ autoload :Collection, 'lettr/collection'
15
+ autoload :RenderedMailing, 'lettr/rendered_mailing'
16
+ autoload :Whitelist, 'lettr/whitelist'
17
+ autoload :ActionMailer, 'lettr/action_mailer'
18
+ autoload :Mailer, 'lettr/mailer'
19
+ autoload :MailExtensions, 'lettr/mail_extensions'
20
+ #require 'lettr/mail_extensions'
21
+ #require 'lettr/railtie' if defined? Rails::Railtie
19
22
 
20
23
  mattr_accessor :host
21
24
  mattr_accessor :attributes
22
25
  mattr_accessor :protocol
23
- mattr_accessor :api_mailings
24
26
  mattr_accessor :api_key
25
27
 
26
28
  self.attributes ||= %w{ gender firstname lastname street ccode pcode city }
27
- self.protocol ||= 'http'
28
- self.host ||= 'www.newsletterboy.de'
29
- self.api_mailings = {}
29
+ self.protocol ||= 'https'
30
+ self.host ||= 'lettr.de'
30
31
 
31
32
  def self.credentials=(credentials)
32
- Base.user = credentials[:user]
33
- Base.pass = credentials[:pass]
33
+ Lettr::Base.user = credentials[:user]
34
+ Lettr::Base.pass = credentials[:pass]
34
35
  end
35
36
 
36
- def self.subscribe(recipient)
37
- raise 'Object muss über das Attribut :email verfügen.' unless recipient.respond_to? :email
38
- rec = Recipient.new recipient.email
39
- attributes.each do |attribute|
40
- if recipient.respond_to? attribute
41
- rec.send("#{attribute}=", recipient.send(attribute))
42
- end
43
- end
44
- rec.approved = true
45
- unless rec.save
46
- raise rec.errors.join(' ')
37
+ class << self
38
+ %w{ subscribe unsubscribe }.each do |meth|
39
+ define_method meth do |*args|
40
+ Lettr::Base.send(meth, *args)
47
41
  end
48
- rec
49
- end
50
-
51
- def self.unsubscribe(email)
52
- Recipient.delete_by_email(email)
53
42
  end
54
-
55
- def self.load_api_mailing_or_fail_loud *args
56
- identifier = args[0]
57
- api_mailing = self.api_mailings[identifier] ||= ApiMailing.find(identifier)
58
- options = args[1]
59
- api_mailing.delivery_options = options
60
- return api_mailing
61
- rescue RestClient::ResourceNotFound => e
62
- _create_rendered_mail( *args )
63
- end
64
-
65
- def self._check_options_for_rendered_mail! options
66
- [:subject, :recipient].each do |opt|
67
- raise ArgumentError.new ":#{opt} is required" unless options.has_key?( opt )
68
- end
69
- raise ArgumentError.new ":html or :text is required" unless (options.has_key?( :text ) || options.has_key?( :html ))
70
- end
71
-
72
- def self._create_rendered_mail *args
73
- _check_options_for_rendered_mail! args[1]
74
- mailing = RenderedMailing.find args[0].to_s
75
- mailing.attributes = args[1].merge(:identifier => args[0].to_s)
76
- mailing
77
- rescue RestClient::ResourceNotFound
78
- mailing = RenderedMailing.new args[1].merge(:identifier => args[0].to_s)
79
- unless mailing.save
80
- raise ArgumentError.new mailing.errors.join(' ')
81
- end
82
- mailing
83
- end
84
-
85
- def self.api_mailings
86
- @@api_mailings
87
43
  end
88
44
 
89
45
  def self.method_missing *args, &block
90
46
  if args.first.to_s =~ /^to_/
91
47
  super
92
48
  end
93
- load_api_mailing_or_fail_loud *args
49
+ Lettr::Base.load_api_mailing_or_fail_loud *args
94
50
  rescue RestClient::ResourceNotFound
95
51
  super
96
52
  end
97
53
 
98
54
  end
55
+
56
+ if defined? Rails::Railtie
57
+ class Lettr::Railtie < Rails::Railtie
58
+
59
+ initializer 'lettr.init' do
60
+ ActiveSupport.on_load(:action_mailer) do
61
+ ActionMailer::Base.add_delivery_method :lettr, Lettr::MailExtensions::Lettr
62
+ end
63
+ end
64
+
65
+ end
66
+ end
@@ -3,7 +3,7 @@ module Lettr::ActionMailer
3
3
  private
4
4
 
5
5
  def perform_delivery_lettr mail
6
- Mail::Lettr.new(:template => @template).deliver! mail
6
+ Lettr::MailExtensions::Lettr.new(:template => @template).deliver! mail
7
7
  end
8
8
 
9
9
  end
@@ -1,4 +1,4 @@
1
- Lettr::ApiMailing = Struct.new(:identifier, :subject, :variables) do
1
+ class Lettr::ApiMailing < Struct.new(:identifier, :subject, :variables)
2
2
  include Lettr::Resource
3
3
  include Lettr::ObjectConverter
4
4
  include Lettr::Deliverable
@@ -1,42 +1,103 @@
1
- class Lettr::Base
2
- DEFAULT_HEADERS = { :accept => :json }
1
+ # encoding: utf-8
2
+ module Lettr
3
+ class Base
4
+ DEFAULT_HEADERS = { :accept => :json }
3
5
 
4
- cattr_accessor :site, :user, :pass, :content_type
5
- attr_reader :client
6
+ cattr_accessor :site, :user, :pass, :content_type, :api_mailings
7
+ attr_reader :client
6
8
 
7
- def initialize
8
- resource_args = [ self.class.site_url ]
9
- resource_args += [self.class.user, self.class.pass] unless Lettr.api_key
10
- @client = RestClient::Resource.new *resource_args
11
- end
9
+ self.api_mailings = {}
12
10
 
13
- def self.site_url
14
- "#{Lettr.protocol}://#{Lettr.host}/"
15
- end
11
+ def initialize
12
+ resource_args = [ self.class.site_url ]
13
+ resource_args += [self.class.user, self.class.pass] unless Lettr.api_key
14
+ @client = RestClient::Resource.new *resource_args
15
+ end
16
16
 
17
- def save object
18
- path = object.collection_path
19
- payload = object.to_payload
20
- payload.merge! :files => object.files if object.respond_to?(:files) && object.files
21
- client[path].post(payload, headers)
22
- end
17
+ def self.site_url
18
+ "#{Lettr.protocol}://#{Lettr.host}/"
19
+ end
23
20
 
24
- def destroy object
25
- client[object.path].delete headers
26
- end
21
+ def save object
22
+ path = object.collection_path
23
+ payload = object.to_payload
24
+ payload.merge! :files => object.files if object.respond_to?(:files) && object.files
25
+ client[path].post(payload, headers)
26
+ end
27
27
 
28
- def find path
29
- ActiveSupport::JSON.decode(client[path].get headers)
30
- end
28
+ def destroy object
29
+ client[object.path].delete headers
30
+ end
31
31
 
32
- def [] path
33
- client[path]
34
- end
32
+ def find path
33
+ ActiveSupport::JSON.decode(client[path].get headers)
34
+ end
35
+
36
+ def [] path
37
+ client[path]
38
+ end
39
+
40
+ def headers
41
+ headers = DEFAULT_HEADERS
42
+ headers.merge! 'X-Lettr-API-key' => Lettr.api_key if Lettr.api_key
43
+ headers
44
+ end
45
+
46
+ def self.subscribe(recipient)
47
+ raise 'Object muss über das Attribut :email verfügen.' unless recipient.respond_to? :email
48
+ rec = Lettr::Recipient.new recipient.email
49
+ Lettr.attributes.each do |attribute|
50
+ if recipient.respond_to? attribute
51
+ rec.send("#{attribute}=", recipient.send(attribute))
52
+ end
53
+ end
54
+ rec.approved = true
55
+ unless rec.save
56
+ raise rec.errors.join(' ')
57
+ end
58
+ rec
59
+ end
60
+
61
+ def self.unsubscribe(email)
62
+ Lettr::Recipient.delete_by_email(email)
63
+ end
64
+
65
+ def self.load_api_mailing_or_fail_loud *args
66
+ identifier = args[0]
67
+ api_mailing = self.api_mailings[identifier] ||= Lettr::ApiMailing.find(identifier)
68
+ options = args[1]
69
+ api_mailing.delivery_options = options
70
+ return api_mailing
71
+ rescue RestClient::ResourceNotFound => e
72
+ _create_rendered_mail( *args )
73
+ end
74
+
75
+ def self._check_options_for_rendered_mail! options
76
+ [:subject, :recipient].each do |opt|
77
+ raise ArgumentError.new ":#{opt} is required" unless options.has_key?( opt )
78
+ end
79
+ raise ArgumentError.new ":html or :text is required" unless (options.has_key?( :text ) || options.has_key?( :html ))
80
+ end
81
+
82
+ def self._create_rendered_mail *args
83
+ _check_options_for_rendered_mail! args[1]
84
+ mailing = Lettr::RenderedMailing.find args[0].to_s
85
+ mailing.attributes = args[1].merge(:identifier => args[0].to_s)
86
+ mailing
87
+ rescue RestClient::ResourceNotFound
88
+ mailing = Lettr::RenderedMailing.new args[1].merge(:identifier => args[0].to_s)
89
+ unless mailing.save
90
+ raise ArgumentError.new mailing.errors.join(' ')
91
+ end
92
+ mailing
93
+ end
94
+
95
+ def self.api_mailings
96
+ @@api_mailings
97
+ end
35
98
 
36
- def headers
37
- headers = DEFAULT_HEADERS
38
- headers.merge! 'X-Lettr-API-key' => Lettr.api_key if Lettr.api_key
39
- headers
40
99
  end
41
100
 
42
101
  end
102
+
103
+
@@ -1,44 +1,47 @@
1
- module Mail
2
- class Lettr
1
+ module Lettr
2
+ module MailExtensions
3
+ class Lettr
3
4
 
4
- def initialize(values={})
5
- @settings = values
6
- end
5
+ def initialize(values={})
6
+ @settings = values
7
+ end
7
8
 
8
- def deliver!(mail)
9
- lettr_request_hashes = []
10
- raise 'no recipient' unless mail.to
11
- mail.to.each do |recipient|
12
- lettr_request_hash = {}
13
- lettr_request_hash[:recipient] = recipient
14
- lettr_request_hash[:subject] = mail.subject
15
- if mail.parts.empty?
16
- case mail.content_type
17
- when /text\/html/
18
- lettr_request_hash[:html] = mail.body
19
- when /text\/plain/
20
- lettr_request_hash[:text] = mail.body
21
- end
22
- else
23
- mail.parts.each do |part|
24
- case part.content_type
9
+ def deliver!(mail)
10
+ lettr_request_hashes = []
11
+ raise 'no recipient' unless mail.to
12
+ raise 'no subject' unless mail.subject
13
+ mail.to.each do |recipient|
14
+ lettr_request_hash = {}
15
+ lettr_request_hash[:recipient] = recipient
16
+ lettr_request_hash[:subject] = mail.subject
17
+ if mail.parts.empty?
18
+ case mail.content_type
25
19
  when /text\/html/
26
- lettr_request_hash[:html] = part.body
20
+ lettr_request_hash[:html] = mail.body
27
21
  when /text\/plain/
28
- lettr_request_hash[:text] = part.body
29
- else
30
- lettr_request_hash[:attachments] ||= []
31
- lettr_request_hash[:attachments] << part.body
22
+ lettr_request_hash[:text] = mail.body
23
+ end
24
+ else
25
+ mail.parts.each do |part|
26
+ case part.content_type
27
+ when /text\/html/
28
+ lettr_request_hash[:html] = part.body
29
+ when /text\/plain/
30
+ lettr_request_hash[:text] = part.body
31
+ else
32
+ lettr_request_hash[:attachments] ||= []
33
+ lettr_request_hash[:attachments] << part.body
34
+ end
32
35
  end
33
36
  end
37
+ lettr_request_hashes << lettr_request_hash
38
+ end
39
+ identifier = @settings[:template] || mail.subject.downcase.gsub(/\s/, '_')
40
+ lettr_request_hashes.each do |lettr_request_hash|
41
+ ::Lettr.send(identifier, lettr_request_hash).deliver
34
42
  end
35
- lettr_request_hashes << lettr_request_hash
36
- end
37
- identifier = @settings[:template] || mail.subject.downcase.gsub(/\s/, '_')
38
- lettr_request_hashes.each do |lettr_request_hash|
39
- ::Lettr.send(identifier, lettr_request_hash).deliver
40
43
  end
41
44
  end
42
- end
43
45
 
46
+ end
44
47
  end
@@ -4,4 +4,7 @@ class Lettr::Mailer < ActionMailer::Base
4
4
  alias perform_delivery_smtp perform_delivery_lettr
5
5
  alias perform_delivery_sendmail perform_delivery_lettr
6
6
  alias perform_delivery_test perform_delivery_lettr
7
+
8
+ self.delivery_method = :lettr
9
+
7
10
  end
@@ -0,0 +1,11 @@
1
+ #module Lettr
2
+ #class Railtie < Rails::Railtie
3
+
4
+ #initializer 'lettr.init' do
5
+ #ActiveSupport.on_load(:action_mailer) do
6
+ #ActionMailer::Base.add_delivery_method :lettr, Lettr::MailExtensions::Lettr
7
+ #end
8
+ #end
9
+
10
+ #end
11
+ #end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lettr
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 0
10
- version: 1.1.0
9
+ - 1
10
+ version: 1.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Digineo GmbH
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-31 00:00:00 +01:00
18
+ date: 2011-02-01 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -102,6 +102,7 @@ extra_rdoc_files: []
102
102
  files:
103
103
  - lib/lettr/action_mailer.rb
104
104
  - lib/lettr/whitelist.rb
105
+ - lib/lettr/railtie.rb
105
106
  - lib/lettr/collection.rb
106
107
  - lib/lettr/resource.rb
107
108
  - lib/lettr/object_converter.rb