dallal 0.1.1 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 332a7870ab01d845102d4439b7687269a55c6446
4
- data.tar.gz: 2b564c24671a2badf45e3ede17d55aa6165270b9
3
+ metadata.gz: 53e11c8daaf54da4d759d04172b5e2ba5fcc4d1d
4
+ data.tar.gz: 69bb8738060d5c68b1ddc1c888a25aeaa873cbb2
5
5
  SHA512:
6
- metadata.gz: 8cf61158702241cc1c7c1f2a26d2cef32f4f9cbff7db2b5ae9f605424c744084fe46c97ed926ac1ceb92df70ab684a26c566c6b43a7f9d0e2fb91a50b8fb02a3
7
- data.tar.gz: cb56f9645b9a346a5c41e676f29b81aa8d6d85c87f747b1544628f3cbd19206482d6f3c8d2f02c3d6ad39488c09029546bfe4babbc86e679845bb307104f7226
6
+ metadata.gz: 5a30fb2af03e8d7e81ce72b2cb7286a147b5191a3eeadbe26dfebf1ca83db9e52c477ecf58a4bce0b29edc773fbd0248f66b71420576168e88ba92d1455702a4
7
+ data.tar.gz: 7ae52241acef4c1e0af8c716499ac5899f3a9e534ad2222176c8ec85786b07fd12af54784c7a1073e2573a25c980a304479c35356e2b7a906fb9b724ab73ee16
@@ -13,7 +13,7 @@ module Dallal
13
13
  {
14
14
  from: address_format(@notification.from_email, @notification.from_name),
15
15
  reply_to: address_format(@notification.from_email, @notification.from_name),
16
- to: @notification.user.email,
16
+ to: @notification.target.email,
17
17
  cc: nil,
18
18
  subject: subject,
19
19
  template_name: "#{object_plural_name}/#{@notification.template_name}"
@@ -1,59 +1,49 @@
1
+ require 'dallal/notifications/email_notification'
2
+ require 'dallal/notifications/sms_notification'
3
+
1
4
  module Dallal
2
5
  class Notification
3
6
  attr_accessor :event, :model_class, :opts, :_object
4
- attr_reader :template_name
7
+ attr_reader :targets
8
+ attr_reader :notifiers
5
9
 
6
10
  def initialize args = {}
7
11
  args.each do |k, v|
8
12
  send("#{k}=", v)
9
13
  end
10
14
 
11
- @notifiers = {}
15
+ @notifiers = []
12
16
  end
13
17
 
14
- # TODO Collection of targets is not supported
15
18
  def notify *args, &block
16
19
  notify_opts = args.extract_options!
17
20
  return unless should_send?(notify_opts[:if])
18
21
 
19
- @target = Array(args).flatten.compact.uniq
22
+ @targets = Array(args).flatten.compact.uniq
20
23
  instance_eval(&block)
21
24
  end
22
25
 
23
26
  def with *args, &block
24
27
  opts = args.extract_options!
25
- # TODO Move if condition to notify method
26
- if should_send?(opts[:if])
27
- instance_eval(&block)
28
- args.each { |arg| @notifiers[arg] = get_notifier(arg) }
29
- end
30
- end
31
-
32
- # TODO fix this. This is a quick and dirty patch for email
33
- def user
34
- @target.first
35
- end
36
-
37
- # TODO !!! Watch out same payload for multiple notifers that
38
- # require payload
39
- def payload payload
40
- @payload = payload
41
- end
28
+ return unless should_send?(opts[:if])
42
29
 
43
- # Same here as payload
44
- def template template
45
- @template_name = template
30
+ # create a notifier for each target
31
+ @targets.each do |target|
32
+ args.each do |name|
33
+ notifier = get_notifier(name, target, &block)
34
+ @notifiers << notifier
35
+ end
36
+ end
46
37
  end
47
38
 
48
39
  def persist?
49
40
  opts[:persist].present?
50
41
  end
51
42
 
52
- # TODO Add support for multiple targets
53
43
  def dispatch!
54
44
  validate!
55
- @notifiers.each { |_, n| n.notify! }
56
- @notifiers.each { |_, n| n.persist! } if persist?
45
+ @notifiers.each { |n| n.notify! }
46
+ @notifiers.each { |n| n.persist! } if persist?
57
47
  end
58
48
 
59
49
  private
@@ -68,9 +58,10 @@ module Dallal
68
58
  end
69
59
  end
70
60
 
71
- def get_notifier(name)
72
- # TODO Pass concrete notifications to notifiers. Ex, EmailNotification, JsonPayloadNotification, SmsNotification ...
73
- Dallal::Notifiers::Notifier.send(name, self)
61
+ def get_notifier(name, target, &block)
62
+ notification = "Dallal::Notifications::#{name.to_s.camelcase}Notification".constantize.new(self, target)
63
+ notification.instance_eval(&block)
64
+ notification.notifier
74
65
  end
75
66
 
76
67
  def should_send?(condition)
@@ -0,0 +1,25 @@
1
+ module Dallal
2
+ module Notifications
3
+ class BaseNotification
4
+ attr_reader :target
5
+
6
+ def initialize(notification, target)
7
+ @notification = notification
8
+ @target = target
9
+ end
10
+
11
+ def method_missing(name, *args, &block)
12
+ if @notification.respond_to?(name)
13
+ @notification.send(name, *args, &block)
14
+ else
15
+ super
16
+ end
17
+ end
18
+
19
+ def respond_to?(method_name, include_private=true)
20
+ @notification.respond_to?(method_name) || super
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ require 'dallal/notifications/base_notification'
2
+ module Dallal
3
+ module Notifications
4
+ class EmailNotification < BaseNotification
5
+ attr_reader :from_name, :from_email
6
+ attr_reader :template_name
7
+
8
+ def initialize(notification, target)
9
+ super(notification, target)
10
+
11
+ @from_name = Dallal.configuration.from_name
12
+ @from_email = Dallal.configuration.from_email
13
+ end
14
+
15
+ def notifier
16
+ Dallal::Notifiers::EmailNotifier.new(self)
17
+ end
18
+
19
+ def template template
20
+ @template_name = template
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ require 'dallal/notifications/base_notification'
2
+ module Dallal
3
+ module Notifications
4
+ class SmsNotification < BaseNotification
5
+ attr_reader :sms_payload
6
+
7
+ def payload payload
8
+ @sms_payload = payload
9
+ end
10
+
11
+ def notifier
12
+ Dallal::Notifiers::SmsNotifier.new(self)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -2,8 +2,6 @@ module Dallal
2
2
  module Notifiers
3
3
  class EmailNotifier < Notifier
4
4
  def notify!
5
- # TODO please pass a email notification instead
6
- define_email_methods
7
5
  mailer.notify(notification).deliver_now
8
6
  end
9
7
 
@@ -12,14 +10,6 @@ module Dallal
12
10
 
13
11
  private
14
12
 
15
- def define_email_methods
16
- [:from_email, :from_name].each do |name|
17
- notification.define_singleton_method(name) do
18
- Dallal.configuration.send(name)
19
- end
20
- end
21
- end
22
-
23
13
  def mailer
24
14
  Dallal::Mailer
25
15
  end
@@ -10,14 +10,6 @@ module Dallal
10
10
  @notification = notification
11
11
  end
12
12
 
13
- def self.email(notification)
14
- Dallal::Notifiers::EmailNotifier.new(notification)
15
- end
16
-
17
- def self.sms(notification)
18
- Dallal::Notifiers::SmsNotifier.new(notification)
19
- end
20
-
21
13
  def notify!(*args)
22
14
  Notifier.api_not_implemented(self)
23
15
  end
@@ -8,7 +8,6 @@ module Dallal
8
8
 
9
9
 
10
10
  def persist!
11
-
12
11
  end
13
12
  end
14
13
  end
@@ -1,7 +1,7 @@
1
1
  module Dallal
2
2
  MAJOR = 0
3
- MINOR = 1
4
- PATCH = 1
3
+ MINOR = 2
4
+ PATCH = 0
5
5
 
6
6
  VERSION = [MAJOR, MINOR, PATCH].compact.join(".")
7
7
  end
@@ -33,11 +33,11 @@ describe Dallal::Notification do
33
33
  executed = true
34
34
  end
35
35
  expect(executed).to eq true
36
- expect(subject.instance_variable_get(:@target)).to eq [@user]
36
+ expect(subject.targets).to eq [@user]
37
37
  end
38
38
 
39
39
  context 'notify with nested with block' do
40
- it 'evaluates an email block correctly' do
40
+ it 'calls with block' do
41
41
  executed = false
42
42
  subject.notify(@user) do
43
43
  with :email do
@@ -46,9 +46,10 @@ describe Dallal::Notification do
46
46
  end
47
47
  end
48
48
  expect(executed).to be true
49
- expect(subject.instance_variable_get(:@template_name)).to eq :an_email_template
50
- expect(subject.instance_variable_get(:@notifiers)[:email]).to be_a(Dallal::Notifiers::EmailNotifier)
51
- expect(subject.instance_variable_get(:@target)).to eq([@user])
49
+ notifier = subject.notifiers.first
50
+ expect(notifier).to be_a(Dallal::Notifiers::EmailNotifier)
51
+ expect(notifier.notification.template_name).to eq :an_email_template
52
+ expect(subject.targets).to eq([@user])
52
53
  end
53
54
 
54
55
  it 'evaluates correctly an sms block' do
@@ -57,13 +58,13 @@ describe Dallal::Notification do
57
58
  payload({ a:1, b: 2 })
58
59
  end
59
60
  end
60
- expect(subject.instance_variable_get(:@template)).to eq nil
61
- expect(subject.instance_variable_get(:@payload)).to eq({a: 1, b: 2})
62
- expect(subject.instance_variable_get(:@target)).to eq([@user])
63
- expect(subject.instance_variable_get(:@notifiers)[:sms]).to be_a(Dallal::Notifiers::SmsNotifier)
61
+ notifier = subject.notifiers.first
62
+ expect(notifier).to be_a(Dallal::Notifiers::SmsNotifier)
63
+ expect(notifier.notification.sms_payload).to eq({a: 1, b: 2})
64
+ expect(subject.targets).to eq([@user])
64
65
  end
65
66
 
66
- it 'evaluates correctly when an if lambda returns true' do
67
+ it 'calls the block when an if lambda returns true' do
67
68
  subject.define_singleton_method('post') do
68
69
  @post
69
70
  end
@@ -74,9 +75,12 @@ describe Dallal::Notification do
74
75
  template :an_email_template
75
76
  end
76
77
  end
77
- expect(subject.instance_variable_get(:@template_name)).to eq :an_email_template
78
- expect(subject.instance_variable_get(:@notifiers)[:email]).to be_a(Dallal::Notifiers::EmailNotifier)
79
- expect(subject.instance_variable_get(:@target)).to eq([@user])
78
+
79
+ expect(subject.notifiers.size).to eq 1
80
+ notifier = subject.notifiers.first
81
+ expect(notifier).to be_a Dallal::Notifiers::EmailNotifier
82
+ expect(notifier.notification.template_name).to eq :an_email_template
83
+ expect(subject.targets).to eq [@user]
80
84
  end
81
85
 
82
86
  it 'does not call the block when if lambda evaluates to false' do
@@ -88,17 +92,17 @@ describe Dallal::Notification do
88
92
  subject.notify(@user, if: -> (){ post.id == -100} ) do
89
93
  raise "BLock should not be executed"
90
94
  with :email do
95
+ raise "BLock should not be executed"
91
96
  template :an_email_template
92
97
  end
93
98
  end
94
- expect(subject.instance_variable_get(:@template_name)).to eq nil
95
- expect(subject.instance_variable_get(:@notifiers)[:email]).to eq nil
96
- expect(subject.instance_variable_get(:@target)).to eq nil
99
+ expect(subject.notifiers).to be_empty
100
+ expect(subject.targets).to be nil
97
101
  end
98
102
  end
99
103
 
100
104
  context "multiple notifiers" do
101
- it '' do
105
+ it 'fills properties correctly' do
102
106
  subject.notify(@user) do
103
107
  with :email do
104
108
  template :email_template
@@ -107,10 +111,14 @@ describe Dallal::Notification do
107
111
  payload a: 1, b: 2
108
112
  end
109
113
  end
110
- expect(subject.instance_variable_get(:@notifiers)[:email]).to be_a(Dallal::Notifiers::EmailNotifier)
111
- expect(subject.instance_variable_get(:@template_name)).to eq :email_template
112
- expect(subject.instance_variable_get(:@payload)).to eq(a: 1, b: 2)
113
- expect(subject.instance_variable_get(:@notifiers)[:sms]).to be_a(Dallal::Notifiers::SmsNotifier)
114
+ email_notifier = subject.notifiers.first
115
+ sms_notifier = subject.notifiers.last
116
+
117
+ expect(subject.notifiers.size).to eq 2
118
+ expect(email_notifier).to be_a(Dallal::Notifiers::EmailNotifier)
119
+ expect(email_notifier.notification.template_name).to eq :email_template
120
+ expect(sms_notifier).to be_a(Dallal::Notifiers::SmsNotifier)
121
+ expect(sms_notifier.notification.sms_payload).to eq(a: 1, b: 2)
114
122
  end
115
123
  end
116
124
  end
@@ -124,10 +132,9 @@ describe Dallal::Notification do
124
132
  template :a
125
133
  end
126
134
  end
127
- expect(subject.instance_variable_get(:@notifiers)[:sms]).to be nil
128
- expect(subject.instance_variable_get(:@notifiers)[:sms]).to be nil
129
- expect(subject.instance_variable_get(:@notifiers)[:email]).to receive(:notify!)
130
- expect(subject.instance_variable_get(:@notifiers)[:email]).to_not receive(:persist!)
135
+ expect(subject.notifiers.size).to eq 1
136
+ expect(subject.notifiers.first).to receive(:notify!)
137
+ expect(subject.notifiers.first).to_not receive(:persist!)
131
138
 
132
139
  subject.dispatch!
133
140
  end
@@ -5,20 +5,12 @@ describe Dallal::Notifiers::Notifier do
5
5
  subject { Dallal::Notifiers::Notifier.new(notification) }
6
6
  it { expect(subject).to be_a Dallal::AbstractInterface }
7
7
 
8
- context '.sms' do
9
- it 'return a sms notifier' do
10
- result = Dallal::Notifiers::Notifier.sms(notification)
11
- expect(result).to be_a(Dallal::Notifiers::SmsNotifier)
12
- expect(result.notification).to eq notification
13
- end
14
- end
15
- context '.email' do
16
- it 'returns an email notifier' do
17
- result = Dallal::Notifiers::Notifier.email(notification)
18
- expect(result).to be_a(Dallal::Notifiers::EmailNotifier)
19
- expect(result.notification).to eq notification
8
+ describe "#persist!" do
9
+ it 'should raise an error' do
10
+ expect{ subject.persist! }.to raise_error(Dallal::AbstractInterface::InterfaceNotImplementedError)
20
11
  end
21
12
  end
13
+
22
14
  describe "#notify" do
23
15
  it 'should raise an error' do
24
16
  expect{ subject.notify! }.to raise_error(Dallal::AbstractInterface::InterfaceNotImplementedError)
@@ -1,5 +1,5 @@
1
1
  <h1>Register email</h1>
2
2
  This is a test data template fixture
3
3
 
4
- <%= @notification.user %>
4
+ <%= @notification.target %>
5
5
 
Binary file