signal 1.0.0 → 1.3.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.
- checksums.yaml +5 -5
- data/.github/CODEOWNERS +4 -0
- data/.github/FUNDING.yml +4 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +38 -0
- data/.github/dependabot.yml +15 -0
- data/.github/workflows/ruby-tests.yml +53 -0
- data/.rubocop.yml +12 -0
- data/Gemfile +3 -1
- data/README.md +87 -43
- data/Rakefile +15 -1
- data/examples/activerecord_model.rb +14 -12
- data/examples/arguments.rb +4 -2
- data/examples/block_context.rb +8 -5
- data/examples/blocks.rb +6 -4
- data/examples/call.rb +23 -0
- data/examples/chain.rb +20 -18
- data/examples/listener.rb +6 -4
- data/lib/signal/extensions/active_record.rb +8 -6
- data/lib/signal/extensions/call.rb +5 -3
- data/lib/signal/listener.rb +4 -1
- data/lib/signal/mock.rb +51 -0
- data/lib/signal/version.rb +3 -1
- data/lib/signal.rb +11 -7
- data/signal.gemspec +39 -17
- metadata +99 -37
- data/.rspec +0 -1
- data/.travis.yml +0 -11
- data/CHANGELOG.md +0 -5
- data/spec/signal/activerecord_spec.rb +0 -132
- data/spec/signal/call_spec.rb +0 -18
- data/spec/signal/issues/2_spec.rb +0 -13
- data/spec/signal/listener_spec.rb +0 -8
- data/spec/signal/signal_spec.rb +0 -123
- data/spec/spec_helper.rb +0 -25
- data/spec/support/callable.rb +0 -10
- data/spec/support/emitter.rb +0 -9
- data/spec/support/observable.rb +0 -3
- data/spec/support/observable_with_call.rb +0 -13
- data/spec/support/user.rb +0 -4
data/examples/listener.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
|
4
|
+
require "signal"
|
3
5
|
|
4
6
|
class Status
|
5
7
|
include Signal
|
@@ -11,7 +13,7 @@ end
|
|
11
13
|
|
12
14
|
class MyListener
|
13
15
|
def before_ready
|
14
|
-
puts
|
16
|
+
puts "Before the ready event!"
|
15
17
|
end
|
16
18
|
|
17
19
|
def on_ready
|
@@ -19,7 +21,7 @@ class MyListener
|
|
19
21
|
end
|
20
22
|
|
21
23
|
def after_ready
|
22
|
-
puts
|
24
|
+
puts "After the ready event!"
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Signal
|
2
4
|
def self.active_record
|
3
5
|
Extensions::ActiveRecord
|
@@ -17,16 +19,16 @@ module Signal
|
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
|
-
private
|
21
|
-
def around_create_signal
|
22
|
+
private def around_create_signal
|
22
23
|
emit_signal(:before, :create, self)
|
23
24
|
yield
|
24
25
|
return unless persisted?
|
26
|
+
|
25
27
|
emit_signal(:on, :create, self)
|
26
28
|
emit_signal(:after, :create, self)
|
27
29
|
end
|
28
30
|
|
29
|
-
def around_save_signal
|
31
|
+
private def around_save_signal
|
30
32
|
if new_record?
|
31
33
|
yield
|
32
34
|
return
|
@@ -38,18 +40,18 @@ module Signal
|
|
38
40
|
emit_signal(:after, :update, self)
|
39
41
|
end
|
40
42
|
|
41
|
-
def around_destroy_signal
|
43
|
+
private def around_destroy_signal
|
42
44
|
emit_signal(:before, :remove, self)
|
43
45
|
yield
|
44
46
|
emit_signal(:on, :remove, self)
|
45
47
|
emit_signal(:after, :remove, self)
|
46
48
|
end
|
47
49
|
|
48
|
-
def before_validation_signal
|
50
|
+
private def before_validation_signal
|
49
51
|
emit_signal(:before, :validation, self)
|
50
52
|
end
|
51
53
|
|
52
|
-
def after_validation_signal
|
54
|
+
private def after_validation_signal
|
53
55
|
emit_signal(:on, :validation, self) if errors.any?
|
54
56
|
emit_signal(:after, :validation, self)
|
55
57
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Signal
|
2
4
|
def self.call
|
3
5
|
Extensions::Call
|
@@ -11,9 +13,9 @@ module Signal
|
|
11
13
|
end
|
12
14
|
|
13
15
|
module ClassMethods
|
14
|
-
def call(*args,
|
15
|
-
new(*args).tap do |instance|
|
16
|
-
yield(instance)
|
16
|
+
def call(*args, **kwargs)
|
17
|
+
new(*args, **kwargs).tap do |instance|
|
18
|
+
yield(instance) if block_given?
|
17
19
|
instance.call
|
18
20
|
end
|
19
21
|
end
|
data/lib/signal/listener.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Signal
|
2
4
|
class Listener
|
3
5
|
def initialize(context, type, event, &block)
|
@@ -10,6 +12,7 @@ module Signal
|
|
10
12
|
|
11
13
|
def method_missing(method_name, *args)
|
12
14
|
return super unless respond_to_missing?(method_name, false)
|
15
|
+
|
13
16
|
@block.call(*args)
|
14
17
|
end
|
15
18
|
|
@@ -17,7 +20,7 @@ module Signal
|
|
17
20
|
"<#{self.class} event: #{@event_method}>"
|
18
21
|
end
|
19
22
|
|
20
|
-
def respond_to_missing?(method_name,
|
23
|
+
def respond_to_missing?(method_name, _include_private)
|
21
24
|
method_name == @event_method
|
22
25
|
end
|
23
26
|
end
|
data/lib/signal/mock.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Signal
|
4
|
+
class Mock
|
5
|
+
def calls
|
6
|
+
@calls ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_missing(name, *args)
|
10
|
+
return super unless respond_to_missing?(name)
|
11
|
+
|
12
|
+
calls << {event: name.to_s.gsub(/^on_/, "").to_sym, args: args}
|
13
|
+
end
|
14
|
+
|
15
|
+
def respond_to_missing?(name, _include_all = false)
|
16
|
+
name =~ /^on_/
|
17
|
+
end
|
18
|
+
|
19
|
+
def received?(event, options = {})
|
20
|
+
received_event?(event, options[:times] || -1) &&
|
21
|
+
received_with?(event, options[:with])
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_proc
|
25
|
+
proc {|action| action.add_listener(self) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def on(event)
|
29
|
+
proc {|*args| calls << {event: event, args: args} }
|
30
|
+
end
|
31
|
+
|
32
|
+
private def received_event?(event, count)
|
33
|
+
received_calls = calls.count {|call| call[:event] == event }
|
34
|
+
|
35
|
+
return received_calls.nonzero? if count == -1
|
36
|
+
|
37
|
+
received_calls == count
|
38
|
+
end
|
39
|
+
|
40
|
+
private def received_with?(event, args)
|
41
|
+
return true unless args
|
42
|
+
|
43
|
+
calls.any? do |call|
|
44
|
+
next unless call[:event] == event
|
45
|
+
next args.call(call[:args]) if args.is_a?(Proc)
|
46
|
+
|
47
|
+
args == call[:args]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/signal/version.rb
CHANGED
data/lib/signal.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "signal/version"
|
4
|
+
require "signal/listener"
|
5
|
+
require "signal/extensions/active_record"
|
6
|
+
require "signal/extensions/call"
|
5
7
|
|
6
8
|
module Signal
|
7
9
|
def on(event, &block)
|
@@ -35,11 +37,13 @@ module Signal
|
|
35
37
|
@listeners ||= []
|
36
38
|
end
|
37
39
|
|
38
|
-
private
|
39
|
-
def emit_signal(type, event, *args)
|
40
|
+
private def emit_signal(type, event, *args)
|
40
41
|
listeners.each do |listener|
|
41
42
|
method_name = "#{type}_#{event}"
|
42
|
-
|
43
|
+
|
44
|
+
if listener.respond_to?(method_name, true)
|
45
|
+
listener.send(method_name, *args)
|
46
|
+
end
|
43
47
|
end
|
44
48
|
end
|
45
49
|
end
|
data/signal.gemspec
CHANGED
@@ -1,21 +1,43 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
gem.name = 'signal'
|
5
|
-
gem.version = Signal::VERSION
|
6
|
-
gem.authors = ['Nando Vieira']
|
7
|
-
gem.email = ['fnando.vieira@gmail.com']
|
8
|
-
gem.description = 'A simple observer implementation for POROs (Plain Old Ruby Object) and ActiveRecord objects.'
|
9
|
-
gem.summary = gem.description
|
10
|
-
gem.homepage = 'http://github.com/fnando/signal'
|
3
|
+
require "./lib/signal/version"
|
11
4
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "signal"
|
7
|
+
spec.version = Signal::VERSION
|
8
|
+
spec.authors = ["Nando Vieira"]
|
9
|
+
spec.email = ["fnando.vieira@gmail.com"]
|
10
|
+
spec.description = %w[
|
11
|
+
A simple observer implementation for POROs (Plain Old Ruby Object) and
|
12
|
+
ActiveRecord objects.
|
13
|
+
].join(" ")
|
14
|
+
spec.summary = spec.description
|
15
|
+
spec.homepage = "http://github.com/fnando/signal"
|
16
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
|
+
f.match(%r{^(test|spec|features)/})
|
20
|
+
end
|
21
|
+
|
22
|
+
spec.executables = spec.files.grep(%r{^bin/}).map {|f| File.basename(f) }
|
23
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
24
|
+
spec.require_paths = ["lib"]
|
25
|
+
|
26
|
+
spec.post_install_message =
|
27
|
+
"\n====================================================================\n" \
|
28
|
+
"`signal` has been deprecated in favor of `voltage`.\n" \
|
29
|
+
"To install it, use `gem install voltage` or add it to your gemfile.\n" \
|
30
|
+
"For details, please visit https://github.com/fnando/signal/issues/6" \
|
31
|
+
"\n====================================================================\n\n"
|
32
|
+
|
33
|
+
spec.add_dependency "voltage"
|
34
|
+
|
35
|
+
spec.add_development_dependency "activerecord"
|
36
|
+
spec.add_development_dependency "minitest-utils"
|
37
|
+
spec.add_development_dependency "pry-meta"
|
38
|
+
spec.add_development_dependency "rake"
|
39
|
+
spec.add_development_dependency "rubocop"
|
40
|
+
spec.add_development_dependency "rubocop-fnando"
|
41
|
+
spec.add_development_dependency "simplecov"
|
42
|
+
spec.add_development_dependency "sqlite3"
|
21
43
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: signal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nando Vieira
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: voltage
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: activerecord
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -25,7 +39,21 @@ dependencies:
|
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
42
|
+
name: minitest-utils
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-meta
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
30
58
|
requirements:
|
31
59
|
- - ">="
|
@@ -39,7 +67,7 @@ dependencies:
|
|
39
67
|
- !ruby/object:Gem::Version
|
40
68
|
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
70
|
+
name: rake
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
73
|
- - ">="
|
@@ -53,7 +81,49 @@ dependencies:
|
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-fnando
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sqlite3
|
57
127
|
requirement: !ruby/object:Gem::Requirement
|
58
128
|
requirements:
|
59
129
|
- - ">="
|
@@ -74,10 +144,15 @@ executables: []
|
|
74
144
|
extensions: []
|
75
145
|
extra_rdoc_files: []
|
76
146
|
files:
|
147
|
+
- ".github/CODEOWNERS"
|
148
|
+
- ".github/FUNDING.yml"
|
149
|
+
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
150
|
+
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
151
|
+
- ".github/PULL_REQUEST_TEMPLATE.md"
|
152
|
+
- ".github/dependabot.yml"
|
153
|
+
- ".github/workflows/ruby-tests.yml"
|
77
154
|
- ".gitignore"
|
78
|
-
- ".
|
79
|
-
- ".travis.yml"
|
80
|
-
- CHANGELOG.md
|
155
|
+
- ".rubocop.yml"
|
81
156
|
- Gemfile
|
82
157
|
- LICENSE.txt
|
83
158
|
- README.md
|
@@ -86,29 +161,27 @@ files:
|
|
86
161
|
- examples/arguments.rb
|
87
162
|
- examples/block_context.rb
|
88
163
|
- examples/blocks.rb
|
164
|
+
- examples/call.rb
|
89
165
|
- examples/chain.rb
|
90
166
|
- examples/listener.rb
|
91
167
|
- lib/signal.rb
|
92
168
|
- lib/signal/extensions/active_record.rb
|
93
169
|
- lib/signal/extensions/call.rb
|
94
170
|
- lib/signal/listener.rb
|
171
|
+
- lib/signal/mock.rb
|
95
172
|
- lib/signal/version.rb
|
96
173
|
- signal.gemspec
|
97
|
-
- spec/signal/activerecord_spec.rb
|
98
|
-
- spec/signal/call_spec.rb
|
99
|
-
- spec/signal/issues/2_spec.rb
|
100
|
-
- spec/signal/listener_spec.rb
|
101
|
-
- spec/signal/signal_spec.rb
|
102
|
-
- spec/spec_helper.rb
|
103
|
-
- spec/support/callable.rb
|
104
|
-
- spec/support/emitter.rb
|
105
|
-
- spec/support/observable.rb
|
106
|
-
- spec/support/observable_with_call.rb
|
107
|
-
- spec/support/user.rb
|
108
174
|
homepage: http://github.com/fnando/signal
|
109
175
|
licenses: []
|
110
176
|
metadata: {}
|
111
|
-
post_install_message:
|
177
|
+
post_install_message: |2+
|
178
|
+
|
179
|
+
====================================================================
|
180
|
+
`signal` has been deprecated in favor of `voltage`.
|
181
|
+
To install it, use `gem install voltage` or add it to your gemfile.
|
182
|
+
For details, please visit https://github.com/fnando/signal/issues/6
|
183
|
+
====================================================================
|
184
|
+
|
112
185
|
rdoc_options: []
|
113
186
|
require_paths:
|
114
187
|
- lib
|
@@ -116,28 +189,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
189
|
requirements:
|
117
190
|
- - ">="
|
118
191
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
192
|
+
version: 2.7.0
|
120
193
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
194
|
requirements:
|
122
195
|
- - ">="
|
123
196
|
- !ruby/object:Gem::Version
|
124
197
|
version: '0'
|
125
198
|
requirements: []
|
126
|
-
|
127
|
-
|
128
|
-
signing_key:
|
199
|
+
rubygems_version: 3.2.32
|
200
|
+
signing_key:
|
129
201
|
specification_version: 4
|
130
202
|
summary: A simple observer implementation for POROs (Plain Old Ruby Object) and ActiveRecord
|
131
203
|
objects.
|
132
|
-
test_files:
|
133
|
-
|
134
|
-
- spec/signal/call_spec.rb
|
135
|
-
- spec/signal/issues/2_spec.rb
|
136
|
-
- spec/signal/listener_spec.rb
|
137
|
-
- spec/signal/signal_spec.rb
|
138
|
-
- spec/spec_helper.rb
|
139
|
-
- spec/support/callable.rb
|
140
|
-
- spec/support/emitter.rb
|
141
|
-
- spec/support/observable.rb
|
142
|
-
- spec/support/observable_with_call.rb
|
143
|
-
- spec/support/user.rb
|
204
|
+
test_files: []
|
205
|
+
...
|
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--color
|
data/.travis.yml
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
cache: bundler
|
3
|
-
sudo: false
|
4
|
-
script: bundle exec rspec
|
5
|
-
rvm:
|
6
|
-
- '2.2'
|
7
|
-
- '2.1'
|
8
|
-
addons:
|
9
|
-
code_climate:
|
10
|
-
repo_token:
|
11
|
-
secure: "ASogQTLS/xYYczRtFwuo8DIkNdOl16mez4GHOw4RtdfTQ4BMROxE/CUemdPulMW1b/p7jsp5ghOtH2EJ4jN203s83HN4QjGC2wXhigkk6LzvxqjkmHxIWxJi2JS2sLq8nzOCcD0geO1pcbBFyuAzAdlwWa2g1WDP7O0L0fNjCtM="
|
data/CHANGELOG.md
DELETED
@@ -1,132 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Signal::Extensions::ActiveRecord do
|
4
|
-
let(:callable) { Callable.new }
|
5
|
-
let(:user) { User.new(:username => 'johndoe') }
|
6
|
-
|
7
|
-
context 'create event' do
|
8
|
-
it 'triggers before event' do
|
9
|
-
user.before(:create, &callable)
|
10
|
-
expect(callable).to receive(:called).with(user)
|
11
|
-
user.save!
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'triggers event' do
|
15
|
-
user.on(:create, &callable)
|
16
|
-
expect(callable).to receive(:called).with(user)
|
17
|
-
user.save!
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'triggers after event' do
|
21
|
-
user.after(:create, &callable)
|
22
|
-
expect(callable).to receive(:called).with(user)
|
23
|
-
user.save!
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'does not trigger on/after events when record is invalid' do
|
27
|
-
user = User.new
|
28
|
-
|
29
|
-
on_callable = Callable.new
|
30
|
-
after_callable = Callable.new
|
31
|
-
|
32
|
-
user
|
33
|
-
.on(:create, &on_callable)
|
34
|
-
.after(:create, &after_callable)
|
35
|
-
|
36
|
-
expect(on_callable).not_to receive(:called)
|
37
|
-
expect(after_callable).not_to receive(:called)
|
38
|
-
|
39
|
-
user.save
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'validation event' do
|
44
|
-
it 'triggers before event' do
|
45
|
-
user.before(:validation, &callable)
|
46
|
-
expect(callable).to receive(:called).with(user)
|
47
|
-
user.save!
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'triggers after event' do
|
51
|
-
user.after(:validation, &callable)
|
52
|
-
expect(callable).to receive(:called).with(user)
|
53
|
-
user.save!
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'triggers validation event when record is invalid' do
|
57
|
-
user.username = nil
|
58
|
-
user.on(:validation, &callable)
|
59
|
-
expect(callable).to receive(:called).with(user)
|
60
|
-
user.save
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'skips validation event when record is valid' do
|
64
|
-
user.on(:validation, &callable)
|
65
|
-
expect(callable).not_to receive(:called)
|
66
|
-
user.save!
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
context 'update event' do
|
71
|
-
let(:user) { User.create!(:username => 'johndoe') }
|
72
|
-
|
73
|
-
it 'triggers before event' do
|
74
|
-
user.before(:update, &callable)
|
75
|
-
expect(callable).to receive(:called).with(user)
|
76
|
-
user.update_attributes!(:username => 'johnd')
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'triggers on event' do
|
80
|
-
user.on(:update, &callable)
|
81
|
-
expect(callable).to receive(:called).with(user)
|
82
|
-
user.update_attributes!(:username => 'johnd')
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'triggers after event' do
|
86
|
-
user.after(:update, &callable)
|
87
|
-
expect(callable).to receive(:called).with(user)
|
88
|
-
user.update_attributes!(:username => 'johnd')
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'does not trigger on/after events when record is invalid' do
|
92
|
-
user.username = nil
|
93
|
-
|
94
|
-
on_callable = Callable.new
|
95
|
-
after_callable = Callable.new
|
96
|
-
|
97
|
-
user
|
98
|
-
.on(:update, &on_callable)
|
99
|
-
.after(:update, &after_callable)
|
100
|
-
|
101
|
-
expect(on_callable).not_to receive(:called)
|
102
|
-
expect(after_callable).not_to receive(:called)
|
103
|
-
|
104
|
-
user.save
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context 'remove event' do
|
109
|
-
let(:user) { User.create!(:username => 'johndoe') }
|
110
|
-
|
111
|
-
it 'triggers before event' do
|
112
|
-
user.before(:remove, &callable)
|
113
|
-
expect(callable).to receive(:called).with(user)
|
114
|
-
|
115
|
-
user.destroy
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'triggers on event' do
|
119
|
-
user.on(:remove, &callable)
|
120
|
-
expect(callable).to receive(:called).with(user)
|
121
|
-
|
122
|
-
user.destroy
|
123
|
-
end
|
124
|
-
|
125
|
-
it 'triggers after event' do
|
126
|
-
user.after(:remove, &callable)
|
127
|
-
expect(callable).to receive(:called).with(user)
|
128
|
-
|
129
|
-
user.destroy
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
data/spec/signal/call_spec.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Signal::Extensions::Call do
|
4
|
-
let(:callable) { Callable.new }
|
5
|
-
|
6
|
-
it 'initializes observable with arguments' do
|
7
|
-
observable = ObservableWithCall.call(1, 2, 3) {}
|
8
|
-
expect(observable.args).to eq([1, 2, 3])
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'triggers event' do
|
12
|
-
expect(callable).to receive(:called).with([1, 2, 3])
|
13
|
-
|
14
|
-
ObservableWithCall.call(1, 2, 3) do |o|
|
15
|
-
o.on(:args, &callable)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Constant lookup', 'https://github.com/fnando/signal/issues/2' do
|
4
|
-
let(:callable) { Callable.new }
|
5
|
-
|
6
|
-
it 'triggers event' do
|
7
|
-
emitter = Emitter.new
|
8
|
-
emitter.on(:success, &callable)
|
9
|
-
expect(callable).to receive(:called).with(no_args)
|
10
|
-
|
11
|
-
emitter.call
|
12
|
-
end
|
13
|
-
end
|