stance 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +10 -10
- data/README.md +10 -9
- data/lib/stance/event.rb +29 -9
- data/lib/stance/eventable.rb +2 -2
- data/lib/stance/events.rb +18 -0
- data/lib/stance/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4da3d0518f890cfeff617a5751efd1cfa9267735425489cd60fda3cc756fb7c3
|
4
|
+
data.tar.gz: 63ed6c237aba36901be39c205b86f27339c2adc950a119a02eb70be8d9313827
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95260c2c651deebe0b4f00f667d9961c88128100e5d56cb5f956ae098af00e0421f35fdcbccf17ddd4fea63a8f5050206560c69c3daea18961b5a5501c364338
|
7
|
+
data.tar.gz: 6c72c0b24be0c1a2ad4c5943914ee74c24ed9b1c3d70a5581429f445a81c27d183473a36885fe1ba0bf72afea929062c14107be489d65edd75413ac85c34a54d
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
stance (0.
|
4
|
+
stance (0.2.0)
|
5
5
|
activerecord (>= 5)
|
6
6
|
multi_json
|
7
7
|
railties (>= 5)
|
@@ -43,7 +43,7 @@ GEM
|
|
43
43
|
concurrent-ruby (1.1.6)
|
44
44
|
crass (1.0.6)
|
45
45
|
erubi (1.9.0)
|
46
|
-
i18n (1.8.
|
46
|
+
i18n (1.8.5)
|
47
47
|
concurrent-ruby (~> 1.0)
|
48
48
|
loofah (2.6.0)
|
49
49
|
crass (~> 1.0.2)
|
@@ -58,8 +58,8 @@ GEM
|
|
58
58
|
minitest (>= 4, < 6)
|
59
59
|
minitest-server (1.0.6)
|
60
60
|
minitest (~> 5.0)
|
61
|
-
multi_json (1.
|
62
|
-
nokogiri (1.10.
|
61
|
+
multi_json (1.15.0)
|
62
|
+
nokogiri (1.10.10)
|
63
63
|
mini_portile2 (~> 2.4.0)
|
64
64
|
parallel (1.19.2)
|
65
65
|
parser (2.7.1.4)
|
@@ -83,17 +83,17 @@ GEM
|
|
83
83
|
rake (12.3.3)
|
84
84
|
regexp_parser (1.7.1)
|
85
85
|
rexml (3.2.4)
|
86
|
-
rubocop (0.
|
86
|
+
rubocop (0.89.0)
|
87
87
|
parallel (~> 1.10)
|
88
|
-
parser (>= 2.7.
|
88
|
+
parser (>= 2.7.1.1)
|
89
89
|
rainbow (>= 2.2.2, < 4.0)
|
90
90
|
regexp_parser (>= 1.7)
|
91
91
|
rexml
|
92
|
-
rubocop-ast (>= 0.0
|
92
|
+
rubocop-ast (>= 0.1.0, < 1.0)
|
93
93
|
ruby-progressbar (~> 1.7)
|
94
94
|
unicode-display_width (>= 1.4.0, < 2.0)
|
95
|
-
rubocop-ast (0.0
|
96
|
-
parser (>= 2.7.
|
95
|
+
rubocop-ast (0.3.0)
|
96
|
+
parser (>= 2.7.1.4)
|
97
97
|
ruby-progressbar (1.10.1)
|
98
98
|
sqlite3 (1.4.2)
|
99
99
|
thor (1.0.1)
|
@@ -101,7 +101,7 @@ GEM
|
|
101
101
|
tzinfo (1.2.7)
|
102
102
|
thread_safe (~> 0.1)
|
103
103
|
unicode-display_width (1.7.0)
|
104
|
-
zeitwerk (2.
|
104
|
+
zeitwerk (2.4.0)
|
105
105
|
|
106
106
|
PLATFORMS
|
107
107
|
ruby
|
data/README.md
CHANGED
@@ -10,25 +10,26 @@ class AppointmentEvents < Stance::Events
|
|
10
10
|
event 'offers.create'
|
11
11
|
event 'offers.delete'
|
12
12
|
|
13
|
-
# Singleton event: only one event with this name can exist for the same subject.
|
13
|
+
# Singleton event: only one active event with this name can exist for the same subject.
|
14
14
|
event :my_event, singleton: true
|
15
15
|
|
16
|
+
# Will be called before/after each event in this class. Have access to the event `subject` and
|
17
|
+
# `record`.
|
18
|
+
before_create :do_something_before
|
19
|
+
after_create :do_something_after
|
20
|
+
|
16
21
|
# Optionally, create a class for an event.
|
17
22
|
class SomeEvent < Stance::Event
|
18
|
-
#
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
def call
|
24
|
-
# do something when the event is created.
|
25
|
-
end
|
23
|
+
# Define optional callbacks which have access to the `subject` and event `record`.
|
24
|
+
before_create :do_something_before
|
25
|
+
after_create :do_something_after
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
# Publish events from the model
|
30
30
|
Appointment.find(1).publish_event :some_event
|
31
31
|
Appointment.find(1).publish_event 'offers.create'
|
32
|
+
Appointment.find(1).publish_event :event_with_metadata, foo: :bah
|
32
33
|
```
|
33
34
|
|
34
35
|
## Installation
|
data/lib/stance/event.rb
CHANGED
@@ -2,29 +2,49 @@
|
|
2
2
|
|
3
3
|
module Stance
|
4
4
|
class Event
|
5
|
+
include ActiveSupport::Callbacks
|
6
|
+
|
7
|
+
define_callbacks :create
|
5
8
|
attr_reader :record, :options
|
6
9
|
|
7
10
|
delegate :subject, :name, to: :record
|
8
11
|
|
12
|
+
class << self
|
13
|
+
def before_create(*methods, &block)
|
14
|
+
set_callback :create, :before, *methods, &block
|
15
|
+
end
|
16
|
+
|
17
|
+
def after_create(*methods, &block)
|
18
|
+
set_callback :create, :after, *methods, &block
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
9
22
|
def initialize(name, subject, metadata, options)
|
10
23
|
@options = { singleton: false }.merge(options)
|
11
24
|
@record = Stance::EventRecord.new(name: name, subject: subject, metadata: metadata)
|
12
25
|
end
|
13
26
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
|
27
|
+
def create
|
28
|
+
return self if singleton_exists?
|
29
|
+
|
30
|
+
Stance::EventRecord.transaction do
|
31
|
+
run_callbacks :create do
|
32
|
+
record.save
|
33
|
+
end
|
34
|
+
end
|
18
35
|
|
19
|
-
|
36
|
+
self
|
20
37
|
end
|
21
38
|
|
22
|
-
def
|
23
|
-
|
39
|
+
def full_name
|
40
|
+
"#{subject.model_name.singular}.#{name}"
|
24
41
|
end
|
25
42
|
|
26
|
-
|
27
|
-
|
43
|
+
private
|
44
|
+
|
45
|
+
# Event is a singleton and already exists.
|
46
|
+
def singleton_exists?
|
47
|
+
options[:singleton] && subject.events.active.exists?(name: name)
|
28
48
|
end
|
29
49
|
end
|
30
50
|
end
|
data/lib/stance/eventable.rb
CHANGED
@@ -21,8 +21,8 @@ module Stance
|
|
21
21
|
event_class_name = "#{events_class_name}::#{name.to_s.tr('.', '/').classify}"
|
22
22
|
ev = event_class(event_class_name).new(name, self, metadata, events_class.events[name])
|
23
23
|
|
24
|
-
|
25
|
-
ev.
|
24
|
+
events_class.new(ev).run_callbacks :create do
|
25
|
+
ev.create
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
data/lib/stance/events.rb
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
module Stance
|
4
4
|
class Events
|
5
|
+
include ActiveSupport::Callbacks
|
6
|
+
|
7
|
+
attr_reader :event
|
8
|
+
|
9
|
+
define_callbacks :create
|
10
|
+
|
5
11
|
class << self
|
6
12
|
attr_reader :events
|
7
13
|
|
@@ -9,6 +15,18 @@ module Stance
|
|
9
15
|
@events ||= {}
|
10
16
|
@events[name.to_s] = options
|
11
17
|
end
|
18
|
+
|
19
|
+
def before_create(*methods, &block)
|
20
|
+
set_callback :create, :before, *methods, &block
|
21
|
+
end
|
22
|
+
|
23
|
+
def after_create(*methods, &block)
|
24
|
+
set_callback :create, :after, *methods, &block
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(event)
|
29
|
+
@event = event
|
12
30
|
end
|
13
31
|
end
|
14
32
|
end
|
data/lib/stance/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Moss
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06
|
11
|
+
date: 2020-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|