stance 0.1.0 → 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 +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
|