stenotype 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +3 -3
- data/README.md +29 -13
- data/lib/generators/stenotype/initializer/templates/initializer.rb.erb +65 -59
- data/lib/stenotype/adapters/base.rb +1 -1
- data/lib/stenotype/adapters/google_cloud.rb +7 -7
- data/lib/stenotype/adapters/stdout_adapter.rb +7 -2
- data/lib/stenotype/emitter.rb +21 -17
- data/lib/stenotype/event.rb +13 -13
- data/lib/stenotype/event_serializer.rb +6 -6
- data/lib/stenotype/frameworks/rails/action_controller.rb +6 -5
- data/lib/stenotype/frameworks/rails/active_job.rb +2 -2
- data/lib/stenotype/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: 5b998a75c7aef576ca3040ad7cd7a07082fddc9cd937b57e3d3e84d807124aba
|
4
|
+
data.tar.gz: 29d5bc462c420c881eeeeca851146c74e8f6db1240de777d8e19ca0806274fdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71094a00ecce450e4e2edbbda1327cf2f794c52d5d64bd304b67ec5f2498e49020c0ed4f2a07bc9425d5df8929ebe2d809447ea4b52baca0eb6569af27fcf22a
|
7
|
+
data.tar.gz: 1874d642a66cc7a2771fd78e92a2dc3e7aaea9ea520055cc2b7abe5bb2f9bf51dce5989e1498352411d134a371ec8b546ded1e8cb8e3d75b7408eaa340d06cbd
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
*Release Date*: 2019/11/21
|
4
4
|
|
5
|
+
### 0.1.2: 2019/12/10
|
6
|
+
|
7
|
+
* Changes the interface of how event is emitted. Now you must pass `event_name`, `attributes` and optional `eval_context`. Note that `additional_options` are eliminated
|
8
|
+
* Makes StdoutAdapter more informative by adding a special line for every entry in the log.
|
9
|
+
* Fixes Rails initializer not working after switching to Configurable from Spicerack.
|
10
|
+
|
5
11
|
### 0.1.1: 2019/11/25
|
6
12
|
|
7
13
|
* Moves all error into top level namespace definition file.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
stenotype (0.1.
|
4
|
+
stenotype (0.1.2)
|
5
5
|
activesupport (>= 5.0.0)
|
6
6
|
google-cloud-pubsub (~> 1.0.0)
|
7
7
|
spicery (>= 0.19.0, < 1.0)
|
@@ -96,7 +96,7 @@ GEM
|
|
96
96
|
googleauth (~> 0.9)
|
97
97
|
grpc (~> 1.24)
|
98
98
|
rly (~> 0.2.3)
|
99
|
-
google-protobuf (3.11.1)
|
99
|
+
google-protobuf (3.11.1-universal-darwin)
|
100
100
|
googleapis-common-protos (1.3.9)
|
101
101
|
google-protobuf (~> 3.0)
|
102
102
|
googleapis-common-protos-types (~> 1.0)
|
@@ -110,7 +110,7 @@ GEM
|
|
110
110
|
multi_json (~> 1.11)
|
111
111
|
os (>= 0.9, < 2.0)
|
112
112
|
signet (~> 0.12)
|
113
|
-
grpc (1.25.0)
|
113
|
+
grpc (1.25.0-universal-darwin)
|
114
114
|
google-protobuf (~> 3.8)
|
115
115
|
googleapis-common-protos-types (~> 1.0)
|
116
116
|
grpc-google-iam-v1 (0.6.9)
|
data/README.md
CHANGED
@@ -32,10 +32,18 @@ Stenotype.configure do |config|
|
|
32
32
|
|
33
33
|
config.uuid_generator = SecureRandom
|
34
34
|
config.dispatcher = Stenotype::Dispatcher.new
|
35
|
-
|
36
|
-
config.
|
37
|
-
|
38
|
-
|
35
|
+
|
36
|
+
config.google_cloud do |gc_config|
|
37
|
+
gc_config.project_id = "google_cloud_project_id"
|
38
|
+
gc_config.credentials = "path_to_key_json"
|
39
|
+
gc_config.topic = "google_cloud_topic"
|
40
|
+
gc_config.async = true # either true or false
|
41
|
+
end
|
42
|
+
|
43
|
+
config.rails do |rails_config|
|
44
|
+
rails_config.enable_action_controller_ext = true
|
45
|
+
rails_config.enable_active_job_ext = true
|
46
|
+
end
|
39
47
|
end
|
40
48
|
```
|
41
49
|
|
@@ -51,21 +59,29 @@ An object that must implement method `#uuid`. Used when an event is emitted to g
|
|
51
59
|
|
52
60
|
Dispatcher used to dispatch the event. A dispatcher must implement method `#publish(even, serializer: Stenotype::EventSerializer)`. By default `Stenotype::EventSerializer` is used, which is responsible for collecting the data from the event and evaluation context.
|
53
61
|
|
54
|
-
#### config.
|
62
|
+
#### config.google_cloud.project_id
|
55
63
|
|
56
64
|
Google cloud project ID. Please refer to Google Cloud management console to get one.
|
57
65
|
|
58
|
-
#### config.
|
66
|
+
#### config.google_cloud.credentials
|
59
67
|
|
60
68
|
Google cloud credentials. Might be obtained from Google Cloud management console.
|
61
69
|
|
62
|
-
#### config.
|
70
|
+
#### config.google_cloud.topic
|
63
71
|
|
64
72
|
Google Cloud topic used for publishing the events.
|
65
73
|
|
66
|
-
#### config.
|
74
|
+
#### config.google_cloud.async
|
75
|
+
|
76
|
+
Google Cloud publish mode. The mode is either sync or async. When in `sync` mode the event will be published in the same thread (which might influence performance). For `async` mode the event will be put into a pull which is going to be flushed after a threshold is met.
|
77
|
+
|
78
|
+
#### config.rails.enable_action_controller_ext
|
79
|
+
|
80
|
+
Allows to enable/disable Rails ActionController extension
|
81
|
+
|
82
|
+
#### config.rails.enable_active_job_ext
|
67
83
|
|
68
|
-
|
84
|
+
Allows to enable/disable Rails ActiveJob extension
|
69
85
|
|
70
86
|
#### Configuring context handlers
|
71
87
|
|
@@ -76,8 +92,8 @@ Each event is emitted in a context which might be an ActionController instance o
|
|
76
92
|
Emitting an event is as simple as:
|
77
93
|
```ruby
|
78
94
|
Stenotype::Event.emit!(
|
79
|
-
|
80
|
-
|
95
|
+
"Event Name",
|
96
|
+
{ attr1: :value1, attr2: :value2 },
|
81
97
|
eval_context: { name_of_registered_context_handler: context_object }
|
82
98
|
)
|
83
99
|
```
|
@@ -172,9 +188,9 @@ Stenotype::ContextHandlers.register CustomHandler
|
|
172
188
|
class PlainRubyClass < BaseClass
|
173
189
|
def some_method(data)
|
174
190
|
event_data = collect_some_data_as_a_hash
|
175
|
-
emit_event(event_data) # method name will be `some_method`, eval_context: { klass: self }
|
191
|
+
emit_event("event_name", event_data) # method name will be `some_method`, eval_context: { klass: self }
|
176
192
|
other_event_data = do_something_else
|
177
|
-
emit_event(other_event_data, method: :custom_method_name, eval_context: { overriden_handler: self })
|
193
|
+
emit_event("other_event_name", other_event_data, method: :custom_method_name, eval_context: { overriden_handler: self })
|
178
194
|
end
|
179
195
|
end
|
180
196
|
```
|
@@ -1,65 +1,71 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Rails.application.configure do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
4
|
+
Stenotype.configure do |config|
|
5
|
+
#
|
6
|
+
# Stenotype allows you to emit events which are then being published to a list of
|
7
|
+
# targets. Currently two targets are provided by default: Google Cloud Pub Sub and
|
8
|
+
# STDOUT for debug purposes.
|
9
|
+
#
|
10
|
+
# There is also a rails integration module which defines a handy DSL
|
11
|
+
# for triggering events in various Rails components. ActionController and
|
12
|
+
# ActiveJob are supported at the time of writing.
|
13
|
+
#
|
14
|
+
# Both extensions for Rails are enabled by default, but there are config options
|
15
|
+
# to control their presence.
|
16
|
+
# config.rails do |rails_modules|
|
17
|
+
# rails_modules.enable_action_controller_ext = true
|
18
|
+
# rails_modules.enable_active_job_ext = true
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# To make publishing possible one must specify a list of targets. You could use
|
23
|
+
# StdoutAdapter for debug purposes before switching to a production publisher.
|
24
|
+
# By default the list of targets is empty and you'll get an error saying
|
25
|
+
# that no targets are specified.
|
26
|
+
#
|
27
|
+
# A config option is available for setting up the targets:
|
28
|
+
#
|
29
|
+
# config.targets = [Stenotype::Adapters::StdoutAdapter.new]
|
30
|
+
#
|
31
|
+
# Or using Google Cloud:
|
32
|
+
#
|
33
|
+
# config.targets = [Stenotype::Adapters::GoogleCloud.new]
|
34
|
+
#
|
35
|
+
# Or both:
|
36
|
+
#
|
37
|
+
# config.targets = [
|
38
|
+
# Stenotype::Adapters::StdoutAdapter.new,
|
39
|
+
# Stenotype::Adapters::GoogleCloud.new
|
40
|
+
# ]
|
41
|
+
#
|
42
|
+
# To be able to use Google Cloud one has to specify Google Cloud credentials:
|
43
|
+
#
|
44
|
+
# config.google_cloud do |gc_config|
|
45
|
+
# gc_config.credentials = "SPECIFY YOUR CREDENTIALS" # path/to/key.json
|
46
|
+
# gc_config.project_id = "SPECIFY YOUR PROJECT ID"
|
47
|
+
# gc_config.topic = "SPECIFY YOUR TOPIC"
|
48
|
+
# gc_config.async = true
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# Each event is shipped with a UUID generated with SecureRandom by default.
|
52
|
+
# This might be changed by using a corresponding config option. Note that
|
53
|
+
# uuid_generator expects method #uuid to be implemented
|
54
|
+
#
|
55
|
+
# config.uuid_generator = SecureRandom
|
56
|
+
#
|
57
|
+
# In rare cases you might want to get control over how the event is being dispatched.
|
58
|
+
# Dispatcher must implement instance method #publish.
|
59
|
+
# Which dispatcher to use is controlled by the following config option:
|
60
|
+
#
|
61
|
+
# config.dispatcher = Stenotype::Dispatcher
|
62
|
+
#
|
63
|
+
# Add your own context handlers
|
64
|
+
#
|
65
|
+
# Stenotype::ContextHandlers.register Your::Custom::HandlerClass
|
66
|
+
#
|
67
|
+
end
|
62
68
|
end
|
63
69
|
|
64
70
|
# For more usage instructions please refer to either README.md or yard documentation
|
65
|
-
# in gem repository https://github.com/Freshly/stenotype
|
71
|
+
# in gem repository https://github.com/Freshly/stenotype
|
@@ -37,7 +37,7 @@ module Stenotype
|
|
37
37
|
# @abstract
|
38
38
|
# @raise [NotImplementedError] unless implemented in a subclass
|
39
39
|
#
|
40
|
-
def publish(_event_data, **
|
40
|
+
def publish(_event_data, **_additional_attrs)
|
41
41
|
raise NotImplementedError,
|
42
42
|
"#{self.class.name} must implement method #publish"
|
43
43
|
end
|
@@ -48,22 +48,22 @@ module Stenotype
|
|
48
48
|
# # publishes to default CustomGCClient
|
49
49
|
# google_cloud_adapter.publish({ event: :data }, { additional: :data })
|
50
50
|
#
|
51
|
-
def publish(event_data, **
|
51
|
+
def publish(event_data, **additional_attrs)
|
52
52
|
if config.async
|
53
|
-
publish_async(event_data, **
|
53
|
+
publish_async(event_data, **additional_attrs)
|
54
54
|
else
|
55
|
-
publish_sync(event_data, **
|
55
|
+
publish_sync(event_data, **additional_attrs)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
private
|
60
60
|
|
61
|
-
def publish_sync(event_data, **
|
62
|
-
topic.publish(event_data,
|
61
|
+
def publish_sync(event_data, **additional_attrs)
|
62
|
+
topic.publish(event_data, additional_attrs)
|
63
63
|
end
|
64
64
|
|
65
|
-
def publish_async(event_data, **
|
66
|
-
topic.publish_async(event_data,
|
65
|
+
def publish_async(event_data, **additional_attrs)
|
66
|
+
topic.publish_async(event_data, additional_attrs) do |result|
|
67
67
|
raise Stenotype::MessageNotPublishedError unless result.succeeded?
|
68
68
|
end
|
69
69
|
end
|
@@ -31,8 +31,13 @@ module Stenotype
|
|
31
31
|
# adapter = Stenotype::Adapters::StdoutAdapter.new(client: STDERR)
|
32
32
|
# adapter.publish({ event: :data }, { additional: :data })
|
33
33
|
#
|
34
|
-
def publish(event_data, **
|
35
|
-
client.info(
|
34
|
+
def publish(event_data, **additional_attrs)
|
35
|
+
client.info("[Stenotype::Event] emitted with the following attributes") do
|
36
|
+
{
|
37
|
+
**event_data,
|
38
|
+
**additional_attrs,
|
39
|
+
}
|
40
|
+
end
|
36
41
|
end
|
37
42
|
|
38
43
|
private
|
data/lib/stenotype/emitter.rb
CHANGED
@@ -33,11 +33,12 @@ module Stenotype
|
|
33
33
|
end
|
34
34
|
|
35
35
|
#
|
36
|
-
# @!method emit_event(
|
36
|
+
# @!method emit_event(name, attributes = {}, method: caller_locations.first.label, eval_context: nil)
|
37
37
|
# A method injected into target class to manually track events
|
38
38
|
# @!scope instance
|
39
|
-
# @param
|
40
|
-
# @param
|
39
|
+
# @param name {[String, Symbol]} Event name.
|
40
|
+
# @param attributes {Hash} Data to be sent to the targets.
|
41
|
+
# @param method {String} An optional method name.
|
41
42
|
# @param eval_context {Hash} A hash linking object to context handler
|
42
43
|
# @return {Stenotype::Event} An instance of emitted event
|
43
44
|
# @example Usage of emit_event
|
@@ -91,15 +92,14 @@ module Stenotype
|
|
91
92
|
#
|
92
93
|
def self.build_instance_methods(instance_mod)
|
93
94
|
instance_mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
|
94
|
-
def emit_event(
|
95
|
+
def emit_event(event_name, attributes = {}, method: caller_locations.first.label, eval_context: nil)
|
95
96
|
Stenotype::Event.emit!(
|
97
|
+
event_name,
|
96
98
|
{
|
97
|
-
type: "
|
98
|
-
**data,
|
99
|
-
},
|
100
|
-
options: {
|
99
|
+
type: "instance_method",
|
101
100
|
class: self.class.name,
|
102
|
-
method: method.to_sym
|
101
|
+
method: method.to_sym,
|
102
|
+
**attributes,
|
103
103
|
},
|
104
104
|
eval_context: (eval_context || { klass: self })
|
105
105
|
)
|
@@ -120,12 +120,14 @@ module Stenotype
|
|
120
120
|
proxy.module_eval do
|
121
121
|
define_method(method) do |*args, **rest_args, &block|
|
122
122
|
Stenotype::Event.emit!(
|
123
|
-
|
124
|
-
|
123
|
+
# @todo How do we name such events?
|
124
|
+
"instance_method",
|
125
|
+
{
|
126
|
+
type: "instance_method",
|
125
127
|
class: self.class.name,
|
126
|
-
method: __method__
|
128
|
+
method: __method__,
|
127
129
|
},
|
128
|
-
eval_context: { klass: self }
|
130
|
+
eval_context: { klass: self },
|
129
131
|
)
|
130
132
|
super(*args, **rest_args, &block)
|
131
133
|
end
|
@@ -142,12 +144,14 @@ module Stenotype
|
|
142
144
|
proxy.module_eval do
|
143
145
|
define_method(method) do |*args, **rest_args, &block|
|
144
146
|
Stenotype::Event.emit!(
|
145
|
-
|
146
|
-
|
147
|
+
# @todo How do we name such events?
|
148
|
+
"class_method",
|
149
|
+
{
|
150
|
+
type: "class_method",
|
147
151
|
class: self.name,
|
148
|
-
method: __method__
|
152
|
+
method: __method__,
|
149
153
|
},
|
150
|
-
eval_context: { klass: self }
|
154
|
+
eval_context: { klass: self },
|
151
155
|
)
|
152
156
|
super(*args, **rest_args, &block)
|
153
157
|
end
|
data/lib/stenotype/event.rb
CHANGED
@@ -11,19 +11,19 @@ module Stenotype
|
|
11
11
|
# @example Emit an event using class method
|
12
12
|
# Stenotype::Event.emit!(data, options, eval_context)
|
13
13
|
#
|
14
|
-
# @param
|
15
|
-
# @param
|
16
|
-
# @param
|
17
|
-
# @param dispatcher {#publish} A dispatcher object responding to [#publish]
|
14
|
+
# @param {[String, Symbol]} name Event name.
|
15
|
+
# @param {Hash} attributes Data to be published to the targets.
|
16
|
+
# @param {Hash} eval_context A context having handler defined in {Stenotype::ContextHandlers}.
|
17
|
+
# @param dispatcher {#publish} A dispatcher object responding to [#publish].
|
18
18
|
# @return {Stenotype::Event} An instance of {Stenotype::Event}
|
19
19
|
#
|
20
|
-
def self.emit!(
|
21
|
-
event = new(
|
20
|
+
def self.emit!(name, attributes = {}, eval_context: {}, dispatcher: Stenotype.config.dispatcher)
|
21
|
+
event = new(name, attributes, eval_context: eval_context, dispatcher: dispatcher)
|
22
22
|
event.emit!
|
23
23
|
event
|
24
24
|
end
|
25
25
|
|
26
|
-
attr_reader :
|
26
|
+
attr_reader :name, :attributes, :eval_context, :dispatcher
|
27
27
|
|
28
28
|
#
|
29
29
|
# @example Create an event
|
@@ -31,15 +31,15 @@ module Stenotype
|
|
31
31
|
# @example Create an event with custom dispatcher
|
32
32
|
# event = Stenotype::Event.new(data, options, eval_context, dispatcher: MyDispatcher.new)
|
33
33
|
#
|
34
|
-
# @param {
|
35
|
-
# @param {Hash}
|
34
|
+
# @param {[String, Symbol]} name Event name.
|
35
|
+
# @param {Hash} attributes Data to be published to the targets.
|
36
36
|
# @param {Hash} eval_context A context having handler defined in {Stenotype::ContextHandlers}.
|
37
37
|
# @param dispatcher {#publish} A dispatcher object responding to [#publish].
|
38
38
|
# @return {Stenotype::Event} An instance of event
|
39
39
|
#
|
40
|
-
def initialize(
|
41
|
-
@
|
42
|
-
@
|
40
|
+
def initialize(name, attributes = {}, eval_context: {}, dispatcher: Stenotype.config.dispatcher)
|
41
|
+
@name = name
|
42
|
+
@attributes = attributes
|
43
43
|
@eval_context = eval_context
|
44
44
|
@dispatcher = dispatcher.new
|
45
45
|
end
|
@@ -48,7 +48,7 @@ module Stenotype
|
|
48
48
|
# Emits a {Stenotype::Event}.
|
49
49
|
#
|
50
50
|
# @example Emit an instance of event
|
51
|
-
# event = Stenotype::Event.new(
|
51
|
+
# event = Stenotype::Event.new('events_name', { key: :value }, eval_context: { controller: ctrl })
|
52
52
|
# event.emit! #=> Publishes the event to targets
|
53
53
|
#
|
54
54
|
def emit!
|
@@ -42,8 +42,8 @@ module Stenotype
|
|
42
42
|
#
|
43
43
|
def serialize
|
44
44
|
{
|
45
|
-
|
46
|
-
**
|
45
|
+
name: event_name,
|
46
|
+
**event_attributes,
|
47
47
|
**default_options,
|
48
48
|
**eval_context_options,
|
49
49
|
}
|
@@ -51,12 +51,12 @@ module Stenotype
|
|
51
51
|
|
52
52
|
private
|
53
53
|
|
54
|
-
def
|
55
|
-
event.
|
54
|
+
def event_name
|
55
|
+
event.name
|
56
56
|
end
|
57
57
|
|
58
|
-
def
|
59
|
-
event.
|
58
|
+
def event_attributes
|
59
|
+
event.attributes
|
60
60
|
end
|
61
61
|
|
62
62
|
def eval_context
|
@@ -20,10 +20,11 @@ module Stenotype
|
|
20
20
|
|
21
21
|
#
|
22
22
|
# Emits and event with given data
|
23
|
-
# @param
|
23
|
+
# @param name {[String, Symbol]} Event name
|
24
|
+
# @todo What is really the name here?
|
24
25
|
#
|
25
|
-
def _record_freshly_event(
|
26
|
-
Stenotype::Event.emit!(
|
26
|
+
def _record_freshly_event(name)
|
27
|
+
Stenotype::Event.emit!(name, { type: "controller_action" }, { eval_context: { controller: self }})
|
27
28
|
end
|
28
29
|
|
29
30
|
#
|
@@ -72,7 +73,7 @@ module Stenotype
|
|
72
73
|
return if delta.empty?
|
73
74
|
|
74
75
|
before_action only: delta do
|
75
|
-
_record_freshly_event(
|
76
|
+
_record_freshly_event("view")
|
76
77
|
end
|
77
78
|
|
78
79
|
_tracked_actions.merge(delta)
|
@@ -110,7 +111,7 @@ module Stenotype
|
|
110
111
|
return if delta.empty?
|
111
112
|
|
112
113
|
before_action only: delta.to_a do
|
113
|
-
_record_freshly_event(
|
114
|
+
_record_freshly_event("view")
|
114
115
|
end
|
115
116
|
|
116
117
|
# merge is a mutating op
|
@@ -35,9 +35,9 @@ module Stenotype
|
|
35
35
|
proxy.module_eval do
|
36
36
|
define_method(:perform) do |*args, **rest_args, &block|
|
37
37
|
Stenotype::Event.emit!(
|
38
|
+
"active_job_#{self.class.name}",
|
38
39
|
{ type: "active_job" },
|
39
|
-
{
|
40
|
-
eval_context: { active_job: self }},
|
40
|
+
{ eval_context: { active_job: self }},
|
41
41
|
)
|
42
42
|
super(*args, **rest_args, &block)
|
43
43
|
end
|
data/lib/stenotype/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stenotype
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Kapitonov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|